BSL API
BSL means Business Line. It is the professional order-entry and operations contract for market makers, liquidity providers, quote engines, and institutional integrations.
BSL is not a separate matching engine. Orders still pass through the same auth, risk, sequencing, WAL, matching, event ring, and recovery model as the rest of the venue. The difference is the interface: BSL exposes order-entry metadata, rate envelopes, low-latency Direct TCP submission, compact HTTP compatibility, and provisioned private reconciliation paths.
New market-maker integrations should start with the FIX/BSL/FIXP Connectivity Bundle and then the Market Maker Beta Quickstart. The bundle contains direct endpoint rules, FIX CompIDs, and the live-tested BSL route contract.
Access and Keys
There is no freely shared global BSL key.
| Flow | Credential requirement |
|---|---|
| Signed BSL Direct TCP submit | Valid signed action inside the frame/group plus account-scoped institutional_agent HMAC/session state. A dedicated order-entry lane key is optional unless your rate tier requires it. |
| Signed BSL compact HTTP submit | Valid signed action inside the batch plus account-scoped institutional_agent HMAC headers. |
| Dedicated low-latency lane | X-Senticore-Order-Entry-Key, provisioned by operations or builder onboarding. |
| FIX order entry and drop-copy | HMAC credential issued to a business-line institutional_agent. |
| BSL private execution gap-fill | Private session token or provisioned BSL machine credential. |
| Receipts, session controls, quote obligations | Route-specific policy; some metadata endpoints are public in beta, protected account data is not. |
Use api_agent credentials for standard HTTP bots. Use institutional_agent
HMAC credentials for BSL/FIX business-line access. Do not embed owner wallet
keys in production quote engines.
The connectivity bundle is self-service:
GET /api/v1/bsl/connectivity
Call it with institutional_agent HMAC headers to receive the account-bound
recommended FIX SenderCompID, BSL Direct TCP host/port/TLS SNI, direct BSL
HTTP base URL, submit paths, and private replay path. Without auth it still
returns the public contract and derivation rules.
Native Direct TCP
The lowest-latency BSL path is a persistent TCP/TLS session:
host/port/tlsSni: from connectivity.bslTcp
protocol: senticore-bsl-tcp-v2
handshake: 48 bytes
message header: u32_le kind + u32_le payload_len
compact action frame: 192 bytes
Use BSL Direct TCP for market making loops where HTTP edge variance is visible. Use compact HTTP for onboarding, admin-friendly bots, and compatibility.
Live Beta Submit Path
The compact order-entry payload is:
{"version":1,"actions":[...],"idempotencyKey":"quote-refresh-1"}
For the current private beta, the verified edge path is:
POST /api/order-entry/binary
Content-Type: application/x-senticore-order-entry-batch
X-BSL-Result-Mode: ack
X-Senticore-Response-Mode: detailed
Idempotency-Key: quote-refresh-1
X-Senticore-Order-Entry-Key: <optional provisioned lane key>
The direct compatibility route is:
POST /api/v1/mm/orders/batch.bin
The canonical BSL route is:
POST /api/v1/bsl/orders/compact
Use the canonical route with an institutional_agent HMAC credential that has
quote scope, or with a dedicated lane key when the connectivity bundle
provisions one. Run the conformance flow before unattended quoting.
For latency-sensitive clients, operations may expose the same route contract on
a direct/DNS-only BSL host. Use directHttpBaseUrl from the connectivity
bundle; do not infer it from the public Cloudflare API hostname.
Result And Response Modes
Result mode and response verbosity are separate:
| Header | Current guidance |
|---|---|
x-bsl-result-mode: ack | Contract name for low-latency ingress acknowledgement. Confirm before relying on it. |
x-bsl-result-mode: durable | Contract name for durable-boundary acknowledgement. Confirm before relying on it. |
x-bsl-result-mode: full | Target terminal hotpath result mode. Do not use as the primary MM contract until enabled and tested for the account. |
x-senticore-response-mode: detailed | Response body verbosity. Returns accepted action counts, derived order ids, ack/durability metadata, and errors. |
The compatibility alias x-mm-response-mode: detailed is accepted for response
verbosity only. Do not use it as a BSL result-mode header.
In ack + detailed beta mode, HTTP 200 means the signed action batch was
accepted at the configured BSL boundary. It does not by itself prove final fill,
final resting state, or final cancel state.
Metadata and Protected Reads
| Endpoint | Purpose |
|---|---|
GET /api/v1/bsl/limits | BSL limits and rate envelope. |
GET /api/v1/bsl/connectivity | Self-service BSL/FIX endpoint and CompID bundle. |
GET /api/v1/bsl/executions | Execution-stream and replay contract metadata. |
GET /api/v1/bsl/sessions | BSL session metadata; may be empty without provisioned sessions. |
GET /api/v1/bsl/markets/{marketId}/quote-obligations | Quote-obligation config; may be empty unless assigned. |
GET /api/v1/bsl/accounts/{account}/executions?fromSeq=... | Private execution replay; requires token or machine credential. |
Fast Rejects
BSL clients should treat fast rejection as healthy backpressure. A fast reject lets a strategy widen, cancel, or pause immediately instead of letting stale quotes age in a hidden queue.
Important reject families:
| Code | Meaning |
|---|---|
SHARD_BUSY | Target market shard cannot accept more work without queue aging. |
QUEUE_LIMIT | Ingress or downstream queue limit reached. |
RISK_CREDIT_LIMIT | Risk or credit reservation denied. |
KILL_SWITCH | Account, market, or venue kill-switch active. |
MARKET_HALTED | Market lifecycle gate blocked trading. |
AUTH_REQUIRED | Protected route was called without the required token or machine credential. |
PERMISSION_DENIED | Credential lacks scope or account access. |
DUPLICATE_OR_STALE | Nonce, idempotency, or duplicate replay state rejected the action. |