Documentation v1 · UPDATED 21 AUG 2026
Get an API key
On this page

Capacity tickets

POST https://api.spot.market/v1/contracts

Buy reserved seller lots. A fill is title transfer: you are debited immediately, leftover tokens perish at expiry (take-or-pay). The response includes a credential you can drop into any OpenAI-compatible client.

Auth: Bearer buyer key. Spend with Authorization: Bearer sk-contract-… on chat completions.

GTC does not hold the HTTP request. Poll GET /v1/orders/{order_id} (or use SDK wait) until status is filled.

Body

fieldtypenotes
instrumentstringModel / instrument id
quantityintegerTokens to buy
max_pricedecimal stringCeiling per 1,000 tokens. Required except order=market
ordertake / set / limit / markettake and market are IOC
time_in_forceioc / fok / gtcGTC rests the unfilled remainder
ttl_secondsintegerSpot ticket lifetime after fill (default 86400)
splitobjectOptional region, privacy, venue_pin
delivery1d / 1m / {start,end}Buy ahead. Omitted = spot

Response

order_id, status (open / partial / filled / rejected), filled, optional contract with id, credential, remaining, expires_at, lots[].

Errors

no_fill_at_limit (402) on IOC/FOK with no cross. Status codes on Errors.

curl -s http://127.0.0.1:8080/v1/contracts \
  -H "Authorization: Bearer sk-buyer" \
  -H "Content-Type: application/json" \
  -d '{"instrument":"gpt-4","quantity":2000,"max_price":"0.20","order":"take","time_in_force":"ioc"}'
from token_gateway import BuyerAuth, BuyerTokenGateway

gw = BuyerTokenGateway("http://127.0.0.1:8080", buyer=BuyerAuth("sk-buyer"))
order = gw.buy(instrument="gpt-4", tokens=2000, max_price="0.20", order="take")
print(order.contract.credential if order.contract else order.order_id)
import { BuyerClient } from "@ai-token-gateway/sdk";

const buyer = new BuyerClient({ baseUrl: "http://127.0.0.1:8080", apiKey: "sk-buyer" });
const order = await buyer.buy({
  instrument: "gpt-4",
  tokens: 2000,
  max_price: "0.20",
  order: "take",
});
console.log(order.contract?.credential ?? order.order_id);
use token_gateway_sdk::{BuyerClient, BuyerKey, CreateContractRequest};

let client = BuyerClient::new("http://127.0.0.1:8080", BuyerKey("sk-buyer".into()));
let order = client
    .buy(&CreateContractRequest {
        instrument: "gpt-4".into(),
        quantity: 2000,
        max_price: None,
        split: None,
        order: Default::default(),
        time_in_force: Default::default(),
        ttl_seconds: None,
        delivery: None,
    })
    .await?;
let _ = order.order_id;