Feed Studio API, version 1
Connect any store or system. Send products as JSON and Feed Studio makes the collages and keeps the Meta and Google Shopping feeds up to date. Free for all accounts.
Authentication
Create a key in your account (Connect, Open API) and send it with every request:
Authorization: Bearer fs_YOUR_API_KEY
Base URL: https://webprogress.bg/studio/api/v1. Format: JSON, UTF-8. Limit: 120 requests per minute, up to 1000 products per request.
Send products
POST /products. Mode "replace" replaces all products (use for the first batch of a full sync), "upsert" adds and updates.
curl -X POST https://webprogress.bg/studio/api/v1/products \
-H "Authorization: Bearer fs_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"mode": "upsert",
"sync": true,
"products": [{
"id": "SKU-1001",
"title": "Stride Run 3",
"description": "...",
"link": "https://shop.bg/stride-run-3",
"image_link": "https://shop.bg/img/1001-1.jpg",
"additional_image_link": ["https://shop.bg/img/1001-2.jpg", "https://shop.bg/img/1001-3.jpg"],
"price": 129.90,
"sale_price": 89.90,
"currency": "EUR",
"brand": "STRIDE",
"brand_logo": "https://shop.bg/brands/stride.png",
"availability": "in stock"
}]
}'
Response: {"accepted":1,"rejected":0,"errors":[],"mode":"upsert"}
| Field | Description | |
|---|---|---|
id | * | unique ID; must match the ID in your Meta catalog |
title | * | product name |
image_link | * | main image (http/https) |
price | * | regular price: number or "129.90 EUR" |
sale_price | sale price; if lower than price we show the struck-out old price and discount | |
currency | currency, default EUR | |
brand | brand | |
brand_logo | link to the brand logo (transparent PNG is best) | |
additional_image_link | array of up to 10 images | |
description, link, availability, condition, gtin, mpn, item_group_id, product_type, google_product_category, custom_label_0..4, color, size, gender, age_group, material | passed unchanged to the feeds |
Other endpoints
GET /status | status, product and collage counts, feed links |
GET /products?limit=100&offset=0 | products sent so far |
DELETE /products {"ids":["SKU-1001"]} | deletes products |
POST /brands {"brands":[{"name":"STRIDE","logo_url":"https://..."}]} | brand logos separately from products |
POST /sync | starts rendering now (otherwise within 5 minutes after sending) |
Errors look like {"error":{"code":"unauthorized","message":"..."}} with HTTP status 400, 401, 404, 413, 422 or 429.
Full sync
Send the first batch with "mode":"replace", the rest with "upsert", and add "sync":true to the last one. Collages are only rendered for changed products, so you can send the whole catalog daily.
Prefer a feed? Use a link to an XML or CSV in Google format with an extra column brand_logo.
Don't want to do it yourself? Order an integration from us.