Skip to content

Cloud API Reference — Outpost Lifecycle

The Cloud Outpost API manages the full lifecycle of Arbitex Hybrid Outpost nodes: registration, mTLS certificate issuance, certificate renewal, heartbeat telemetry, and deregistration. All management endpoints are served at https://cloud.arbitex.ai under the /v1/orgs router prefix.

This API is consumed by Arbitex operators and automation tooling. Deployed outpost processes use only the heartbeat endpoint during normal operation.


Two authentication schemes are in use across this API.

Admin API key — required for all management operations (register, list, renew, deregister). Pass the key in the X-API-Key request header.

X-API-Key: arb_<your_admin_api_key>

Mutual TLS (mTLS) — used by deployed outpost processes to authenticate the heartbeat endpoint. In production, NGINX terminates TLS and forwards the verified client certificate as the X-SSL-Client-Cert header. During development or testing, an admin API key may be substituted instead.


Outpost client certificates are issued by Arbitex’s internal step-ca PKI at registration and renewal time.

PropertyValue
Validity period90 days
CN formatoutpost-{org_id}-{outpost_id}.arbitex.internal
Key materialPrivate key returned once at issuance — never stored by Cloud

The client_cert, client_key, and ca_bundle fields in registration and renewal responses are returned exactly once. Store this material securely immediately; it cannot be retrieved again.


Returned by all management endpoints. Does not include certificate material.

FieldTypeDescription
idstringOutpost UUID
org_idstringParent organization ID
outpost_namestringHuman-readable name assigned at registration
regionstringDeployment region label
deployment_envstring | nullCustomer VPC or cloud context string — informational only
statusstringactive, inactive, cert_expired, or deregistered
cert_issued_atdatetime | nullISO 8601 timestamp of most recent certificate issuance
cert_expires_atdatetime | nullISO 8601 timestamp of current certificate expiry
created_atdatetimeISO 8601 timestamp of outpost registration
deregistered_atdatetime | nullISO 8601 timestamp of deregistration, if applicable
last_seendatetime | nullISO 8601 timestamp of most recent heartbeat received
outpost_versionstring | nullOutpost software version reported in last heartbeat
policy_versionstring | nullPolicy bundle version reported in last heartbeat
dlp_model_versionstring | nullDLP model version reported in last heartbeat
pending_audit_eventsinteger | nullPending audit event count from last heartbeat
tier3_activeboolean | nullWhether Tier 3 local AI processing was active at last heartbeat
FieldTypeRequiredConstraintsDescription
outpost_namestringYes1–128 charsDisplay name for this outpost
regionstringYes1–64 charsDeployment region (e.g. us-east-1)
deployment_envstring | nullNomax 255 charsVPC name, cloud account ID, or other context
FieldTypeRequiredDefaultDescription
versionstringYesOutpost software version (max 32 chars)
uptimeintegerYesProcess uptime in seconds (≥ 0)
policy_versionstringNo"none"Active policy bundle version (max 128 chars)
last_sync_atdatetime | nullNonullISO 8601 timestamp of last policy sync
dlp_model_versionstringNo"none"Active DLP model version (max 128 chars)
pending_audit_eventsintegerNo0Count of buffered audit events not yet flushed (≥ -1)
tier3_activebooleanNofalseWhether Tier 3 local inference is currently active
FieldTypeDescription
outpost_idstringID of the outpost that sent the heartbeat
received_atdatetimeISO 8601 server timestamp of receipt


POST /v1/orgs/{org_id}/outposts

Registers a new Hybrid Outpost for the specified organization. On success, returns the outpost record together with a one-time mTLS certificate bundle. The private key is not stored by Cloud — if it is lost, the certificate must be renewed.

Authentication: Admin API key (X-API-Key)

Path parameters

ParameterDescription
org_idOrganization UUID

Request bodyRegisterOutpostRequest

FieldTypeRequiredDescription
outpost_namestringYesDisplay name (1–128 chars)
regionstringYesDeployment region label (1–64 chars)
deployment_envstring | nullNoVPC or cloud environment context

Request

Terminal window
curl -X POST https://cloud.arbitex.ai/v1/orgs/org_01HZ_ACME/outposts \
-H "X-API-Key: arb_your_admin_api_key" \
-H "Content-Type: application/json" \
-d '{
"outpost_name": "acme-prod-us-east",
"region": "us-east-1",
"deployment_env": "vpc-0abc1234def567890"
}'

Response 201 Created

