Doyouok API Reference
Report every run of a scheduled job, scenario or workflow to Doyouok. Doyouok alerts you by email, Telegram, Slack or Discord when a run fails or a run is missed.
How it works
- Call
POST /api/v1/registerwith your API token. Doyouok finds or creates the check for your job and returns itspingUrl. - After each run, call
{pingUrl}/successor{pingUrl}/fail. Pings need no API token: the ping URL itself is the secret, so keep it private. - If no ping arrives within the check's interval, or a run reports a failure, Doyouok alerts you.
Authentication
The account owner creates API tokens on Profile > API tokens (up to 10 per account). A token starts with dyo_ and is shown only once. Send it in the Authorization header of every /api/v1 request:
Authorization: Bearer dyo_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Base URL: https://doyouok.com/api/v1. Requests and responses are JSON. A revoked token stops working immediately.
GET /api/v1/me
Tests a token, for example when an integration saves a connection. Returns the account's plan and the account owner's email.
curl https://doyouok.com/api/v1/me -H "Authorization: Bearer dyo_..."
200 OK
{ "plan": "Free", "email": "[email protected]" }
GET /api/v1/checks
Lists the checks that can receive reports, sorted by name: checks created on doyouok.com, checks whose source is the optional source query parameter, and checks whose source appears in the token's name. For example, GET /api/v1/checks?source=make, or a token named make.com, also lists checks with source make.
200 OK
[
{
"id": "6f1c2a7e-0b7d-4c55-9a43-2d8f1e0c9b11",
"name": "Nightly sync",
"intervalMinutes": 1440,
"status": "Up",
"isEnabled": true,
"lastPingAt": "2026-10-22T02:00:13Z"
}
]
status is New (no ping yet), Up or Down. lastPingAt is UTC, or null before the first ping.
POST /api/v1/register
Returns the ping URL for a check. Send either checkId to use an existing check, or source + externalId to let your integration own a check. The first call creates that check; later calls update its name and interval and return the same ping URL.
| Field | Type | Description |
|---|---|---|
checkId | uuid | An existing check from GET /api/v1/checks. When set, the fields below are ignored. |
source | string, max 50 | Your integration's name, for example make. |
externalId | string, max 200 | A stable id for the job within your source, for example a scenario id. |
name | string, max 200 | The check's name. Required when the check is created. |
intervalMinutes | integer | How often the job runs, from 1 to 527040 (366 days). Default: 1440 (daily). |
clientName | string | Optional. The client the check belongs to, on plans that group checks by client. |
curl -X POST https://doyouok.com/api/v1/register \
-H "Authorization: Bearer dyo_..." \
-H "Content-Type: application/json" \
-d '{"source":"make","externalId":"4211873","name":"Nightly sync","intervalMinutes":1440}'
200 OK
{
"checkId": "6f1c2a7e-0b7d-4c55-9a43-2d8f1e0c9b11",
"name": "Nightly sync",
"pingUrl": "https://ping.doyouok.com/ping/0d6c3b5e-8a8e-4b0e-a7f6-5f2c9d4e1a20",
"created": true
}
created is true when this call created the check. A new ping URL starts working within about 10 seconds, so wait 10–15 seconds before its first ping, or retry a 404 ping after a short delay.
Ping endpoints
Report each run on the pingUrl from register. Pings accept GET or POST and need no token.
| Endpoint | Meaning |
|---|---|
{pingUrl} or {pingUrl}/success | The run succeeded. |
{pingUrl}/fail | The run failed. A POST body (plain text) is saved as the failure reason. |
{pingUrl}/start | The run started. Only used by checks that measure how long a task runs; checks created by register ignore it. |
curl -X POST https://ping.doyouok.com/ping/0d6c3b5e-.../fail -d "0 rows imported"
200 OK
OK
An unknown ping URL returns 404 Invalid API key. A disabled check still returns 200.
Errors and limits
/api/v1 errors return JSON such as { "error": "Invalid API token." }.
| Status | When |
|---|---|
400 | Invalid input, for example a missing externalId, a missing name when creating a check, an out-of-range intervalMinutes, or a reserved source. |
401 | Missing, invalid or revoked API token. |
403 | Creating the check would go over your plan's check limit. |
404 | The checkId was not found in your account. |
429 | Over 120 requests per minute for one token. Wait for the time in the Retry-After header. |
Plans: Free includes 5 checks. Starter includes 50 checks for $5/month.