QuipteamsREST API
Guides

Integration workflows

End-to-end flows for the two main use cases: procuring hardware through quotes and managing device logistics. Each guide shows the sequence of API calls, what to expect at each stage, and how to handle asynchronous updates.

Quote procurement

Request hardware for employees, get pricing from Quip, and approve items for delivery. This is the primary workflow for IT procurement teams.

Client
GET /products
Quip API
POST /quotes
202 — quote created (price: null)
Quip reviews, sets prices, adds alternatives
Webhook: quote.pending
GET /quotes/:id (prices now available)
PATCH /quotes/:id/items/:itemId (accept)
Webhook: quote.tracking_added
Webhook: quote.delivered
1

Browse the product catalog

GET/api/v1/products

Start by fetching available products. You can filter by type, brand, or search by name. Each product includes its available configurations (CPU, RAM, storage, screen size).

bash
curl "https://api.quipteams.com/api/v1/products?product_type=Laptop" \
  -H "Authorization: Bearer YOUR_API_KEY"

Pick a product_id and configuration_id for catalog items. For products not in the catalog, you can use a freeform item instead (see step 2).

2

Create a quote

POST/api/v1/quotes

Submit a quote with one or more items. Each item needs at least one recipient with name, country, and delivery address.

Catalog item — use product_id + configuration_id:

json
{
  "requester_email": "it@acme.com",
  "requester_name": "IT Admin",
  "items": [
    {
      "product_id": "6f121669-...",
      "configuration_id": "40221268-...",
      "quantity": 1,
      "recipients": [
        { "name": "New Hire", "email": "new@acme.com", "country": "United States", "address": "123 Main St" }
      ]
    }
  ]
}

Freeform item — use product_type + specification:

json
{
  "product_type": "Accessory",
  "quantity": 1,
  "specification": { "brand": "Apple", "model": "Magic Mouse" },
  "recipients": [
    { "name": "Alice", "email": "alice@acme.com", "country": "UK", "address": "10 Downing St" }
  ]
}

You can mix both types in the same quote. The response returns the full quote with all items, but price will be null at this stage.

3

Wait for pricing

Quip's team reviews the quote, sets pricing, and may add alternatives (e.g. a different configuration when the requested one is out of stock).

You'll know pricing is ready through:

  • Webhook — subscribe to quote.pending to get notified immediately.
  • Polling — call GET /api/v1/quotes/:order_id periodically until item.price is non-null.
4

Review prices and alternatives

GET/api/v1/quotes/:id

Fetch the full quote. Each item now has a price and may have alternatives[] — each with its own brand, model, price, and description.

json
{
  "id": "f13e01ed-...",
  "product_type": "Laptop",
  "price": 1299.00,
  "alternatives": [
    {
      "id": "abc123-...",
      "brand": "Lenovo",
      "model": "ThinkPad T14 Gen 5",
      "price": 1199.00,
      "status": "pending",
      "is_exact_match": false
    }
  ]
}
5

Accept or reject items

PATCH/api/v1/quotes/:id/items/:itemId

For each item, decide whether to accept the original, accept an alternative, or reject an alternative. Recipients with delivery details are required on accept.

Accept the original item:

json
{
  "action": "accept",
  "recipients": [
    {
      "name": "New Hire",
      "email": "new@acme.com",
      "country": "United States",
      "address": "123 Main St, NY 10001",
      "phone_number": "+1-555-0100",
      "quantity": 1
    }
  ]
}

Accept an alternative instead:

json
{
  "action": "accept",
  "alternative_id": "abc123-...",
  "recipients": [{ "name": "New Hire", "email": "new@acme.com", "country": "US", "address": "...", "quantity": 1 }]
}

Reject an alternative:

json
{ "action": "reject", "alternative_id": "abc123-..." }
6

Track delivery

After acceptance, Quip handles procurement and shipping. You'll receive webhook notifications as the order progresses:

  • quote.tracking_added — tracking code and link are available for a recipient.
  • quote.delivered — delivery confirmed for a recipient.
  • quote.action_required — Quip needs your input (e.g. address clarification).

Or poll GET /api/v1/quotes/:order_id — each recipient has tracking_code, tracking_link, and status fields that update over time.

Device actions

Store, assign, or reassign devices. Use this flow for employee offboarding (store), onboarding (assign), or team transfers (reassign).

Client
GET /assets?search=SERIAL
Quip API
In inventory → POST /device-actions
Not in inventory → POST /device-actions/external
Webhook: logistics.tracking_added
Webhook: logistics.completed
1

Check if the device is in your inventory

GET/api/v1/assets?search=SERIAL

Search by serial number to determine if the device is in your company's managed inventory. This decides which endpoint to use for the action.

bash
curl "https://api.quipteams.com/api/v1/assets?search=C02X9876WXYZ" \
  -H "Authorization: Bearer YOUR_API_KEY"
  • Results returned — device is in inventory. Use POST /api/v1/device-actions (only serial number needed).
  • Empty results — device is external. Use POST /api/v1/device-actions/external (full device specs required).
2

Create the device action

POST/api/v1/device-actions

Three action types are available: Store (retrieve from employee), Assign (send to new employee), and Reassign (transfer between employees).

Inventory device — serial number auto-resolves details:

json
{
  "action_type": "Store",
  "serial_number": "C02X9876WXYZ",
  "current_user": {
    "name": "Departing Employee",
    "email": "departing@acme.com",
    "country": "United States",
    "address": "456 Oak Ave, SF, CA 94102"
  },
  "wipe": true,
  "notes": "Last day March 15th"
}

External device — provide full specs:

json
{
  "action_type": "Store",
  "serial_number": "EXT-SN-12345",
  "model": "ThinkPad X1 Carbon Gen 11",
  "type": "Laptop",
  "country": "Germany",
  "current_user": {
    "name": "Hans Mueller",
    "email": "hans@acme.com",
    "country": "Germany",
    "address": "Friedrichstr. 100, Berlin"
  },
  "wipe": false
}
3

Track progress

After creation, the action is In Progress. You'll receive updates via webhooks:

  • logistics.tracking_added — tracking info available.
  • logistics.completed — action fully completed.
  • logistics.action_required — Quip needs your input.

Or poll GET /api/v1/device-actions/:id for the latest status, tracking code, and tracking link.