Skip to content
Developers

One endpoint. You keep your systems.

Push-only. You call Regent on your own trigger cadence; Regent does not connect to your EMR, CRM or any other system, and you do not maintain a webhook to receive decisions. You call Regent when your own scheduler decides it is time; Regent decides whether the outreach is allowed, dispatches it if so, and records why either way.

The 5-minute model

Push context. Regent governs and dispatches. Read the operation.

Three steps, and none of them is a webhook you have to build.

  1. 01

    Push what you know

    A DecisionRequest carries your snapshot of the subject — timezone, signals, consent evidence, outreach history, a conversation summary. You assemble it; Regent does not reach into your systems to get it.

  2. 02

    Regent governs, then dispatches

    Hard stops run before the judgment engine. Your governance rules run after the proposal. If the outcome is a send, governed dispatch from your own meta business identity.

  3. 03

    Inspect the operation

    The operation resource carries the terminal state, the full gate chain, dispatch and provider state, escalation state, and the audit trace id. tamper-evident with governed redaction.

Land-in-days integration is the design target — one push endpoint, no agents to configure, no inbound access. No integration-time guarantee is published. The number will be stated when it has been measured against real tenants.

Authentication

Your identity comes from the token, never from the body.

There is no tenant_id field to spoof. Regent derives tenancy from the credential that authenticated the call, and the credential is a server-side secret.

What we publish per tenant

  • Requests per second and per day — the contract you design your cron against.
  • Request-size limits.
  • The snapshot schema contract, plus an authenticated validator endpoint.
  • A processing promise, measured from Regent's acceptance.

What never appears in a browser

  • Your tenant API token.
  • Any channel credential, app secret or provider token.
  • An unmasked recipient address.

Every sample on this page uses the placeholder <tenant-token>. A real tenant console will hold its credential behind a server-side session boundary before a browser ever talks to a tenant-scoped API.

The contract

Two endpoints.

One to check your payload shape, one to act.

POST /v1/validate

Validates a snapshot against your issued schema contract. No decision is made and nothing is dispatched.

Validate a snapshothttp
POST /v1/validate
Authorization: Bearer <tenant-token>
Content-Type: application/json

{
  "schema_version": "customer-snapshot.v1",
  "snapshot": { "timezone": "Africa/Cairo", "conversation_summary": "..." }
}

POST /v1/engage

Submits a governed request. Tenant identity comes from authentication only, never from the request body.

Push a governed requesthttp
POST /v1/engage
Authorization: Bearer <tenant-token>
Content-Type: application/json

{
  "request_id": "req_01J...",
  "subject_id": "subject_441",
  "schema_version": "customer-snapshot.v1",
  "expected_config_version": "cfg_12",
  "snapshot": {
    "timezone": "Africa/Cairo",
    "conversation_summary": "..."
  },
  "delivery": {
    "recipient": "<tenant-asserted address>",
    "template_ref": "followup_v2",
    "language": "en"
  },
  "subject_sequence": 18
}

Request fields

FieldTypeWhat it means
request_idstringrequiredCaller-stable identity. Same id + same content is a retry that returns the original operation.
subject_idstringrequiredYour identifier for the person. Regent never resolves it to a contact record.
schema_versionstringrequiredThe snapshot schema contract you were issued, e.g. customer-snapshot.v1.
expected_config_versionstringoptionalA check, never a choice. A mismatch is reported rather than silently resolved.
snapshotobjectrequiredWhat you already know: timezone, signals, consent evidence, outreach history, conversation_summary.
deliveryobjectrequiredRecipient assertion plus template refs and language. The recipient is yours to assert and stays outside the judgment runtime.
subject_sequenceintegeroptionalInformational only. Echoed in the audit record, never enforced.

Responses

Acceptedhttp
202 Accepted

{
  "operation_id": "op_01J...",
  "request_id": "req_01J...",
  "status": "accepted"
}

Illustrative. Acceptance is immediate and the operation completes within the processing promise; the exact response envelope is finalised with the signed API build.

Idempotency conflicthttp
409 Conflict

