Endpoints
🔐 — requires authentication 🪙 — cost of calling in request tokens (see Rate Limits)
Companies
GET /v1/companies
🔐 🪙 1
Fetches all companies registered on the platform.
Parameters:
id
: Uuid (optional) — filters output by company IDlimit
: int (optional, max=10,000) — used for paginationoffset
: int (optional) — used for pagination
Output type: ApiPage[Company]
Python SDK:
def get_companies(self, id: Optional[str] = None,
page: Optional[Dict] = None) -> ApiPage[Company]
Portfolio
GET /v1/portfolio/assets
🔐 🪙 1
Fetches current asset balances for the authenticated user.
Parameters:
pool
: Uuid (optional) — filters output by settlement pool; if not specified, a summary across all settlement pools is returnedlimit
: int (optional, max=10,000) — used for paginationoffset
: int (optional) — used for pagination
Output type: ApiPage[Asset]
Python SDK:
def get_portfolio_assets(self, pool: Optional[str] = None,
page: Optional[Dict] = None) -> ApiPage[Asset]
GET /v1/portfolio/positions
🔐 🪙 1
Fetches current position balances for the authenticated user.
Parameters:
pool
: Uuid (optional) — filters output by settlement pool; if not specified, a summary across all settlement pools is returnedlimit
: int (optional, max=10,000) — used for paginationoffset
: int (optional) — used for pagination
Output type: ApiPage[Position]
Python SDK:
def get_portfolio_positions(self, pool: Optional[str] = None,
page: Optional[Dict] = None) -> ApiPage[Position]
GET /v1/portfolio/positions/aggregated
🔐 🪙 10
Fetches aggregated positions for the authenticated user.
Parameters:
limit
: int (optional, max=10,000) — used for paginationoffset
: int (optional) — used for pagination
Output type: ApiPage[AggregatedPosition]
Python SDK:
def get_portfolio_aggregated_positions(self, page: Optional[Dict] = None) \
-> ApiPage[AggregatedPosition]
GET /v1/portfolio/trades
🔐 🪙 1
Fetches trades for the authenticated user.
Parameters:
pool
: Uuid (optional) — filters output by settlement poolid
: Uuid (optional) — filters output by trade IDlimit
: int (optional, max=10,000) — used for paginationoffset
: int (optional) — used for pagination
Output type: ApiPage[Trade]
Python SDK:
def get_portfolio_trades(self, pool: Optional[str] = None, id: Optional[str] = None,
page: Optional[Dict] = None) -> ApiPage[Trade]
GET /v1/portfolio/summary
🔐 🪙 10
Fetches the aggregated summary of the authenticated user's positions: balance, uPNL and the Greeks (risk).
Parameters: None.
Output type: ApiSingle[PortfolioSummary]
Python SDK:
def get_portfolio_summary(self) -> ApiSingle[PortfolioSummary]
Quotes
GET /v1/quotes, GET /v1/quotes/sent and GET /v1/quotes/received
🔐 🪙 1
Fetches quotes sent or received by the authenticated user.
Parameters:
id
: Uuid (optional) — filters output by quote IDlimit
: int (optional, max=1,000) — used for paginationoffset
: int (optional) — used for pagination
Output type: ApiPage[Quote]
Python SDK:
def get_quotes(self, id: Optional[str] = None,
page: Optional[Dict] = None) -> ApiPage[Quote]
def get_quotes_sent(self, id: Optional[str] = None,
page: Optional[Dict] = None) -> ApiPage[Quote]
def get_quotes_received(self, id: Optional[str] = None,
page: Optional[Dict] = None) -> ApiPage[Quote]
POST /v1/quotes/new
🔐 🪙 20
Used to submit a quote in response to a particular RFQ as a maker.
JSON payload keys:
rfq_id
: Uuid — ID of the target RFQexpires_at
: DateTimeRFC3339 — expiration timeleg_quotes
: List[LegQuote] — quotes for individual RFQ legspool_strategy
: PoolStrategy — reuse an existing pool or create a new oneclient_quote_id
: str (optional, max length: 50 characters) — arbitrary string for your internal reference
Output type: ApiSingle[Quote]
Python SDK:
def create_quote(self, rfq_id: UUIDv4, expires_at: DateTimeRFC3339,
leg_quotes: List[LegQuote], pool_strategy: PoolStrategy,
client_quote_id: Optional[str] = None) -> ApiSingle[Quote]
POST /v1/quotes/cancel
🔐 🪙 20
Cancels a previously created quote.
JSON payload keys:
id
: Uuid — ID of the quote to cancel
Output type: ApiSingle[bool]
Python SDK:
def cancel_quote(self, id: UUIDv4) -> ApiSingle[bool]
POST /v1/quotes/cancel_all
🔐 🪙 20
Cancels all of the authenticated user's outstanding quotes.
Output type: ApiSingle[bool]
Python SDK:
def cancel_all_quotes(self) -> ApiSingle[bool]
POST /v1/quotes/replace
🔐 🪙 20
Used to cancel an existing quote and submit a new one for the same particular RFQ.
JSON payload keys:
parent_quote_id
: Uuid — ID of the existing quote to cancelrfq_id
: Uuid — ID of the target RFQexpires_at
: DateTimeRFC3339 — expiration timeleg_quotes
: List[LegQuote] — quotes for individual RFQ legspool_strategy
: PoolStrategy — reuse an existing pool or create a new oneclient_quote_id
: str (optional) — arbitrary string for your internal reference
Output type: ApiSingle[Quote]
Python SDK:
def replace_quote(self, parent_quote_id: UUIDv4, rfq_id: UUIDv4,
expires_at: DateTimeRFC3339, leg_quotes: List[LegQuote],
pool_strategy: PoolStrategy,
client_quote_id: Optional[str] = None) -> ApiSingle[Quote]
POST /v1/quotes/accept
🔐 🪙 20
Used to accept a quote and create a trade as a taker.
JSON payload keys:
parent_quote_id
: Uuid — ID of the quote to acceptrfq_id
: Uuid — ID of the target RFQside
: TradeSide — "buy" or "sell"
Output type: ApiSingle[QuoteAcceptResponse]
Python SDK:
def accept_quote(self, rfq_id: UUIDv4, parent_quote_id: UUIDv4,
side: TradeSide) -> ApiSingle[QuoteAcceptResponse]
Notes On Clearing Status:
Depending on the quote parameters and prior on-chain calls, the trade can be created in one of three distinct clearing states:
pending_pool_creation
: a new settlement pool needs to be created on-chain; this will progress automatically to one of the following statusespending_taker_deposit_approval
: taker must use the Permit endpoint to allow spending of the amount equal to or greater thanpending_deposits_sum_qty
by the settlement pool addresspending_maker_last_look
: the maker is responsible for progressing the trade further by submitting a final "last look" approval
POST /v1/quotes/maker_last_look
🔐 🪙 20
Used by the maker to finalize a trade or cancel it, in response to taker acceptance. The trade must be in pending_maker_last_look
clearing status.
JSON payload keys:
parent_quote_id
: Uuid — ID of the quoterfq_id
: Uuid — ID of the RFQaction
: RequestAction — "accept" or "reject"
Output Type: ApiSingle[MakerLastLookResponse]
Python SDK:
def maker_last_look(self, rfq_id: UUIDv4, parent_quote_id: UUIDv4,
action: RequestAction) -> ApiSingle[MakerLastLookResponse]
Notes On Clearing Status:
Depending on the current settlement pool margin usage and prior on-chain calls, the trade can end up in one of three distinct clearing states:
pending_maker_deposit_approval
: taker must use the Permit endpoint to allow spending of the amount equal to or greater thanpending_deposits_sum_qty
by the settlement pool addresspending_atomic_deposit
: this will progress automatically to the following statussuccess_trades_booked_into_pool
: no additional deposits were necessary for initial margin and the trade has successfully cleared
RFQs
GET /v1/rfqs/sent and GET /v1/rfqs/received
🔐 🪙 10
Fetches RFQs sent or received by the authenticated user.
Parameters:
id
: Uuid (optional) — filters output by quote IDlimit
: int (optional, max=1,000) — used for paginationoffset
: int (optional) — used for pagination
Output type: ApiPage[RFQ]
Python SDK:
def get_rfqs_sent(self, id: Optional[str] = None,
page: Optional[Dict] = None) -> ApiPage[RFQ]
def get_rfqs_received(self, id: Optional[str] = None,
page: Optional[Dict] = None) -> ApiPage[RFQ]
POST /v1/rfqs/new
🔐 🪙 20
Used to create a new RFQ as a taker.
JSON payload keys:
structure
: Structure — what is being tradedqty
: DecimalStr — quantity in units of the structure (multiplied by ratio per leg)expires_at
: DateTimeRFC3339 — expiration timetarget_companies
: List of Uuid — specific companies that will see the request
Output type: ApiSingle[RFQ]
Python SDK:
def create_rfq(self, structure: Structure, qty: StrDecimal,
expires_at: DateTimeRFC3339,
target_companies: List[UUIDv4]) -> ApiSingle[RFQ]
POST /v1/rfqs/cancel
🔐 🪙 20
Cancels a previously created RFQ.
JSON payload keys:
id
: Uuid — ID of the RFQ to cancel
Output type: ApiSingle[bool]
Python SDK:
def cancel_rfq(self, id: UUIDv4) -> ApiSingle[bool]
Settlement Pools
GET /v1/settlement_pools
🔐 🪙 10
Fetches settlement pools related to the currently authenticated user.
Parameters:
id
: Uuid (optional) — filters output by settlement pool IDlimit
: int (optional, max=1,000) — used for paginationoffset
: int (optional) — used for pagination
Output type: ApiPage[SettlementPool]
Python SDK:
def get_settlement_pools(self, id: Optional[str] = None,
page: Optional[Dict] = None) -> ApiPage[SettlementPool]
POST /v1/settlement_pools/new
🔐 🪙 20
Creates a new settlement pool between the authenticated user and a specific counterparty.
JSON payload keys:
pool_name
: str (max length: 50 characters) — name for the new settlement poolcompany_other
: Uuid — counterparty company IDcreator_params
: MarginParams — margin parameters for your companyother_params
: MarginParams — margin parameters for the counterparty
Output type: ApiSingle[SettlementPool]
Python SDK:
def create_settlement_pool(self, pool_name: str, company_other: UUIDv4,
creator_params: MarginParams,
other_params: MarginParams) -> ApiSingle[SettlementPool]
Transfers
GET /v1/transfers
🔐 🪙 1
Fetches transfers for the authenticated user.
Parameters:
pool
: Uuid (optional) — filters output by settlement poolid
: Uuid (optional) — filters output by transfer IDlimit
: int (optional, max=10,000) — used for paginationoffset
: int (optional) — used for pagination
Output type: ApiPage[Transfer]
Python SDK:
def get_transfers(self, pool: Optional[str] = None, id: Optional[str] = None,
page: Optional[Dict] = None) -> ApiPage[Transfer]
POST /v1/transfers/new
🔐 🪙 20
Initiates a new deposit or withdrawal.
JSON payload keys:
asset: str — asset to transfer (must be USDC)
qty: StrDecimal — transfer amount
target_pool_location: Uuid — settlement pool ID
counterparty: Uuid — company ID of another company in the pool
transfer_type: TransferType —
deposit
orwithdrawal
Output type: ApiSingle[Transfer]
Python SDK:
def create_transfer(self, asset: AssetToken, qty: StrDecimal,
target_pool_location: UUIDv4,
transfer_type: TransferType) -> ApiSingle[Transfer]
POST /v1/transfers/permit/template
🔐 🪙 1
Generates a ERC-2612 spending permit message. To take effect, it needs to be signed by the company wallet's private key and submitted via POST /v1/transfers/permit.
JSON payload keys:
pool_address: H160 — address of the settlement pool
allowance: Allowance — unit and value of the spending allowance
seconds_until_expiry: int (default: 60) — for how long the permit will be effective
Output type: ApiSingle[dict]
Python SDK:
def generate_transfer_permit(self, pool_address: H160, allowance: Allowance,
seconds_until_expiry: Optional[int] = None) \
-> ApiSingle[dict]
POST /v1/transfers/permit
🔐 🪙 20
Submits a signed ERC-2612 spending permit on-chain, allowing transfer of the signer's funds into the settlement pool.
JSON payload keys:
message: dict — permit in EIP-712 format generated by /v1/transfers/permit/template
signature: str — produced using message and the company wallet's private key
Output type: ApiSingle[bool]
Python SDK:
def submit_transfer_permit(self, message: dict, signature: str) -> ApiSingle[bool]
Utility
GET /v1/status
Returns current authentication information and server time in milliseconds. This endpoint can be used to check connectivity liveness and measure latency.
Output type: ApiSingle[Status]
Python SDK:
def get_status(self) -> ApiSingle[Status]
GET /v1/metadata/supported_assets
Returns tokens supported by the platform, their metadata, and funding rate parameters.
Parameters:
verified
: boolean (optional) — ensures only verified assets are returned
Output type: ApiSingle[Dict[AssetToken, List[SupportedAssetDetails]]]
Python SDK:
def get_supported_assets(self, verified: Optional[bool] = False,
page: Optional[Dict] = None) \
-> ApiSingle[Dict[AssetToken, List[SupportedAssetDetails]]]
Last updated