{
"outpost": {
"id": "op_01HZ_PROD_USE1",
"org_id": "org_01HZ_ACME",
"outpost_name": "acme-prod-us-east",
"region": "us-east-1",
"deployment_env": "vpc-0abc1234def567890",
"status": "active",
"cert_issued_at": "2026-03-09T12:00:00Z",
"cert_expires_at": "2026-06-07T12:00:00Z",
"created_at": "2026-03-09T12:00:00Z",
"deregistered_at": null,
"last_seen": null,
"outpost_version": null,
"policy_version": null,
"dlp_model_version": null,
"pending_audit_events": null,
"tier3_active": null
},
"client_cert": "-----BEGIN CERTIFICATE-----\nMIIB...base64...\n-----END CERTIFICATE-----\n",
"client_key": "-----BEGIN EC PRIVATE KEY-----\nMIIB...base64...\n-----END EC PRIVATE KEY-----\n",
"ca_bundle": "-----BEGIN CERTIFICATE-----\nMIIB...base64...\n-----END CERTIFICATE-----\n"
}

Error responses

StatusDescription
401Invalid or missing API key
404Organization not found

GET /v1/orgs/{org_id}/outposts

Returns all outposts registered to the specified organization, including deregistered outposts.

Authentication: Admin API key (X-API-Key)

Path parameters

ParameterDescription
org_idOrganization UUID

Request

Terminal window
curl https://cloud.arbitex.ai/v1/orgs/org_01HZ_ACME/outposts \
-H "X-API-Key: arb_your_admin_api_key"

Response 200 OK

[
{
"id": "op_01HZ_PROD_USE1",
"org_id": "org_01HZ_ACME",
"outpost_name": "acme-prod-us-east",
"region": "us-east-1",
"deployment_env": "vpc-0abc1234def567890",
"status": "active",
"cert_issued_at": "2026-03-09T12:00:00Z",
"cert_expires_at": "2026-06-07T12:00:00Z",
"created_at": "2026-03-09T12:00:00Z",
"deregistered_at": null,
"last_seen": "2026-03-09T14:58:00Z",
"outpost_version": "1.4.2",
"policy_version": "policy-bundle-v42",
"dlp_model_version": "dlp-v3.1.0",
"pending_audit_events": 0,
"tier3_active": false
},
{
"id": "op_01HZ_STAGING",
"org_id": "org_01HZ_ACME",
"outpost_name": "acme-staging",
"region": "us-west-2",
"deployment_env": null,
"status": "deregistered",
"cert_issued_at": "2026-01-15T09:00:00Z",
"cert_expires_at": "2026-04-15T09:00:00Z",
"created_at": "2026-01-15T09:00:00Z",
"deregistered_at": "2026-02-28T16:30:00Z",
"last_seen": "2026-02-28T16:00:00Z",
"outpost_version": "1.3.8",
"policy_version": "policy-bundle-v38",
"dlp_model_version": "dlp-v3.0.1",
"pending_audit_events": 4,
"tier3_active": false
}
]

Error responses

StatusDescription
401Invalid or missing API key
404Organization not found

DELETE /v1/orgs/{org_id}/outposts/{outpost_id}

Deregisters an outpost and immediately revokes its mTLS certificate via step-ca CRL. The outpost record is retained with status: deregistered. Deregistered outposts cannot send heartbeats or renew certificates.

Authentication: Admin API key (X-API-Key)

Path parameters

ParameterDescription
org_idOrganization UUID
outpost_idOutpost UUID

Request

Terminal window
curl -X DELETE \
"https://cloud.arbitex.ai/v1/orgs/org_01HZ_ACME/outposts/op_01HZ_STAGING" \
-H "X-API-Key: arb_your_admin_api_key"

Response 204 No Content

No response body.

Side effects

  • The outpost certificate CN is added to the step-ca CRL.
  • Outpost status is set to deregistered and deregistered_at is stamped.
  • Subsequent heartbeats from the outpost are rejected with 409.

Error responses

StatusDescription
401Invalid or missing API key
404Outpost or organization not found
409Outpost is already deregistered

POST /v1/orgs/{org_id}/outposts/{outpost_id}/renew

Issues a new mTLS certificate for an active outpost. The new certificate bundle is returned once and must be stored immediately. The old certificate remains valid until its natural expiry (CRL grace period); there is no immediate revocation on renewal.

Renewal should be triggered before cert_expires_at to avoid heartbeat authentication failures. Automated renewal is recommended at 60 days into the 90-day validity window.

Authentication: Admin API key (X-API-Key)

Path parameters

ParameterDescription
org_idOrganization UUID
outpost_idOutpost UUID

Request body

Empty body — no fields required.

Request

Terminal window
curl -X POST \
"https://cloud.arbitex.ai/v1/orgs/org_01HZ_ACME/outposts/op_01HZ_PROD_USE1/renew" \
-H "X-API-Key: arb_your_admin_api_key" \
-H "Content-Type: application/json" \
-d '{}'

Response 200 OK

