GET /v1/contacts/{id}
Returns a single contact by its platform ID, including all consent records across channels and message types.

Parameters

Authorization
string
required
Bearer <api_key>
id
string
required
The contact ID (e.g. c_a1b2c3d4).

Request

curl "https://api.arowana.app/v1/contacts/c_a1b2c3d4" \
  -H "Authorization: Bearer $API_KEY"

Response

{
  "id": "c_a1b2c3d4",
  "external_id": "usr_9901",
  "email": "jana@example.com",
  "phone": "+4917612345678",
  "first_name": "Jana",
  "last_name": "Müller",
  "status": "ACTIVE",
  "source": "API",
  "tags": ["vip", "germany"],
  "custom_fields": { "loyalty_tier": "gold" },
  "consent_records": [
    {
      "id": "cr_a1b2c3",
      "channel_type": "EMAIL",
      "message_type": "NEWSLETTER",
      "status": "GRANTED",
      "source": "landing_page",
      "proof_text": "Opted in via signup form at shop.example.com/subscribe",
      "enforced_doi": true,
      "doi_status": "DOI_ACCEPTED",
      "doi_channel": "EMAIL",
      "granted_at": "2026-01-10T08:05:00Z",
      "revoked_at": null,
      "created_at": "2026-01-10T08:00:00Z"
    },
    {
      "id": "cr_b2c3d4",
      "channel_type": "EMAIL",
      "message_type": "MESSAGE",
      "status": "GRANTED",
      "source": "checkout",
      "proof_text": "Checkout completion — implicit consent for order confirmations",
      "enforced_doi": false,
      "doi_status": null,
      "doi_channel": null,
      "granted_at": "2026-01-10T08:00:00Z",
      "revoked_at": null,
      "created_at": "2026-01-10T08:00:00Z"
    },
    {
      "id": "cr_c3d4e5",
      "channel_type": "RCS",
      "message_type": "NEWSLETTER",
      "status": "REVOKED",
      "source": "api",
      "proof_text": null,
      "enforced_doi": false,
      "doi_status": null,
      "doi_channel": null,
      "granted_at": "2026-01-10T08:00:00Z",
      "revoked_at": "2026-03-15T14:00:00Z",
      "created_at": "2026-01-10T08:00:00Z"
    }
  ],
  "created_at": "2026-01-10T08:00:00Z",
  "updated_at": "2026-03-28T09:00:00Z"
}
All consent records for this contact. Each entry represents a specific channel_type + message_type combination and its current opt-in state.
To add or revoke consent for a specific channel and message type, use the Consent API.