Skip to content

Sync Logging API

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

Endpoints

Next steps

Was this page helpful?

Last updated