Developers

The SS-02 endpoint catalog.

Every operation grouped by capability, with the real method + path. Auth is the platform-standard SS-01 bearer token plus X-Tenant-Id on tenant routes; money/usage writes carry an Idempotency-Key (ADR-0039). The S3 wire gateway instead authenticates with AWS Signature V4 and resolves the tenant from the access key.

Auth model

One bearer token, one tenant header, SigV4 for S3.

Authorization: Bearer $TOKEN
SS-01 OIDC token from signup / an SS-05 API key. Required on every governed call.
X-Tenant-Id: <tenant>
Scopes tenant routes. A cross-tenant read returns zero rows, verified by a CI pen-test.
Idempotency-Key: <uuid>
Required on money/usage writes — claim create, rotate, placement (ADR-0039).
AWS SigV4 (S3 gateway only)
The /s3 endpoint reconstructs the canonical request and resolves the tenant from the access-key-id — no header trust.

Base URLs

In-mesh
http://ss-02-dbaas.shared-services.svc.cluster.local:8002
External (via SS-07 gateway)
https://gateway.<region>.nexocloud.io/dbaas
S3 wire gateway
https://s3.dbaas.nexocloud.io/s3

Snippets below use $BASE = https://api.dbaas.nexocloud.io/api/v1 · S3 gateway https://s3.dbaas.nexocloud.io/s3 (illustrative hosts).

Quickstart

psql, boto3 / aws-cli and curl — copy-paste ready.

psql — connect via the binding · bash
# 1. Create a Postgres claim.
curl -X POST "$BASE/claims" -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-Id: acme" -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"name":"orders","engine":"yugabyte","size_gb":50}'

# 2. Read the binding (DSN + secret_ref, NO inline password) …
curl "$BASE/claims/orders/binding" \
  -H "Authorization: Bearer $TOKEN" -H "X-Tenant-Id: acme"

# 3. … draw a ≤1h lease, resolve the secret from Vault, then:
psql "postgresql://orders.acme.ss-02.svc:5433/orders"
# the password comes from the Vault lease — never the DSN.
boto3 / aws-cli — S3 wire gateway · bash
# Issue an access key (secret shown once), then point any S3 client
# at /s3. The tenant is resolved from the key — no X-Tenant-Id.
export AWS_ACCESS_KEY_ID=...        # POST /api/v1/object/access-keys
export AWS_SECRET_ACCESS_KEY=...    # returned once, at creation

aws --endpoint-url https://s3.dbaas.nexocloud.io/s3 s3 mb s3://site-assets
aws --endpoint-url https://s3.dbaas.nexocloud.io/s3 s3 cp app.js s3://site-assets/
aws --endpoint-url https://s3.dbaas.nexocloud.io/s3 s3 ls s3://site-assets/
# real S3 XML; multipart, versioning & presign all supported.
curl — vector, document & time-series · bash
# Vector collection (Qdrant).
curl -X POST "$BASE/vector-claims" -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-Id: acme" -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"name":"embeddings","dimension":1536}'

# Document write with optimistic concurrency.
curl -X PUT "$BASE/claims/orders/docs/order-1001" \
  -H "Authorization: Bearer $TOKEN" -H "X-Tenant-Id: acme" \
  -H "Content-Type: application/json" \
  -d '{"value":{"status":"paid"},"if_version":2}'

# Time-series query, 5-minute average buckets.
curl -X POST "$BASE/claims/metrics/query" \
  -H "Authorization: Bearer $TOKEN" -H "X-Tenant-Id: acme" \
  -H "Content-Type: application/json" \
  -d '{"series":"cpu","downsample_seconds":300}'

Endpoint catalog

46 endpoints across the five capability groups.

The catalog below mirrors the SS-02 OpenAPI spec (58 operations total, incl. ops probes). Each group links to its deep-dive with the worked example and architecture context.

Relational SQL

Postgres · MySQL · TiDB HTAP · 9 endpoints

POST/api/v1/claimsbearertenantidempotency-key

Declare an OLTP SQL claim (engine yugabyte or tidb); provisions the resource, pins a version, mints a Vault credential.

GET/api/v1/claimsbearertenant

List every engine claim owned by the tenant (never the raw credential).

GET/api/v1/claims/{name}bearertenant

Fetch one claim by name, tenant-scoped.

GET/api/v1/claims/{name}/bindingbearertenant

DSN + endpoint + Vault secret_ref — the credential-free connect info.

POST/api/v1/claims/{name}/rotatebearertenantidempotency-key

Rotate the credential (new Vault version); DSN unchanged.

POST/api/v1/claims/{name}/placementbearertenant

Declare placement requirement (dialect + topology); decides target + isolation, enters migrating when moving to TiDB.

GET/api/v1/claims/{name}/placementbearertenant

Read the placement block; ?tables=… serves the Postgres RLS DDL / MySQL discriminator DDL.

POST/api/v1/claims/{name}/placement/completebearertenant

Operator seam: re-bind onto TiDB and revoke every outstanding lease.

