Skip to main content
ARQERA
FeaturesOreOjuIntegrationsDocs
Request Early Access
200+ Endpoints

API Reference

Build governed AI applications with 200+ REST endpoints. Full OpenAPI spec, tenant-scoped, versioned, and rate-limited.

Get API KeyBack to Docs

Explore the API

Every endpoint is tenant-scoped, authenticated, and emits evidence. Pick a domain to dive in.

Governance & Protocol

Register protocol manifests, execute governed actions, and enforce policies across your AI fleet.

Agents & Ara

Deploy AI agents, manage personas, execute actions through the Ara orchestration layer with approval workflows.

Evidence & Audit

Emit, query, and verify tamper-proof evidence artifacts. Every action leaves an auditable trail.

Compliance

Enable SOC 2, GDPR, HIPAA, and ISO 27001 frameworks. Track controls, posture scores, and audit exports.

Users & Teams

Manage users, roles, tenants, SSO configuration, and SCIM provisioning for enterprise identity.

Integrations

Connect 100+ tools via OAuth. Start auth flows, manage connector lifecycle, and sync data.

Analytics & Metrics

Protocol latency, training quality, approval rates, and custom metric targets with time-series data.

Billing & Usage

Stripe-powered checkout, subscription management, usage metering, and invoice retrieval.

Operations & SLOs

Define SLOs, track error budgets, manage alert rules, incidents, and runbooks.

Webhooks & Events

Receive real-time HMAC-signed event notifications for artifacts, compliance, users, and billing.

Authentication

Two methods: API keys for server-to-server, OAuth for user-facing apps

API Key Authentication

Generate scoped API keys from Settings. Pass the key in every request header.

curl -X GET https://api.arqera.io/api/v1/protocol/manifest \
  -H "X-API-Key: ak_live_7f3a9b2c..." \
  -H "Content-Type: application/json"

Session Authentication

For browser-based apps. Authenticate via login, then use the session token.

// Login and receive tokens
const res = await fetch("https://api.arqera.io/api/v1/auth/login", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    email: "[email protected]",
    password: "********"
  })
});

const { access_token, refresh_token } = await res.json();

// Use access token for subsequent requests
fetch("/api/v1/protocol/manifest", {
  headers: { "Authorization": `Bearer ${access_token}` }
});

Auth Endpoints

MethodEndpointDescription
POST
/api/v1/auth/loginAuthenticate with email + password
POST
/api/v1/auth/registerRegister a new user account
POST
/api/v1/auth/logoutInvalidate the current session
GET
/api/v1/auth/meReturn the current user profile
POST
/api/v1/auth/refreshRotate access/refresh tokens
POST
/api/v1/auth/password/forgotRequest a password reset email
POST
/api/v1/auth/password/resetReset password with a reset token
GET
/api/v1/auth/verify-emailVerify email with one-time token
POST
/api/v1/auth/resend-verificationResend verification email

Govern Every AI Action

Register manifests, execute governed actions, and enforce policies with full evidence trails

Action Tier System

Every protocol execution is classified into one of three tiers. The governance engine evaluates risk, policy, and trust before routing each action.

AUTO

Read operations, searches, diagnostics. Executed immediately with no approval required.

SOFT

Notifications, non-destructive writes. Execute with a 30-second undo window.

HARD

Emails, deletions, payments. Requires explicit human approval before execution.

Protocol Endpoints

12 endpoints
MethodEndpointDescription
POST
/api/v1/protocol/manifest/validateValidate a manifest without storing it
POST
/api/v1/protocol/manifestRegister a new protocol manifest
GET
/api/v1/protocol/manifestList all registered manifests
GET
/api/v1/protocol/manifest/{node_id}Fetch manifest by node ID (latest or specific version)
GET
/api/v1/protocol/manifest/{node_id}/versionsList all available versions of a manifest
POST
/api/v1/protocol/executeExecute a governed protocol action
GET
/api/v1/work/approvalsList pending approval requests
POST
/api/v1/work/approvals/{id}/approveApprove a pending action
POST
/api/v1/work/approvals/{id}/rejectReject a pending action
GET
/api/v1/security/tenants/{tenant_id}/policiesList security policies for a tenant
POST
/api/v1/security/tenants/{tenant_id}/policiesCreate a security policy
GET
/api/v1/security/tenants/{tenant_id}/audit-logsQuery audit logs with filtering

