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.
Browse the product catalog
GET/api/v1/productsStart 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).
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).
Create a quote
POST/api/v1/quotesSubmit 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:
{
"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:
{
"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.
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.pendingto get notified immediately. - Polling — call
GET /api/v1/quotes/:order_idperiodically untilitem.priceis non-null.
Review prices and alternatives
GET/api/v1/quotes/:idFetch the full quote. Each item now has a price and may have alternatives[] — each with its own brand, model, price, and description.
{
"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
}
]
}Accept or reject items
PATCH/api/v1/quotes/:id/items/:itemIdFor 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:
{
"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:
{
"action": "accept",
"alternative_id": "abc123-...",
"recipients": [{ "name": "New Hire", "email": "new@acme.com", "country": "US", "address": "...", "quantity": 1 }]
}Reject an alternative:
{ "action": "reject", "alternative_id": "abc123-..." }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).
Check if the device is in your inventory
GET/api/v1/assets?search=SERIALSearch by serial number to determine if the device is in your company's managed inventory. This decides which endpoint to use for the action.
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).
Create the device action
POST/api/v1/device-actionsThree 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:
{
"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:
{
"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
}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.