AI92 imezinduliwa - uzinduzi wetu wa awali wa kimataifa unaendelea: jukwaa kamili liko wazi duniani kote kwa siku 30 za kwanza.
Menyu ya nyaraka

Nyaraka hizi za wasanidi programu kwa sasa ni za Kiingereza pekee. Msimbo na tabia ya API ni sawa katika kila eneo.

Outreach API

Read a brand's outreach pipeline and act on it: approve or reject drafts, draft AI reply suggestions, send replies, and set the send mode. These endpoints mirror the campaign My Outreach panel into the API instance and proxy module-a's aggregate of module-H contacts and the module-J outreach pipeline. All routes are served under /v1/outreach.

Reads and workflow actions are free; only the AI/sending steps are metered.

Authentication

Every request must carry a tenant API key as a Bearer token:

Authorization: Bearer ai92_live_<key>     # production
Authorization: Bearer ai92_test_<key>     # sandbox

OAuth 2.0 access tokens (Authorization: Bearer eyJ…) are also accepted. All routes are brand-scoped: brand_id is required (query or body) and is verified against your account. Mutating requests support the Idempotency-Key header.

Credit costs at a glance

EndpointCost
GET /v1/outreach/dataFree
POST /v1/outreach/decision/{lead_id}Free
POST /v1/outreach/reply/suggest/{conversation_id}2 cr
POST /v1/outreach/reply/send/{conversation_id}1 cr
PATCH /v1/outreach/send-modeFree

GET /v1/outreach/data

Cost: Free

The brand's My-Outreach payload: contacts (merged module-H + module-J), the funnel, message variants, and feature flags, in a single read.

Auth: Bearer (tenant key or OAuth token)

ParameterInTypeRequiredDescription
brand_idquerystringYesThe brand to read. Verified against the account.

Request

bash
curl "https://api.ai92.ai/v1/outreach/data?brand_id=b1f0…" \
  -H "Authorization: Bearer ai92_test_51a9c0de…"

Response 200 OK

json
{
  "brand_id": "b1f0…",
  "send_mode": "REQUIRES_APPROVAL",
  "funnel": { "queued": 12, "sent": 184, "replied": 21, "bounced": 3 },
  "contacts": [
    {
      "lead_id": "lead_8f21",
      "conversation_id": "conv_3a90",
      "full_name": "Jordan Vega",
      "email": "[email protected]",
      "stage": "awaiting_approval",
      "last_message_at": "2026-06-21T08:40:00Z"
    }
  ],
  "variants": [{ "id": "var_a", "label": "Direct" }],
  "feature_flags": { "auto_send_enabled": false }
}

Errors

StatusCodeWhen
404BRAND_NOT_FOUNDBrand not owned by the account.

POST /v1/outreach/decision/{lead_id}

Cost: Free

Approve or reject an outreach draft (the workflow approve/reject step).

Auth: Bearer

ParameterInTypeRequiredDescription
lead_idpathstringYesThe lead whose draft to decide.
brand_idbodystringYesThe brand. Verified against the account.
decisionbodystringYesapprove or reject.
reasonbodystring / nullNoOptional reason recorded with the decision.

Request

bash
curl -X POST https://api.ai92.ai/v1/outreach/decision/lead_8f21 \
  -H "Authorization: Bearer ai92_test_51a9c0de…" \
  -H "Content-Type: application/json" \
  -d '{"brand_id": "b1f0…", "decision": "approve"}'

Response 200 OK

json
{ "lead_id": "lead_8f21", "decision": "approve", "status": "approved" }

Errors

StatusCodeWhen
404BRAND_NOT_FOUNDBrand not owned by the account.

POST /v1/outreach/reply/suggest/{conversation_id}

Cost: 2 credits

Generate a brand-grounded AI reply draft for a conversation. Credits are charged only after a successful response.

Auth: Bearer

ParameterInTypeRequiredDescription
conversation_idpathstringYesThe conversation to draft a reply for.
brand_idbodystringYesThe brand. Verified against the account.
tonebodystring / nullNoReply tone. Default professional.

Request

bash
curl -X POST https://api.ai92.ai/v1/outreach/reply/suggest/conv_3a90 \
  -H "Authorization: Bearer ai92_test_51a9c0de…" \
  -H "Content-Type: application/json" \
  -d '{"brand_id": "b1f0…", "tone": "friendly"}'

Response 200 OK

json
{
  "conversation_id": "conv_3a90",
  "suggestion": {
    "subject": "Re: quick question about your rollout",
    "body_text": "Hi Jordan — happy to help…",
    "body_html": "<p>Hi Jordan — happy to help…</p>"
  },
  "credits_consumed": 2
}

Errors

StatusCodeWhen
402INSUFFICIENT_CREDITSBalance below 2 credits.
404BRAND_NOT_FOUNDBrand not owned by the account.

POST /v1/outreach/reply/send/{conversation_id}

Cost: 1 credit

Send a reply on a conversation (email send). Credits are charged only after a successful send.

Auth: Bearer

ParameterInTypeRequiredDescription
conversation_idpathstringYesThe conversation to reply on.
brand_idbodystringYesThe brand. Verified against the account.
subjectbodystringYesReply subject.
body_htmlbodystringYesReply body as HTML.
body_textbodystring / nullNoPlain-text alternative.
in_reply_to_message_idbodystring / nullNoMessage id this reply threads onto.

Request

bash
curl -X POST https://api.ai92.ai/v1/outreach/reply/send/conv_3a90 \
  -H "Authorization: Bearer ai92_test_51a9c0de…" \
  -H "Content-Type: application/json" \
  -d '{"brand_id": "b1f0…", "subject": "Re: quick question", "body_html": "<p>Hi Jordan — happy to help…</p>"}'

Response 200 OK

json
{
  "conversation_id": "conv_3a90",
  "message_id": "msg_77a1",
  "status": "sent",
  "credits_consumed": 1
}

Errors

StatusCodeWhen
402INSUFFICIENT_CREDITSBalance below 1 credit.
404BRAND_NOT_FOUNDBrand not owned by the account.

PATCH /v1/outreach/send-mode

Cost: Free

Flip the brand's outreach send mode between automatic sending and human approval.

Auth: Bearer

ParameterInTypeRequiredDescription
brand_idbodystringYesThe brand. Verified against the account.
send_modebodystringYesAUTO_SEND or REQUIRES_APPROVAL.

Request

bash
curl -X PATCH https://api.ai92.ai/v1/outreach/send-mode \
  -H "Authorization: Bearer ai92_test_51a9c0de…" \
  -H "Content-Type: application/json" \
  -d '{"brand_id": "b1f0…", "send_mode": "AUTO_SEND"}'

Response 200 OK

json
{ "brand_id": "b1f0…", "send_mode": "AUTO_SEND" }

Errors

StatusCodeWhen
404BRAND_NOT_FOUNDBrand not owned by the account.