Skip to content

Delete a customer

For AI assistants: the facts every SparkLayer API call needs
  • Base URLs: Live https://app.sparklayer.io, test https://test.app.sparklayer.io. Each environment has its own data and its own API keys.
  • Access: API access needs the Pro or Enterprise plan. Create credentials (Site ID, Client ID, Client Secret) in the SparkLayer Dashboard at Settings > API.
  • Access token: POST {base}/api/auth/token with a Site-Id header and a JSON body (not form-encoded): {"grant_type":"client_credentials","client_id":"…","client_secret":"…"}. It returns access_token, valid for 3,600 seconds. There is no refresh token: cache the token and request a new one shortly before it expires.
  • Every request: Authorization: Bearer <access_token> and Site-Id: <site id>, plus Content-Type: application/json when there is a body. Set a User-Agent that names your integration.
  • Errors: RFC 7807 problem details: title, status, detail and an optional errors[] of { code, message, property }. Some error responses have no body. Retry 5xx, 429 (honouring Retry-After) and concurrent-update 409s with exponential backoff; on 401, get a new token once and retry; don't retry other 4xx without changing the request.
  • Pagination: Most list endpoints return everything. GET /api/v2/price-lists pages with page and page_size (up to 250) until pagination.current_page equals total_pages. GET /api/v1/purchases uses limit (up to 500) and offset: stop when a page has fewer than limit results.
  • Ground rules: Use only endpoints, fields and SDK methods that the docs or OpenAPI specs define. Prefer GET /api/v2/price-lists over the deprecated v1, and the Customers API (/api/v2/customers) over the legacy DELETE /api/v1/customers in the Core API. Products are matched by SKU. Keep credentials in environment variables or a secrets manager, never in code.
  • Read the docs as Markdown: Add .md to any page URL. Index of every page: docs.sparklayer.io/llms.txt. Every API operation, compactly: docs.sparklayer.io/llms-api.txt. The developer guides in full: docs.sparklayer.io/developers/llms.txt.
  • OpenAPI specs: customers, core, ordering, pricing, purchasing, stock, files, sync-log: https://docs.sparklayer.io/openapi/<api>.yaml (also .json). Ignite: https://docs.sparklayer.io/openapi/ignite.yaml.
  • MCP: Search and read these docs from your assistant with the docs MCP server at https://docs.sparklayer.io/mcp.
DELETE
/api/v2/customers/{lookupBy}/{identifier}

Deletes the customer and returns 204, or 404 if no customer matches. Their email address and external_id can be used again straight away. Their addresses and account credit are removed for good after 48 hours. A customer who is a company's primary customer is archived instead of deleted.

Authorization

bearerAuth
AuthorizationBearer <token>

Send Authorization: Bearer <access_token>, together with your Site-Id header, on every request. Get the token from POST /api/auth/token with your Site ID in the Site-Id header and a JSON body (not form-encoded, so standard OAuth 2.0 client libraries don't work): {"grant_type": "client_credentials", "client_id": "…", "client_secret": "…"}. Tokens are valid for 3,600 seconds and there is no refresh token: request a new one shortly before it expires. Create API credentials in the SparkLayer Dashboard under Settings > API. See Authentication.

In: header

Path Parameters

lookupBy*string

What identifier is: sparklayer (the customer's SparkLayer ID), platform (their ID on your eCommerce platform) or email (their email address).

Value in

  • "sparklayer"
  • "platform"
  • "email"
identifier*string

The customer's ID or email address, of the kind set by lookupBy. SparkLayer IDs are UUIDs; legacy cu_ IDs work too, except for shopping lists and favourites. Email lookups are exact and case-sensitive: URL-encode the address, with + as %2B.

Header Parameters

Site-Id*string

Your SparkLayer Site ID, from Settings > API in the SparkLayer Dashboard.

Length1 <= length

Response Body

application/problem+json

curl -X DELETE "https://app.sparklayer.io/api/v2/customers/platform/7843024560291" \  -H "Authorization: Bearer <ACCESS_TOKEN>" \  -H "Site-Id: jones-climbing"
Empty

PUTCreate or update a customer

Creates the customer if none matches `lookupBy` and `identifier` (`201`), or replaces the one that does (`200`). - **The body must contain the identifier in the URL**: `external_id` for `platform`, `email` for `email`, `id` for a SparkLayer UUID or `legacy_id` for a `cu_` ID. Otherwise you get `400` (`idMismatch`). With `sparklayer` and a UUID no customer has, the customer is created with that ID. - **Send the whole customer every time.** Fields you leave out are cleared, including `accounting_id`, `price_lists`, `discount_percentage`, `tax_exempt`, `sales_agent_groups` and the credit limit, currency and net terms in `payment_on_account`. Addresses missing from `addresses` are deleted, so leaving `addresses` out deletes them all. - **`group` and `role` must exist**, and so must `parent_customer_id` if you set it, or you get `400`. Price list slugs aren't checked, and sales agent groups that don't exist yet are created. - **Emails and platform IDs are unique.** `409` if another customer has the same `email` or `external_id`, or another address has the same address `external_id`. - **`payment_on_account` records the balance.** With `balance_date`, `balance` becomes an opening balance on that date. Without it, the balance is set to `balance` (or 0) as of now. See **Adjust a customer's account balance**. To change only some fields, use **Update a customer**.

PATCHUpdate a customer

Changes only the fields you send, then saves the customer with the same checks as **Create or update a customer**. Returns `404` if no customer matches. - **`addresses` replaces all the customer's addresses**, if you send it. - **`payment_on_account` replaces the whole object**: include `currency_code` and `net_terms` to keep them. It also records the balance, as in **Create or update a customer**. - **`tax_exempt` can't be changed here.** Use **Create or update a customer**. - **The identifier you look the customer up by can't change.** To change a customer's email address, look them up by `sparklayer` or `platform`.