Channels

Manage channel connections to Google Merchant Center, Meta, Microsoft, and other advertising platforms.

List channels

GET /v1/channels

Returns all available channels and their connection status.

Required scope: read_channels

Request

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

Response

{
  "data": [
    {
      "slug": "google",
      "object": "channel",
      "type": "google_merchant_center",
      "display_name": "Google Merchant Center",
      "available": true,
      "status": "connected",
      "sync_mode": "api",
      "connected_at": "2026-01-10T08:00:00Z",
      "last_synced_at": "2026-03-09T14:30:00Z"
    },
    {
      "slug": "meta",
      "object": "channel",
      "type": "meta",
      "display_name": "Meta",
      "available": true,
      "status": "not_connected",
      "sync_mode": null,
      "connected_at": null,
      "last_synced_at": null
    }
  ]
}

Channel slugs

SlugChannel
googleGoogle Merchant Center
metaMeta (Facebook / Instagram)
microsoftMicrosoft Advertising
pinterestPinterest
tiktokTikTok
amazonAmazon

Response fields

FieldTypeDescription
slug string Short identifier for the channel (e.g., google, meta).
object string Always "channel".
type string Internal channel type identifier.
display_name string Human-readable channel name.
available boolean Whether this channel is available on your plan.
status string Connection status (e.g., connected, not_connected).
sync_mode string | null How products are synced to this channel (e.g., api, feed_url).
connected_at string | null ISO 8601 timestamp when the channel was connected.
last_synced_at string | null ISO 8601 timestamp of the last successful sync.

Get a channel

GET /v1/channels/:slug

Returns a single channel by slug.

Required scope: read_channels

Request

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

Errors

StatusCodeDescription
404resource_not_foundNo channel found with the given slug.

Update a channel

PATCH /v1/channels/:slug

Updates channel settings.

Required scope: write_channels

Parameters

ParameterTypeDescription
sync_modestringHow to sync products to this channel.
settingsobjectChannel-specific settings.

Request

curl -X PATCH https://app.simpleproductfeeds.com/v1/channels/google \
  -H "Authorization: Bearer spf_live_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"sync_mode": "api"}'

Errors

StatusCodeDescription
404resource_not_foundNo channel found with the given slug.
422validation_failedInvalid settings.

Connect a channel

POST /v1/channels/:slug/connect

Initiates a channel connection. For channels that require OAuth (like Google), this returns an OAuth URL that the user must visit to authorize.

Required scope: write_channels

Request

curl -X POST https://app.simpleproductfeeds.com/v1/channels/google/connect \
  -H "Authorization: Bearer spf_live_sk_your_key_here"

Response

{
  "data": {
    "requires_oauth": true,
    "oauth_url": "https://accounts.google.com/o/oauth2/auth?...",
    "message": "Visit the OAuth URL to authorize the connection."
  }
}

Disconnect a channel

POST /v1/channels/:slug/disconnect

Disconnects a channel. This does not delete any data from the external platform.

Required scope: write_channels

Request

curl -X POST https://app.simpleproductfeeds.com/v1/channels/google/disconnect \
  -H "Authorization: Bearer spf_live_sk_your_key_here"

Response

Returns the updated channel object with status: "not_connected".


Sync a channel

POST /v1/channels/:slug/sync

Triggers a product sync to the channel. Returns 202 Accepted — the sync runs asynchronously.

Required scope: write_channels

Request

curl -X POST https://app.simpleproductfeeds.com/v1/channels/google/sync \
  -H "Authorization: Bearer spf_live_sk_your_key_here"

Response

{
  "data": {
    "message": "Sync initiated."
  }
}

Errors

StatusCodeDescription
422channel_not_connectedThe channel must be connected before syncing.

Get sync logs

GET /v1/channels/:slug/sync_logs

Returns recent sync logs for a channel.

Required scope: read_channels

Request

curl https://app.simpleproductfeeds.com/v1/channels/google/sync_logs \
  -H "Authorization: Bearer spf_live_sk_your_key_here"

Response

{
  "data": [
    {
      "id": 1,
      "status": "completed",
      "started_at": "2026-03-09T14:25:00Z",
      "completed_at": "2026-03-09T14:30:00Z",
      "rows_synced": 1482,
      "error_details": null
    }
  ]
}

Get merchant accounts

GET /v1/channels/:slug/merchant_accounts

Returns available merchant accounts for the connected channel (Google Merchant Center only). Used to select which merchant account to sync to.

Required scope: read_channels

Request

curl https://app.simpleproductfeeds.com/v1/channels/google/merchant_accounts \
  -H "Authorization: Bearer spf_live_sk_your_key_here"

Response

{
  "data": {
    "accounts": [
      {"id": "123456789", "name": "My Store - US"},
      {"id": "987654321", "name": "My Store - EU"}
    ],
    "current_merchant_id": "123456789"
  }
}

Errors

StatusCodeDescription
401oauth_requiredGoogle OAuth is not connected. Connect the channel first.

Select merchant account

POST /v1/channels/:slug/select_merchant

Selects which merchant account to use for syncing.

Required scope: write_channels

Parameters

ParameterTypeRequiredDescription
merchant_idstringYesThe merchant account ID to select.

Request

curl -X POST https://app.simpleproductfeeds.com/v1/channels/google/select_merchant \
  -H "Authorization: Bearer spf_live_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"merchant_id": "123456789"}'

Response

{
  "data": {
    "merchant_id": "123456789",
    "message": "Merchant account selected."
  }
}

Errors

StatusCodeDescription
401oauth_requiredGoogle OAuth is not connected.
422missing_paramThe merchant_id parameter is required.