curl --request POST \
--url https://{host}/v1/markets/{marketId}/sealed-bids \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--header 'X-Ambient-Actor: <api-key>' \
--header 'X-Ambient-Timestamp: <api-key>' \
--data '
{
"commandId": "table-bid-1",
"principalId": "diner-1",
"amountMinor": 8800,
"currency": "USD"
}
'import requests
url = "https://{host}/v1/markets/{marketId}/sealed-bids"
payload = {
"commandId": "table-bid-1",
"principalId": "diner-1",
"amountMinor": 8800,
"currency": "USD"
}
headers = {
"X-Ambient-Actor": "<api-key>",
"X-Ambient-Timestamp": "<api-key>",
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Ambient-Actor': '<api-key>',
'X-Ambient-Timestamp': '<api-key>',
Authorization: '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
commandId: 'table-bid-1',
principalId: 'diner-1',
amountMinor: 8800,
currency: 'USD'
})
};
fetch('https://{host}/v1/markets/{marketId}/sealed-bids', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{host}/v1/markets/{marketId}/sealed-bids",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'commandId' => 'table-bid-1',
'principalId' => 'diner-1',
'amountMinor' => 8800,
'currency' => 'USD'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json",
"X-Ambient-Actor: <api-key>",
"X-Ambient-Timestamp: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{host}/v1/markets/{marketId}/sealed-bids"
payload := strings.NewReader("{\n \"commandId\": \"table-bid-1\",\n \"principalId\": \"diner-1\",\n \"amountMinor\": 8800,\n \"currency\": \"USD\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Ambient-Actor", "<api-key>")
req.Header.Add("X-Ambient-Timestamp", "<api-key>")
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{host}/v1/markets/{marketId}/sealed-bids")
.header("X-Ambient-Actor", "<api-key>")
.header("X-Ambient-Timestamp", "<api-key>")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"commandId\": \"table-bid-1\",\n \"principalId\": \"diner-1\",\n \"amountMinor\": 8800,\n \"currency\": \"USD\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{host}/v1/markets/{marketId}/sealed-bids")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Ambient-Actor"] = '<api-key>'
request["X-Ambient-Timestamp"] = '<api-key>'
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"commandId\": \"table-bid-1\",\n \"principalId\": \"diner-1\",\n \"amountMinor\": 8800,\n \"currency\": \"USD\"\n}"
response = http.request(request)
puts response.read_body{
"market": {
"id": "<string>",
"version": 2,
"state": "draft",
"creator": {
"principalId": "<string>",
"actorId": "<string>",
"authorityRef": "<string>"
},
"subject": {
"schema": "restaurant-table.v1",
"data": {
"partySize": 2,
"startsAt": "2026-09-19T19:00:00Z"
}
},
"mechanism": {
"presetId": "direct-claim.v1",
"config": {
"capacity": 2,
"pricing": {
"mode": "free"
},
"confirmation": "none",
"holdDurationSeconds": -1
}
},
"mechanismState": {
"allocated": 1
},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
},
"commitments": [
{
"id": "<string>",
"version": 2,
"marketId": "<string>",
"marketVersion": 2,
"creatorPrincipalId": "<string>",
"participantPrincipalId": "<string>",
"state": "provisional",
"terms": {
"subject": {
"schema": "restaurant-table.v1",
"data": {
"partySize": 2,
"startsAt": "2026-09-19T19:00:00Z"
}
},
"pricing": {
"mode": "free"
}
},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"requiredConfirmationPrincipalIds": [
"<string>"
],
"confirmedPrincipalIds": [
"<string>"
],
"expiresAt": "2023-11-07T05:31:56Z"
}
],
"events": [
{
"id": "<string>",
"type": "market.draft_created",
"marketId": "<string>",
"marketVersion": 2,
"commandId": "<string>",
"principalId": "<string>",
"actorId": "<string>",
"occurredAt": "2023-11-07T05:31:56Z",
"data": {
"creator": {
"principalId": "<string>",
"actorId": "<string>",
"authorityRef": "<string>"
},
"subject": {
"schema": "restaurant-table.v1",
"data": {
"partySize": 2,
"startsAt": "2026-09-19T19:00:00Z"
}
},
"mechanism": {
"presetId": "direct-claim.v1",
"config": {
"capacity": 2,
"pricing": {
"mode": "free"
},
"confirmation": "none",
"holdDurationSeconds": -1
}
},
"mechanismState": {
"allocated": 1
}
},
"sequence": 2,
"authorityRef": "<string>"
}
],
"bidReceipts": [
{
"bidId": "<string>",
"marketId": "<string>",
"marketVersion": 2,
"state": "active",
"submittedAt": "2023-11-07T05:31:56Z"
}
],
"auctionResolution": {
"outcome": "no_trade"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "unauthenticated",
"message": "request authentication failed"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}Submit a sealed bid
Submits one private bid for a principal in an open sealed-forward-auction.v1 market. The response contains an amount-free receipt. A principal cannot replace or submit a second active bid.
curl --request POST \
--url https://{host}/v1/markets/{marketId}/sealed-bids \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--header 'X-Ambient-Actor: <api-key>' \
--header 'X-Ambient-Timestamp: <api-key>' \
--data '
{
"commandId": "table-bid-1",
"principalId": "diner-1",
"amountMinor": 8800,
"currency": "USD"
}
'import requests
url = "https://{host}/v1/markets/{marketId}/sealed-bids"
payload = {
"commandId": "table-bid-1",
"principalId": "diner-1",
"amountMinor": 8800,
"currency": "USD"
}
headers = {
"X-Ambient-Actor": "<api-key>",
"X-Ambient-Timestamp": "<api-key>",
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Ambient-Actor': '<api-key>',
'X-Ambient-Timestamp': '<api-key>',
Authorization: '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
commandId: 'table-bid-1',
principalId: 'diner-1',
amountMinor: 8800,
currency: 'USD'
})
};
fetch('https://{host}/v1/markets/{marketId}/sealed-bids', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{host}/v1/markets/{marketId}/sealed-bids",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'commandId' => 'table-bid-1',
'principalId' => 'diner-1',
'amountMinor' => 8800,
'currency' => 'USD'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json",
"X-Ambient-Actor: <api-key>",
"X-Ambient-Timestamp: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{host}/v1/markets/{marketId}/sealed-bids"
payload := strings.NewReader("{\n \"commandId\": \"table-bid-1\",\n \"principalId\": \"diner-1\",\n \"amountMinor\": 8800,\n \"currency\": \"USD\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Ambient-Actor", "<api-key>")
req.Header.Add("X-Ambient-Timestamp", "<api-key>")
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{host}/v1/markets/{marketId}/sealed-bids")
.header("X-Ambient-Actor", "<api-key>")
.header("X-Ambient-Timestamp", "<api-key>")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"commandId\": \"table-bid-1\",\n \"principalId\": \"diner-1\",\n \"amountMinor\": 8800,\n \"currency\": \"USD\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{host}/v1/markets/{marketId}/sealed-bids")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Ambient-Actor"] = '<api-key>'
request["X-Ambient-Timestamp"] = '<api-key>'
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"commandId\": \"table-bid-1\",\n \"principalId\": \"diner-1\",\n \"amountMinor\": 8800,\n \"currency\": \"USD\"\n}"
response = http.request(request)
puts response.read_body{
"market": {
"id": "<string>",
"version": 2,
"state": "draft",
"creator": {
"principalId": "<string>",
"actorId": "<string>",
"authorityRef": "<string>"
},
"subject": {
"schema": "restaurant-table.v1",
"data": {
"partySize": 2,
"startsAt": "2026-09-19T19:00:00Z"
}
},
"mechanism": {
"presetId": "direct-claim.v1",
"config": {
"capacity": 2,
"pricing": {
"mode": "free"
},
"confirmation": "none",
"holdDurationSeconds": -1
}
},
"mechanismState": {
"allocated": 1
},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
},
"commitments": [
{
"id": "<string>",
"version": 2,
"marketId": "<string>",
"marketVersion": 2,
"creatorPrincipalId": "<string>",
"participantPrincipalId": "<string>",
"state": "provisional",
"terms": {
"subject": {
"schema": "restaurant-table.v1",
"data": {
"partySize": 2,
"startsAt": "2026-09-19T19:00:00Z"
}
},
"pricing": {
"mode": "free"
}
},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"requiredConfirmationPrincipalIds": [
"<string>"
],
"confirmedPrincipalIds": [
"<string>"
],
"expiresAt": "2023-11-07T05:31:56Z"
}
],
"events": [
{
"id": "<string>",
"type": "market.draft_created",
"marketId": "<string>",
"marketVersion": 2,
"commandId": "<string>",
"principalId": "<string>",
"actorId": "<string>",
"occurredAt": "2023-11-07T05:31:56Z",
"data": {
"creator": {
"principalId": "<string>",
"actorId": "<string>",
"authorityRef": "<string>"
},
"subject": {
"schema": "restaurant-table.v1",
"data": {
"partySize": 2,
"startsAt": "2026-09-19T19:00:00Z"
}
},
"mechanism": {
"presetId": "direct-claim.v1",
"config": {
"capacity": 2,
"pricing": {
"mode": "free"
},
"confirmation": "none",
"holdDurationSeconds": -1
}
},
"mechanismState": {
"allocated": 1
}
},
"sequence": 2,
"authorityRef": "<string>"
}
],
"bidReceipts": [
{
"bidId": "<string>",
"marketId": "<string>",
"marketVersion": 2,
"state": "active",
"submittedAt": "2023-11-07T05:31:56Z"
}
],
"auctionResolution": {
"outcome": "no_trade"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "unauthenticated",
"message": "request authentication failed"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}Authorizations
Provisioned actor identifier.
Current Unix timestamp in seconds, within the configured clock-skew window.
Ambient-HMAC followed by a space and the unpadded base64url HMAC-SHA256 signature. See Authentication and authority for the canonical input.
Path Parameters
Client-selected market identifier.
1Body
Actor-scoped idempotency key. Retry the identical command with the same value.
1Principal represented by the authenticated actor.
1Positive bid in minor currency units.
x >= 1Three-letter uppercase currency code.
^[A-Z]{3}$"USD"
Required delegation identifier when the actor and principal differ. Omit for self-action.
1Response
Bid accepted without disclosing its amount.
Show child attributes
Show child attributes
Commitments created or changed by the command.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Amount-free receipts returned after accepted sealed bids.
Show child attributes
Show child attributes
Public result produced at close or after deterministic winner promotion.
- Option 1
- Option 2
Show child attributes
Show child attributes