{
  "error": "idempotency_reuse_conflict",
  "request_id": "req_01J...",
  "detail": "This request_id was already accepted with different content."
}

Illustrative. Same request_id with different semantic content is a conflict, not a second operation.

Semantics worth reading before you build

The parts that surprise people.

None of these is a preference. They are the behaviour you will observe, so they are documented as contract.

Idempotency and replay

Same request_id with the same semantic content is a retry and returns the original operation. Same request_id with different content is an idempotency-reuse conflict. Idempotency records outlive every retry, webhook and dispute window.

Per-subject arrival order

Each accepted request is processed on its own snapshot, in arrival order per subject, to completion. Regent does not arbitrate between your own concurrent pushes — the published rate limits are the contract. Multiple accepted pushes for one subject inside a short window raise an anomaly flag that surfaces as information and never blocks.

subject_sequence is informational only

subject_sequence is informational only — it is echoed in the audit record and never enforced.

The receive clock

Regent's freshness guarantee begins when Regent receives the push. The snapshot timestamp inside the request is tenant-asserted metadata and is never the basis of that guarantee; data age before the push is the tenant's pipeline responsibility.

Unknown provider acceptance

When the provider send response is lost, no provider-backed correlation exists. Matching on recipient and timestamp is a heuristic that can support investigation, and it never establishes acceptance. The state stays unknown until a provider-supported identifier resolves it, or an operator resolves it manually.

Dossier and delivery are separate

The decision dossier the judgment engine sees and the delivery envelope that carries the recipient are different objects. Raw addresses never enter the judgment runtime; every dispatch audit row records the recipient as asserted by you, against the pushing request.

Outcome table

Every ending you can receive.

One table drives the API, the console, the audit record and the billing ledger. Handle these and you have handled Regent.

SENTOutcome: sent

Dispatch authorized and accepted by the provider.

HOLD · TerminalOutcome: terminal hold, not sent

Terminal hold · no dispatch. Future outreach requires a new customer-triggered request.

SUPPRESSEDOutcome: suppressed, not sent

Suppression active for this subject and intent. It ends only on a trigger-fingerprint change, an authorized clear, or TTL expiry.

ESCALATEDOutcome: escalated to a named human, not sent

Outreach blocked. The named human escalation target was alerted.

DEFERREDOutcome: deferred, customer re-push required, not queued

Operation ended · no queue · customer re-push required.

PROVIDER REJECTEDOutcome: rejected by the provider, not delivered

The provider rejected the dispatch. Retry behaviour follows the declared retry class.

SEND UNCONFIRMEDOutcome: send unconfirmed, provider acceptance unresolved

Provider acceptance unresolved · no blind retry · investigation required.

ERROROutcome: error, controlled failure

A controlled failure inside the decision path. Recorded, not billed, not silently retried.

Read them rendered against real gate chains in the synthetic decision feed.

Integration map

What is defined today, and what connects when.

Nothing on this page is a publicly connected endpoint today. The contract is frozen and the surface renders it against synthetic fixtures; each capability connects when the sprint that owns it is integrated.

  • Contract defined · demo surface available nowThe request and outcome contracts on this page, and the whole decision surface rendered against synthetic fixtures in the demo console. You can build against the shape today.
  • Connects when Sprint 3 is integratedPushing a governed request and reading back the operation — decision, gate chain, dispatch state and evidence row — against real tenant traffic.
  • Connects with Sprint 4 provisioningReading the compiled policy version, tenant setup state, channel connections and the template registry.
  • Connects with Sprint 5 + E2E status intakeProvider lifecycle transitions arriving from webhooks, resolving unknown acceptance where a provider-supported identifier exists.
  • Served by the public Guided Eval · not a tenant API seamURL-driven evaluation profiles, fabricated personas and scored evals. Built, and served to prospects by the public Guided Eval on this site. It is deliberately not part of the tenant integration API, so no endpoint is published for it here.
Next step

Run it before you wire it.

The Governance Playground puts the same gate chain in front of you with nothing connected. If the semantics fit your problem, the pilot conversation is short.

Security and data-handling posture: Trust & data handling →