Documentation menu · price-locks

Price locks

Sellers publish blocks of capacity at a fixed price. Buyers prepay into them and get routed there first, at that price, until the funds run out or the term ends.

Buying

GET/v1/market/locks
lock
{
  "id": "lock_…", "model": "deepseek/deepseek-v4.1-flash", "seller": "s_7f3a",
  "input_price_micro": 50000, "output_price_micro": 200000, "discount_pct": 66.7,
  "available_micro": 50000000, "min_purchase_micro": 5000000, "duration_days": 30,
  "verification": "verified", "region": "eu", "zdr": true, "created_at": "…"
}
POST/v1/locks/{lock_id}/purchase
body
{ "amount_micro": 10000000 }

The amount moves from your balance into a holding:

holding
{
  "id": "hold_…", "lock_id": "lock_…", "model": "deepseek/deepseek-v4.1-flash",
  "input_price_micro": 50000, "output_price_micro": 200000,
  "prepaid_micro": 10000000, "remaining_micro": 10000000,
  "expires_at": "…", "status": "active | exhausted | expired"
}
GET/v1/holdings

How routing uses a holding

  • Calls for the lock's model go to the lock's offer first, billed at the locked price from the holding.
  • If that offer is unhealthy or excluded by your policy, the call routes to the market as usual.
  • At expiry, whatever remains returns to your balance (lock_refund in your ledger).

Selling

Sellers publish locks from their offers in the dashboard:

POST /api/locks
{ "offer_id": "off_…", "input_price_micro": 50000, "output_price_micro": 200000,
  "available_micro": 50000000, "min_purchase_micro": 5000000, "duration_days": 30 }

Unsold capacity can be withdrawn with DELETE /api/locks/{id}.