API reference
The public REST API under /v1, generated from the live OpenAPI 3.1 document.
Everything in the console is available through the API. The reference below is generated at request time from the OpenAPI 3.1 document this host serves at /v1/openapi.json, so it cannot drift from the API.
Conventions
- Authentication:
Authorization: Bearer <key>with an API key, or an OAuth 2 client-credentials token fromPOST /v1/oauth/token. Keys and clients carry module scopes such asgraph:readorprojections:write. - Versioning: send
Agora-Version: 2026-10-25. Versions are dated; each is supported for 12 months after its successor ships, and older versions answer withDeprecationandSunsetheaders. - Idempotency: every POST takes an
Idempotency-Key. A retry with the same key and body replays the first answer for 24 hours; the same key with a different body is refused. - Errors:
{ "error": { "type", "code", "message", "request_id" } }. Quote therequest_idwhen you contact support. - Lists:
{ "object": "list", "data", "has_more", "next_cursor" }; passcursorto page. - Rate limits: per tenant, with
X-RateLimit-Limit,X-RateLimit-RemainingandRetry-Afteron a 429.
API quick-start
- Create a workspace: POST /v1/signup (public) creates your tenant and first merchant and returns an API key once. Or sign up in the console at /signup.
- Authenticate: Send Authorization: Bearer <key> (or an OAuth2 client-credentials token from POST /v1/oauth/token) and Agora-Version.
- Connect a source: POST /v1/merchants/{mid}/connections with method csv, json, manual or a platform connector.
- Publish: POST /v1/merchants/{mid}/projections/run, then GET /v1/merchants/{mid}/projections.
- Listen: POST /v1/webhooks/subscriptions and verify every delivery's Agora-Signature (samples below).
SDKs
| Language | Path | Install |
|---|---|---|
| typescript | sdk/ts | npm install ./sdk/ts |
| python | sdk/python | pip install ./sdk/python |
| php | sdk/php | composer require agora/sdk |
| javascript | sdk/js-site | <script type="module" src="/sdk/agora-site.js"> |
CLI
agora validate pack <dir>
agora validate feed <file> --surface <id>
agora validate mission <file> [--merchant <mid>]
agora publish <mid> [--surface <id>]
agora gate <mid>Endpoint reference
188 operations, API version 2026-10-25. Machine-readable: /v1/openapi.json.
Auth
OAuth2 client credentials token
application/x-www-form-urlencoded or JSON; HTTP Basic client authentication is also accepted. Not subject to Idempotency-Key.
Meta
This document
Dated versions and deprecation policy
Developer portal content generated from this document (sections, webhook verification samples, SDKs, CLI, changelog)
Signup
Create a tenant and its first merchant (trial); returns the onboarding session and an API key once
Public and rate-limited per address; a global cap applies on the demo host. Terms and DPA acceptance are required and recorded as evidence. No e-mail is sent from the demo host: the verification link is returned.
Tenant
The caller's tenant with billing settings, subscription and merchants
Delete the tenant now (DSR workflow); evidence chains move to the legal-hold archive
Needs a key with full scope (*). The shared demo tenants cannot be deleted.
Parameters: confirm query, required
Cancel: removes connector credentials, revokes keys, schedules deletion per retention, delivers the export
Needs a key with full scope (*).
Export all tenant data (DSR workflow, scope tenant)
A tenant export bundle
Parameters: id path, required
Merchants
Merchants of the caller's tenant
Parameters: limit query · cursor query
Create a merchant in the caller's tenant (within the plan's limit)
One merchant
Parameters: mid path, required
Onboarding
Connections (credential references only, never secrets)
Parameters: mid path, required · limit query · cursor query
Connect a source (platform connector, CSV/JSON upload or manual) and import into the graph
Parameters: mid path, required
The classification-first onboarding wizard and its state
Parameters: mid path, required
classify | confirm | connect | <wizard step> | publish
Parameters: mid path, required · step path, required
Graph
Business Graph entities
Parameters: mid path, required · limit query · cursor query · type query
One entity with its active overrides
Parameters: mid path, required · id path, required
Override one field (new graph_version, provenance api:<principal>)
Parameters: mid path, required · id path, required
Validation reports per surface (completeness, errors, warnings)
Parameters: mid path, required · limit query · cursor query
Changes between two graph versions
Parameters: mid path, required · from query · to query
Projections
Projection status per surface
Parameters: mid path, required · limit query · cursor query
Publish a projection now (409 when validation blocks)
Parameters: mid path, required · id path, required
Roll back to the previous published version
Parameters: mid path, required · id path, required
Validate and publish every surface of the merchant
Parameters: mid path, required
Run release-gate missions against a staged artefact before publishing
Parameters: mid path, required · id path, required
Handoff
Mint a signed (ES256) handoff link
Parameters: mid path, required
Lab
Agent Lab missions
Parameters: mid path, required · limit query · cursor query
Agent Lab runs (newest first)
Parameters: mid path, required · limit query · cursor query · mission query
Lab findings and fix proposals
Parameters: mid path, required · limit query · cursor query
Nightly lab plans vs budget
Parameters: mid path, required · limit query · cursor query
Compile an Agent Lab plan (generic missions from the graph when the packs have none)
Parameters: mid path, required
Current Agent-Ready certificate (signed JSON); public verification at /verify/{id}
Parameters: mid path, required
Plain language -> mission DSL draft (review required)
Parameters: mid path, required
Accept a reviewed mission draft
Parameters: mid path, required · draft path, required
What AGORA lab agents do, their declared identity and disclosure
Opt a site out of AGORA lab testing (honoured within 24 h)
Visibility
Share of answer, mention rank, citation rate, fidelity (with intervals)
Parameters: mid path, required · limit query · cursor query · engine query · metric query · locale query
Visibility query panels
Parameters: mid path, required · limit query · cursor query
Ranked recommendations
Parameters: mid path, required · limit query · cursor query
Kernel
Brand Kernel statements
Parameters: mid path, required · limit query · cursor query
Description fidelity per engine and week
Parameters: mid path, required · limit query · cursor query
Content
Content gaps
Parameters: mid path, required · limit query · cursor query
Content assets
Parameters: mid path, required · limit query · cursor query
Campaign plans
Parameters: mid path, required · limit query · cursor query
Verified-buyer reviews and syndication (earned)
Parameters: mid path, required · limit query · cursor query
Lifecycle
Agent consents (lifecycle)
Parameters: mid path, required · limit query · cursor query
Lifecycle signals sent to agents
Parameters: mid path, required · limit query · cursor query
Studies
Synthetic studies (population-level only, R7)
Parameters: mid path, required · limit query · cursor query
Analytics
Available analytics marts
Parameters: limit query · cursor query
An analytics mart
Parameters: mid path, required · mart path, required
Agent Readiness Score 0-100: components, pack weights, sector percentile, trend
Parameters: mid path, required
Trust
Agent registry by tier
Parameters: mid path, required · limit query · cursor query
Cedar trust policies (versioned)
Parameters: mid path, required · limit query · cursor query
Hash-chained evidence bundle with chain verification
Parameters: mid path, required
No-code agent commerce policy: form, compiled Cedar, version
Parameters: mid path, required
Save a new policy version from the form (compiled to Cedar, never wider than the form)
Parameters: mid path, required
Evaluate requests against a draft policy, with explanations
Parameters: mid path, required
Push the policy to the trust edge (live within 60 s)
Parameters: mid path, required
Agent access policy document: robots.txt per assistant, Content Signals, CDN bot categories
Parameters: mid path, required
Save the access choices
Parameters: mid path, required
Publish the generated files (site SDK or CDN API)
Parameters: mid path, required
Diff between the published policy and the live site, with drift findings
Parameters: mid path, required
Agent Front Door summary: agents, accounts, actions, pending approvals, limits, delegation policy
Parameters: mid path, required
Agents that acted at this business, with their accounts (principals are pseudonymous)
Parameters: mid path, required · limit query · cursor query
Which agent acted for whom and did what (latest 200)
Parameters: mid path, required · limit query · cursor query
Unified approvals queue: risky agent requests waiting for a person, with expiry
Parameters: mid path, required · limit query · cursor query
Approve or deny a queued agent request ({ decision: approve | deny })
Parameters: mid path, required · id path, required
Rate and abuse limits per agent and per principal, approval expiry
Parameters: mid path, required
Set the rate and abuse limits and the approval expiry
Parameters: mid path, required
Block or unblock an agent or a principal ({ subject, id, blocked })
Parameters: mid path, required
Billing
Metered usage and GMV share (tiers 1-2)
Parameters: from query · to query
The plan catalogue (prices per currency, included quantities, overage, add-ons)
Parameters: limit query · cursor query
Plan, status, trial, add-ons, usage against the included quantities
Change the plan, add-ons or payment method (PSP token reference only), or activate after the trial
The upcoming invoice in the tenant's billing currency with VAT lines
Parameters: from query · to query · currency query
Issued invoices
Parameters: limit query · cursor query
Billing currency, display locale, tax mode, tax country, VAT id
Update billing currency, display locale, tax mode, tax country or VAT id
Webhooks
Webhook subscriptions
Parameters: limit query · cursor query
Subscribe to event families (secret returned once)
Delete a subscription
Parameters: id path, required
Rotate the signing secret (previous secret signs too for 24 h)
Parameters: id path, required
Deliveries (pending, delivered, retrying, dead_letter)
Parameters: limit query · cursor query · status query · subscription_id query
Re-send a delivery with a fresh timestamp and signature
Parameters: id path, required
Audit
The tenant's audit records with chain verification (json, jsonl, cef, splunk_hec, sentinel)
Parameters: format query · from query · to query
Status
Component status from the SLO monitors, open and recent incidents, communication templates
Developer
Validate a pack, feed artefact or mission document (the agora CLI backend)
Parameters: kind path, required
Packs
URL or description -> pack proposal with confidence and suggestions (always offers the general pack)
pack.classify_business (G10, LP-09-04). Rate-limited per IP. The proposal is stored with provenance; confirm it in onboarding.
Pack registry: versions, status, surface declarations, display strings
Parameters: limit query · cursor query
One pack with its changelog and counsel state
Parameters: id path, required
Pack-authoring kit validation (the CLI backend)
Notifications
In-app notifications of the caller's tenant
Parameters: limit query · cursor query
Notification subscriptions per principal and channel
Set notification kinds and channels
Reports
Render a weekly loop, visibility week or monthly owner report (PDF or HTML, shareable link)
Report job status and artefact links
Parameters: id path, required
Scanner
Public Agent Readiness Scanner: URL or name and city -> A-F grade with sub-scores
Rate-limited per IP; the same formula as the console score (LP-17-01).
A scan result
Parameters: id path, required
The shareable scan report
Parameters: id path, required
Demo fixture sites the scanner grades without network
Prospect pre-fill for sign-up (never returns the e-mail address)
Parameters: id path, required
Trust-centre
AI-system inventory (R11): role, tasks, disclosure and marking
Trust centre content generated from the system
Architecture attestation (payments posture)
Third-party service provider responsibility matrix
Script posture of the handoff page and site SDK (integrity hashes)
Data residency per region and data class
Sub-processors generated from deployed connectors
SOC 2 control mapping and observation status
Fondaq
Form bootstrap: signed form token, honeypot field name, consent notices (exact texts and version)
Parameters: locale query
Qualify a visitor: business (website or description) or not; scan, classification, plan, AI team, top actions, flows
Rate-limited per IP; never echoes personal data. Returns a fresh form_token that joins the qualification to the lead that follows.
Leave contact details with explicit consent per channel (email, calls, WhatsApp); returns lead_id only
Needs the form_token of GET /v1/fondaq/form or POST /v1/fondaq/qualify. Contact details are sealed with the tenant key; no consent, no contact.
One-button unsubscribe page (signed token; GET changes nothing)
Parameters: token path, required
Unsubscribe (RFC 8058 one-click List-Unsubscribe-Post, or the page button)
Parameters: token path, required
Flows
Flows of the caller's tenant (status, trigger, apps, last run)
Parameters: limit query · cursor query · merchant_id query
Create a flow from nodes and edges, or from a template (template_id, activate)
A flow is a draft until activated; activation validates it (one trigger, no cycles, required settings, reachable steps). Steps whose app has no credential run in simulation.
The gallery of ready flows by category, with the apps each needs
Parameters: limit query · cursor query
One flow with its validation issues
Parameters: id path, required
Update name, nodes or edges (a new version), status (active, paused, draft) or the kill switch
Parameters: id path, required
Delete a flow (its waiting runs are cancelled)
Parameters: id path, required
Run history with per-step input and output (personal data masked)
Parameters: id path, required · limit query · cursor query
Start a run with a payload (test: true runs with nothing leaving Fondaq)
Parameters: id path, required
Inbound webhook or form for a flow (unguessable URL; optional X-Fondaq-Signature)
JSON or form-encoded, at most 64 KB. When the flow has a signing secret, X-Fondaq-Signature: t=<unix>,v1=<hex HMAC-SHA256(secret, `${t}.${body}`)> is required. Idempotency-Key, when sent, makes a repeated delivery start no second run.
Parameters: token path, required
WhatsApp Business webhook verification (hub.challenge)
Parameters: token path, required
Inbound WhatsApp messages for a flow (X-Hub-Signature-256 with the app secret)
Parameters: token path, required
Calls
Calls of the caller's tenant (newest first): status, outcome, compliance record
Parameters: limit query · cursor query · merchant_id query · status query · goal query · direction query
Place an outbound AI call (goal, consent_ref); refused without consent, outside the calling window, on the do-not-call list or over budget
The agent says it is automated in its first line (R11). Simulated end to end until a phone provider (Twilio, Telnyx, Vonage) is connected; a refused call answers 200 with status refused and the reason.
One call: transcript, structured outcome (result, summary, next step, booking, promised payment), compliance record
Parameters: id path, required
Record a person's consent to calls (the business attests it collected it); returns the consent_ref
Put a number on the do-not-call list (stored as a hash)
The AI call agents of a business
Parameters: limit query · cursor query · merchant_id query, required
Change a call agent
Parameters: id path, required
Social
Social posts of a business (calendar order): state, captions per language, gate and AI-marking summary
Parameters: mid path, required · limit query · cursor query · state query · from query · to query
Draft a post on a connected channel (AI-composed, or your own captions); it waits for approval unless the channel auto-publishes
Body: channel_id or network, theme, format, offering_id, scheduled_at, captions [{ locale, text }]. Every post passes the Brand Kernel gate (R6), carries an AI-content marking manifest and the in-caption declaration (R11), and posts about restricted offerings are gated per audience market (R12). Channels without a credential are simulated.
Parameters: mid path, required
One post
Parameters: mid path, required · id path, required
Approve a post: it is scheduled, or published at once when its time has come (the gates run again first)
Parameters: mid path, required · id path, required
Ads
Ad campaigns across platforms: status, budget, spend and results (/campaigns are the growth campaign plans)
Parameters: mid path, required · limit query · cursor query
Create a campaign from a goal (goal, budget_minor, daily_minor, markets, radius_km, platforms): a draft that waits for approval
Restricted categories are refused per pack, per compliance (vertical controls, permits, R12 jurisdiction gate per market) and per platform rules. Creatives pass the kernel gate and carry an AI-content marking. Nothing is spent until the campaign is launched.
Parameters: mid path, required
One ad campaign: placements, creatives, performance in plain numbers
Parameters: mid path, required · id path, required
Approve and launch a campaign inside the spending limits (refused while the kill switch is on)
Parameters: mid path, required · id path, required
Spending limits (monthly cap, daily limit, approval threshold), spend so far and the kill switch
Parameters: mid path, required
Stop (engaged: true) or release (engaged: false) all ad spending at once
Parameters: mid path, required
Agents
Business Architect: a description, website, goal or idea -> the AI team to hire, the apps to connect in order, the flows to turn on, first steps
Public and rate-limited per address; no personal data is echoed. Attributed to Fondaq's own tenant through the llm-gateway (task agents.architect, R14); the deterministic stand-in serves it unless a provider is configured. The plan id can be applied after sign-up.
The AI team of the caller's tenant across its businesses (filter with merchant_id): status, missing apps, flows, guardrails
Parameters: limit query · cursor query · merchant_id query
One AI team member of the tenant
Parameters: id path, required
Change an AI team member: guardrails (approvals, monthly cap, quiet hours, consent channels) and status (paused or active)
Parameters: id path, required
The AI team members a business can hire: role, name, avatar, goals, KPIs, apps, flow templates, guardrails
Parameters: limit query · cursor query
The business's AI team: status (active, setup, paused), missing apps, flows, guardrails
Parameters: mid path, required · limit query · cursor query
Hire an AI team member ({ definition_id }); its flows are drafted and turn on once their apps are connected
Parameters: mid path, required
Remove an AI team member (its flows are switched off; their history is kept)
Parameters: mid path, required · id path, required
Pause an AI team member (its flows and phone goals stop)
Parameters: mid path, required · id path, required
Resume an AI team member
Parameters: mid path, required · id path, required
Business Architect for this business (attributed to the tenant's budget, R14)
Parameters: mid path, required
Set a plan up ({ plan_id }): hires its agents, drafts their flows, lists the apps still to connect
Parameters: mid path, required
Service
Status of an order or booking: timeline, refunds, returns, cases and the actions its policies still allow
Body: reference (order id, order number or booking id), optional customer_ref, and the action's fields (or details). Every outcome answers a ServiceResult { ok, action, status, code, message, data, evidence_id }: 200 done, 202 pending_approval, 409 refused / fee_acceptance_required / not_applicable, 404 unknown record. Policies come from the business's graph; money moves only through the PSP. order_status and invoice need no Idempotency-Key.
Parameters: mid path, required
Move a booking (slot_id, party) within its policy snapshot's modification window
Body: reference (order id, order number or booking id), optional customer_ref, and the action's fields (or details). Every outcome answers a ServiceResult { ok, action, status, code, message, data, evidence_id }: 200 done, 202 pending_approval, 409 refused / fee_acceptance_required / not_applicable, 404 unknown record. Policies come from the business's graph; money moves only through the PSP. order_status and invoice need no Idempotency-Key.
Parameters: mid path, required
Cancel an order (refund through the PSP that captured it) or a booking (deposit refunded or retained per policy; accept_fee confirms a fee)
Body: reference (order id, order number or booking id), optional customer_ref, and the action's fields (or details). Every outcome answers a ServiceResult { ok, action, status, code, message, data, evidence_id }: 200 done, 202 pending_approval, 409 refused / fee_acceptance_required / not_applicable, 404 unknown record. Policies come from the business's graph; money moves only through the PSP. order_status and invoice need no Idempotency-Key.
Parameters: mid path, required
Authorise a return (items, reason) under the returns policy (window, deductions); the refund follows receipt
Body: reference (order id, order number or booking id), optional customer_ref, and the action's fields (or details). Every outcome answers a ServiceResult { ok, action, status, code, message, data, evidence_id }: 200 done, 202 pending_approval, 409 refused / fee_acceptance_required / not_applicable, 404 unknown record. Policies come from the business's graph; money moves only through the PSP. order_status and invoice need no Idempotency-Key.
Parameters: mid path, required
Invoice of an order or booking from commerce data, with signed HTML and PDF links
Body: reference (order id, order number or booking id), optional customer_ref, and the action's fields (or details). Every outcome answers a ServiceResult { ok, action, status, code, message, data, evidence_id }: 200 done, 202 pending_approval, 409 refused / fee_acceptance_required / not_applicable, 404 unknown record. Policies come from the business's graph; money moves only through the PSP. order_status and invoice need no Idempotency-Key.
Parameters: mid path, required
Open a support case (topic, text): a case record, an in-app notification and the support_case.opened flow trigger
Body: reference (order id, order number or booking id), optional customer_ref, and the action's fields (or details). Every outcome answers a ServiceResult { ok, action, status, code, message, data, evidence_id }: 200 done, 202 pending_approval, 409 refused / fee_acceptance_required / not_applicable, 404 unknown record. Policies come from the business's graph; money moves only through the PSP. order_status and invoice need no Idempotency-Key.
Parameters: mid path, required
Support cases (newest first)
Parameters: mid path, required · limit query · cursor query
Return authorisations and their refunds (newest first)
Parameters: mid path, required · limit query · cursor query
The returned items arrived: the refund is issued through the order's PSP (or recorded as settled by the business)
Parameters: mid path, required · id path, required
Service requests waiting for (or decided by) a person
Parameters: mid path, required · limit query · cursor query
Approve a pending service request: it runs once
Parameters: mid path, required · id path, required
Decline a pending service request
Parameters: mid path, required · id path, required
Which agent did which service action for whom (pseudonymous principals), with the evidence record
Parameters: mid path, required · limit query · cursor query
Concierge
One grounded concierge turn: an answer from the business's approved facts with citations, the AI disclosure, and real actions (availability, holds, quotes, checkout handoff, sign-up, contact requests with consent, post-purchase service)
Body: { message, history?, locale?, context?: { session_id, jurisdiction, offering_id, action: { type, payload }, input: { contact, consent, name, reference } } }. Answers come from Fondaq's own model only after it passes the concierge evaluation, otherwise from the deterministic grounded composer; never from a hosted third-party model. Every number is verified against a cited fact.
Parameters: mid path, required
The assistant's conversation log (personal data masked)
Parameters: mid path, required · limit query · cursor query
Website assistant settings and the install snippet
Parameters: mid path, required
Change the website assistant (enabled, allowed origins, greeting, position, accent, contact form)
Parameters: mid path, required
The business's own pages the assistant may quote (pending until approved)
Parameters: mid path, required · limit query · cursor query
Add a page of the business's own site ({ url, title?, text | html }) or import one ({ import_url }) through the scanner's guarded fetcher
Pages must be on the business's own domains; imports honour robots.txt and Content Signals (ai-input=no is refused) and fetch the live site only with AGORA_SCANNER_LIVE=1. A page is used for answers only after approval.
Parameters: mid path, required
Approve a page for answers (a newer version of the same URL replaces the older one)
Parameters: mid path, required · id path, required
Remove a page from the assistant's sources
Parameters: mid path, required · id path, required
Journeys
Guided paths on the business's website (trigger, steps, A/B variant, status, checks)
Parameters: mid path, required · limit query · cursor query
Create a journey from { name, trigger, steps, variant_b?, split? }, or draft one from { goal } (AI-drafted, never live before approval)
Parameters: mid path, required
One journey with its draft, its live version and its checks
Parameters: mid path, required · id path, required
Edit the draft; the approved version keeps serving until the next approval
Parameters: mid path, required · id path, required
Archive a journey (it stops serving)
Parameters: mid path, required · id path, required
Approve the draft: copy, offering and conversion checks run, then it goes live
422 checks_failed lists what blocks it (a prohibited term, an unapproved claim, a number no fact states, an offering the jurisdiction gate withholds, a booking step for a business without bookings).
Parameters: mid path, required · id path, required
Stop serving a live journey (resume by approving or from the console)
Parameters: mid path, required · id path, required
Shown, engaged, converted and dismissed per variant, and the sequential A/B test (lift, interval, always-valid p, decision)
Parameters: mid path, required · id path, required
Source: docs/portal/docs/api.md + GET /v1/portal (generated from /v1/openapi.json)