Syncs

Trigger feed syncs, check sync status, and retrieve the latest sync operation.

Trigger a sync

POST /v1/syncs

Starts a new feed sync. A full sync re-fetches products from Shopify and regenerates the feed. A regenerate sync re-applies transformations to existing product data without re-fetching.

Returns 202 Accepted — the sync runs asynchronously. Poll the returned sync ID to check progress.

Required scope: write_exports

Parameters

ParameterTypeDefaultDescription
typestringfullSync type: full or regenerate.

Request

curl -X POST https://app.simpleproductfeeds.com/v1/syncs \
  -H "Authorization: Bearer spf_live_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"type": "full"}'

Response

{
  "data": {
    "id": "sync_568",
    "object": "sync",
    "status": "pending",
    "progress": 10,
    "product_count": 0,
    "excluded_count": 0,
    "rows_count": 0,
    "started_at": null,
    "completed_at": null,
    "failed_at": null,
    "error_details": null,
    "created_at": "2026-03-09T15:00:00Z"
  }
}

Errors

StatusCodeDescription
409export_in_progressA sync is already running. Wait for it to complete before starting another.
422no_feedNo feed has been configured for this shop.
422invalid_paramInvalid sync type. Must be full or regenerate.

Get a sync

GET /v1/syncs/:id

Returns a sync operation by ID.

Required scope: read_exports

Request

curl https://app.simpleproductfeeds.com/v1/syncs/sync_568 \
  -H "Authorization: Bearer spf_live_sk_your_key_here"

The sync_ prefix is optional — both sync_568 and 568 are accepted.

Response

Returns a single sync object wrapped in data.

Errors

StatusCodeDescription
404resource_not_foundNo sync found with the given ID.

Get latest sync

GET /v1/syncs/latest

Returns the most recent sync operation.

Required scope: read_exports

Request

curl https://app.simpleproductfeeds.com/v1/syncs/latest \
  -H "Authorization: Bearer spf_live_sk_your_key_here"

Response

{
  "data": {
    "id": "sync_568",
    "object": "sync",
    "status": "completed",
    "progress": 100,
    "product_count": 1482,
    "excluded_count": 23,
    "rows_count": 1482,
    "started_at": "2026-03-09T15:00:05Z",
    "completed_at": "2026-03-09T15:05:30Z",
    "failed_at": null,
    "error_details": null,
    "created_at": "2026-03-09T15:00:00Z"
  }
}

Sync response fields

FieldTypeDescription
id string Unique identifier with sync_ prefix.
object string Always "sync".
status string Sync status: "pending", "running", "completed", "failed", or "cancelled".
progress integer Sync progress percentage (10=scheduled, 25=fetching, 50=fetched, 75=merging, 100=complete).
product_count integer Number of product rows processed (alias for rows_count).
excluded_count integer Number of products excluded by rules during transformation.
rows_count integer Number of product rows processed.
started_at string | null ISO 8601 timestamp when the sync started processing.
completed_at string | null ISO 8601 timestamp when the sync completed.
failed_at string | null ISO 8601 timestamp if the sync failed.
error_details string | null Error message if the sync failed.
created_at string ISO 8601 timestamp when the sync was created.

Errors

StatusCodeDescription
404resource_not_foundNo syncs have been created yet.