Submit BSL compact action batch
POST/api/v1/bsl/orders/compact
Operational contract
This is the BSL compact facade for latency-sensitive signed action batches. Each action inside the batch still carries its own account action signature. Machine auth only authorizes the transport and business-line access.
| Requirement | Value |
|---|---|
| Agent type | institutional_agent; a standard api_agent is rejected for BSL submit. |
| Scopes | quote for quote/replace, cancel for cancels, read for protected reads. |
| Transport auth | SC-Auth-Version: 2 HMAC headers, or a provisioned X-Senticore-Order-Entry-Key where the beta bundle allows it. |
| Body | Compact SDK batch bytes or compact JSON bytes, depending client encoder. |
| Content type | Prefer application/x-senticore-order-entry-batch; application/x-senticore-bsl-batch is accepted for BSL-specific clients. |
| Response mode | Start with X-BSL-Result-Mode: ack and X-Senticore-Response-Mode: detailed. |
HTTP 200 means the edge accepted the envelope. It does not guarantee every
action made the book. Inspect ok, derivedOrderIds[], actionResults[],
receipts, and drop-copy before treating the order as live.
QuoteReplace example payload
Outcome markets use QuoteReplace and include book. Spot markets use
SpotQuoteReplace and omit book.
{
"version": 1,
"actions": [
{
"payload": {
"account": "0x2222222222222222222222222222222222222222",
"nonce": 0,
"nonce_reservation_id": null,
"ts": 1765500000000,
"action": {
"QuoteReplace": {
"market": 1,
"legs": [
{
"cancel_order_id": null,
"book": "YES",
"side": "Bid",
"price": 100000,
"qty": 100000,
"stp_mode": "skip_self",
"time_in_force": "post_only",
"is_market": false,
"reduce_only": false,
"expires_at": null
}
]
}
}
},
"signature": {
"scheme": "EcdsaSecp256k1",
"bytes": ["..."]
}
}
],
"idempotencyKey": "quote-1-yes-bid-0"
}
Expected accepted response
{
"ok": true,
"ackMode": "ack",
"seqs": [12345],
"derivedOrderIds": [
"0xfeac5884704773dd3150bef258b3f5a139dafaba0bba2190fc9d520b8a505e22"
]
}
Expected risk reject response
{
"ok": false,
"seqs": [],
"responseMode": "detailed",
"acceptedActions": 0,
"error": "risk approval rejected request: account would exceed available usdc under spot risk: current_required=0 projected_required=10000 available=0",
"actionResults": [
{
"seq": 0,
"status": "rejected",
"rejectCode": "INSUFFICIENT_BALANCE",
"rejectReason": "risk approval rejected request: account would exceed available usdc under spot risk: current_required=0 projected_required=10000 available=0",
"risk": {
"asset": "USDC",
"free": "0",
"locked": "0",
"required": "10000",
"account": "0x2222222222222222222222222222222222222222",
"market": 1,
"book": null
}
}
]
}
For nonce rejects, resync with
GET /api/v1/accounts/:engineAccount/bootstrap?fresh=true, use
nonceFloor, stay within nonceFloor <= nonce < nonceFloor + nonceWindow,
and rebuild plus re-sign the action. Changing only Idempotency-Key cannot
fix an action nonce failure.
Canonical compact byte order-entry facade for latency-sensitive quote engines. Each action in the batch still carries a signed action payload. Use an institutional_agent HMAC credential with quote scope, or a provisioned dedicated order-entry lane key where the beta bundle allows it. HTTP 200 is an envelope/admission result; inspect actionResults[], receipts, streams, and drop-copy for terminal state.
Request
Responses
- 200
- 400
- 401
- 403
- 409
- 413
- 415
Envelope accepted at the requested BSL result boundary.
Malformed batch or action envelope.
Missing or invalid machine/lane authentication.
Credential is not allowed for institutional BSL/order-entry.
Nonce, idempotency, order-state, or risk conflict. Risk rejects include actionResults[].risk with asset, free, locked, required, account, market, and book.
Batch exceeds the configured body limit.
Unsupported order-entry batch content type.