CONNECT APP
Build with VisualPing
Web & App Development
- OAuth
MCP
Give your agent VisualPing tools
Every VisualPing action is exposed as an MCP tool on Pipedream's remote server. Point a client at it with your end user's ID and Connect resolves that user's VisualPing account for each tool call — you store no tokens.
// accessToken: mint a short-lived token with the Connect SDK — see the MCP guide
const transport = new StreamableHTTPClientTransport(
new URL("https://remote.mcp.pipedream.net/v3"),
{
requestInit: {
headers: {
Authorization: `Bearer ${accessToken}`,
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
"x-pd-app-slug": "visualping",
},
},
},
)
const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)
const { tools } = await mcp.listTools()
// e.g. run Create A New Job:
const result = await mcp.callTool({
name: "visualping-create-job",
arguments: {
email: "Email",
business: true,
},
})# access_token: mint a short-lived token with the Connect SDK — see the MCP guide
headers = {
"Authorization": f"Bearer {access_token}",
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", # any stable ID for this user in your system
"x-pd-app-slug": "visualping",
}
async with streamablehttp_client("https://remote.mcp.pipedream.net/v3", headers=headers) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
# e.g. run Create A New Job:
result = await session.call_tool("visualping-create-job", {
"email": "Email",
"business": True,
})API PROXY
Call the VisualPing API directly
For an endpoint with no pre-built tool, the Connect proxy forwards your request to the VisualPing API with the connected user's credentials attached. You store no tokens and write no refresh logic.
const resp = await pd.proxy.get({
externalUserId: "{external_user_id}", // any stable ID for this user in your system
accountId: "apn_xxxxxxx",
url: "https://account.api.visualping.io/describe-user",
})
// Any allowed VisualPing endpoint works here. Pipedream attaches the
// connected account's credentials to the outgoing request.# The path segment is the target URL, URL-safe base64 encoded:
# https://account.api.visualping.io/describe-user
curl "https://api.pipedream.com/v1/connect/{project_id}/proxy/aHR0cHM6Ly9hY2NvdW50LmFwaS52aXN1YWxwaW5nLmlvL2Rlc2NyaWJlLXVzZXI?external_user_id={external_user_id}&account_id=apn_xxxxxxx" \
-H "Authorization: Bearer {access_token}" \
-H "x-pd-environment: production"SDK
Run VisualPing actions from your backend
Connect a user's VisualPing account once, then run Create A New Job on their behalf from your own code — TypeScript, Python, or plain HTTP.
import { PipedreamClient } from "@pipedream/sdk"
const pd = new PipedreamClient({
projectId: process.env.PIPEDREAM_PROJECT_ID!,
clientId: process.env.PIPEDREAM_CLIENT_ID!,
clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
projectEnvironment: "production",
})
const result = await pd.actions.run({
id: "visualping-create-job",
externalUserId: "{external_user_id}", // any stable ID for this user in your system
configuredProps: {
visualping: { authProvisionId: "apn_xxxxxxx" },
email: "Email",
business: true,
},
})from pipedream import Pipedream
pd = Pipedream(
client_id="{oauth_client_id}",
client_secret="{oauth_client_secret}",
project_id="{project_id}",
project_environment="production",
)
result = pd.actions.run(
id="visualping-create-job",
external_user_id="{external_user_id}", # any stable ID for this user in your system
configured_props={
"visualping": {"authProvisionId": "apn_xxxxxxx"},
"email": "Email",
"business": True,
},
)curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
-H "Content-Type: application/json" \
-H "X-PD-Environment: production" \
-H "Authorization: Bearer {access_token}" \
-d '{
"external_user_id": "{external_user_id}",
"id": "visualping-create-job",
"configured_props": {
"visualping": { "authProvisionId": "apn_xxxxxxx" },
"email": "Email",
"business": true
}
}'TOOLS
VisualPing actions
On-demand operations your product or agent can configure and run on behalf of a connected user.
-
Create A New Job
actionCreates a new Visualping monitoring job that checks a web page on a schedule and alerts on a detected change. Use for requests like "monitor this page for changes" or "watch this URL and tell me when the price changes". Setactive: falseto create the job paused (useful for testing before it starts consuming your plan's active-job quota). Example: to watch a pricing page for any change every hour, call withurl="https://example.com/pricing",mode="VISUAL",interval="60",trigger="5",targetDevice="4",active=true→ returns the created job object with its newid, which you'll need for Get Job Details By Id, Update Job, or Delete Job. Formode="TEXT"jobs, also setkeywordActionandkeywordsto watch for specific text changes. For AREA crawling (targetDevice1or3), also setcropX/cropY/cropWidth/cropHeight. See the documentationWritev1.0.0 -
Delete Job
actionPermanently deletes a Visualping job by id. This stops monitoring and cannot be undone — use Find Jobs first to confirm you have the rightjobIdbefore calling this, especially if the user described the job by name or URL rather than by id. Example: after confirming job482913is the one monitoringhttps://example.com/pricing, call withjobId="482913"→ the job stops being checked and no longer appears in Find Jobs. See the documentationWritev0.1.0 -
Find Jobs
actionSearches and lists your Visualping monitoring jobs, with optional filters for mode, active/paused state, change-detection frequency, and free text. Use this to discover job ids before calling Get Job Details By Id, Update Job, or Delete Job, or to answer questions like "which jobs are still active" or "find the job monitoring example.com". Auto-paginates through the API's 100-jobs-per-page results, up to a cap of 20 pages (2,000 jobs) — plenty for typical accounts. Example: to find active jobs mentioning "pricing", call withfullTextSearchFilter="pricing"andactiveFilter=true→ returns matching job records with id, url, mode, interval, trigger, isActive, and more. Passfieldsto shrink each result to just the fields you need. See the documentationRead-onlyv1.0.0 -
Get Job Details By Id
actionGets the full details of one Visualping job by id — schedule, trigger, notification config, crop region, and change-detection history. Use Find Jobs first to locate the job id if you don't already have it. Example: to confirm a job's check interval after creating it, call with thejobIdreturned by Create A New Job → returns the full job object includinginterval,trigger,mode, andactive. Passfieldsto return only the fields you need. See the documentationRead-onlyv0.1.0 -
List Workspace ID Options
actionDiscovers the validworkspaceId(and, for business/team accounts,organisationId) values for the connected Visualping account. Call this first before any tool that takes aworkspaceIdororganisationIdprop — never guess those ids. Example: call with no arguments → returns{ workspaces: [{id, name}, ...], organisation: {id, name} }. On a personal-tier accountworkspacesis typically empty andorganisationis omitted entirely — that's expected, not an error. See the documentationRead-onlyv1.0.0 -
Update Job
actionUpdates one or more settings of an existing Visualping job — schedule, trigger, notification config, crop region, and more. Only the fields you pass are changed; everything else on the job stays as-is. Use Find Jobs or Get Job Details By Id first to confirm thejobIdand current settings if you're not certain which job the user means. Example: to pause a noisy job, call with justjobId="482913"andactive=false→ returns the updated job object withactive: false. See the documentationWritev1.0.0
EVENTS
VisualPing triggers
Event sources your backend can deploy for users and receive through a webhook.
- App slug
- visualping
- Authentication
- OAuth
- Categories
- Web & App Development
- Actions
- 6
- Triggers
- 3
- API proxy
- Available