Execute a Governed Action

Send an action through the governance engine. The system evaluates policies, classifies the action tier, and either executes immediately or queues for approval.

Request

POST /api/v1/protocol/execute
Content-Type: application/json
X-API-Key: ak_live_7f3a9b2c...

{
  "node_id": "ara.connectors.salesforce",
  "action_id": "lead.create",
  "decision_contract_id": 101,
  "payload": {
    "email": "[email protected]",
    "company": "Northwind Traders",
    "source": "inbound_demo"
  },
  "routing_hints": {
    "latency_budget_ms": 500
  },
  "policy_context": {
    "require_approval": true
  }
}

Response

{
  "status": "pending_approval",
  "result": {
    "status": "queued",
    "message": "Approval required before execution.",
    "payload_echo": {
      "email": "[email protected]"
    }
  },
  "receipt": {
    "request_id": "req_8k2m4n6p",
    "trace_id": "tr_a1b2c3d4e5f6",
    "correlation_id": "cor_9x8y7z",
    "node_id": "ara.connectors.salesforce",
    "action_id": "lead.create",
    "version": "1.0.0",
    "policy_evaluations": [
      { "policy_id": "pii_local_only", "result": "pass" }
    ],
    "routing_decision": {
      "strategy": "manifest",
      "tier": "HARD"
    },
    "latency_ms": 1.2,
    "retries": 0
  }
}

Deploy and Orchestrate AI Agents

Manage agent personas, training pipelines, A/B tests, and the Ara execution engine

AI Training & Agent Endpoints

24 endpoints
MethodEndpointDescription
GET
/api/v1/ai-training/jobsList training jobs with status and metrics
POST
/api/v1/ai-training/jobsCreate a new training job
POST
/api/v1/ai-training/jobs/{job_id}/cancelCancel a running training job
GET
/api/v1/ai-training/datasetsList training datasets
POST
/api/v1/ai-training/datasetsCreate a training dataset
POST
/api/v1/ai-training/datasets/generateAuto-generate dataset from protocol executions
GET
/api/v1/ai-training/modelsList deployed model versions
POST
/api/v1/ai-training/modelsRegister a new model version
POST
/api/v1/ai-training/models/{model_id}/deployQueue model deployment (approval required)
POST
/api/v1/ai-training/models/{model_id}/rollbackRollback to a previous model version
GET
/api/v1/ai-training/personasList agent persona profiles
GET
/api/v1/ai-training/personas/{persona_key}Fetch a persona by key
PUT
/api/v1/ai-training/personas/{persona_key}Update persona configuration
POST
/api/v1/ai-training/ab-testsCreate an A/B test between model versions
POST
/api/v1/ai-training/ab-tests/{id}/startStart an A/B test
POST
/api/v1/ai-training/ab-tests/{id}/completeComplete and declare a winner
GET
/api/v1/ai-training/feedbackList training feedback entries
POST
/api/v1/ai-training/feedbackSubmit training feedback
GET
/api/v1/ai-training/infrastructureList training infrastructure
GET
/api/v1/ai-training/infrastructure/healthInfrastructure health summary
GET
/api/v1/ai-training/statsTraining telemetry and statistics

Generate a Training Dataset from Live Traffic

ARQERA can auto-generate SFT and DPO training pairs from your protocol execution history. Approved actions become "chosen" samples; rejected actions become "rejected" samples.

curl -X POST https://api.arqera.io/api/v1/ai-training/datasets/generate \
  -H "X-API-Key: ak_live_7f3a9b2c..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "q1-governance-pairs",
    "source": "protocol_executions",
    "format": "dpo",
    "filters": {
      "start_date": "2026-01-01T00:00:00Z",
      "end_date": "2026-03-31T23:59:59Z",
      "min_confidence": 0.8
    }
  }'

Prove Every Decision

Tamper-proof evidence chain with hash verification, cryptographic signatures, and audit exports

Evidence & Claims Endpoints

