API reference

/v1/aggregated-edge

22 operations · 22 support API keys

← All groups · First call? Read the tutorial: auth, permissions, requests and responses, common failures

MethodPathSummaryAuth
GET/v1/aggregated-edge/accountsThe tenant's own vendor accounts (no credentials) and the package account limitAPI keySession
GET/v1/aggregated-edge/accounts/{id}One own vendor account (no credentials)API keySession
GET/v1/aggregated-edge/providersVendor adapters a tenant can use, their capabilities and token permission templatesAPI keySession
GET/v1/aggregated-edge/sites/{site_id}/availabilityLast 24 hours of probe results per supply and line of an own website (half-hour buckets)API keySession
GET/v1/aggregated-edge/sites/{site_id}/bindingsEvery access an own website is bound toAPI keySession
GET/v1/aggregated-edge/sites/{site_id}/fallback-chainWhole-site fallback chain (auto switch) of an own website and where its default line points nowAPI keySession
GET/v1/aggregated-edge/sites/{site_id}/fallback-chain/availabilityLast 24 hours of probe results of the chain's sources (controller targets and names hidden)API keySession
GET/v1/aggregated-edge/sites/{site_id}/fallback-chain/eventsDefault-line switching records of an own website, newest first (controller targets hidden)API keySession
GET/v1/aggregated-edge/sites/{site_id}/schedulePer-line switching state of an own website (current target, candidates, strategy)API keySession
GET/v1/aggregated-edge/suppliesThe tenant's own third-party CDN accessesAPI keySession
POST/v1/aggregated-edge/suppliesCreate an access on an own account (Cloudflare config_sync) or a schedule_only accessAPI keySession
GET/v1/aggregated-edge/supplies/{id}One own accessAPI keySession
PUT/v1/aggregated-edge/supplies/{id}Replace an own access (expected_revision guards concurrent edits)API keySession
GET/v1/aggregated-edge/supplies/{id}/sitesWebsites bound to an own access and their sync stateAPI keySession
POST/v1/aggregated-edge/supplies/{id}/sitesBind one of the tenant's websites to an own access (primary or backup, optional DNS line)API keySession
GET/v1/aggregated-edge/supplies/{id}/sites/{site_id}Configuration-sync state of a site on an own access (custom hostname, validation, drift)API keySession
DELETE/v1/aggregated-edge/supplies/{id}/sites/{site_id}Unbind a site from an own access (keep_remote=true leaves the vendor hostname in place)API keySession
POST/v1/aggregated-edge/supplies/{id}/sites/{site_id}/observeRead the site's custom hostname back from the vendor and report drift (no vendor write)API keySession
POST/v1/aggregated-edge/supplies/{id}/sites/{site_id}/syncCreate or update the site's custom hostname and settings on the vendor nowAPI keySession
GET/v1/aggregated-edge/supplies/{id}/sites/{site_id}/usageStored hourly usage of the site's hostname on an own accessAPI keySession
POST/v1/aggregated-edge/supplies/{id}/sites/{site_id}/validation/retryPublish the vendor's hostname/certificate validation TXT records againAPI keySession
GET/v1/aggregated-edge/switch-eventsSwitching records of the tenant's own websites, newest first (every line)API keySession

Contract file:api/control-aggregated-edge-tenant.openapi.yaml

Operation details

GET /v1/aggregated-edge/accounts

The tenant's own vendor accounts (no credentials) and the package account limit

operationId
listTenantCDNAccounts
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge.tenant.read

Responses

listTenantCDNAccounts Responses
StatusDescription
200Accounts

Fields:items: array<Account> account_limit: integer

401Error envelope
403Error envelope
503Error envelope

What to do on failure

  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

GET /v1/aggregated-edge/accounts/{id}

One own vendor account (no credentials)

operationId
getTenantCDNAccount
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge.tenant.read

Parameters

getTenantCDNAccount Parameters
NameInTypeRequiredDescription
idpathstring(uuid)Yes—

Responses

getTenantCDNAccount Responses
StatusDescription
200Account

Fields:id?: string(uuid) provider?: string name?: string access?: string settings?: object secret_fingerprints?: object status?: string credential_version?: integer credential_revoked?: boolean account_ref?: string plan?: string capabilities?: array<string> missing_permissions?: array<string> verified_at?: string(date-time) hostname_limit?: integer write_paused_until?: string(date-time) last_error_code?: string revision?: integer created_at?: string(date-time) updated_at?: string(date-time) fallback_origin?: string fallback_origin_status?: string fallback_origin_checked_at?: string(date-time) waf_rule_limit?: integer usage_pulled_through?: string(date-time) usage_error_code?: string

