0Bit Documentation

Retrieve a customer

GET /customers/{id} - Read one partner-scoped customer (identity) record by id.

0Gate is the primary public integration path for hosted payment, ramp, and swap experiences. Keep secret-key operations on your server and hand only browser-safe values to the widget.

Read a single customer (identity) record by its 0Bit id. This returns the full CRM-style record you created — contact fields and your metadata — scoped to your account. It is a standard identity read, not a privacy-minimized KYC view.

Endpoint

FieldValue
MethodGET
Path/v1/customers/{id}
AreaCustomers
Operation idgetCustomer
Auth boundarySecret key from your server.

The {id} path parameter is a customer id returned by POST /v1/customers or GET /v1/customers. A customer that belongs to a different partner returns 404 — cross-tenant access is never 403, so there is no existence leak across accounts.

Use it for

Look up one customer to confirm its current contact fields, metadata, and kyc_status. If you only have your own reference, prefer GET /v1/customers?external_id=… instead of storing the 0Bit id everywhere.

Production rules

  • Keep secret keys on your server. This endpoint requires an sk_* key.
  • Wrap the path id in your code — the {id} placeholder is a literal customer id at call time.
  • A soft-deleted customer reads as 404. Treat a 404 as "gone or never yours", not as a transient error to retry.
  • Treat kyc_status as an informational signal only — it is not partner-settable and is unverified at launch.
  • Treat examples and placeholder ids as fake data only.

Path parameters

FieldRequiredTypeUse it for
idYesstringThe 0Bit customer id, for example 67a1f3b9e4b0c10001234567/the returned id.

Response

Returns 200 with the customer object.

Customer object

FieldTypeUse it for
idstring0Bit id for this customer.
objectstringAlways customer.
partner_idstringThe partner this record belongs to (your account).
modetest/liveWhich key mode created the record.
livemodebooleantrue for live-mode records, false for test.
external_idstring | nullYour reference, or null when not set.
emailstringContact email.
phonestring | nullE.164 phone, or null.
first_namestring | nullGiven name, or null.
last_namestring | nullFamily name, or null.
country_codestring | nullISO 3166-1 alpha-2 region, or null.
kyc_statusstringunverified / processing / verified / rejected / expired. Informational, not partner-settable, and always unverified at launch.
metadataobjectYour free-form key/value pairs.
created_atstring | nullRFC 3339 creation time.
updated_atstring | nullRFC 3339 last-modified time.

Examples

curl https://gate-api.0bit.app/v1/customers/67a1f3b9e4b0c10001234567 \
  -H "Authorization: Bearer sk_test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
{
  "id": "67a1f3b9e4b0c10001234567",
  "object": "customer",
  "partner_id": "ptnr_test_000000000001",
  "mode": "test",
  "livemode": false,
  "external_id": "user_42",
  "email": "jordan@example.com",
  "phone": "+447700900000",
  "first_name": "Jordan",
  "last_name": "Doe",
  "country_code": "GB",
  "kyc_status": "unverified",
  "metadata": { "plan": "pro" },
  "created_at": "2026-01-01T00:00:00Z",
  "updated_at": "2026-01-01T00:00:00Z"
}

Errors

All errors use the unified envelope and carry an X-Request-Id response header. Branch on code/type/statusCode, not on the free-form message.

{
  "type": "not_found",
  "code": "not_found",
  "message": "Customer 67a1f3b9e4b0c10001234567 not found",
  "request_id": "req_test_000000000123",
  "doc_url": null,
  "statusCode": 404
}
StatustypeWhen it happens
401unauthorizedMissing or invalid secret key.
404not_foundNo such customer, it belongs to another partner, or it has been soft-deleted. Cross-tenant access is 404, never 403.
429rate_limitedRequest throttled. Back off and retry.
5xxserver_errorTransient server or upstream failure. Retry with bounded backoff.

Public boundary

This reference covers partner-scoped endpoint behavior, authentication, idempotency, webhook verification, and support-safe records. Internal operations, administrative routes, and unsupported availability claims are outside the public API contract.

On this page