8 endpoints
MethodEndpointDescription
GET
/api/claimsPublic claims snapshot (benchmarks, runtime spec, inventory)
GET
/api/evidence/latestLatest evidence artifacts, filterable by type
GET
/api/evidence/verifyVerify evidence hash-chain integrity and signatures
POST
/api/v1/compliance/tenants/{tenant_id}/evidenceSubmit compliance evidence
GET
/api/v1/exports/receiptsExport protocol execution receipts
GET
/api/v1/exports/approvalsExport approval decisions
GET
/api/v1/exports/usageExport usage records (API calls, tokens, storage)
GET
/api/v1/exports/trainingExport training jobs and outcomes

Verify the Evidence Chain

Every action emits an evidence artifact with a cryptographic hash linked to the previous artifact. Auditors can verify the entire chain has not been tampered with.

curl

curl https://api.arqera.io/api/evidence/verify \
  -H "X-API-Key: ak_live_7f3a9b2c..."

Response

{
  "chain_valid": true,
  "total_artifacts": 14832,
  "first_artifact": "2025-11-02T08:14:00Z",
  "latest_artifact": "2026-02-19T15:42:11Z",
  "signature_status": "all_verified",
  "broken_links": 0
}

Export Data for Auditors

All export endpoints support ISO timestamp filtering with start_at, end_at, and a window_days fallback.

curl "https://api.arqera.io/api/v1/exports/receipts?start_at=2026-01-01T00:00:00Z&end_at=2026-02-01T00:00:00Z" \
  -H "X-API-Key: ak_live_7f3a9b2c..."

Automate Compliance Across Frameworks

Enable SOC 2, GDPR, HIPAA, and ISO 27001. Track controls, measure posture, generate audit exports.

Compliance Endpoints

6 endpoints
MethodEndpointDescription
GET
/api/v1/compliance/tenants/{tenant_id}/frameworksList available compliance frameworks
POST
/api/v1/compliance/tenants/{tenant_id}/frameworks/{id}/enableEnable a framework for the tenant
GET
/api/v1/compliance/tenants/{tenant_id}/frameworks/{id}/controlsList controls and their status
GET
/api/v1/compliance/tenants/{tenant_id}/postureGet overall compliance posture score
POST
/api/v1/compliance/tenants/{tenant_id}/evidenceSubmit compliance evidence artifact
POST
/api/v1/compliance/tenants/{tenant_id}/frameworks/{id}/exportGenerate audit-ready export

Check Your Compliance Posture

Get a single score that reflects your compliance health across all enabled frameworks.

GET /api/v1/compliance/tenants/t_acme/posture

{
  "overall_score": 87.5,
  "frameworks": [
    {
      "id": "soc2",
      "status": "compliant",
      "controls_met": 45,
      "controls_total": 50
    },
    {
      "id": "gdpr",
      "status": "compliant",
      "controls_met": 32,
      "controls_total": 35
    },
    {
      "id": "iso27001",
      "status": "in_progress",
      "controls_met": 78,
      "controls_total": 114
    }
  ]
}

Manage Users, Roles, and Tenants

Enterprise identity with SSO, SCIM provisioning, IP allowlists, and customer-managed encryption keys

Workforce & Tasks

GET
/api/v1/work/tasks

List tasks (filter by status, assignee, priority)

POST
/api/v1/work/tasks

Create a task

PATCH
/api/v1/work/tasks/{id}

Update task status or assignee

GET
/api/v1/work/workers

List workers (human + AI)

POST
/api/v1/work/workers

Register a new worker

GET
/api/v1/work/sla-policies

List SLA policies

Security & Identity

GET
/.../{tenant_id}/sso

Get SSO configuration

POST
/.../{tenant_id}/sso

Configure SAML or OIDC

GET
/.../{tenant_id}/ip-allowlist

List IP allowlist rules

POST
/.../{tenant_id}/ip-allowlist

Add IP allowlist rule (CIDR)

GET
/.../{tenant_id}/kms

Get encryption key config

POST
/.../{tenant_id}/kms

Configure customer-managed keys

Verify a Custom Domain

Prove domain ownership via DNS TXT record verification. Required for SSO and custom branding.

# 1. Request a verification token
POST /api/v1/tenants/t_acme/domain/verification

# 2. Add the TXT record to your DNS:
#    _arqera-verify.acme.co -> arq_verify_8k2m4n6p