{
"outpost": {
"id": "op_01HZ_PROD_USE1",
"org_id": "org_01HZ_ACME",
"outpost_name": "acme-prod-us-east",
"region": "us-east-1",
"deployment_env": "vpc-0abc1234def567890",
"status": "active",
"cert_issued_at": "2026-03-09T15:00:00Z",
"cert_expires_at": "2026-06-07T15:00:00Z",
"created_at": "2026-03-09T12:00:00Z",
"deregistered_at": null,
"last_seen": "2026-03-09T14:58:00Z",
"outpost_version": "1.4.2",
"policy_version": "policy-bundle-v42",
"dlp_model_version": "dlp-v3.1.0",
"pending_audit_events": 0,
"tier3_active": false
},
"client_cert": "-----BEGIN CERTIFICATE-----\nMIIB...renewed-cert...\n-----END CERTIFICATE-----\n",
"client_key": "-----BEGIN EC PRIVATE KEY-----\nMIIB...renewed-key...\n-----END EC PRIVATE KEY-----\n",
"ca_bundle": "-----BEGIN CERTIFICATE-----\nMIIB...ca-bundle...\n-----END CERTIFICATE-----\n"
}

Error responses

StatusDescription
401Invalid or missing API key
404Outpost or organization not found
409Outpost is deregistered — renewal not permitted

POST /v1/orgs/{org_id}/outposts/{outpost_id}/heartbeat

Receives a telemetry heartbeat from a deployed outpost. Heartbeats update the outpost’s last_seen timestamp and sync version/state fields on the OutpostResponse record. Outposts should send a heartbeat every 120 seconds.

Authentication: mTLS via X-SSL-Client-Cert header (production) or admin API key via X-API-Key (development and testing)

Path parameters

ParameterDescription
org_idOrganization UUID
outpost_idOutpost UUID

Request bodyHeartbeatRequest

FieldTypeRequiredDefaultDescription
versionstringYesOutpost software version
uptimeintegerYesProcess uptime in seconds
policy_versionstringNo"none"Active policy bundle version
last_sync_atdatetime | nullNonullISO 8601 timestamp of last policy sync
dlp_model_versionstringNo"none"Active DLP model version
pending_audit_eventsintegerNo0Count of buffered audit events not yet flushed
tier3_activebooleanNofalseWhether Tier 3 local inference is currently active

Request

Terminal window
# Production: mTLS via client cert (NGINX injects X-SSL-Client-Cert automatically)
# Development: use admin API key
curl -X POST \
"https://cloud.arbitex.ai/v1/orgs/org_01HZ_ACME/outposts/op_01HZ_PROD_USE1/heartbeat" \
-H "X-API-Key: arb_your_admin_api_key" \
-H "Content-Type: application/json" \
-d '{
"version": "1.4.2",
"uptime": 86400,
"policy_version": "policy-bundle-v42",
"last_sync_at": "2026-03-09T14:55:00Z",
"dlp_model_version": "dlp-v3.1.0",
"pending_audit_events": 0,
"tier3_active": false
}'

Response 200 OKHeartbeatAck

{
"outpost_id": "op_01HZ_PROD_USE1",
"received_at": "2026-03-09T15:00:00Z"
}

Error responses

StatusDescription
401Invalid or missing authentication (mTLS cert not verified, or API key invalid)
404Outpost or organization not found
409Outpost is deregistered — heartbeats not accepted

StatusDescription
activeOutpost is registered and its certificate is valid
inactiveOutpost has not sent a heartbeat within the expected window
cert_expiredOutpost certificate has passed cert_expires_at without renewal
deregisteredOutpost was explicitly deregistered; its certificate has been revoked via CRL

Registration
|
v
cert_issued_at ──────────────────────────────────────────── cert_expires_at (90 days)
^
|
Recommended renewal window
(day 60 onward)
|
POST /renew
|
v
New cert_issued_at ─────────── New cert_expires_at (+90 days)
Old cert still valid until natural expiry (CRL grace period)

When an outpost is deregistered, the current certificate is added to the step-ca CRL immediately. The CRL grace period does not apply to deregistered outposts.


All error responses use a standard envelope:

{
"error": "not_found",
"message": "Outpost op_01HZ_MISSING not found for org org_01HZ_ACME",
"detail": null
}
FieldTypeDescription
errorstringMachine-readable error code
messagestringHuman-readable description
detailstring | nullAdditional context, if available

Statuserror valueApplies to
401unauthorizedAll endpoints — invalid or missing X-API-Key or mTLS credential
404not_foundRegister, List, Deregister, Renew, Heartbeat — org or outpost does not exist
409conflictDeregister — already deregistered; Renew — deregistered outpost; Heartbeat — deregistered outpost