Manage products (with photos and lifetime), categories, delivery cities, orders and customers from your own software — and run white-label shop apps on top of the public storefront.
/products
API token
{
"id": 412,
"title": "Pink peonies with eucalyptus",
"description": "Hand-tied, 40 cm",
"price": "45.50",
"currency": "EUR",
"photos": ["https://smsgateway24.s3.eu-central-1.amazonaws.com/products/7/20261107_a1b2c3d4.jpg"],
"cover": "https://smsgateway24.s3.eu-central-1.amazonaws.com/products/7/20261107_a1b2c3d4.jpg",
"categories": [{"id": 3, "name": "Bouquets"}],
"attributes": {"flowers": ["peony", "eucalyptus"], "palette": ["pink"]},
"availability": "available",
"is_available": true,
"available_quantity": 1,
"expires_at": "2026-11-10T09:00:00+01:00",
"status": "active",
"external_id": "fs-7f3a",
"vat_rate": "7.00",
"quantity": 1,
"reserved_quantity": 0,
"available_from": null,
"sort_order": 0,
"sold_at": null,
"withdrawn_at": null,
"created_at": "2026-11-07T09:00:00+01:00",
"updated_at": "2026-11-07T09:00:00+01:00"
}
/products
API token
{"title": "Pink peonies", "price": "45.50", "vat_rate": 7, "category_ids": [3], "external_id": "fs-7f3a", "lifetime_hours": 48}
/products/{id}
API token
/products/{id}
API token
{"price": "39.90", "status": "active"}
/products/{id}
API token
/products/external/{external_id}
API token
{"title": "Pink peonies", "price": 45.5}
/products/external/{external_id}
API token
/products/batch
API token
{"products": [{"external_id": "fs-1", "title": "Tulips", "price": 25}]}
[{"index": 0, "external_id": "fs-1", "result": "created", "product": {…}}]
/products/{id}/withdraw
API token
/products/{id}/activate
API token
/products/{id}/photos
API token
curl -H "Authorization: Bearer $TOKEN" -F photo=@bouquet.jpg https://smsgateway24.com/api/v1/products/412/photos
{"url": "https://…jpg", "product": {…}}
/products/{id}/photos
API token
{"photos": ["https://…/b.jpg", "https://…/a.jpg"]}
/products/{id}/photos?url=…
API token
/products/reserve
API token
{"items": [{"product_id": 412, "quantity": 1}]}
{"reservation_token": "rsv_…", "expires_at": "2026-11-07T10:30:00+01:00", "items": [{"product_id": 412, "quantity": 1, "price": "45.50", "title": "Pink peonies"}]}
/reservations/{token}
API token
{"released": 1}
/categories
API token
[{"id": 3, "name": "Bouquets", "color": "danger", "sort_order": 0, "is_archived": false, "product_count": 12}]
/categories
API token
{"name": "Bouquets"}
/categories/{id}
API token
/categories/{id}
API token
/categories/{id}
API token
/delivery/cities
API token
[{"id": 1, "name": "Wiesbaden", "price": "10.00", "free_from": null, "zip_codes": [], "is_active": true, "sort_order": 0}]
/delivery/cities
API token
{"name": "Mainz", "price": 20, "zip_codes": ["55116", "55118"]}
/delivery/cities/{id}
API token
/delivery/cities/{id}
API token
/delivery/options
API token
{"cities": […], "slots": ["09:00-12:00", "12:00-15:00"], "dates": [{"date": "2026-11-07", "slots": ["15:00-18:00", "18:00-21:00"]}], "pickup_enabled": true, "pickup_address": "…", "min_lead_hours": 2}
/shop
API token
{"is_enabled": true, "public_key": "pk_shop_…", "default_lifetime_hours": 72, "reservation_minutes": 15, "delivery_slots": […], "min_lead_hours": 2, "max_days_ahead": 14, "pickup_enabled": true, "cash_enabled": false, "stripe_ready": true, "currency": "EUR", "timezone": "Europe/Berlin", …}
/shop
API token
{"default_lifetime_hours": 24, "delivery_slots": ["10:00-14:00", "14:00-18:00"]}
/orders
API token
/orders
API token
{
"external_id": "pion-web-1001",
"reservation_token": "rsv_…",
"customer": {"phone": "+49 176 1234567", "name": "Max"},
"delivery": {"type": "delivery", "city": "Wiesbaden", "street": "Oranienstraße 52", "zip": "65185",
"date": "2026-11-08", "slot": "12:00-15:00", "recipient_name": "Anna"},
"card_text": "Happy birthday!",
"is_paid": true,
"payment_reference": "pi_3Q…",
"source": "web"
}
{
"id": 9031,
"number": "9031",
"status": "new",
"is_paid": true,
"source": "web",
"external_id": "pion-web-1001",
"items": [{"id": 1, "product_id": 412, "title": "Pink peonies", "price": "45.50", "quantity": 1, "total": "45.50", "vat_rate": "7.00", "photo": "https://…"}],
"subtotal": "45.50",
"delivery_price": "10.00",
"total": "55.50",
"currency": "EUR",
"delivery": {"type": "delivery", "street": "Oranienstraße 52", "city": "Wiesbaden", "zip": "65185",
"date": "2026-11-08", "slot": "12:00-15:00", "deliver_at": "2026-11-08T12:00:00+01:00",
"recipient_name": "Anna", "recipient_phone": "+49176…"},
"card_text": "Happy birthday!",
"comment": null,
"customer": {"id": 77, "name": "Max", "phone": "+491761234567"},
"history": [{"status": "new", "comment": "created via web", "actor": "api", "created_at": "2026-11-07T10:15:00+01:00"}],
"created_at": "2026-11-07T10:15:00+01:00"
}
/orders/{id}
API token
/orders/{id}
API token
/orders/{id}/status
API token
{"status": "delivering"}
/orders/{id}/cancel
API token
/orders/{id}/paid
API token
{"paid": true, "payment_reference": "pi_3Q…"}
/orders/{id}/photos
API token
{"url": "https://…", "photos": [...]}
/orders/statuses
API token
["new", "accepted", "assembling", "ready", "delivering", "delivered", "completed", "cancelled"]
/customers
API token
[{"id": 77, "name": "Max", "phone": "+491761234567"}]
/customers
API token
{"phone": "0176 1234567", "name": "Max"}
/customers/{id}
API token
/customers/{id}
API token
/customers/{id}/orders
API token
/customers/{id}/addresses
API token
[{"id": 5, "customer_id": 77, "label": "Home", "street": "Taunusstr. 1", "city": "Wiesbaden", "zip": "65183", "full": "Taunusstr. 1, 65183 Wiesbaden"}]
/customers/{id}/addresses
API token
/addresses/{id}
API token
/addresses/{id}
API token
/customers/{id}/events
API token
[{"id": 8, "title": "Mama — Geburtstag", "person_name": "Mama", "relation": "mother", "occasion": "birthday", "is_own": false, "day": 12, "month": 11, "year": 1965, "next_date": "2026-11-12", "days_left": 5, "turning_age": 61, "remind_days_before": 3, "suggest_bouquets": true, "address": null, "notes": null}]
/customers/{id}/events
API token
{"person_name": "Mama", "relation": "mother", "occasion": "birthday", "day": 12, "month": 11, "remind_days_before": 3}
/events/{id}
API token
/events/{id}
API token
/events/upcoming
API token
/storefront/{key}
public
{"name": "Pion Blumen", "currency": "EUR", "timezone": "Europe/Berlin", "brand_color": "#A61E4D", "logo_url": "…", "pickup_enabled": true, "pickup_address": "…", "payment_methods": ["card", "cash"], "stripe_publishable_key": "pk_live_…"}
/storefront/{key}/categories
public
/storefront/{key}/products
public
/storefront/{key}/products/{id}
public
/storefront/{key}/delivery
public
/storefront/{key}/quote
public
{"items": […], "unavailable_product_ids": [], "subtotal": "45.50", "delivery_price": "10.00", "total": "55.50", "currency": "EUR", "delivery_error": null}
/storefront/{key}/auth/request-code
public
{"phone": "+49 176 1234567"}
{"phone": "+491761234567", "expires_in": 600}
/storefront/{key}/auth/verify
public
{"phone": "+491761234567", "code": "4821", "name": "Max"}
{"access_token": "sct_…", "token_type": "Bearer", "customer": {"id": 77, "name": "Max", "phone": "+491761234567"}}
/storefront/{key}/auth/logout
customer token
/storefront/{key}/me
customer token
/storefront/{key}/me
customer token
/storefront/{key}/me
customer token
{"deleted": true, "anonymized": false}
/storefront/{key}/me/addresses
customer token
/storefront/{key}/me/addresses
customer token
/storefront/{key}/me/addresses/{id}
customer token
/storefront/{key}/me/addresses/{id}
customer token
/storefront/{key}/me/events
customer token
/storefront/{key}/me/events
customer token
{"person_name": "Mama", "relation": "mother", "occasion": "birthday", "day": 12, "month": 11, "remind_days_before": 3, "suggest_bouquets": true}
/storefront/{key}/me/events/{id}
customer token
/storefront/{key}/me/events/{id}
customer token
/storefront/{key}/orders
customer token
{"items": [{"product_id": 412}], "payment_method": "card",
"delivery": {"type": "delivery", "city_id": 1, "street": "Kirchgasse 1", "zip": "65185", "date": "2026-11-08", "slot": "15:00-18:00"}}
{"order": {…}, "payment": {"method": "card", "client_secret": "pi_…_secret_…", "payment_intent_id": "pi_…", "publishable_key": "pk_live_…", "amount": 5550, "currency": "eur"}}
/storefront/{key}/me/orders
customer token
/storefront/{key}/me/orders/{id}
customer token
/storefront/{key}/me/orders/{id}/pay
customer token
/storefront/{key}/me/orders/{id}/cancel
customer token
/storefront/{key}/stripe/webhook
public
PUT /products/external/{bouquet-id} {"title": "…", "price": 45.5, "category_ids": [3]}
POST /products/{id}/photos (multipart photo)
POST /products/{id}/withdraw sold at the counter
GET /products?updated_since=… pick up sales made online
GET /products?available=1 show today's bouquets
GET /delivery/options cities, prices, dates and slots for the checkout form
POST /products/reserve hold the cart while the customer pays → reservation_token
… Stripe Checkout …
POST /orders {"reservation_token": "…", "external_id": "web-1001", "is_paid": true, …}
DELETE /reservations/{token} payment abandoned
GET /storefront/{key} branding, payment methods
GET /storefront/{key}/products catalogue
POST /storefront/{key}/auth/request-code → /auth/verify → access_token
POST /storefront/{key}/orders → Stripe PaymentSheet with payment.client_secret
GET /storefront/{key}/me/orders/{id} status timeline