Create a customer
Creates the party you bill. Every field is optional, so you can open the record with whatever you know and fill the rest in later.
Parameters
| Parameter | Description |
|---|---|
| country_codestring | nulloptional | Two-letter ISO 3166-1 country code, stored uppercase. Selects the tax rate the customer is charged. When unset, BillKit fills it from the country seen at checkout or on a payment. At most 2 characters. |
| emailstring (email) | nulloptional | The customer's email address. Not unique: two customers can share one. Must be a valid email address. |
| metadataobject | nulloptional | Key-value pairs stored on the customer and returned with it. At most 50 keys. |
| namestring | nulloptional | The customer's full name or business name. At most 255 characters. |
| test_clock_idstring | nulloptional | Test mode only: the test clock to attach the customer to. Refused on a live-mode key. At most 64 characters. |
Returns
The created customer. Use metadata to carry your own identifiers so records reconcile without a lookup table.
A customer on its own cannot be charged. Payment needs a mandate, and a mandate comes from Checkout.
test_clock_id attaches the customer to a test clock, and can only be set here. It is a 400 with a live-mode key and a 404 for a clock that does not exist.
BillKit never deduplicates customers by email. Two calls with the same address create two customers. Key on your own identifier and store the returned id.
Test it
Create the customer, then send them through Checkout to attach a mandate and start their first subscription.
Errors
| Status | Cause |
|---|---|
| 400 | The request was refused (type: invalid_request_error): a required parameter is missing (parameter_missing), one failed validation (parameter_invalid) or is not one the operation takes (parameter_unknown), and param names it. |
| 401 | No credential, or one that does not authenticate. |
| 402 | The account is suspended (tenant_suspended), or the payment provider refused a charge or refund the call made (type: payment_error, code: payment_refused). |
| 403 | Authenticated, but not allowed: missing scope (insufficient_scope), a key of the wrong mode (mode_mismatch), or a refused origin. Needs the customers:write scope. |
| 404 | No such object in this account and mode. |
| 409 | Conflicts with the object's current state (state_conflict, or a more specific code), or an operation still in flight (operation_pending). |
| 413 | The request body is larger than the API accepts. |
| 429 | Rate limited. Retry-After says when to try again. |
| 500 | Something failed on BillKit's side (type: api_error). Retry with the same Idempotency-Key. |
| 502 | The payment provider failed or did not answer. |
| 503 | Temporarily unable to serve. reason says whether the request was attempted. |
Other customers operations
- List customers GET /v1/customers
- Delete customer DELETE /v1/customers/{customer_id}
- Retrieve a customer GET /v1/customers/{customer_id}
- Update customer POST /v1/customers/{customer_id}
- Purge customer POST /v1/customers/{customer_id}/purge
- Set customer VAT number POST /v1/customers/{customer_id}/vat_number
BillKit