# 3. Confirm verification
POST /api/v1/tenants/t_acme/domain/verification/confirm

# Response:
{ "domain": "acme.co", "verified": true, "verified_at": "2026-02-19T12:00:00Z" }

Connect Your Entire Stack

100+ connectors via OAuth. Manage lifecycle, sync data, and auto-generate protocol manifests.

Integration Fabric Endpoints

10 endpoints
MethodEndpointDescription
GET
/api/v1/integration-fabric/connectorsList available connectors
GET
/api/v1/integration-fabric/connectors/{id}Get connector details
GET
/api/v1/integration-fabric/connectors/{id}/scopesList required OAuth scopes
POST
/api/v1/integration-fabric/connectors/{id}/auth/startStart OAuth flow
POST
/api/v1/integration-fabric/connectors/{id}/auth/completeComplete OAuth callback
POST
/api/v1/integration-fabric/connectors/{id}/auth/disconnectDisconnect an integration
POST
/api/v1/integration-fabric/connectors/{id}/syncQueue a data sync job
GET
/api/v1/integration-fabric/connectors/{id}/manifestPreview auto-generated manifest
POST
/api/v1/integration-fabric/connectors/{id}/publishPublish connector to protocol registry
POST
/api/webhooks/nangoReceive Nango connect webhooks

Connect a Tool in Three Steps

// Step 1: Start the OAuth flow
const startRes = await fetch("/api/v1/integration-fabric/connectors/github/auth/start", {
  method: "POST",
  headers: { "X-API-Key": "ak_live_7f3a9b2c..." }
});
const { auth_url } = await startRes.json();
// Redirect user to auth_url...

// Step 2: User authorizes in GitHub, callback fires

// Step 3: Complete the connection
await fetch("/api/v1/integration-fabric/connectors/github/auth/complete", {
  method: "POST",
  headers: { "X-API-Key": "ak_live_7f3a9b2c..." }
});
// Connector is now active and syncable

Measure Everything That Matters

Protocol performance, training quality, and self-optimizing learning pipelines

Observability Metrics

GET
/api/v1/metrics/overview

Combined protocol + training metrics

GET
/api/v1/metrics/protocol

Execution latency, approvals, PII events

GET
/api/v1/metrics/training

Job completion, quality, cost

GET
/api/v1/metrics/targets

Tenant metric targets

PUT
/api/v1/metrics/targets

Update metric targets

Self-Optimization (Learning Plane)

GET
/api/v1/learning

Latest learning snapshot

POST
/api/v1/learning/run

Compute fresh learning snapshot

GET
/api/v1/learning/pipeline

Recent pipeline runs

POST
/api/v1/learning/pipeline/run

Trigger new pipeline run

GET
/api/v1/learning/routing-updates

Queued routing/model updates

POST
/api/v1/learning/routing-updates

Propose a routing update

POST
/api/v1/learning/routing-updates/{id}/apply

Apply an approved update

Billing, Plans, and Usage Metering

Stripe-powered subscription management, usage tracking, and invoice retrieval

Billing Endpoints

7 endpoints
MethodEndpointDescription
GET
/api/v1/billing/plansList plans (Free, Team, Business, Enterprise)
GET
/api/v1/billing/usageCurrent usage: tokens, requests, storage
POST
/api/v1/billing/checkoutCreate Stripe checkout session for upgrade
POST
/api/v1/billing/portalOpen Stripe customer portal
GET
/api/v1/billing/invoicesList invoices for the tenant
GET
/api/v1/billing/subscriptionCurrent subscription details
POST
/api/v1/billing/webhooks/stripeStripe webhook receiver

Upgrade a Subscription

curl -X POST https://api.arqera.io/api/v1/billing/checkout \
  -H "X-API-Key: ak_live_7f3a9b2c..." \
  -H "Content-Type: application/json" \
  -d '{
    "plan_id": "business",
    "success_url": "https://app.acme.co/billing/success",
    "cancel_url": "https://app.acme.co/billing/cancel"
  }'

# Response: { "checkout_url": "https://checkout.stripe.com/c/pay/cs_live_..." }

Define SLOs, Track Error Budgets

Service level objectives, alert rules, incident management, and runbooks

Operations Endpoints

