# Sync Logging API

URL: https://docs.sparklayer.io/developers/api/sync-log

The Sync Logging API records full and partial data syncs, sync errors and status between your systems and SparkLayer. Lists every endpoint and its parameters.

> **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.

The Sync Logging API records the progress of data syncs between an integration and SparkLayer — when full and partial syncs ran, and which records failed to sync and why. Logs are kept per integration and data type.

## How it works

1. **Record each full sync** with **Record a full sync** (`PUT`). This sets the `started_full_sync` and `last_full_sync` timestamps and replaces the logged errors with the ones you send. A timestamp you leave out is cleared.
   - For a quick sync, send one `PUT` when it finishes, with both timestamps and all the errors.
   - For a long or asynchronous sync, send a `PUT` with `started_full_sync` when it starts, record errors with `PATCH` requests as items sync, and send a final `PATCH` with `last_full_sync` once every item has synced.
2. **After each partial (incremental) sync**, use **Record a partial sync** (`PATCH`) to update `last_partial_sync`, clear errors for records that now sync successfully (listed in `successfully_synced`), and add new errors.
3. **Read the status and errors** with **Get a sync status** and **List sync errors**.

Record a full sync before any partial syncs: until one exists, the status endpoints return `404` and partial sync timestamps aren't saved. Each error's `external_id` must be unique within a request.

For how an Ignite integration logs its syncs, see [Ignite data sync](https://docs.sparklayer.io/ignite/data-sync.md#logging-sync-issues).

## Endpoints

- [DELETE Delete all sync logs](https://docs.sparklayer.io/developers/api/sync-log/delete-a-stores-sync-logs.md)
- [GET Get a sync status](https://docs.sparklayer.io/developers/api/sync-log/get-sync-logging-status.md)
- [PATCH Record a partial sync](https://docs.sparklayer.io/developers/api/sync-log/update-sync-logs-with-a-partial-sync.md)
- [PUT Record a full sync](https://docs.sparklayer.io/developers/api/sync-log/update-sync-logs-with-a-full-sync.md)
- [GET List sync errors](https://docs.sparklayer.io/developers/api/sync-log/get-sync-logging-status-errors.md)

## Next steps

- [Authentication](https://docs.sparklayer.io/developers/authentication.md): get an access token for your requests.
- [Ignite data sync](https://docs.sparklayer.io/ignite/data-sync.md): what to sync from a custom platform, and when.