401Error envelope
403Error envelope
404Error envelope
503Error envelope

What to do on failure

  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

GET /v1/aggregated-edge/providers

Vendor adapters a tenant can use, their capabilities and token permission templates

operationId
listTenantCDNProviders
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge.tenant.read

Responses

listTenantCDNProviders Responses
StatusDescription
200Adapters

Fields:items: array<ProviderDescriptor>

401Error envelope
403Error envelope
503Error envelope

What to do on failure

  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

GET /v1/aggregated-edge/sites/{site_id}/availability

Last 24 hours of probe results per supply and line of an own website (half-hour buckets)

operationId
getTenantCDNSiteAvailability
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge.tenant.read

Parameters

getTenantCDNSiteAvailability Parameters
NameInTypeRequiredDescription
site_idpathstring(uuid)Yes—

Responses

getTenantCDNSiteAvailability Responses
StatusDescription
200Availability

Fields:site_id?: string(uuid) from?: string(date-time) to?: string(date-time) sources?: array<object>

401Error envelope
403Error envelope
404Error envelope
503Error envelope

What to do on failure

  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

GET /v1/aggregated-edge/sites/{site_id}/bindings

Every access an own website is bound to

operationId
listTenantCDNSiteBindings
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge.tenant.read

Parameters

listTenantCDNSiteBindings Parameters
NameInTypeRequiredDescription
site_idpathstring(uuid)Yes—

Responses

listTenantCDNSiteBindings Responses
StatusDescription
200Bindings

Fields:items: array<SiteBinding>

401Error envelope
403Error envelope
404Error envelope
503Error envelope

What to do on failure

  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

GET /v1/aggregated-edge/sites/{site_id}/fallback-chain

Whole-site fallback chain (auto switch) of an own website and where its default line points now

operationId
getTenantFallbackChain
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge.tenant.read

Description (from the contract)

enabled true means the controller switches the site's default line by itself; current is where the default line points now (kind local / backup_group / market_subscription / third_party_cdn). The controller's supplies show only kind, owner platform, an opaque supply_id and health. A per-line DNS plugin should treat an enabled chain as the owner of the default line. PUT, switch and failback are session-only.

Parameters

getTenantFallbackChain Parameters
NameInTypeRequiredDescription
site_idpathstring(uuid)Yes—

Responses

getTenantFallbackChain Responses
StatusDescription
200Chain

Fields:site_id?: string(uuid) revision?: integer auto_switch?: boolean failback?: string use_own_cdn?: boolean admin_mode?: string managed_by_admin?: boolean enabled?: boolean package_allowed?: boolean unavailable?: string notice?: string levels?: array<object> current?: ChainPosition frozen_at?: string(date-time) frozen_reason?: string events?: array<FallbackChainEvent>

401Error envelope
403Error envelope
404Error envelope
503Error envelope

What to do on failure

  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

GET /v1/aggregated-edge/sites/{site_id}/fallback-chain/availability

Last 24 hours of probe results of the chain's sources (controller targets and names hidden)

operationId
getTenantFallbackChainAvailability
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge.tenant.read

Parameters

getTenantFallbackChainAvailability Parameters
NameInTypeRequiredDescription
site_idpathstring(uuid)Yes—

Responses

getTenantFallbackChainAvailability Responses
StatusDescription
200Availability

Fields:site_id?: string(uuid) from?: string(date-time) to?: string(date-time) sources?: array<object>

401Error envelope
403Error envelope
404Error envelope
503Error envelope

What to do on failure

  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

GET /v1/aggregated-edge/sites/{site_id}/fallback-chain/events

Default-line switching records of an own website, newest first (controller targets hidden)

operationId
listTenantFallbackChainEvents
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge.tenant.read

Parameters

listTenantFallbackChainEvents Parameters
NameInTypeRequiredDescription
site_idpathstring(uuid)Yes—
limitqueryintegerNo1-200, default 50

Responses

listTenantFallbackChainEvents Responses
StatusDescription
200Events

Fields:items: array<FallbackChainEvent>

400Error envelope
401Error envelope
403Error envelope
404Error envelope
503Error envelope

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

GET /v1/aggregated-edge/sites/{site_id}/schedule

Per-line switching state of an own website (current target, candidates, strategy)