14 endpoints
MethodEndpointDescription
GET
/api/v1/operations/slosList SLO definitions
POST
/api/v1/operations/slosCreate an SLO
GET
/api/v1/operations/slos/{id}Get SLO details
GET
/api/v1/operations/slos/{id}/error-budgetCurrent error budget status
GET
/.../{tenant_id}/alert-rulesList alert rules
POST
/.../{tenant_id}/alert-rulesCreate an alert rule
GET
/.../{tenant_id}/alertsList alerts (firing, acked, resolved)
POST
/.../{tenant_id}/alerts/{id}/acknowledgeAcknowledge an alert
POST
/.../{tenant_id}/alerts/{id}/resolveResolve an alert
GET
/api/v1/operations/runbooksList runbooks
POST
/api/v1/operations/runbooksCreate a runbook
GET
/api/v1/operations/incidentsList incidents
POST
/api/v1/operations/incidentsCreate an incident

Monitor Error Budget Burn Rate

GET /api/v1/operations/slos/slo_api_latency/error-budget

{
  "slo_id": "slo_api_latency",
  "name": "API Latency P99",
  "target_percent": 99.0,
  "budget_remaining_percent": 0.85,
  "budget_consumed_percent": 15.0,
  "projected_burn_rate": 0.5,
  "measurement_window": "rolling-7d",
  "current_value": 98.5,
  "status": "healthy"
}

React to Events in Real Time

HMAC-SHA256 signed payloads delivered to your endpoints within seconds

Event Categories

artifact.createdartifact.sharedcompliance.check.completedevidence.emitteduser.createduser.deprovisionedsubscription.updatedsubscription.cancelledintegration.connectedintegration.disconnectedprotocol.executedprotocol.approval.requested

Verify Webhook Signatures

Every webhook includes an X-Arqera-Signature header. Compute HMAC-SHA256 of the raw request body with your webhook secret and compare.

import hmac, hashlib

