# Building integrations

URL: https://docs.sparklayer.io/developers/building-integrations

Choose how to connect your ERP or CRM to SparkLayer: build a direct integration with the SparkLayer API or use a middleware partner such as an iPaaS.

> **For AI assistants:** these facts apply to every SparkLayer API call.
>
> - **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 `409`s 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. 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: https://docs.sparklayer.io/llms.txt. Every API operation, compactly: https://docs.sparklayer.io/llms-api.txt. The developer guides in full: https://docs.sparklayer.io/developers/llms.txt.
> - **OpenAPI specs:** `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.

If your B2B data lives in a backend system, such as an ERP or CRM, you can send it to SparkLayer automatically instead of keeping it up to date by hand. There are two ways to connect them.

## Choose how to connect

| Option | How it works | Who builds it | Choose it when |
| --- | --- | --- | --- |
| **Direct connection** | You build an integration between your backend system and SparkLayer with the [SparkLayer API](https://docs.sparklayer.io/developers/api.md). | Your developers, or an agency | You have developers, or you need full control over what syncs and when. |
| **Middleware connection** | A middleware tool you already use, such as an [iPaaS](https://docs.sparklayer.io/help/glossary.md#ipaas), passes the data between your backend system and SparkLayer. | Your middleware partner's team | Your systems already connect through middleware, and it supports SparkLayer. |

Either way, your backend system keeps talking to your eCommerce platform as it does today. Only the B2B data, such as price lists, pack sizes and payment terms, goes to SparkLayer.

How data flows between systems:

1. Your backend system (e.g. Brightpearl, Oracle NetSuite, Microsoft Dynamics, Cegid, SEKO, SAP, OrderWise) holds the B2B data that's typically synchronised: B2B pricing (e.g. price lists), product rules (e.g. pack sizing) and customer rules (e.g. payment terms).
2. It's integrated with both Shopify and SparkLayer, via a direct connection or a middleware connection.
3. Specific B2B data syncs to SparkLayer; product, customer and order data syncs to Shopify.
4. SparkLayer connects to Shopify and enables the B2B portal with your synchronised B2B data.

## Check for a ready-made integration

SparkLayer already integrates with many backend systems, so you may not need to build anything. See the [full list of integrations](https://www.sparklayer.io/integrations/index.html).

To talk through how SparkLayer works with your systems, contact our [support team](https://docs.sparklayer.io/help/support.md).

## Next steps

- [API quickstart](https://docs.sparklayer.io/developers/quickstart.md): make your first SparkLayer API request.
- [SparkLayer API](https://docs.sparklayer.io/developers/api.md): which APIs your integration needs.
- [SparkLayer Ignite](https://docs.sparklayer.io/ignite.md): connect SparkLayer to a platform without a ready-made integration.
