All developer pages

API reference

Outcomes

1 operations. Base URL: https://api.ringura.com/api/v1. Authenticate with a bearer token that carries the scope named on each operation.

POST /api/v1/outcomes

Record deposits and conversions (up to 500). Each is attributed to the agent, campaign, channel and WhatsApp template that last touched the contact inside the attribution window. externalRef makes each idempotent: a repeat is counted once. Items that do not fit are reported in problems and skipped.

Scope
outcomes:write
Operation id
recordOutcomes
Idempotent
Send Idempotency-Key to make a retry safe

Parameters

Parameters of POST /api/v1/outcomes
NameInTypeRequiredConstraints
Idempotency-KeyheaderstringNomatches ^[A-Za-z0-9_.:-]{8,100}$

Request body

JSON (Content-Type: application/json).

Request body of POST /api/v1/outcomes
FieldTypeRequiredConstraints
outcomesarray of objectYesat least 1 items at most 500 items
outcomes[].externalRefstringYes1-200 characters
outcomes[].kindstringYesone of "deposit", "conversion"
outcomes[].amountMinorinteger or stringNo
outcomes[].currencystringYesmatches ^[A-Z]{3}$
outcomes[].occurredAtstring (date-time)Yes
outcomes[].contactIdstring (uuid)No
outcomes[].phonestringNoat most 32 characters
outcomes[].emailstringNoat most 320 characters

Response

201 JSON with these fields.

Response fields of POST /api/v1/outcomes
FieldTypeRequiredConstraints
createdintegerYes
duplicatesintegerYes
problemsarray of stringYes

Errors

400, 401, 403, 404, 409, 422, 429. What each status means

Example request

curl -X POST 'https://api.ringura.com/api/v1/outcomes' \
  -H "Authorization: Bearer $CC_TOKEN" \
  -H 'Idempotency-Key: order-2027-0001' \
  -H 'Content-Type: application/json' \
  -d '{
  "outcomes": [
    {
      "externalRef": "ext-0001",
      "kind": "deposit",
      "currency": "EUR",
      "occurredAt": "2027-01-04T09:00:00Z"
    }
  ]
}'