def verify_webhook(payload: bytes, signature: str, secret: str) -> bool:
    expected = hmac.new(
        secret.encode(),
        payload,
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(f"sha256={expected}", signature)

Example Webhook Payload

POST https://hooks.acme.co/arqera
X-Arqera-Signature: sha256=d7a8fbb307d7809469ca...
Content-Type: application/json

{
  "event": "protocol.executed",
  "timestamp": "2026-02-19T15:42:11Z",
  "tenant_id": "t_acme",
  "data": {
    "request_id": "req_8k2m4n6p",
    "node_id": "ara.connectors.salesforce",
    "action_id": "lead.create",
    "tier": "HARD",
    "status": "approved",
    "latency_ms": 142,
    "evidence_hash": "sha256:ab12cd34..."
  }
}

Health Checks and System Diagnostics

Readiness probes, liveness probes, and detailed component health for orchestrators

Health Endpoints

MethodEndpointAuthDescription
GET
/api/health
None
Basic health check (DB, Redis, system)
GET
/api/health/live
None
Liveness probe for service heartbeat
GET
/api/health/ready
None
Readiness probe with dependency checks
GET
/api/health/detailed
Required
Full component health with system metrics

Rate Limiting

All API requests are rate-limited per tenant. Limits scale with your plan.

PlanRate LimitBurst
Free100 req/min20 req/sec
Team500 req/min50 req/sec
Business2,000 req/min200 req/sec
EnterpriseCustomCustom

Rate Limit Headers

Every response includes rate limit headers so you can implement client-side throttling.

HTTP/1.1 200 OK
X-RateLimit-Limit: 500
X-RateLimit-Remaining: 487
X-RateLimit-Reset: 1708358400

# When rate limited:
HTTP/1.1 429 Too Many Requests
Retry-After: 12
{
  "detail": "Rate limit exceeded. Retry after 12 seconds."
}

Pagination

Cursor-based and offset-based pagination across all list endpoints

Cursor-Based (Recommended)

Best for real-time data. Use the next_cursor from each response to fetch the next page.

GET /api/v1/work/tasks?limit=25

{
  "items": [...],
  "total": 142,
  "next_cursor": "eyJpZCI6MTI1fQ==",
  "has_more": true
}

# Next page:
GET /api/v1/work/tasks?limit=25&cursor=eyJpZCI6MTI1fQ==

Offset-Based

For stable datasets where page jumping is needed. Use offset and limit.

GET /api/v1/ai-training/jobs?limit=10&offset=20

{
  "items": [...],
  "total": 87,
  "limit": 10,
  "offset": 20
}

Error Handling

Consistent error format across all endpoints with actionable messages

CodeStatusWhen You Will See This
400
Bad RequestInvalid request body, missing required fields, or malformed parameters.
401
UnauthorizedMissing or invalid API key. Check the X-API-Key header.
403
ForbiddenValid credentials but insufficient permissions for this resource.
404
Not FoundThe requested resource does not exist or belongs to another tenant.
409
ConflictResource already exists or version conflict on concurrent update.
422
Unprocessable EntityRequest body is well-formed but fails validation rules.
429
Too Many RequestsRate limit exceeded. Back off and retry using the X-RateLimit-Reset header.
500
Internal Server ErrorUnexpected failure. Includes a trace_id for support escalation.

Error Response Format

All errors return a consistent JSON structure with a human-readable message and optional trace ID for support.

{
  "detail": "Manifest version 1.0.3 already exists for node ara.connectors.salesforce.",
  "trace_id": "tr_a1b2c3d4e5f6"
}

Validation Errors (422)

Validation errors include field-level detail so you can highlight specific form inputs.

{
  "detail": [
    {
      "loc": ["body", "manifest", "node", "id"],
      "msg": "Node ID must match pattern: namespace.category.name",
      "type": "value_error"
    }
  ]
}

Quick Start

Get up and running with the ARQERA API in under 5 minutes

curl
Register and execute your first manifest
# 1. Register a manifest
curl -X POST https://api.arqera.io/api/v1/protocol/manifest \
  -H "X-API-Key: ak_live_7f3a9b2c..." \
  -H "Content-Type: application/json" \
  -d '{
    "manifest": {
      "protocol_version": "1.0",
      "node": {
        "id": "myapp.actions.notify",
        "name": "User Notification",
        "version": "1.0.0",
        "owner": "acme",
        "category": "notification",
        "endpoints": [{
          "action_id": "send",
          "description": "Send user notification",
          "approval_required": false,
          "idempotency": true
        }]
      }
    },
    "registry": { "listing_tier": "development" }
  }'

# 2. Execute the action
curl -X POST https://api.arqera.io/api/v1/protocol/execute \
  -H "X-API-Key: ak_live_7f3a9b2c..." \
  -H "Content-Type: application/json" \
  -d '{
    "node_id": "myapp.actions.notify",
    "action_id": "send",
    "payload": {
      "user_id": "usr_42",
      "message": "Your report is ready"
    }
  }'
TypeScript
Using the ARQERA SDK
import { Arqera } from "@arqera/sdk";

const client = new Arqera({
  apiKey: process.env.ARQERA_API_KEY,
  baseUrl: "https://api.arqera.io",
});

// Register a manifest
await client.protocol.manifest.create({
  manifest: {
    protocol_version: "1.0",
    node: {
      id: "myapp.actions.notify",
      name: "User Notification",
      version: "1.0.0",
      owner: "acme",
      category: "notification",
      endpoints: [{
        action_id: "send",
        description: "Send user notification",
        approval_required: false,
      }],
    },
  },
  registry: { listing_tier: "development" },
});

// Execute with governance
const result = await client.protocol.execute({
  node_id: "myapp.actions.notify",
  action_id: "send",
  payload: {
    user_id: "usr_42",
    message: "Your report is ready",
  },
});

console.log(result.receipt.trace_id);
// "tr_a1b2c3d4e5f6"
console.log(result.receipt.routing_decision.tier);
// "AUTO" — executed immediately

Start building with the ARQERA API

Create your free account, generate an API key, and execute your first governed action in minutes.

Get API KeyBack to Docs

Product

  • Ore
  • Oju
  • Integrations

Solutions

  • For Developers
  • For Operations
  • For Startups
  • Compliance

Resources

  • Documentation
  • FAQ
  • Open Source

Company

  • About
  • Security
  • Privacy
  • Terms
  • Cookies
  • Legal
© 2026 ARQERA. All rights reserved.