DELETE/api/v1/claims/{name}bearertenant

Deprovision the resource and remove the claim.

Polyglot engines & tiers

Document/KV · Vector · Time-series · 8 endpoints

GET/api/v1/enginesbearer

Supported engines (name→workload class) and per-engine approved versions with EOL dates.

GET/api/v1/engines/catalogbearer

Full ADR-0069 admission catalogue: tier, license class, boundary, tenancy/backup/restore/residency, guidance.

POST/api/v1/vector-claimsbearertenantidempotency-key

Provision a per-tenant Qdrant collection (name + dimension required).

PUT/api/v1/claims/{name}/docs/{key}bearertenant

Write a document with optimistic concurrency (if_version) and per-item ttl_seconds.

GET/api/v1/claims/{name}/docs/{key}bearertenant

Read a document by key from a document/KV claim.

DELETE/api/v1/claims/{name}/docs/{key}bearertenant

Delete a document by key with a conditional if_version guard.

POST/api/v1/claims/{name}/pointsbearertenant

Ingest a batch of time-series points (ILP lane); each needs series + ts.

POST/api/v1/claims/{name}/querybearertenant

Query a time-series claim; downsample_seconds>0 returns average buckets, else raw points.

Object storage (S3/R2)

RustFS · buckets · SigV4 wire gateway · 18 endpoints

POST/api/v1/bucketsbearertenant

Create a bucket (backed by a RustFS claim): versioning, visibility, region.

GET/api/v1/bucketsbearertenant

List the tenant's buckets.

PUT/api/v1/buckets/{bucket}/versioningbearertenant

Enable or suspend bucket versioning.

PUT/api/v1/buckets/{bucket}/lifecyclebearertenant

Set per-bucket lifecycle rules (expire versions, abort stale uploads).

GET/api/v1/buckets/{bucket}/objectsbearertenant

List objects with prefix + delimiter folder rollup and pagination.

PUT/api/v1/buckets/{bucket}/objects/{key}bearertenant

Put an object (control-plane metadata: size, content-type, user metadata).

GET/api/v1/buckets/{bucket}/versionsbearertenant

List object versions (all versions incl. delete markers).

POST/api/v1/buckets/{bucket}/uploadsbearertenant

Initiate a multipart upload; parts via PUT …/uploads/{upload}/parts/{part}.

POST/api/v1/buckets/{bucket}/uploads/{upload}/completebearertenant

Complete a multipart upload (parts present + strictly ascending).

POST/api/v1/buckets/{bucket}/presignbearertenant

Presign a GET or PUT for a key (HMAC over a canonical string, TTL-bounded).

POST/api/v1/object/access-keysbearertenant

Issue an S3 access key (the R2 API token). Secret shown once.

GET/api/v1/object/access-keysbearertenant

List access keys (never returns the secret).

POST/api/v1/object/presign/verifybearertenant

Verify a presigned request (valid within TTL, signature + method match).

GET/api/v1/object/usagebearertenant

Tenant-wide usage summary (aggregate across buckets, zero-rated vs billable egress).

PUT/s3/{bucket}aws sigv4

S3 CreateBucket — SigV4, tenant from the access key.

GET/s3/{bucket}aws sigv4

S3 ListObjectsV2 (GET Bucket) — real S3 XML.

PUT/s3/{bucket}/{key}aws sigv4

S3 PutObject / UploadPart.

GET/s3/{bucket}/{key}aws sigv4

S3 GetObject.

Serverless & branching

Instant provisioning · PITR branches · CDC · 6 endpoints

POST/api/v1/claimsbearertenantidempotency-key

Instant provisioning: create + provision a claim and return a ready binding.

POST/api/v1/claims/{name}/restorebearertenant

PITR/branch — restore the source claim as of at into a NEW claim new_name.

GET/api/v1/claims/{name}/cdcbearertenant

CDC pull seam; read forward from ?cursor=, resume from the returned cursor.

POST/api/v1/claims/{name}/leasesbearertenant

Issue a dynamic credential lease (TTL capped at the one-hour ceiling).

GET/api/v1/claims/{name}/leases/{id}bearertenant

Validate a lease engine-side; expired/rotated/foreign leases fail.

POST/api/v1/claims/{name}/rotatebearertenantidempotency-key

Rotate the credential with no downtime; DSN unchanged.

Data governance & isolation

Only-data-plane · placement · Prism boundary · 5 endpoints

GET/api/v1/claims/{name}/placementbearertenant

Read placement + serve the Postgres RLS DDL / MySQL discriminator DDL (?tables=…).

POST/api/v1/claims/{name}/placementbearertenant

Declare the placement requirement; the policy decides target + isolation.

GET/api/v1/engines/catalogbearer

Boundary + license posture: which engines are operational claims vs Prism-reserved.

POST/api/v1/claims/{name}/leasesbearertenant

Vault-held, audit-chained credential lease — the platform's record of access.

GET/api/v1/object/usagebearertenant

Metered usage the SS-60/SS-10 chargeback path reads (zero-rated vs billable).