operationId
getTenantCDNSiteSchedule
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge.tenant.read

Description (from the contract)

Read only with an API key (PUT schedule, unfreeze, switch and keep stay session-only). The candidates of the controller's own supplies carry owner platform; local, backup_group and follow_default are the controller's node groups.

Parameters

getTenantCDNSiteSchedule Parameters
NameInTypeRequiredDescription
site_idpathstring(uuid)Yes—

Responses

getTenantCDNSiteSchedule Responses
StatusDescription
200Schedule

Fields:site_id?: string(uuid) domain?: string cname?: string managed?: boolean failback?: string: auto / manual min_stay_seconds?: integer flap_limit?: integer strategy?: string: failover / quality / fixed quality_min_interval_seconds?: integer quality_margin?: number frozen_at?: string(date-time) freeze_kept?: boolean origin?: object revision?: integer dns?: BindingResult lines?: array<object> auto_switch_allowed?: boolean notice?: string

401Error envelope
403Error envelope
404Error envelope
503Error envelope

What to do on failure

  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

GET /v1/aggregated-edge/supplies

The tenant's own third-party CDN accesses

operationId
listTenantCDNSupplies
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge.tenant.read

Responses

listTenantCDNSupplies Responses
StatusDescription
200Accesses

Fields:items: array<Supply>

401Error envelope
403Error envelope
503Error envelope

What to do on failure

  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

POST /v1/aggregated-edge/supplies

Create an access on an own account (Cloudflare config_sync) or a schedule_only access

operationId
createTenantCDNSupply
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge.tenant.manage

Description (from the contract)

Audited as aggregated_edge.supply.create. A tenant's config_sync access is Cloudflare on one of its own accounts; other vendors are schedule_only without an account.

Request body

application/json · Required:Yes

createTenantCDNSupply Request body
NameTypeRequiredDescription
namestringYes—
providerstringYes—
modestring: config_sync / schedule_onlyYes—
account_idstring(uuid)Noown account; required for config_sync
endpointstringNoschedule_only: the vendor access CNAME
origin_serverstringNo—
drift_policystringNoenforce (default) or report
health_pathstringNo—
health_statusintegerNo—
expected_revisionintegerNoupdate only
health_methodstring: GET / HEADNo—
health_headersarray<ProbeHeader>No—
failure_thresholdintegerNo—
recovery_thresholdintegerNo—

Responses

createTenantCDNSupply Responses
StatusDescription
201Created

Fields:id?: string(uuid) name?: string provider?: string mode?: string: config_sync / schedule_only account_id?: string(uuid) endpoint?: string origin_server?: string drift_policy?: string health_path?: string health_status?: integer health_method?: string health_headers?: array<ProbeHeader> failure_threshold?: integer recovery_threshold?: integer status?: string sites?: integer revision?: integer created_at?: string(date-time) updated_at?: string(date-time)

400Error envelope
401Error envelope
403Error envelope
404Error envelope
409Error envelope
415Error envelope
503Error envelope

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

GET /v1/aggregated-edge/supplies/{id}

One own access

operationId
getTenantCDNSupply
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge.tenant.read

Parameters

getTenantCDNSupply Parameters
NameInTypeRequiredDescription
idpathstring(uuid)Yes—

Responses

getTenantCDNSupply Responses
StatusDescription
200Access

Fields:id?: string(uuid) name?: string provider?: string mode?: string: config_sync / schedule_only account_id?: string(uuid) endpoint?: string origin_server?: string drift_policy?: string health_path?: string health_status?: integer health_method?: string health_headers?: array<ProbeHeader> failure_threshold?: integer recovery_threshold?: integer status?: string sites?: integer revision?: integer created_at?: string(date-time) updated_at?: string(date-time)

401Error envelope
403Error envelope
404Error envelope
503Error envelope

What to do on failure

  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

PUT /v1/aggregated-edge/supplies/{id}

Replace an own access (expected_revision guards concurrent edits)

operationId
updateTenantCDNSupply
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge.tenant.manage

Description (from the contract)

Audited as aggregated_edge.supply.update.

Parameters

updateTenantCDNSupply Parameters
NameInTypeRequiredDescription
idpathstring(uuid)Yes—

Request body

application/json · Required:Yes

