Report a dashboard error.
const url = 'https://api.opdns.io/v1/client-errors';const options = { method: 'POST', headers: { cookie: 'opdns_session=<opdns_session>', 'Content-Type': 'application/json' }, body: '{"message":"example","stack":"example","url":"example","user_agent":"example","dashboard_version":"example","sampled_rate":1,"kind":"example","name":"example","release":"example","route":"example","at":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.opdns.io/v1/client-errors \ --header 'Content-Type: application/json' \ --cookie opdns_session=<opdns_session> \ --data '{ "message": "example", "stack": "example", "url": "example", "user_agent": "example", "dashboard_version": "example", "sampled_rate": 1, "kind": "example", "name": "example", "release": "example", "route": "example", "at": "example" }'A session, or an API token with account:read. The dashboard
reports its uncaught errors here, scrubbed of domains, addresses, emails,
ids and query strings before sending; the server only enforces sizes.
Limited to 10 reports a minute per account (429 rate_limited). Reports
are kept 30 days and deleted with the account. user_agent defaults to the
request’s User-Agent.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
Scrubbed error message (at most 2000 bytes).
Scrubbed stack trace (at most 16000 bytes).
The dashboard route, ids replaced (/p/:id/logs).
Share of errors the dashboard sends (to scale counts).
error, unhandledrejection or render.
The error’s name (TypeError).
Alias of dashboard_version (first dashboard builds).
Alias of url (first dashboard builds).
Ignored; the server records its own time.
Examplegenerated
{ "message": "example", "stack": "example", "url": "example", "user_agent": "example", "dashboard_version": "example", "sampled_rate": 1, "kind": "example", "name": "example", "release": "example", "route": "example", "at": "example"}Responses
Section titled “Responses”Stored. A report using the deprecated release, route or at gets Deprecation and Sunset.
Headers
Section titled “Headers”RFC 9745: the response uses a deprecated field or endpoint; the value is when it was deprecated, @<unix seconds>.
RFC 8594: the HTTP date after which the deprecated field or endpoint may be removed.
Malformed request.
object
Stable machine code.
object
Seconds, repeating the Retry-After header (rate limits, offline nodes).
Example
{ "type": "https://opdns.io/problems/bad_request", "title": "Bad Request", "status": 400, "code": "bad_request", "detail": "invalid JSON body", "request_id": "5f2c9a0e7b1d4c38"}Not authenticated.
object
Stable machine code.
object
Seconds, repeating the Retry-After header (rate limits, offline nodes).
Example
{ "type": "https://opdns.io/problems/unauthenticated", "title": "Unauthorized", "status": 401, "code": "unauthenticated", "detail": "authentication required", "request_id": "5f2c9a0e7b1d4c38"}Authenticated but not allowed: insufficient_scope, session_required, csrf_rejected, mfa_enrolment_required (restricted session), mfa_required (an operator action, or an admin-scoped token, from a session signed in with the password alone; not in dev), reauth_required (sign in again within five minutes), account_pending_deletion (the account is in its deletion cooling-off).
object
Stable machine code.
object
Seconds, repeating the Retry-After header (rate limits, offline nodes).
Example
{ "type": "https://opdns.io/problems/insufficient_scope", "title": "Forbidden", "status": 403, "code": "insufficient_scope", "detail": "the token lacks the profiles:write scope", "request_id": "5f2c9a0e7b1d4c38"}Body over 32 KiB (body_too_large).
object
Stable machine code.
object
Seconds, repeating the Retry-After header (rate limits, offline nodes).
Example
{ "type": "https://opdns.io/problems/body_too_large", "title": "Content Too Large", "status": 413, "code": "body_too_large", "detail": "request body over 32 KiB", "request_id": "5f2c9a0e7b1d4c38"}Field validation failed (validation_failed, unknown_list).
object
Stable machine code.
object
Seconds, repeating the Retry-After header (rate limits, offline nodes).
Example
{ "type": "https://opdns.io/problems/validation_failed", "title": "Unprocessable Content", "status": 422, "code": "validation_failed", "detail": "the request has invalid fields", "errors": [ { "field": "settings.block_mode", "message": "one of nxdomain, refused, null, block-page" } ], "request_id": "5f2c9a0e7b1d4c38"}Rate limited (rate_limited).
object
Stable machine code.
object
Seconds, repeating the Retry-After header (rate limits, offline nodes).
Example
{ "type": "https://opdns.io/problems/rate_limited", "title": "Too Many Requests", "status": 429, "code": "rate_limited", "detail": "too many requests", "request_id": "5f2c9a0e7b1d4c38", "retry_after": 6}