Complete Agentic Checkout Session
curl --request POST \
--url https://omnicommerce.sg/api/v1/checkout-sessions/{sessionId}/complete \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"paymentProof": {}
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({paymentProof: {}})
};
fetch('https://omnicommerce.sg/api/v1/checkout-sessions/{sessionId}/complete', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://omnicommerce.sg/api/v1/checkout-sessions/{sessionId}/complete"
payload = { "paymentProof": {} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"ok": true,
"apiVersion": "agentic_checkout_v1",
"session": {
"id": "<string>",
"organizationId": "<string>",
"status": "ready_for_payment",
"paymentRail": "acp_stripe",
"currency": "<string>",
"totalAmount": 123,
"paymentRequirements": {},
"expiresAt": "<string>",
"subtotalAmount": 123,
"shippingAmount": 123,
"taxAmount": 123,
"discountAmount": 123,
"cartVersion": 123,
"buyer": {},
"shippingAddress": {},
"billingAddress": {},
"orderId": "<string>",
"completedAt": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>"
},
"items": [
{
"id": "<string>",
"productId": "<string>",
"sku": "<string>",
"title": "<string>",
"quantity": 123,
"unitAmount": 123,
"currency": "<string>",
"imageUrl": "<string>",
"productSnapshot": {}
}
],
"settlement": {
"ok": true,
"providerPaymentId": "<string>",
"settlementReference": "<string>",
"errorCode": "<string>",
"errorMessage": "<string>"
}
}{
"ok": true,
"apiVersion": "agentic_checkout_v1",
"session": {
"id": "<string>",
"organizationId": "<string>",
"status": "ready_for_payment",
"paymentRail": "acp_stripe",
"currency": "<string>",
"totalAmount": 123,
"paymentRequirements": {},
"expiresAt": "<string>",
"subtotalAmount": 123,
"shippingAmount": 123,
"taxAmount": 123,
"discountAmount": 123,
"cartVersion": 123,
"buyer": {},
"shippingAddress": {},
"billingAddress": {},
"orderId": "<string>",
"completedAt": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>"
},
"items": [
{
"id": "<string>",
"productId": "<string>",
"sku": "<string>",
"title": "<string>",
"quantity": 123,
"unitAmount": 123,
"currency": "<string>",
"imageUrl": "<string>",
"productSnapshot": {}
}
],
"settlement": {
"ok": true,
"providerPaymentId": "<string>",
"settlementReference": "<string>",
"errorCode": "<string>",
"errorMessage": "<string>"
}
}Agentic Checkout
Complete Agentic Checkout Session
Settle the selected rail and create a native agentic order. Settlement failures return 402 and leave the session in ready_for_payment.
POST
/
api
/
v1
/
checkout-sessions
/
{sessionId}
/
complete
Complete Agentic Checkout Session
curl --request POST \
--url https://omnicommerce.sg/api/v1/checkout-sessions/{sessionId}/complete \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"paymentProof": {}
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({paymentProof: {}})
};
fetch('https://omnicommerce.sg/api/v1/checkout-sessions/{sessionId}/complete', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://omnicommerce.sg/api/v1/checkout-sessions/{sessionId}/complete"
payload = { "paymentProof": {} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"ok": true,
"apiVersion": "agentic_checkout_v1",
"session": {
"id": "<string>",
"organizationId": "<string>",
"status": "ready_for_payment",
"paymentRail": "acp_stripe",
"currency": "<string>",
"totalAmount": 123,
"paymentRequirements": {},
"expiresAt": "<string>",
"subtotalAmount": 123,
"shippingAmount": 123,
"taxAmount": 123,
"discountAmount": 123,
"cartVersion": 123,
"buyer": {},
"shippingAddress": {},
"billingAddress": {},
"orderId": "<string>",
"completedAt": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>"
},
"items": [
{
"id": "<string>",
"productId": "<string>",
"sku": "<string>",
"title": "<string>",
"quantity": 123,
"unitAmount": 123,
"currency": "<string>",
"imageUrl": "<string>",
"productSnapshot": {}
}
],
"settlement": {
"ok": true,
"providerPaymentId": "<string>",
"settlementReference": "<string>",
"errorCode": "<string>",
"errorMessage": "<string>"
}
}{
"ok": true,
"apiVersion": "agentic_checkout_v1",
"session": {
"id": "<string>",
"organizationId": "<string>",
"status": "ready_for_payment",
"paymentRail": "acp_stripe",
"currency": "<string>",
"totalAmount": 123,
"paymentRequirements": {},
"expiresAt": "<string>",
"subtotalAmount": 123,
"shippingAmount": 123,
"taxAmount": 123,
"discountAmount": 123,
"cartVersion": 123,
"buyer": {},
"shippingAddress": {},
"billingAddress": {},
"orderId": "<string>",
"completedAt": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>"
},
"items": [
{
"id": "<string>",
"productId": "<string>",
"sku": "<string>",
"title": "<string>",
"quantity": 123,
"unitAmount": 123,
"currency": "<string>",
"imageUrl": "<string>",
"productSnapshot": {}
}
],
"settlement": {
"ok": true,
"providerPaymentId": "<string>",
"settlementReference": "<string>",
"errorCode": "<string>",
"errorMessage": "<string>"
}
}Authorizations
Bearer API key for server-to-server access. Session auth is also supported in first-party UI flows.
Headers
Optional idempotency key for completion retries.
Maximum string length:
180Path Parameters
Query Parameters
Optional organization scope for OAuth clients that can access multiple organizations.
Maximum string length:
120Body
application/json
Rail-specific payment proof. ACP uses { sharedPaymentTokenId: string }; x402 uses { paymentPayload: object } or { xPayment: object }. Local testing may use { test: true, testPaymentToken: string } when test settlement is enabled.
Maximum string length:
180