updateTenantCDNSupply Request body
NameTypeRequiredDescription
namestringYes—
providerstringYes—
modestring: config_sync / schedule_onlyYes—
account_idstring(uuid)Noown account; required for config_sync
endpointstringNoschedule_only: the vendor access CNAME
origin_serverstringNo—
drift_policystringNoenforce (default) or report
health_pathstringNo—
health_statusintegerNo—
expected_revisionintegerNoupdate only
health_methodstring: GET / HEADNo—
health_headersarray<ProbeHeader>No—
failure_thresholdintegerNo—
recovery_thresholdintegerNo—

Responses

updateTenantCDNSupply Responses
StatusDescription
200Updated

Fields:id?: string(uuid) name?: string provider?: string mode?: string: config_sync / schedule_only account_id?: string(uuid) endpoint?: string origin_server?: string drift_policy?: string health_path?: string health_status?: integer health_method?: string health_headers?: array<ProbeHeader> failure_threshold?: integer recovery_threshold?: integer status?: string sites?: integer revision?: integer created_at?: string(date-time) updated_at?: string(date-time)

400Error envelope
401Error envelope
403Error envelope
404Error envelope
409Error envelope
415Error envelope
503Error envelope

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

GET /v1/aggregated-edge/supplies/{id}/sites

Websites bound to an own access and their sync state

operationId
listTenantCDNSupplySites
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge.tenant.read

Parameters

listTenantCDNSupplySites Parameters
NameInTypeRequiredDescription
idpathstring(uuid)Yes—

Responses

listTenantCDNSupplySites Responses
StatusDescription
200Sites

Fields:items: array<SiteSyncSummary>

401Error envelope
403Error envelope
404Error envelope
503Error envelope

What to do on failure

  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

POST /v1/aggregated-edge/supplies/{id}/sites

Bind one of the tenant's websites to an own access (primary or backup, optional DNS line)

operationId
bindTenantCDNSupplySite
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge.tenant.manage

Description (from the contract)

Audited as aggregated_edge.binding.create. The site must belong to the caller's tenant scope (404 otherwise).

Parameters

bindTenantCDNSupplySite Parameters
NameInTypeRequiredDescription
idpathstring(uuid)Yes—

Request body

application/json · Required:Yes

bindTenantCDNSupplySite Request body
NameTypeRequiredDescription
site_idstring(uuid)Yes—
rolestring: primary / backupNodefault primary
priorityintegerNo—
line_scopestringNoDNS line ("" = default line)
ignored_settingsarray<string>No—

Responses

bindTenantCDNSupplySite Responses
StatusDescription
200What the site's DNS can carry

Fields:dns_provider?: string lines_supported?: boolean line_scopes?: array<string> notice?: string

400Error envelope
401Error envelope
403Error envelope
404Error envelope
409Error envelope
415Error envelope
503Error envelope

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

GET /v1/aggregated-edge/supplies/{id}/sites/{site_id}

Configuration-sync state of a site on an own access (custom hostname, validation, drift)

operationId
getTenantCDNSiteSync
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge.tenant.read

Parameters

getTenantCDNSiteSync Parameters
NameInTypeRequiredDescription
idpathstring(uuid)Yes—
site_idpathstring(uuid)Yes—

Responses

getTenantCDNSiteSync Responses
StatusDescription
200Sync state

Fields:site_id?: string(uuid) supply_id?: string(uuid) state?: string site_revision?: integer projection_sha256?: string ignored_settings?: array<string> refusal?: array<object> drift_state?: string drift?: array<object> validation?: array<object> last_error_code?: string applied_at?: string(date-time) observed_at?: string(date-time) resources?: array<object> writes?: integer

401Error envelope
403Error envelope
404Error envelope
503Error envelope

What to do on failure

  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

DELETE /v1/aggregated-edge/supplies/{id}/sites/{site_id}

Unbind a site from an own access (keep_remote=true leaves the vendor hostname in place)

operationId
unbindTenantCDNSupplySite
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge.tenant.manage

Description (from the contract)

Audited as aggregated_edge.binding.delete.

Parameters

unbindTenantCDNSupplySite Parameters
NameInTypeRequiredDescription
idpathstring(uuid)Yes—
site_idpathstring(uuid)Yes—
line_scopequerystringNo—
keep_remotequerystring: true / falseNo—

Responses

unbindTenantCDNSupplySite Responses
StatusDescription
204Unbound
400Error envelope
401Error envelope
403Error envelope
404Error envelope
409Error envelope
503Error envelope

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

POST /v1/aggregated-edge/supplies/{id}/sites/{site_id}/observe

Read the site's custom hostname back from the vendor and report drift (no vendor write)

