Procurement REST API
The REST Procurement API is the primary integration surface for supplier records, procurement inventory inputs, order requests, and purchase orders. Supplier quotes are created through the supported quote intake flow, not by manually posting quote data.
Catalog and procurement are separate features:
- Catalog products are sellable items exposed to shoppers, agents, and checkout flows.
- Procurement inventory items are inputs the merchant buys or sources from suppliers, such as parts, raw materials, packaging, services, ingredients, or supplier-owned components.
Base URL:
https://merchant.thyris.cloud/api/v1/procurement
All requests require a developer API key.
Authorization: Bearer tr_live_your_key_here
or:
X-Procurement-API-Key: tr_live_your_key_here
For a complete field matrix, see Request Field Requirements.
Endpoint Summary
| Method | Endpoint | Purpose |
|---|---|---|
GET | /stores | List stores available to the API key. |
GET | /suppliers | List suppliers. |
POST | /suppliers | Create a supplier. |
GET | /inventory | List or search procurement inventory inputs. |
POST | /inventory | Create a procurement inventory item. |
PATCH | /inventory/{itemId} | Update a procurement inventory item. |
GET | /orders | List procurement orders. |
POST | /orders | Create a procurement order or order request. status=requested starts the supplier quote request workflow. |
PATCH | /orders/{orderId} | Update a procurement order status, except quote states. |
POST | /quotes | Deprecated. Quote creation is reserved for the supported supplier quote intake flow. |
List Stores
curl "https://merchant.thyris.cloud/api/v1/procurement/stores" \
-H "Authorization: Bearer tr_live_your_key_here"
Create Supplier
curl -X POST "https://merchant.thyris.cloud/api/v1/procurement/suppliers" \
-H "Authorization: Bearer tr_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"storeId": "STORE_UUID",
"name": "Example Brand Components",
"domain": "supplier.example.com",
"logoUrl": "https://supplier.example.com/logo.png",
"websiteUrl": "https://supplier.example.com",
"externalId": "supplier_001",
"channel": "api",
"status": "connected",
"reliabilityScore": 92,
"leadTimeDays": 7,
"currency": "USD",
"supportedCurrencies": ["USD", "EUR"],
"capabilities": ["inventory_feed", "quote_api", "purchase_order_api"],
"contact": {
"email": "ops@supplier.example.com"
}
}'
Supplier channels:
manualapiwebhookgoogle_ucp
Supplier statuses:
draftconnectedreviewinactive
Create Procurement Inventory Item
curl -X POST "https://merchant.thyris.cloud/api/v1/procurement/inventory" \
-H "Authorization: Bearer tr_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"storeId": "STORE_UUID",
"preferredSupplierId": "SUPPLIER_UUID",
"sku": "BOX-12X10",
"externalId": "erp_item_001",
"name": "Shipping Box 12x10",
"description": "Corrugated box used for apparel orders.",
"imageUrl": "https://cdn.example.com/boxes/12x10.png",
"imageUrls": [
"https://cdn.example.com/boxes/12x10.png",
"https://cdn.example.com/boxes/12x10-side.png"
],
"itemUrl": "https://supplier.example.com/items/box-12x10",
"category": "Packaging",
"targetProduct": "Apparel fulfillment",
"status": "healthy",
"quantityOnHand": 1200,
"reorderPoint": 250,
"targetStockLevel": 1500,
"reorderThresholdPercent": 25,
"maxOrdersPerWeek": 1,
"autoReorderEnabled": true,
"customOrderPolicy": "Every Monday morning, if stock is under 800, order enough to reach 1500. Do not create another request while an earlier request is still open.",
"leadTimeDays": 5,
"unitCost": 0.42,
"currency": "USD"
}'
imageUrls is optional, ordered, and limited to 20 valid URLs. The first entry is synchronized to imageUrl; clients that only send imageUrl remain compatible.
Inventory statuses:
healthylow_stockblockedsourcingarchived
Create Procurement Order
curl -X POST "https://merchant.thyris.cloud/api/v1/procurement/orders" \
-H "Authorization: Bearer tr_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"storeId": "STORE_UUID",
"supplierId": "SUPPLIER_UUID",
"status": "requested",
"source": "api",
"reason": "Request supplier quote for packaging below safety stock.",
"approvalRequired": false,
"currency": "USD",
"items": [
{
"inventoryItemId": "INVENTORY_ITEM_UUID",
"name": "Shipping Box 12x10",
"quantity": 1000,
"unitCost": 0.42,
"currency": "USD"
}
]
}'
Order statuses:
draftrequestedapprovedpayment_requestedpaidsentconfirmedin_transitreceivedcancelledblocked
Quote statuses are system controlled:
quote_requestedquote_receivedpending_approval
To request a supplier quote, create an order with status=requested. Thyris starts the configured supplier quote request workflow. When a supplier response is received through the supported intake flow, the related order can move to quote_received.
Update Order Status
curl -X PATCH "https://merchant.thyris.cloud/api/v1/procurement/orders/ORDER_UUID" \
-H "Authorization: Bearer tr_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"status": "received"
}'
Status changes can trigger outbound procurement webhooks when destinations are configured. Manual updates to quote_requested, quote_received, or pending_approval are rejected; those states are produced by the supported quote intake flow.