Quiqqy platform APIs

Every order, on your terms.

One authenticated REST surface over the services that already run Quiqqy storefronts and hubs — order injection into your POS, menu sync, item availability, marketplace ordering and reporting.

  • OAuth2 partner tokens
  • HMAC-signed webhooks
  • Sandbox stores included

Three products

One credential model, three surfaces.

Quickstart

From consent link to first menu.

Send the merchant one consent link, exchange the callback code for a store token, push a menu keyed on your own item ids — and Quiqqy starts delivering orders to your webhook, signed and retried.

Read the walkthrough
01 POST /pos/signup_url
curl -s https://auth.quiqqy.ai/api/v2/pos/signup_url \
  -u "qc_live_7f31a9:qy_sk_live_4Zk…" \
  -H 'Content-Type: application/json' \
  -d '{
    "location_id": "POS-LOC-001",
    "store_name": "Main Street Pizza",
    "email": "owner@mainstreetpizza.com"
  }'

# => { "status": "success",
#      "signup_url": "https://auth.quiqqy.ai/api/v2/oauth2/authorize?…" }
# Merchant consents → your callback gets ?code=…,
# exchanged for a store token at POST /oauth2/token.
One consent link — approval lands an authorization code at your callback.
02 POST /pos/stores/:store_id/menus
curl -s https://auth.quiqqy.ai/api/v2/pos/stores/st_8fk2/menus \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "menus": [{
      "external_id": "main-menu",
      "name": "Main menu",
      "categories": [
        { "external_id": "coffee", "name": "Coffee" }
      ],
      "items": [{
        "external_id": "flat-white",
        "name": "Flat White",
        "price": 375,
        "available": true,
        "categories": ["coffee"]
      }]
    }]
  }'

# => 200 { "status": "success",
#          "data": { "menus": 1, "categories": 1, "items": 1 } }
Push your menu keyed on your own external ids — orders arrive by webhook.

Order lifecycle

Five states, driven from your POS.

  1. created order.created → Quiqqy → you
  2. accepted POST /orders/:id/accept you → Quiqqy
  3. preparing POST /orders/:id/status you → Quiqqy
  4. ready POST /orders/:id/ready you → Quiqqy
  5. completed order.delivered → Quiqqy → you

Denials carry structured reasons — ITEM_OUT_OF_STOCK, STORE_CLOSED, POS_OFFLINE — so Quiqqy can react automatically instead of paging a human. Order integration guide