{"service":"402cron","audience":"autonomous agents","guarantee":"We guarantee that we tried to deliver your task. We never pretend we can guarantee what someone else's server does with it.","quickstart":["GET  https://402cron.com/buy/trial → 402 with payment requirements; pay with any x402 client. The response carries your management token, shown ONCE — send it as \"Authorization: Bearer <token>\" from here on. Lost it? Buy again from the same wallet with ?rotate=1 and the old one dies.","POST https://402cron.com/api/destinations  {\"url\":\"https://your.host/hook\"} → returns a signing secret, shown once","Answer our challenge: we POST to that exact URL with a challenge header; echo its value back","POST https://402cron.com/api/destinations/{id}/verify → the permission covers that path and everything under it, not the whole domain","POST https://402cron.com/api/tasks  {\"name\",\"url\",\"cron\",\"body\"} → your cron is live; the response shows the next 3 runs","GET  https://402cron.com/api/tasks/{id} → state, failures, deliveries left"],"headers":{"note":"Every delivery carries these. Verify the signature before trusting the request.","signature":"X-402cron-Signature","timestamp":"X-402cron-Timestamp","deliveryId":"X-402cron-Delivery-Id","attempt":"X-402cron-Attempt","taskId":"X-402cron-Task-Id","deliveriesLeft":"X-402cron-Deliveries-Left","challenge":"X-402cron-Challenge","event":"X-402cron-Event"},"signature":{"algorithm":"HMAC-SHA256, hex, prefixed with \"sha256=\"","signedValue":"timestamp \\n deliveryId \\n attempt \\n METHOD \\n path+query \\n rawBody","note":"Bytes, not characters. Method and path are included: without them a valid delivery could be replayed against another of your endpoints."},"delivery":{"guarantee":"at least once","idempotency":"Delivery-Id is stable across all attempts of one execution. Treat a repeated Delivery-Id as already handled and return 200.","maxAttempts":3,"retryAfterSeconds":[60,120],"timeoutMs":2000,"advice":"Return 202 immediately and do the work in your own background. The 2s cap is for ACCEPTANCE, not completion.","statuses":{"delivered":"2xx — your endpoint accepted it","refused":"4xx — your endpoint refused it. Not retried.","delivered_failed":"5xx — it reached your server and your app errored. Not retried.","delivery_timeout":"no answer within the timeout. Retried.","unreachable":"we could not reach the host (DNS, TLS, 520-527, 530). Retried.","skipped":"an occurrence was skipped because the previous one was still running. Not charged."},"pausing":"After 3 failed attempts the task is paused. Resume is ONE call."},"billing":{"unit":"delivery attempt, not successful execution","charged":["delivered","refused","delivered_failed","delivery_timeout","unreachable"],"notCharged":["skipped","our own internal failure","requests we never sent"],"maxExposurePerFailureCycle":"0.003 USD","balance":"counted in DELIVERIES, not money. Packs never expire.","pricing":"https://402cron.com/api/pricing"},"authentication":{"note":"A management token is issued once at first purchase and shown once only.","format":"Bearer token — paste it as \"Authorization: Bearer <token>\"","lifetime":"Until revoked by rotation.","rotation":"POST /buy/<pack>?rotate=1 from the same wallet. The old token stops working immediately.","lost":"If you lose your token: buy the smallest pack again with ?rotate=1 from the same wallet to get a new one.","shared":"If two agents share a wallet, rotating the token will break the other agent until it gets the new one."},"limits":{"minIntervalSeconds":60,"cron":"5 fields, UTC. Day-of-month and day-of-week follow the standard: when both are restricted, the match is OR.","maxBodyBytes":65536,"maxHeaderBytes":8192,"targets":"hostnames only (no IP literals), ports 80/443, no redirects followed","overlap":"skip (only supported mode)"},"abuse":{"policy":"We only deliver to destinations that answered our challenge. If you are receiving unwanted requests from us, the owner of that endpoint consented — and can stop it.","contact":"https://402cron.com/abuse"}}