Skip to content

API quickstart

Read time: 5 minutes. Who it's for: A developer making their first calls to the QuotWay API.

⚠️ The QuotWay API requires the Enterprise plan (a live trial counts). Creating keys needs the Admin staff role in QuotWay.

What you need

  • A Shopify store with QuotWay installed, on Enterprise or an active trial.
  • An Admin account in QuotWay (Settings → Staff). Managers and Sales reps can see the key list (names and prefixes only) but can't create, roll or revoke keys.
  • curl or any HTTP client.

Step 1 - Create an API key

  1. In your Shopify admin, open QuotWay → Settings → Integrations → API keys.
  2. Select Create API key.
  3. Name it after the system that will use it, for example NetSuite sync (Celigo).
  4. Tick the scopes it needs. For this quickstart choose Read quotes (read_quotes) and Create quotes and post messages (write_quotes).
  5. Leave Expires on Never for now, and leave Allowed IP addresses empty.
  6. Tick I accept the QuotWay API Terms of Use - keys can't be created without it (read the API Terms first; they cover key security and what you owe buyers for data you copy out).
  7. Select Create key, then copy the key immediately. It starts with qw_live_ and is shown only once - QuotWay stores only a hash of it.

Store the key the way you store a password: in a secrets manager or an environment variable, never in source control.

export QUOTWAY_API_KEY="qw_live_…"

Step 2 - Check the key

GET /v1/ping works with any valid key and tells you which store and scopes it belongs to.

curl https://api.quotway.com/v1/ping \
  -H "Authorization: Bearer $QUOTWAY_API_KEY"
{
  "object": "ping",
  "shop_domain": "northwind-supply.myshopify.com",
  "api_version": "2026-10-01",
  "scopes": ["read_quotes", "write_quotes"]
}

A 401 means the key is wrong, revoked or expired; a 402 means the store isn't on Enterprise. See Errors.

Step 3 - List your quotes

curl -G https://api.quotway.com/v1/quotes \
  -H "Authorization: Bearer $QUOTWAY_API_KEY" \
  --data-urlencode "status=proposal_sent,countered" \
  --data-urlencode "limit=5"
{
  "object": "list",
  "data": [
    {
      "object": "quote",
      "id": "clz8k2x9f0001qw7h3m4n5p6r",
      "number": "QW-1042",
      "status": "proposal_sent",
      "mode": "wholesale",
      "source": "product_page",
      "currency": "USD",
      "…": "…"
    }
  ],
  "has_more": true,
  "next_cursor": "eyJ1IjoiMjAyNi0wOS0yOVQxNDoxMjowMC4wMDBaIiwiaSI6ImNsejhrMng5ZjAwMDFxdzdoM200bjVwNnIifQ"
}

Pass next_cursor back as cursor to get the next page. Every field on a quote is described in The quote object.

Tip: filter names use brackets, such as updated_at[gte]. curl -G --data-urlencode encodes them for you.

Step 4 - Create a quote request

This records a buyer's request exactly as if it came from your storefront. Lines reference Shopify variant ids; titles, SKUs and catalog prices are read from Shopify.

curl https://api.quotway.com/v1/quotes \
  -H "Authorization: Bearer $QUOTWAY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 6f1c2b9e-4d3a-4f8e-9b1a-2c7d5e8f0a13" \
  -d '{
    "buyer": { "email": "buyer@example.com", "name": "Dana Ortiz", "company_name": "Acme Restaurant Group" },
    "lines": [
      { "variant_id": "gid://shopify/ProductVariant/4455667788", "quantity": 120, "requested_price": "11.50" }
    ],
    "notes": "Delivery to our Denver kitchen, please."
  }'

The response is 201 Created with the new quote in status submitted. It appears in QuotWay's quote list straight away, your staff get the usual "new quote received" email, and your automation rules run on it. If the request doesn't match your store's targeting rules you get a 422 not_eligible instead. Full details: Create quotes.

The Idempotency-Key header makes the call safe to retry - see Idempotency.

Step 5 - Get told when things change

Rather than polling, add a webhook endpoint in Settings → Integrations → Webhooks and QuotWay will send you quote.proposal_sent, quote.accepted, quote.converted and 22 other events as they happen. Start with Webhooks.

Next steps

Still need a hand? The team is happy to help.

We’d like to set analytics cookies to understand how the site is used. They’re not required — declining changes nothing about how the site works, and you can change your mind any time on our privacy page.