Skip to content

What this deployment supports.

GET
/v1/capabilities
curl --request GET \
--url https://api.opdns.io/v1/capabilities

Computed from the server’s configuration, the same for every caller, so the dashboard can hide or explain what this deployment cannot offer. settings is keyed by the profile Settings field names: supported, an optional reason (why the setting is unavailable) and, for enumerated settings, values: every value with its own supported and reason (block_mode block-page is supported only where the block page host runs; node_queue_hours lists 0, 1, 12 and 24, keyed as strings; log_region lists ca, supported, and eu, unsupported with the reason that it is coming soon). A setting missing from settings is not offered. features: destinations_map when destinations rows carry countries (a GeoIP database is configured), list_reports when list reports are accepted. Anything that depends on a profile (its node, its plan) is not here.

Capabilities.

Media typeapplication/json
object
settings
required

Keyed by the profile Settings field names.

object
key
additional properties
object
supported
required
boolean
reason

Why the setting is not available here.

string
values

Enumerated settings only, keyed by value.

object
key
additional properties
object
supported
required
boolean
reason

Why the value is not available, or a caveat.

string
features
required
object
destinations_map
required

destinations rows carry country (a GeoIP database is configured).

boolean
list_reports
required

POST /v1/profiles/{id}/list-reports is available.

boolean
Examplegenerated
{
"settings": {
"additionalProperty": {
"supported": true,
"reason": "example",
"values": {
"additionalProperty": {
"supported": true,
"reason": "example"
}
}
}
},
"features": {
"destinations_map": true,
"list_reports": true
}
}

Rate limited (rate_limited).

Media typeapplication/problem+json
object
type
required
string format: uri
title
required
string
status
required
integer
code
required

Stable machine code.

string
Allowed values: bad_request body_too_large bad_if_match unauthenticated invalid_credentials signup_closed invite_required waitlist_unavailable invalid_token token_expired token_used session_required insufficient_scope csrf_rejected not_found version_mismatch ip_conflict unknown_list too_many_rules validation_failed rate_limited internal node_revoked node_offline node_busy node_timeout node_error result_too_large shape_unsupported node_token_superseded relay_unavailable not_implemented query_timeout query_too_expensive range_too_large too_many_queries second_factor_required invalid_second_factor mfa_enrolment_required mfa_required reauth_required no_second_factor totp_already_enabled totp_not_enabled last_credential passkey_exists passkey_invalid passkeys_unavailable ceremony_invalid account_pending_deletion credential_required deletion_pending no_deletion_pending deletion_started organisation_has_members export_in_progress export_not_ready block_exists invalid_recovery_code profile_not_empty invalid_cursor bad_idempotency_key idempotency_key_reused idempotency_in_progress too_many_streams too_many_reports password_too_short password_too_long profile_suspended
detail
string
errors
Array<object>
object
field
required
string
message
required
string
request_id
string
retry_after

Seconds, repeating the Retry-After header (rate limits, offline nodes).

integer
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
}
Retry-After
integer