Request file
A request for quote is described in a TOML file. stoa rfq template --direction BUY or --direction SELL prints a commented file to start from, and stoa rfq create -f <file> --dry-run validates it against the venue without sending anything. A clean dry run is a request the venue accepts. The field names are the same names the web form posts, so a request opened from the terminal is the same document a request opened in the browser would be.
Example
A buy request for four eight GPU nodes:
# Stoa Markets request for quote (BUY).
direction = "BUY"
asset_type = "node" # bare, node, or rack
gpu_slug = "h100-sxm5" # catalog slug, or "other"
gpu_count = 8 # GPUs per node
quantity = 4 # nodes
grade_minimum = "A" # A, B, or C
grade_is_exact = false
# Node configuration. Minimums unless pinned in exact_axes.
cpu_model = "Intel Xeon Platinum 8480+"
cpu_sockets = 2
cpu_cores_total = 112
system_memory_gb = 2048
storage_capacity_total_tb = 30
nic_count = 8
nic_speed_gbps = 400
exact_axes = ["system_memory_gb"]
# Terms
max_lead_time_days = 84
quote_deadline_days = 7
warranty_min_months = 12
verification_expectations = ["unit_photos"]
# Delivery (BUY only; United States)
delivery_location = "California"
delivery_city = "San Jose"
delivery_street = "1 Example Way" # dealers see the state only
delivery_deadline = "2026-12-15"
notes = ""
A buy request for two named rack systems:
direction = "BUY"
asset_type = "rack"
gpu_slug = "b300" # the GPU the system is built on
system_model = "GB300 NVL72" # from the rack_systems the schema publishes
quantity = 2
grade_minimum = "A"
max_lead_time_days = 120
delivery_location = "North Carolina"
delivery_city = "Charlotte"
Identity
What is being bought or sold. The venue is the authority on allowed values and bounds: stoa rfq schema prints them live, and each table below names the field, what it is for, and the rule that applies. Leave a field out when you have no requirement for it. The venue never guesses a value you did not state.
Fields with a closed set of values (grade, direction, the warranty coverage) take exactly a published value; a spelling that differs only by case is read as that value and the client says so. Configuration fields that list Other (cooling, chassis OEM, memory and storage types, the network fabrics, the software and PSU ratings) accept your own wording: the venue files unlisted wording under Other and keeps the text for the dealers to read. A bare Other is refused; state the actual value.
| Field | Type | Rule |
|---|---|---|
direction | "BUY" or "SELL" | Required. A BUY is a request to purchase; a SELL is a listing of hardware you hold. |
asset_ | "bare", "node", "rack" | Default "node". Bare is loose GPUs, node is a server built around GPUs, rack is a named rack system. Rack requests name a system from the venue's rack registry. stoa rfq schema lists the systems. |
gpu_ | string | A catalog slug from stoa assets search, or "other" for a part the catalog does not list. Bare and rack requests must name a listed part. |
other_ | string | The GPU model when gpu_ is "other". Up to 120 characters. |
other_ | integer | GPU memory in GB when gpu_ is "other", 1 to 1024. |
other_ | string | Form factor when gpu_ is "other". |
interconnect | string | For a node built on a listed part that offers a choice, the interconnect in the catalog's spelling. Leave out for the part's default. A SELL listing must state it when the part offers a choice. |
Sizing
| Field | Type | Rule |
|---|---|---|
gpu_ | integer | GPUs per node, 1 to 64. Node requests only. |
quantity | integer | Count of the traded unit: GPUs for bare, nodes for node, racks for rack. 1 to 1000. |
grade_ | "A", "B", "C" | Required. A is new and sealed, B refurbished or like new, C used and tested working. On a BUY it is a floor; on a SELL it is the declared condition. |
grade_ | boolean | BUY only. true when you want exactly that grade and dealers may not quote a better one. |
The priced unit and price basis (per GPU, per node, per rack) follow from asset_type. They are never typed.
Node configuration
Node requests can state the server configuration. Identity fields are firm: a dealer cannot quote a different value. Capacity fields are minimums on a BUY, and the dealer may quote more, unless you list the field in exact_axes, which pins it. On a SELL every stated value is the declaration of the unit you hold, and a node listing must state the full configuration the venue requires (the schema lists the required keys under node_sell_manifest).
Firm identity fields (strings, up to 200 characters): cooling, cpu_model, memory_type, storage_type, nic_model, compute_fabric, storage_fabric, dpu, frontend_ethernet, optics_included, software_included, psu_efficiency, bmc, chassis_oem, model_number. Several take a closed set of values; stoa rfq schema lists them.
Firm integer fields: form_factor_u (1 to 20), cpu_sockets (1 to 8), psu_count (1 to 12).
Capacity fields, minimums unless pinned:
| Field | Range |
|---|---|
psu_ | 100 to 12000 |
cpu_ | 1 to 2048 |
system_ | 1 to 65536 |
memory_ | 0 to 20000 |
storage_ | 1 to 128 |
nic_ | 0 to 64. 0 is a firm statement that the node has no network cards. |
nic_ | 1 to 3200 |
storage_ | Per drive, decimal. Optional detail. |
storage_ | Total local storage, decimal. |
exact_axes lists the capacity fields whose values are exact. Example: ["system_memory_gb", "nic_speed_gbps"].
Rack
Rack requests name a rack system from the venue's registry and may add shell details.
| Field | Type | Rule |
|---|---|---|
system_ | string | Required on a rack. A rack system name from the rack_ list stoa rfq schema prints; gpu_ must be the GPU that system is built on. stoa rfq template --asset-type rack fills both from the first published system. |
power_ | number | Shell detail. |
rack_ | string | Shell detail. |
storage_ | number | On a BUY, a floor on local storage; on a SELL, the declared value. |
system_ | string | On a BUY, a pin on the integrator; on a SELL, the declared integrator. |
A BUY rack request is grade A only.
Terms
| Field | Type | Rule |
|---|---|---|
quote_ | integer | How long dealers have to quote, 1 to 30 days. Default 3 (7 for a rack). |
max_ | integer | The longest lead time you will accept, counted from execution. Up to 364 days on a BUY, up to 182 on a SELL, where it is the seller's own lead time and is required. |
verification_ | list of strings | Evidence you expect before accepting, from the schema's list (for example unit_, burn_, proof_). A grade A BUY may ask for photos only. A SELL must offer at least one. |
notes | string | Free text for dealers, up to 500 characters. No contact details. |
Delivery
BUY requests deliver within the United States and must state where. Dealers see the state; the city and street are recorded for delivery and settlement and are not shown to a counterparty before award.
| Field | Type | Rule |
|---|---|---|
delivery_ | string | Required. A US state name or two letter code. |
delivery_ | string | Required. |
delivery_ | string | Optional. Private. |
delivery_ | string | Optional. The id of a saved delivery site from your organization's settings. |
delivery_ | "YYYY-MM-DD" | Optional. The date you need the hardware by, today or later and within two years. |
SELL listings carry no delivery block; the seller states where the hardware ships from instead (below).
Warranty
| Field | Type | Rule |
|---|---|---|
warranty_ | integer | 0 to 120. On a BUY, the shortest warranty you will accept. On a SELL, the warranty you offer. |
warranty_ | string | Who stands behind the warranty, from the schema's list. On a BUY it is a floor; on a SELL it is a declaration. |
warranty_ | integer | SELL only. Labor coverage, 0 to 120. Not stored yet. |
warranty_ | integer | SELL only. Parts coverage, 0 to 120. Not stored yet. |
warranty_ | integer | SELL only. Advance replacement coverage, 0 to 120. Not stored yet. |
SELL declaration
A listing states the condition of the hardware you hold. These fields are read on a SELL and ignored on a BUY.
| Field | Type | Rule |
|---|---|---|
age_ | integer | Months in service. Grade A requires 0; grades B and C require a value above 0. |
provenance_ | string | How the hardware was acquired, from the schema's list. |
usage_ | string | How it was used, from the schema's list. Grade A requires the new and unused value. |
ship_ | string | Required. |
ship_ | string | Required. |
serial_ | string | Optional. One per line, up to 8000 characters. |
Supporting documents for a listing are attached in the web application; the request file carries none.
Fields the client sets for you
idempotency_key is generated for every create and printed in the summary. Pass it back with --idempotency-key to repeat a create safely. binding_ack is sent only after you agree to the binding statement, by typing yes at the confirmation or by passing --agree-binding-statement. The priced unit, the price basis and the destination country are derived by the venue.