Docs & API
287 operations across 7 services, all on one base URL and one auth model. Every path below is real; open a capability for the worked examples.
Auth model
Authorization: BearerAuthorization: Bearer $TOKEN — an SS-01 OIDC access token issued at signup.
X-Tenant-IdX-Tenant-Id: <tenant> — on every tenant-scoped route; cross-tenant reads return zero rows (ADR-0019).
Idempotency-KeyIdempotency-Key: <uuid> — required on money/usage writes (ADR-0039).
AWS SigV4 · /s3AWS Signature V4 on the /s3 wire gateway — real S3 clients (aws-cli, boto3, SDKs) authenticate with an R2 access key; the tenant is resolved from the key.
Quickstart
# Auth is a platform-standard SS-01 OIDC token + your tenant header.
export BASE="https://api.edge.nexocloud.io/api/v1"
export AUTH="Authorization: Bearer $TOKEN" # from signup / SS-05 key
export TENANT="X-Tenant-Id: acme"
# Create a bucket, deploy a function, route it, roll out.
curl -X POST "$BASE/buckets" -H "$AUTH" -H "$TENANT" \
-H "Idempotency-Key: $(uuidgen)" -d '{"name":"site-assets","versioning":true}'
curl -X POST "$BASE/functions" -H "$AUTH" -H "$TENANT" -d '{"name":"assets-router"}'
curl -X POST "$BASE/functions/assets-router/deploy" -H "$AUTH" -H "$TENANT" \
-d '{"code":"export default { fetch(req, env){} }","promote":true}'
curl -X POST "$BASE/functions/assets-router/rollout" -H "$AUTH" -H "$TENANT"# The /s3 wire gateway speaks S3 REST with AWS Signature V4.
# Point any real S3 client at it — tenant is resolved from the access key.
# 1. Issue an S3 access key (secret shown ONCE)
curl -X POST "$BASE/object/access-keys" -H "$AUTH" -H "$TENANT" \
-d '{"name":"ci-deploy"}'
# → { "access_key_id": "EDGE...", "secret_access_key": "***shown once***" }
# 2. Configure the AWS CLI against the wire gateway
aws configure set aws_access_key_id EDGE...
aws configure set aws_secret_access_key ***
export S3="https://api.edge.nexocloud.io/s3"
# 3. Use it like S3 — ListBuckets, PutObject, multipart, all SigV4-signed
aws --endpoint-url "$S3" s3 ls
aws --endpoint-url "$S3" s3 cp app.v42.js s3://site-assets/app.v42.js
# boto3 / any S3 SDK works the same way. SDK/CLI note: any S3 SDK (aws-cli, boto3, aws-sdk-js) works unmodified against /s3; the control plane is plain REST + JSON.
Endpoint catalog
A representative slice per group. Base https://api.edge.nexocloud.io/api/v1. Ops endpoints (/healthz /readyz /metrics /version) exist on every service and are omitted.
/api/v1/bucketsList the tenant's buckets./api/v1/bucketsCreate a bucket (RustFS claim): versioning, visibility, region./api/v1/buckets/{bucket}/versioningEnable or suspend bucket versioning./api/v1/buckets/{bucket}/objectsList objects with prefix + delimiter and pagination./api/v1/buckets/{bucket}/objects/{key}Put an object (control-plane metadata)./api/v1/buckets/{bucket}/versionsList object versions incl. delete markers./api/v1/buckets/{bucket}/lifecycleSet per-bucket lifecycle rules./api/v1/buckets/{bucket}/uploadsInitiate a multipart upload./api/v1/buckets/{bucket}/uploads/{upload}/parts/{part}Upload a part; returns the part etag./api/v1/buckets/{bucket}/uploads/{upload}/completeComplete a multipart upload./api/v1/object/access-keysIssue an S3 access key (secret shown once)./api/v1/buckets/{bucket}/presignPresign a GET or PUT (HMAC, TTL-bounded)./api/v1/object/presign/verifyVerify a presigned request (TTL + signature)./api/v1/buckets/{bucket}/usagePer-bucket usage: stored, objects, zero-rated vs billable egress./api/v1/buckets/{bucket}/egressRecord egress (intra-edge zero-rated; external billable)./s3/{bucket}/{key}S3 wire gateway — PutObject / UploadPart (SigV4)./api/v1/functionsCreate an edge function./api/v1/functions/{name}/deployDeploy an immutable version (optionally promote)./api/v1/functions/{name}/versionsList a function's immutable versions./api/v1/functions/{name}/rollbackRoll the active pointer back to an earlier version./api/v1/functions/{name}/routesBind a route pattern / trigger to a function./api/v1/compute/resolveResolve host+path to the owning function (longest glob wins)./api/v1/functions/{name}/placementPlace a function on all or a named subset of PoPs./api/v1/functions/{name}/rolloutAdvance the pending→active PoP rollout./api/v1/functions/{name}/bindingsBind an R2/KV/env resource to a function./api/v1/functions/{name}/wasmUpload real wasm bytes for a version./api/v1/functions/{name}/execExecute the active version's real wasm module./api/v1/functions/{name}/metricsPer-function metrics summary./api/v1/classes/{class}Upsert a cache class policy./api/v1/purgeSurrogate-key / path purge across the fleet./api/v1/waf/classes/{class}Upsert an edge WAF class./api/v1/pops/{name}Upsert a PoP the fleet can place functions on./api/v1/zonesList zones./api/v1/zonesCreate a zone./api/v1/zones/{zone}/recordsAdd a record to a zone./api/v1/zones/{zone}/rrsetsReplace a zone's RRsets atomically./api/v1/zones/{zone}/dnssec/initInitialise DNSSEC for a zone./api/v1/zones/{zone}/dnssec/ceremonyRun the DNSSEC signing ceremony./api/v1/zones/{zone}/dnssec/rotate-zskRotate the zone-signing key./api/v1/zones/{zone}/publishPublish a zone atomically./api/v1/zones/{zone}/resolveResolve a name (geo/health-aware)./api/v1/zones/{zone}/answerGet the computed steering answer./api/v1/health/{target}Report a target's health for steering./api/v1/distribution/haltHalt zone distribution./api/v1/distribution/resumeResume zone distribution./api/v1/sloRead the DNS SLO./api/v1/meshCreate a sovereign mesh overlay (SDP control plane)./api/v1/mesh/{id}/peersZero-knowledge peer enrollment (public key only)./api/v1/mesh/{id}/peers/{device}/netmapGenerate the peer's WireGuard netmap./api/v1/mesh/{id}/peers/{device}/rekeySeamless mesh-wide re-key./api/v1/tailnet/devicesEnroll a device into the tenant tailnet./api/v1/tailnet/aclSet the tailnet ACL/policy./api/v1/sase/ztna/policiesCreate a ZTNA access policy (default-deny)./api/v1/sase/ztna/grantEvaluate a ZTNA request and record the verdict./api/v1/sase/swg/policiesSet a Secure Web Gateway policy./api/v1/sase/dlp/profilesSet a DLP inspection profile./api/v1/sdwan/tunnelsCreate an SD-WAN overlay tunnel./api/v1/sdwan/steerCompute an app-aware steering decision./api/v1/upo/policyAuthor (create/replace) the unified policy; bumps version./api/v1/upo/compileCompile the policy to ztna | sdwan | firewall rulesets./api/v1/upo/applyApply a compiled target; returns the diff vs baseline./api/v1/residency/{class}Set a data-residency class rule./api/v1/admitSS-07 — admit a request against gateway policy./api/v1/entitlementsSS-07 — resolve entitlements./api/v1/routes/weightsSS-07 — set weighted route versions./api/v1/waf/classes/{class}SS-27 — upsert an edge WAF class./api/v1/waf/exceptionsSS-27 — add a WAF exception./api/v1/rulesSS-28 — author a detection rule./api/v1/rules/{id}/versionsSS-28 — list a rule's versions./api/v1/coverageSS-28 — detection coverage./api/v1/huntsSS-28 — run a threat hunt./api/v1/hunts/{id}/promoteSS-28 — promote a hunt to a rule./api/v1/cases/{id}/evidenceSS-28 — attach evidence to a case./api/v1/cases/{id}/containmentsSS-28 — propose a containment./api/v1/containments/{id}/approveSS-28 — approve a containment./api/v1/containments/{id}/executeSS-28 — execute an approved containment./api/v1/zeek/leak-auditSS-28 — leak-audit a mesh control-plane session./api/v1/zeek/intel-matchSS-28 — match an observation against intel feeds./api/v1/popsList PoPs./api/v1/popsRegister a PoP./api/v1/pops/{id}/drainDrain a PoP (lifecycle transition)./api/v1/pops/{id}/routesManage a PoP's routes./api/v1/bgp/sessionsList BGP sessions./api/v1/bgp/sessions/{id}/drainDrain a BGP session (graceful)./api/v1/routes/{id}/withdrawWithdraw a BGP route./api/v1/anycast/policiesAuthor an anycast policy./api/v1/anycast/policies/{id}/failover-drillRun a failover drill (transition + evidence)./api/v1/traffic/policiesAuthor a traffic policy./api/v1/blueprintsList PoP blueprints./api/v1/gitops/changesOpen a GitOps change./api/v1/gitops/changes/{id}/applyApply a GitOps change./api/v1/gitops/changes/{id}/rollbackRoll back a GitOps change./api/v1/capacity/forecastRead a capacity forecast./api/v1/usageRead fleet usage.