StoreBay Developers
Commerce

List contacts

GET
/contacts

Authorization

AuthorizationBearer <token>

Present an API key (sb_live_… / sb_test_…), an OAuth2 access token, or a static token as a Bearer credential. The operator is implied by the credential; it is never in the path. Only a SHA-256 hash of an API key is stored server-side.

In: header

Query Parameters

archived?boolean

Filter by archive state. OMITTED (the default) returns BOTH archived and live records — that default is deliberate and will not change, because flipping a list's default filter is a breaking change under docs/api/lifecycle.md. Pass false for live records only, or true to see just the archived ones.

cursor?string

Opaque pagination cursor from meta.cursor.next of the previous page. Do not construct or parse it.

limit?integer

Page size. Values above the maximum are clamped.

Range1 <= value <= 100
Default25
q?string

Case-insensitive partial match against first name, last name, company name, or email.

kind?string

Filter by contact kind.

Value in

  • "prospect"
  • "lead"
  • "customer"
email?string

Filter by exact email.

Formatemail
kyc_status?string

Filter by KYC status.

Value in

  • "not_required"
  • "pending"
  • "verified"
  • "failed"
  • "rejected"

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/contacts"
{  "data": [    {      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",      "object": "contact",      "kind": "prospect",      "first_name": "string",      "last_name": "string",      "company_name": "string",      "company_number": "string",      "email": "user@example.com",      "phone": "string",      "address_line1": "string",      "address_line2": "string",      "city": "string",      "region": "string",      "postcode": "string",      "country_code": "st",      "date_of_birth": "2019-08-24",      "is_charity": true,      "is_connected_party": true,      "is_business": true,      "kyc_status": "not_required",      "marketing_consent": true,      "marketing_consent_at": "2019-08-24T14:15:22Z",      "relief_assist_requested": true,      "relief_assist_requested_at": "2019-08-24T14:15:22Z",      "notes": "string",      "created_at": "2019-08-24T14:15:22Z",      "updated_at": "2019-08-24T14:15:22Z",      "archived_at": "2019-08-24T14:15:22Z"    }  ],  "meta": {    "limit": 0,    "cursor": {      "next": "string",      "has_more": true    }  }}
{  "error": {    "code": "unauthorized",    "message": "Missing or invalid credential."  }}
{  "error": {    "code": "insufficient_scope",    "message": "The credential lacks a scope required by this endpoint."  }}
{  "error": {    "code": "rate_limited",    "message": "Rate limit exceeded. Retry after 7s."  }}
{  "error": {    "code": "validation_error",    "message": "string",    "details": [      {        "field": "string",        "issue": "string"      }    ]  }}