{"what_this_is":"A trade account on this store's shelf: any platform that resells to agents — a marketplace, an aggregator, a payments layer that hides x402 from its own users — lists our instruments under its roof, collects its customer's money itself, and orders from us by signed webhook. One door, one JSON body, one signed instruction per sale, delivery in seconds, a certificate the end customer can verify against our public key without trusting either of us.","opened":"2026-09-03","door":"https://scvd.store/api/trade/{account}/{item_id}","how_to_call":{"request":"POST https://scvd.store/api/trade/{account}/{item_id}","content_type":"application/json","body":"One JSON object carrying the item's fields (see shelf[].fields) at the top level or under `inputs`, plus optional order_ref (idempotency, up to 120 chars), agent_name, purpose, and callback_url (an https URL we POST the signed delivery receipt to, once, after the response).","signers":[{"language":"javascript","label":"Node","code":"import { createHmac, randomBytes } from \"node:crypto\";\n\nconst secret = \"scvd-trade-sandbox-secret-anyone-may-use\"; // your own, once the account is live\nconst body = JSON.stringify({ summary: \"what to remember\", order_ref: \"your-order-id\" });\nconst timestamp = String(Math.floor(Date.now() / 1000));\nconst nonce = randomBytes(16).toString(\"hex\");\nconst signature = createHmac(\"sha256\", secret)\n  .update(`${timestamp}.${nonce}.${body}`)\n  .digest(\"hex\");\n\nconst response = await fetch(\"https://scvd.store/api/trade/sandbox/context_anchor\", {\n  method: \"POST\",\n  headers: {\n    \"content-type\": \"application/json\",\n    \"X-Trade-Key\": \"scvd-trade-sandbox-key\",\n    \"X-Trade-Timestamp\": timestamp,\n    \"X-Trade-Nonce\": nonce,\n    \"X-Trade-Signature\": `sha256=${signature}`,\n  },\n  body, // the same string you signed, byte for byte\n});\nconsole.log(response.status, await response.json());"},{"language":"python","label":"Python","code":"import hashlib, hmac, json, secrets, time, urllib.request\n\nsecret = b\"scvd-trade-sandbox-secret-anyone-may-use\"  # your own, once the account is live\nbody = json.dumps({\"summary\": \"what to remember\", \"order_ref\": \"your-order-id\"}, separators=(\",\", \":\"))\ntimestamp = str(int(time.time()))\nnonce = secrets.token_hex(16)\nsignature = hmac.new(secret, f\"{timestamp}.{nonce}.{body}\".encode(), hashlib.sha256).hexdigest()\n\nrequest = urllib.request.Request(\n    \"https://scvd.store/api/trade/sandbox/context_anchor\",\n    data=body.encode(),  # the same bytes you signed\n    method=\"POST\",\n    headers={\n        \"Content-Type\": \"application/json\",\n        \"X-Trade-Key\": \"scvd-trade-sandbox-key\",\n        \"X-Trade-Timestamp\": timestamp,\n        \"X-Trade-Nonce\": nonce,\n        \"X-Trade-Signature\": f\"sha256={signature}\",\n    },\n)\nwith urllib.request.urlopen(request) as response:\n    print(response.status, response.read().decode())"},{"language":"go","label":"Go","code":"package main\n\nimport (\n\t\"bytes\"\n\t\"crypto/hmac\"\n\t\"crypto/rand\"\n\t\"crypto/sha256\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"time\"\n)\n\nfunc main() {\n\tsecret := []byte(\"scvd-trade-sandbox-secret-anyone-may-use\") // your own, once the account is live\n\tbody := `{\"summary\":\"what to remember\",\"order_ref\":\"your-order-id\"}`\n\ttimestamp := strconv.FormatInt(time.Now().Unix(), 10)\n\traw := make([]byte, 16)\n\trand.Read(raw)\n\tnonce := hex.EncodeToString(raw)\n\tmac := hmac.New(sha256.New, secret)\n\tmac.Write([]byte(timestamp + \".\" + nonce + \".\" + body))\n\tsignature := hex.EncodeToString(mac.Sum(nil))\n\n\treq, _ := http.NewRequest(\"POST\", \"https://scvd.store/api/trade/sandbox/context_anchor\", bytes.NewBufferString(body))\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"X-Trade-Key\", \"scvd-trade-sandbox-key\")\n\treq.Header.Set(\"X-Trade-Timestamp\", timestamp)\n\treq.Header.Set(\"X-Trade-Nonce\", nonce)\n\treq.Header.Set(\"X-Trade-Signature\", \"sha256=\"+signature)\n\tres, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tfmt.Println(res.Status)\n}"}],"headers_in_our_dialect":{"provider_key":"X-Trade-Key","timestamp":"X-Trade-Timestamp","nonce":"X-Trade-Nonce","signature":"X-Trade-Signature"},"sign":"HMAC-SHA256 with the secret you issued us, over timestamp + \".\" + nonce + \".\" + exact_raw_body; send as X-Trade-Signature: sha256=<hex>. Timestamp is unix seconds; nonce is 32 hex characters, fresh per request.","then":"Expect 200 and one JSON object inside 30 seconds. Anything else is a named refusal with delivered:false and billed:false; see errors.","reference_signer":"https://github.com/seancrecord/scvd-general-store-repo/blob/main/src/lib/trade-auth.ts","limits":{"body_max_bytes":1048576,"timestamp_window_seconds":300,"nonce_remembered_seconds":600,"order_ref_remembered_seconds":86400,"order_ref_max_chars":120,"response_seconds":30}},"dialects":[{"id":"canonical","name":"scvd trade dialect v1","headers":{"provider_key":"X-Trade-Key","timestamp":"X-Trade-Timestamp","nonce":"X-Trade-Nonce","signature":"X-Trade-Signature"},"signing_string":"timestamp.nonce.body","signing_string_in_words":"timestamp + \".\" + nonce + \".\" + exact_raw_body","signature":"sha256=<lowercase hex of HMAC-SHA256(secret, signing_string)>","timestamp_unit":"unix seconds","nonce":"^[0-9a-f]{32}$","window_seconds":300},{"id":"hal","name":"Hal marketplace webhook v1","headers":{"provider_key":"X-Hal-Provider-Key","timestamp":"X-Hal-Timestamp","nonce":"X-Hal-Nonce","signature":"X-Hal-Signature"},"signing_string":"timestamp.nonce.body","signing_string_in_words":"timestamp + \".\" + nonce + \".\" + exact_raw_body","signature":"sha256=<lowercase hex of HMAC-SHA256(secret, signing_string)>","timestamp_unit":"unix seconds","nonce":"^[0-9a-f]{32}$","window_seconds":300}],"worked_example":{"what_this_is":"One sandbox order with fixed inputs, every byte shown, so you can diff your signer against ours line by line. The timestamp is in the past on purpose: send it and the door answers stale_timestamp, which is also worth seeing once.","door":"https://scvd.store/api/trade/sandbox/context_anchor","body":"{\"summary\":\"The agent was halfway through a migration.\",\"order_ref\":\"example-0001\"}","body_bytes":83,"headers":{"X-Trade-Key":"scvd-trade-sandbox-key","X-Trade-Timestamp":"1756900000","X-Trade-Nonce":"0123456789abcdef0123456789abcdef","X-Trade-Signature":"sha256=b0f2877955d537a132badbd658376032f4b73c6151edddce4edce81696608bab"},"signing_string":"1756900000.0123456789abcdef0123456789abcdef.{\"summary\":\"The agent was halfway through a migration.\",\"order_ref\":\"example-0001\"}","signing_string_sha256":"3cf9ed9d8b994af5dfc5a8d74877e43a10ec1b38b7ca525286a349da044f4de6","secret":"scvd-trade-sandbox-secret-anyone-may-use","how_to_compare":"HMAC-SHA256 the signing_string with the secret; hex must equal the X-Trade-Signature value after sha256=. If your sha256 of the signing string differs from signing_string_sha256, your bytes differ before any secret is involved."},"pricing":{"rule":"trade_price = ceil_to_cent( retail × (1 + uplift) ÷ (1 − partner_share) ). After the partner's share the store nets retail plus the uplift, never less than the front door would have taken.","uplift_bps":2000,"min_retail_usd":0.5,"example_share_bps":500,"cadence":"One-off, per delivery. Nothing at the counter recurs, and an account is never charged for a delivery that did not happen.","what_the_partner_charges_its_customer":"Theirs to set. The trade price is the floor they owe us per delivery, not a price we set for their customer.","settlement_currency":"Every price, statement line and credit ceiling at the counter is in US dollars. The store prints no sats or other-currency figure: it holds no exchange rate and will not pretend to. An account that lists in another unit lists at its own rate's equivalent of trade_price_usd at listing time; the statement bills the USD trade price, and drift between listing and settlement is the account holder's to carry or to raise as a letter.","share_ladder_offered":[{"from_monthly_deliveries":0,"partner_share_bps":500},{"from_monthly_deliveries":1000,"partner_share_bps":800},{"from_monthly_deliveries":10000,"partner_share_bps":1200}],"share_ladder_note":"The standard offer for a new account: the partner's share rises with live deliveries in the calendar month, highest tier reached wins, and the trade price is derived from the share so the store's net stays retail plus the uplift at every tier. An account with its own contract keeps its flat share."},"shelf":[{"item_id":"certificate_of_patronage","name":"Certificate of Patronage","retail_usd":20,"trade_price_usd_at_example_share":25.27,"store_net_usd_at_example_share":24,"cadence":"one_off","input_kind":"none","fields":["order_ref","agent_name","purpose","callback_url"],"item_page":"https://scvd.store/menu/certificate_of_patronage","front_door":"https://scvd.store/api/buy/certificate_of_patronage"},{"item_id":"context_anchor","name":"Context Anchor","retail_usd":1,"trade_price_usd_at_example_share":1.27,"store_net_usd_at_example_share":1.2,"cadence":"one_off","input_kind":"summary","fields":["summary","order_ref","agent_name","purpose","callback_url"],"item_page":"https://scvd.store/menu/context_anchor","front_door":"https://scvd.store/api/buy/context_anchor"},{"item_id":"bitcoin_anchor","name":"A Bitcoin Anchor","retail_usd":1,"trade_price_usd_at_example_share":1.27,"store_net_usd_at_example_share":1.2,"cadence":"one_off","input_kind":"digest","fields":["digest","label","order_ref","agent_name","purpose","callback_url"],"item_page":"https://scvd.store/menu/bitcoin_anchor","front_door":"https://scvd.store/api/buy/bitcoin_anchor"},{"item_id":"signature_agent_card","name":"The Calling Card","retail_usd":0.99,"trade_price_usd_at_example_share":1.26,"store_net_usd_at_example_share":1.19,"cadence":"one_off","input_kind":"url","fields":["url","order_ref","agent_name","purpose","callback_url"],"item_page":"https://scvd.store/menu/signature_agent_card","front_door":"https://scvd.store/api/buy/signature_agent_card"},{"item_id":"onpage_audit","name":"The Shop Window","retail_usd":3,"trade_price_usd_at_example_share":3.79,"store_net_usd_at_example_share":3.6,"cadence":"one_off","input_kind":"url","fields":["url","order_ref","agent_name","purpose","callback_url"],"item_page":"https://scvd.store/menu/onpage_audit","front_door":"https://scvd.store/api/buy/onpage_audit"},{"item_id":"service_audit","name":"The Once-Over","subtitle":"one signed check of your x402 endpoint, at a permanent URL","retail_usd":5,"trade_price_usd_at_example_share":6.32,"store_net_usd_at_example_share":6,"cadence":"one_off","input_kind":"url","fields":["url","order_ref","agent_name","purpose","callback_url"],"item_page":"https://scvd.store/menu/service_audit","front_door":"https://scvd.store/api/buy/service_audit"},{"item_id":"passport_refresh","name":"The Refresh","retail_usd":1,"trade_price_usd_at_example_share":1.27,"store_net_usd_at_example_share":1.2,"cadence":"one_off","input_kind":"url","fields":["url","order_ref","agent_name","purpose","callback_url"],"item_page":"https://scvd.store/menu/passport_refresh","front_door":"https://scvd.store/api/buy/passport_refresh"},{"item_id":"good_buyer","name":"The Good Buyer","retail_usd":0.99,"trade_price_usd_at_example_share":1.26,"store_net_usd_at_example_share":1.19,"cadence":"one_off","input_kind":"url","fields":["url","max_usd","no_spend_controls","order_ref","agent_name","purpose","callback_url"],"item_page":"https://scvd.store/menu/good_buyer","front_door":"https://scvd.store/api/buy/good_buyer"},{"item_id":"provenance_check","name":"The Company an Address Keeps","subtitle":"which doors advertised this receiving address, and when — signed, from the public chain","retail_usd":5,"trade_price_usd_at_example_share":6.32,"store_net_usd_at_example_share":6,"cadence":"one_off","input_kind":"address","fields":["address","order_ref","agent_name","purpose","callback_url"],"item_page":"https://scvd.store/menu/provenance_check","front_door":"https://scvd.store/api/buy/provenance_check"}],"eligible_but_not_yet_shelved":["hello","the_statement","luckies","pack","coffees_for_closers","graffiti_on_a_train","a2a_repair_kit","standing_watch","conformance_watch","launch_check","opening_day","recurring_patronage","trust_profile","operator_statement"],"accounts":[{"account":"sandbox","name":"The sandbox","site":"https://scvd.store/trade","dialect":"canonical","mode":"test","provisioned":true,"door_status":"open","secret_scope":"per_account","secret_scope_note":"per_account: one pair verifies every item. per_listing: the partner issues one pair per listing and each item verifies against its own; an item without a pair on this side answers 503 account_not_provisioned naming the item.","opened":"2026-09-03","partner_share_bps":500,"settles_in":"nothing — a sandbox owes nothing and is owed nothing","daily_cap":50,"credit_ceiling_usd":0,"door":"https://scvd.store/api/trade/sandbox/{item_id}","claim":"https://scvd.store/api/trade/sandbox/claim?order_ref=","check_desk":"https://scvd.store/api/trade/sandbox/check","statement":"https://scvd.store/api/trade/sandbox/statement","fixture":{"what_this_is":"One deterministic order for this account: send this body to this door, signed in the account's dialect, and assert the invariants. In test mode it delivers real goods and bills nothing; a second send with the same order_ref inside a day returns the first delivery.","door":"https://scvd.store/api/trade/sandbox/certificate_of_patronage","item_id":"certificate_of_patronage","body":"{\"order_ref\":\"sandbox-fixture-0001\"}","expected_status":200,"expected":{"settled_via":"trade_account_test","trade.account":"sandbox","trade.trade_price_usd":25.27,"trade.net_usd":24,"trade.order_ref":"sandbox-fixture-0001"},"invariants":[{"path":"item_id","holds":"equals the item_id in the path"},{"path":"deliverable","holds":"a non-empty string: the goods, exactly what the front door delivers for the item"},{"path":"settled_via","holds":"\"trade_account\" on a live account, \"trade_account_test\" while the account is in test"},{"path":"paid_usdc","holds":"absent: no payment reached this store"},{"path":"trade.account","holds":"equals the account in the path"},{"path":"trade.trade_price_usd","holds":"equals the item's trade_price_usd on your account row at the share in force"},{"path":"trade.net_usd","holds":"trade_price_usd less your share, rounded to the cent"},{"path":"trade.instruction_digest","holds":"sha256 hex of the exact signing string you sent (timestamp.nonce.body in your dialect)"},{"path":"trade.order_ref","holds":"echoes your order_ref when you sent one"},{"path":"signed_with","holds":"\"current\" or \"previous\": which of the two secrets in service verified the call"},{"path":"certificate.settled_via","holds":"same as the top-level settled_via, inside the signed fields"},{"path":"certificate.trade_partner","holds":"equals the account; signed"},{"path":"certificate.trade_price_usd","holds":"equals trade.trade_price_usd; signed"},{"path":"certificate.trade_instruction","holds":"equals trade.instruction_digest; signed"},{"path":"certificate.paid_usdc, .asset, .network, .payer, .settlement_tx","holds":"all absent: the certificate names no chain, because none was involved"},{"path":"signature, public_key, verify_url","holds":"present; the certificate verifies offline against the published key and at verify_url without trusting either party"}],"before_the_secret_exists":"The order door answers 503 account_not_provisioned and the check desk still reports every check that needs no secret. An unsigned call to a provisioned account answers 401 missing_headers."},"published_secret":"scvd-trade-sandbox-secret-anyone-may-use","published_provider_key":"scvd-trade-sandbox-key","note":"A sandbox: anyone may sign with this secret. Real goods, marked test, booked nowhere, fifty a day.","items":[{"item_id":"certificate_of_patronage","door":"https://scvd.store/api/trade/sandbox/certificate_of_patronage","provisioned":true,"trade_price_usd":25.27,"partner_share_usd":1.27,"store_net_usd":24,"fields":["order_ref","agent_name","purpose","callback_url"]},{"item_id":"context_anchor","door":"https://scvd.store/api/trade/sandbox/context_anchor","provisioned":true,"trade_price_usd":1.27,"partner_share_usd":0.07,"store_net_usd":1.2,"fields":["summary","order_ref","agent_name","purpose","callback_url"]},{"item_id":"bitcoin_anchor","door":"https://scvd.store/api/trade/sandbox/bitcoin_anchor","provisioned":true,"trade_price_usd":1.27,"partner_share_usd":0.07,"store_net_usd":1.2,"fields":["digest","label","order_ref","agent_name","purpose","callback_url"]},{"item_id":"signature_agent_card","door":"https://scvd.store/api/trade/sandbox/signature_agent_card","provisioned":true,"trade_price_usd":1.26,"partner_share_usd":0.07,"store_net_usd":1.19,"fields":["url","order_ref","agent_name","purpose","callback_url"]},{"item_id":"onpage_audit","door":"https://scvd.store/api/trade/sandbox/onpage_audit","provisioned":true,"trade_price_usd":3.79,"partner_share_usd":0.19,"store_net_usd":3.6,"fields":["url","order_ref","agent_name","purpose","callback_url"]},{"item_id":"service_audit","door":"https://scvd.store/api/trade/sandbox/service_audit","provisioned":true,"trade_price_usd":6.32,"partner_share_usd":0.32,"store_net_usd":6,"fields":["url","order_ref","agent_name","purpose","callback_url"]},{"item_id":"passport_refresh","door":"https://scvd.store/api/trade/sandbox/passport_refresh","provisioned":true,"trade_price_usd":1.27,"partner_share_usd":0.07,"store_net_usd":1.2,"fields":["url","order_ref","agent_name","purpose","callback_url"]},{"item_id":"good_buyer","door":"https://scvd.store/api/trade/sandbox/good_buyer","provisioned":true,"trade_price_usd":1.26,"partner_share_usd":0.07,"store_net_usd":1.19,"fields":["url","max_usd","no_spend_controls","order_ref","agent_name","purpose","callback_url"]},{"item_id":"provenance_check","door":"https://scvd.store/api/trade/sandbox/provenance_check","provisioned":true,"trade_price_usd":6.32,"partner_share_usd":0.32,"store_net_usd":6,"fields":["address","order_ref","agent_name","purpose","callback_url"]}]},{"account":"hal","name":"Hal","site":"https://halmarket.dev","dialect":"hal","mode":"live","provisioned":true,"door_status":"open","secret_scope":"per_listing","secret_scope_note":"per_account: one pair verifies every item. per_listing: the partner issues one pair per listing and each item verifies against its own; an item without a pair on this side answers 503 account_not_provisioned naming the item.","opened":"2026-09-03","partner_share_bps":500,"settles_in":"sats over Lightning (OpenNode, mainnet), credited by Hal at 95% of each listing's fixed sats price; this statement is in USD","daily_cap":200,"credit_ceiling_usd":2500,"door":"https://scvd.store/api/trade/hal/{item_id}","claim":"https://scvd.store/api/trade/hal/claim?order_ref=","check_desk":"https://scvd.store/api/trade/hal/check","statement":"https://scvd.store/api/trade/hal/statement","fixture":{"what_this_is":"One deterministic order for this account: send this body to this door, signed in the account's dialect, and assert the invariants. In test mode it delivers real goods and bills nothing; a second send with the same order_ref inside a day returns the first delivery.","door":"https://scvd.store/api/trade/hal/certificate_of_patronage","item_id":"certificate_of_patronage","body":"{\"order_ref\":\"hal-fixture-0001\"}","expected_status":200,"expected":{"settled_via":"trade_account","trade.account":"hal","trade.trade_price_usd":25.27,"trade.net_usd":24,"trade.order_ref":"hal-fixture-0001"},"invariants":[{"path":"item_id","holds":"equals the item_id in the path"},{"path":"deliverable","holds":"a non-empty string: the goods, exactly what the front door delivers for the item"},{"path":"settled_via","holds":"\"trade_account\" on a live account, \"trade_account_test\" while the account is in test"},{"path":"paid_usdc","holds":"absent: no payment reached this store"},{"path":"trade.account","holds":"equals the account in the path"},{"path":"trade.trade_price_usd","holds":"equals the item's trade_price_usd on your account row at the share in force"},{"path":"trade.net_usd","holds":"trade_price_usd less your share, rounded to the cent"},{"path":"trade.instruction_digest","holds":"sha256 hex of the exact signing string you sent (timestamp.nonce.body in your dialect)"},{"path":"trade.order_ref","holds":"echoes your order_ref when you sent one"},{"path":"signed_with","holds":"\"current\" or \"previous\": which of the two secrets in service verified the call"},{"path":"certificate.settled_via","holds":"same as the top-level settled_via, inside the signed fields"},{"path":"certificate.trade_partner","holds":"equals the account; signed"},{"path":"certificate.trade_price_usd","holds":"equals trade.trade_price_usd; signed"},{"path":"certificate.trade_instruction","holds":"equals trade.instruction_digest; signed"},{"path":"certificate.paid_usdc, .asset, .network, .payer, .settlement_tx","holds":"all absent: the certificate names no chain, because none was involved"},{"path":"signature, public_key, verify_url","holds":"present; the certificate verifies offline against the published key and at verify_url without trusting either party"}],"before_the_secret_exists":"The order door answers 503 account_not_provisioned and the check desk still reports every check that needs no secret. An unsigned call to a provisioned account answers 401 missing_headers."},"partner_terms":["Both secrets are generated by Hal when the seller creates a listing, one pair per listing: the provider key sent in X-Hal-Provider-Key and the HMAC signing secret. The seller saves each pair against its item on this side; nothing is issued from here.","One listing per item, each with a concrete endpoint URL (the item's door below) and a fixed integer price in sats set at listing time. Hal does no USD-to-sats conversion per call.","One POST per order with a 30-second timeout and no automatic retry; a fresh attempt carries a fresh timestamp, nonce and signature and is a new order on Hal's side. Hal does not add an order_ref to the body, so on this side too each attempt is a fresh sale.","A failed call (error status, timeout, invalid JSON, oversized body) refunds Hal's buyer and credits nothing; a valid JSON delivery finalises the seller credit and Hal's fee. No clawback after delivery on either side.","Rotation is a cutover: Hal replaces the secret and pauses the listing; the seller sets the new value here and then resumes. No two secrets are active at once on Hal's side.","Hal publishes no fixed egress IPs and no bilateral per-order statement API; reconciliation is Hal's seller dashboard against this account's signed statement.","Hal has no sats sandbox: a paused listing and the fixture on this row cover preflight without spend; any paid canary uses real sats and needs explicit authorisation on both sides."],"items":[{"item_id":"certificate_of_patronage","door":"https://scvd.store/api/trade/hal/certificate_of_patronage","provisioned":true,"trade_price_usd":25.27,"partner_share_usd":1.27,"store_net_usd":24,"fields":["order_ref","agent_name","purpose","callback_url"]},{"item_id":"context_anchor","door":"https://scvd.store/api/trade/hal/context_anchor","provisioned":true,"trade_price_usd":1.27,"partner_share_usd":0.07,"store_net_usd":1.2,"fields":["summary","order_ref","agent_name","purpose","callback_url"]},{"item_id":"bitcoin_anchor","door":"https://scvd.store/api/trade/hal/bitcoin_anchor","provisioned":true,"trade_price_usd":1.27,"partner_share_usd":0.07,"store_net_usd":1.2,"fields":["digest","label","order_ref","agent_name","purpose","callback_url"]},{"item_id":"signature_agent_card","door":"https://scvd.store/api/trade/hal/signature_agent_card","provisioned":true,"trade_price_usd":1.26,"partner_share_usd":0.07,"store_net_usd":1.19,"fields":["url","order_ref","agent_name","purpose","callback_url"]},{"item_id":"onpage_audit","door":"https://scvd.store/api/trade/hal/onpage_audit","provisioned":true,"trade_price_usd":3.79,"partner_share_usd":0.19,"store_net_usd":3.6,"fields":["url","order_ref","agent_name","purpose","callback_url"]},{"item_id":"service_audit","door":"https://scvd.store/api/trade/hal/service_audit","provisioned":true,"trade_price_usd":6.32,"partner_share_usd":0.32,"store_net_usd":6,"fields":["url","order_ref","agent_name","purpose","callback_url"]},{"item_id":"passport_refresh","door":"https://scvd.store/api/trade/hal/passport_refresh","provisioned":true,"trade_price_usd":1.27,"partner_share_usd":0.07,"store_net_usd":1.2,"fields":["url","order_ref","agent_name","purpose","callback_url"]},{"item_id":"good_buyer","door":"https://scvd.store/api/trade/hal/good_buyer","provisioned":true,"trade_price_usd":1.26,"partner_share_usd":0.07,"store_net_usd":1.19,"fields":["url","max_usd","no_spend_controls","order_ref","agent_name","purpose","callback_url"]},{"item_id":"provenance_check","door":"https://scvd.store/api/trade/hal/provenance_check","provisioned":true,"trade_price_usd":6.32,"partner_share_usd":0.32,"store_net_usd":6,"fields":["address","order_ref","agent_name","purpose","callback_url"]}]}],"expected_outcome":"200 with the same delivery object the front door returns for that item — deliverable, any item extras, the signed certificate with signature, public key and verify_url — plus a `trade` block naming the account, the trade price, the store's net and the sha256 of your signed instruction, and settled_via saying trade_account (or trade_account_test while the account is in test). No paid_usdc, no network, no payer: none applied.","response_invariants":[{"path":"item_id","holds":"equals the item_id in the path"},{"path":"deliverable","holds":"a non-empty string: the goods, exactly what the front door delivers for the item"},{"path":"settled_via","holds":"\"trade_account\" on a live account, \"trade_account_test\" while the account is in test"},{"path":"paid_usdc","holds":"absent: no payment reached this store"},{"path":"trade.account","holds":"equals the account in the path"},{"path":"trade.trade_price_usd","holds":"equals the item's trade_price_usd on your account row at the share in force"},{"path":"trade.net_usd","holds":"trade_price_usd less your share, rounded to the cent"},{"path":"trade.instruction_digest","holds":"sha256 hex of the exact signing string you sent (timestamp.nonce.body in your dialect)"},{"path":"trade.order_ref","holds":"echoes your order_ref when you sent one"},{"path":"signed_with","holds":"\"current\" or \"previous\": which of the two secrets in service verified the call"},{"path":"certificate.settled_via","holds":"same as the top-level settled_via, inside the signed fields"},{"path":"certificate.trade_partner","holds":"equals the account; signed"},{"path":"certificate.trade_price_usd","holds":"equals trade.trade_price_usd; signed"},{"path":"certificate.trade_instruction","holds":"equals trade.instruction_digest; signed"},{"path":"certificate.paid_usdc, .asset, .network, .payer, .settlement_tx","holds":"all absent: the certificate names no chain, because none was involved"},{"path":"signature, public_key, verify_url","holds":"present; the certificate verifies offline against the published key and at verify_url without trusting either party"}],"errors":[{"status":404,"code":"unknown_account","meaning":"No trade account by that name.","what_to_do":"Check the path segment against your account row at /api/trade/contract."},{"status":503,"code":"counter_closed","meaning":"The replay store is unreachable on this side, so the counter fails closed rather than risk honouring one instruction twice.","what_to_do":"Do not retry in a loop; the condition is ours to fix and the keeper is paged. Retry after a minute."},{"status":503,"code":"account_not_provisioned","meaning":"This account's signing secret is not set on this side yet, so nothing can be verified and nothing is delivered or billed.","what_to_do":"Opening the account is the keeper's hand once a secret exists between us. Until then the sandbox is open, and this account's check desk still answers every check it can without a secret: headers, timestamp, nonce shape, signature shape, and the sha256 of your signing string."},{"status":413,"code":"body_too_large","meaning":"The body is over one mebibyte.","what_to_do":"Send only the item's fields; the terms document lists them."},{"status":401,"code":"missing_headers","meaning":"A required signing header is absent.","what_to_do":"Send every header your dialect names, on every call."},{"status":401,"code":"bad_provider_key","meaning":"The provider key does not match the one on the account.","what_to_do":"Check which key you issued us; a rotated key needs the keeper's hand on this side."},{"status":401,"code":"bad_timestamp","meaning":"The timestamp is not an integer in the unit your dialect states.","what_to_do":"Unix seconds or milliseconds as your account row says, digits only."},{"status":401,"code":"stale_timestamp","meaning":"The timestamp is outside the window, past or future.","what_to_do":"Sign at send time with a synchronised clock; do not reuse a signed request."},{"status":401,"code":"bad_nonce","meaning":"The nonce is not the shape your dialect requires.","what_to_do":"Thirty-two hex characters, fresh per request."},{"status":401,"code":"bad_signature","meaning":"The HMAC does not verify against the secret in service or the previous one.","what_to_do":"Sign the exact bytes you send, in the order timestamp.nonce.body, and compare with the reference signer before assuming the secret is wrong."},{"status":409,"code":"replayed","meaning":"This nonce (or this exact instruction) has already been presented.","what_to_do":"Nothing was delivered on this call. If you are retrying a timed-out order, send order_ref and a FRESH nonce: the same order_ref returns the original delivery."},{"status":404,"code":"not_found","meaning":"No delivery on this account carries that order_ref.","what_to_do":"Check the reference; deliveries are searchable by order_ref for as long as the rows are kept, and a delivery without one cannot be recovered this way."},{"status":404,"code":"not_at_the_counter","meaning":"The item is not on your account, or not traded at the counter at all.","what_to_do":"Order from the items on your account row; ask the keeper to add one."},{"status":400,"code":"bad_request","meaning":"The body is not a JSON object, or the item's required field is missing or malformed.","what_to_do":"The terms document names each item's fields; the error names the one at fault."},{"status":400,"code":"target_refused","meaning":"The URL is not one we will probe: private, loopback, non-https, or our own hostname.","what_to_do":"Send a public https door. We do not sell audits of ourselves."},{"status":429,"code":"desk_rate_limited","meaning":"The check desk has answered this account's hourly budget of diagnoses.","what_to_do":"Wait for the hour to roll. The budget bounds how fast anyone can use the desk as an oracle; a partner debugging a signer needs a handful of calls, not hundreds."},{"status":403,"code":"cross_site_refused","meaning":"A browser form was submitted from another origin.","what_to_do":"The payout form is only accepted from the store's own admin page; a script records payouts with a JSON body instead."},{"status":429,"code":"credit_ceiling_reached","meaning":"Your live account's unpaid net has reached its credit ceiling.","what_to_do":"Settle the statement; the ceiling is printed on your account row and the outstanding figure on /api/trade/ledger. The keeper can raise it."},{"status":429,"code":"cap_reached","meaning":"Your account has ordered its daily cap.","what_to_do":"The cap is the blast-radius bound on a leaked secret, not a rate limit; it resets at UTC midnight and the keeper can raise it."}],"catalog":"https://scvd.store/api/trade/catalog","ledger":"https://scvd.store/api/trade/ledger","sandbox":"https://scvd.store/api/trade/sandbox/check","room":"https://scvd.store/trade","honest_limits":"The store sees no payment on this door and signs none. A trade certificate proves the store delivered on a signed instruction from a named account; it does not prove the account's customer paid, was refunded, or existed. The receivable is derived from delivery rows on a capped read that says when it was cut short; the daily cap is counted on eventually consistent storage and can overshoot by a unit under a race. Nothing here is a rail, and the payout side of a statement is recorded by a person.","security":{"what_this_does_in_your_name":"Verifies an HMAC-SHA256 signature over your timestamp, nonce and exact body against a secret you issued; refuses timestamps outside a five-minute window and any nonce seen before, on a strongly consistent store; then makes and signs the goods exactly as the front door would. Where the item is a probe, we fetch the URL you sent, once, in our own name.","what_it_stores_about_you":"One ledger row per delivery: account, item, certificate id, trade price, the sha256 of your signed instruction, and your order_ref if you sent one. The body of your request is not stored; the signed goods are, as they are for any sale. Secrets you issue us are Worker secrets, never in the repository, never in a response or a log.","what_we_never_do":"No account, cookie, caller identifier or IP-based budget. Budgets bound our cost, not caller rank. Requests are never sold, shared or published. The weekly census reads public discovery feeds, never these requests.","standards":"Disclosure is private-first and symmetric: notify the operator before publication, including our own defects. Corrections are dated and public. Signed artifacts verify offline against our published key.","reporting":"https://scvd.store/.well-known/security.txt for a vulnerability, https://scvd.store/corrections for something we got wrong."}}