Skip to main content

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​

MethodEndpointPurpose
GET/storesList stores available to the API key.
GET/suppliersList suppliers.
POST/suppliersCreate a supplier.
GET/inventoryList or search procurement inventory inputs.
POST/inventoryCreate a procurement inventory item.
PATCH/inventory/{itemId}Update a procurement inventory item.
GET/ordersList procurement orders.
POST/ordersCreate 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/quotesDeprecated. 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:

  • manual
  • api
  • webhook
  • google_ucp

Supplier statuses:

  • draft
  • connected
  • review
  • inactive

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:

  • healthy
  • low_stock
  • blocked
  • sourcing
  • archived

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:

  • draft
  • requested
  • approved
  • payment_requested
  • paid
  • sent
  • confirmed
  • in_transit
  • received
  • cancelled
  • blocked

Quote statuses are system controlled:

  • quote_requested
  • quote_received
  • pending_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.