operationId
observeTenantCDNSite
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge.tenant.manage

Parameters

observeTenantCDNSite Parameters
NameInTypeRequiredDescription
idpathstring(uuid)Yes—
site_idpathstring(uuid)Yes—

Responses

observeTenantCDNSite Responses
StatusDescription
200Observed state

Fields:site_id?: string(uuid) supply_id?: string(uuid) state?: string site_revision?: integer projection_sha256?: string ignored_settings?: array<string> refusal?: array<object> drift_state?: string drift?: array<object> validation?: array<object> last_error_code?: string applied_at?: string(date-time) observed_at?: string(date-time) resources?: array<object> writes?: integer

401Error envelope
403Error envelope
404Error envelope
409Error envelope
429Error envelope
502Error envelope
503Error envelope

What to do on failure

  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 429 Rate limited: wait, then retry with lower concurrency.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

POST /v1/aggregated-edge/supplies/{id}/sites/{site_id}/sync

Create or update the site's custom hostname and settings on the vendor now

operationId
syncTenantCDNSite
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge.tenant.manage

Description (from the contract)

writes is how many vendor writes the call made; vendor writes are recorded in the site's sync state.

Parameters

syncTenantCDNSite Parameters
NameInTypeRequiredDescription
idpathstring(uuid)Yes—
site_idpathstring(uuid)Yes—

Responses

syncTenantCDNSite Responses
StatusDescription
200Sync state after the call

Fields:site_id?: string(uuid) supply_id?: string(uuid) state?: string site_revision?: integer projection_sha256?: string ignored_settings?: array<string> refusal?: array<object> drift_state?: string drift?: array<object> validation?: array<object> last_error_code?: string applied_at?: string(date-time) observed_at?: string(date-time) resources?: array<object> writes?: integer

401Error envelope
403Error envelope
404Error envelope
409Error envelope
429Error envelope
502Error envelope
503Error envelope

What to do on failure

  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 429 Rate limited: wait, then retry with lower concurrency.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

GET /v1/aggregated-edge/supplies/{id}/sites/{site_id}/usage

Stored hourly usage of the site's hostname on an own access

operationId
getTenantCDNSiteUsage
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge.tenant.read

Parameters

getTenantCDNSiteUsage Parameters
NameInTypeRequiredDescription
idpathstring(uuid)Yes—
site_idpathstring(uuid)Yes—
hoursqueryintegerNo1..retention; default 24

Responses

getTenantCDNSiteUsage Responses
StatusDescription
200Usage

Fields:site_id?: string(uuid) supply_id?: string(uuid) hostname?: string from?: string(date-time) to?: string(date-time) requests?: integer bytes?: integer points?: array<object> pulled_through?: string(date-time) error_code?: string

400Error envelope
401Error envelope
403Error envelope
404Error envelope
503Error envelope

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

POST /v1/aggregated-edge/supplies/{id}/sites/{site_id}/validation/retry

Publish the vendor's hostname/certificate validation TXT records again

operationId
retryTenantCDNSiteValidation
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge.tenant.manage

Parameters

retryTenantCDNSiteValidation Parameters
NameInTypeRequiredDescription
idpathstring(uuid)Yes—
site_idpathstring(uuid)Yes—

Responses

retryTenantCDNSiteValidation Responses
StatusDescription
200Sync state after the retry

Fields:site_id?: string(uuid) supply_id?: string(uuid) state?: string site_revision?: integer projection_sha256?: string ignored_settings?: array<string> refusal?: array<object> drift_state?: string drift?: array<object> validation?: array<object> last_error_code?: string applied_at?: string(date-time) observed_at?: string(date-time) resources?: array<object> writes?: integer

401Error envelope
403Error envelope
404Error envelope
409Error envelope
429Error envelope
502Error envelope
503Error envelope

What to do on failure

  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 429 Rate limited: wait, then retry with lower concurrency.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

GET /v1/aggregated-edge/switch-events

Switching records of the tenant's own websites, newest first (every line)

operationId
listTenantCDNSwitchEvents
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge.tenant.read

Parameters

listTenantCDNSwitchEvents Parameters
NameInTypeRequiredDescription
site_idquerystring(uuid)Noone own website; another tenant's reads as 404
limitqueryintegerNo1-200, default 50

Responses

listTenantCDNSwitchEvents Responses
StatusDescription
200Events

Fields:items: array<SwitchEvent>

400Error envelope
401Error envelope
403Error envelope
404Error envelope
503Error envelope

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list