REST API
Use the DeepSyte HTTP API directly from any programming language.
Base URL
https://api.deepsyte.comAuthentication
Pass your API key in the Authorization header:
Authorization: Bearer sk_live_...Endpoints
GET /v1/account/balance
Return the authenticated account's current monthly usage, remaining balance, reset date, plan, and quota policy. This endpoint accepts REST API keys and website OAuth sessions. Admin accounts return unlimited: true with limit and remaining set to null, while still reporting the used count for the current month.
curl https://api.deepsyte.com/v1/account/balance \
-H "Authorization: Bearer sk_live_..."GET /v1/account/usage is an alias for the same response.
Response
{
"userId": "user_abc123",
"plan": "pro",
"isAdmin": false,
"unit": "actions",
"window": {
"interval": "month",
"startedAt": "2026-06-01T00:00:00.000Z",
"resetAt": "2026-07-01T00:00:00.000Z",
"resetSeconds": 1782864000
},
"usage": {
"used": 42,
"limit": 10000,
"remaining": 9958,
"unlimited": false,
"percentUsed": 0.42,
"policy": "plan-limit"
}
}For admin users:
{
"usage": {
"used": 42,
"limit": null,
"remaining": null,
"unlimited": true,
"percentUsed": null,
"policy": "admin-unlimited"
}
}POST /v1/screenshot
Enqueue a screenshot job.
curl -X POST https://api.deepsyte.com/v1/screenshot \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"width": 1280,
"height": 800,
"fullPage": false,
"format": "png",
"delay": 0,
"cookieConsent": "auto",
"waitFor": "main, h1, .hero",
"waitUntil": "networkidle",
"timeoutMs": 10000,
"deviceScaleFactor": 1,
"preScreenshotJs": "document.querySelectorAll('[class*=intercom]').forEach((el) => el.remove())"
}'Request Body
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
url | string | Yes | — | URL to screenshot |
width | number | No | 1280 | Viewport width in pixels |
height | number | No | 800 | Viewport height in pixels |
fullPage | boolean | No | false | Capture full scrollable page |
format | string | No | "png" | png, jpeg, or webp |
delay | number | No | 0 | Milliseconds to wait after page load |
cookieConsent | string | No | "auto" | auto dismisses common cookie consent overlays before capture. Use none to preserve banners exactly as shown. |
waitFor | string | No | - | CSS selector or selector group to wait for before capture, for example main, h1, .hero. Timeout is best-effort. |
waitUntil | string | No | "networkidle" | Navigation load state: networkidle, load, domcontentloaded, or none. |
timeoutMs | number | No | 10000 | Timeout for navigation, waitFor, and clickBefore. |
preScreenshotJs | string | No | - | JavaScript to evaluate after load/waits and immediately before capture. Useful for removing chat widgets, dialogs, smart banners, or app prompts. |
deviceScaleFactor | number | No | 1 | Browser DPR. Use 2 for retina-quality mobile captures. |
clickBefore | string | No | - | Optional CSS selector to click before waitFor and capture. |
Response
{
"id": "abc123",
"status": "pending"
}GET /v1/screenshot/:id
Poll for screenshot status and get the result URL.
curl https://api.deepsyte.com/v1/screenshot/abc123 \
-H "Authorization: Bearer sk_live_..."Response
{
"id": "abc123",
"status": "done",
"url": "https://...",
"error": null,
"createdAt": "2025-01-01T00:00:00.000Z"
}Status values: pending, processing, done, failed
Campaign endpoints
Bulk audit campaigns are available through the REST API for authenticated users with an API key. These endpoints are useful when an agent or backend service has already researched targets and needs to add them directly to a campaign.
curl https://api.deepsyte.com/v1/campaigns \
-H "Authorization: Bearer sk_live_..."curl -X POST https://api.deepsyte.com/v1/campaigns \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Sydney plumbers",
"sendAt": "2026-05-12T00:00:00.000Z",
"timezone": "Australia/Sydney",
"reportType": "single_page",
"sendHours": "office",
"recipients": [
{
"websiteUrl": "https://example.com",
"recipientEmail": "owner@example.com",
"reportType": "full_site"
}
]
}'Set campaign-level reportType to full_site to send full SEO audits to every recipient. Set a recipient reportType to full_site for a one-off full SEO audit row.
Set campaign-level sendHours to office for Monday-Friday 9am-4pm delivery in the campaign timezone, or anytime for every day, 24-hour delivery. The campaign sending-hours rule applies to both Resend report delivery and AgentMail campaign inbox delivery.
| Endpoint | Purpose |
|---|---|
GET /v1/campaigns | List campaigns for the API key owner |
POST /v1/campaigns | Create a campaign and optionally add targets |
GET /v1/campaigns/:id | Get campaign detail and recipient rows |
POST /v1/campaigns/:id/targets | Add targets to a campaign |
POST /v1/campaigns/:id/launch | Launch the campaign for cron processing |
GET /v1/campaigns/sender-capacity | Show AgentMail sender/domain capacity |
POST /v1/campaigns/sender-limits | Update sender warmup/manual limits |
Campaign sending still runs only through DeepSyte cron. API and MCP calls can add targets and launch campaigns, but they cannot bypass campaign sending hours, daily caps, suppressions, or report quality gates.
Rate Limits
Requests are rate-limited per API key based on your plan. See Authentication for details.
Mobile Tool Reference
All 78 mobile MCP tools for Android and iOS automation — sessions, gestures, elements, app lifecycle, device control, and more.
Ops Headers
Every DeepSyte API response carries request IDs, rate-limit hints, and a structured error envelope so automated clients can retry safely and support requests are debuggable.