🔐 — 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 ID
limit
: int (optional, max=10,000) — used for pagination
offset
: int (optional) — used for pagination
Output type : ApiPage[Company]
Example output
Copy {
"result" : [
{
"created_at" : "2024-01-01T18:44:33.846999Z" ,
"id" : "bdd68c99-65fe-4500-baae-5bc09b4af183" ,
"is_lp" : true ,
"legal_name" : "Example company" ,
"short_name" : "EXMPL"
} ,
{
"created_at" : "2024-02-01 18:44:51.817012Z" ,
"id" : "af13119d-4ed1-4718-aea3-fecee4764837" ,
"is_lp" : false ,
"legal_name" : "Another company" ,
"short_name" : "ANTHR"
}
] ,
"pagination" : {
"next_page" : null
}
}
Python SDK:
Copy def get_companies ( self , id : Optional [ str ] = None ,
page : Optional [ Dict ] = None ) -> ApiPage [ Company ]
SDK examples
Copy f # iterate over companies
for company in paginate (client.get_companies):
...
# load all companies into a list (eagerly request all pages)
companies = list ( paginate (client.get_companies))
# fetch company metadata by id
company_id = "bdd68c99-65fe-4500-baae-5bc09b4af183"
company = client . get_companies (id = company_id). result [ 0 ]
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 returned
limit
: int (optional, max=10,000) — used for pagination
offset
: int (optional) — used for pagination
Output type : ApiPage[Asset]
Example output
Copy {
"result" : [
{
"asset" : "USDC" ,
"company" : "bdd68c99-65fe-4500-baae-5bc09b4af183" ,
"pool_location" : "cdfbea44-7e75-4688-a3ea-e8d097ae7ede" ,
"qty" : "2103.191818"
}
]
"pagination" : {
"next_page" : null
}
}
Python SDK:
Copy def get_portfolio_assets ( self , pool : Optional [ str ] = None ,
page : Optional [ Dict ] = None ) -> ApiPage [ Asset ]
SDK examples
Copy # iterate over all assets
for assets in paginate (client.get_portfolio_assets):
...
# load all assets in a specific pool into a list (eagerly request all pages)
pool_id = "cdfbea44-7e75-4688-a3ea-e8d097ae7ede"
assets = list ( paginate (client.get_portfolio_assets, pool = pool_id))
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 returned
limit
: int (optional, max=10,000) — used for pagination
offset
: int (optional) — used for pagination
Output type : ApiPage[Position]
Example output
Copy {
"result" : [
{
"avg_entry_price" : "65215.000000000000" ,
"company" : "af13119d-4ed1-4718-aea3-fecee4764837" ,
"instrument" : {
"expiry" : "2024-04-05T08:00:00Z" ,
"instrument_type" : "dated_future" ,
"settlement_asset" : "USDC" ,
"underlying" : "BTC"
} ,
"pool_location" : "cdfbea44-7e75-4688-a3ea-e8d097ae7ede" ,
"qty" : "1" ,
"taker_qty" : "0" ,
"updated_at" : "2024-04-02T23:16:52.344386Z"
}
] ,
"pagination" : {
"next_page" : null
}
}
Python SDK:
Copy def get_portfolio_positions ( self , pool : Optional [ str ] = None ,
page : Optional [ Dict ] = None ) -> ApiPage [ Position ]
SDK examples
Copy # iterate over positions in a specific settlement pool
pool_id = "cdfbea44-7e75-4688-a3ea-e8d097ae7ede"
for positions in paginate (client.get_portfolio_positions, pool = pool_id):
...
# load all your positions into a list (eagerly request all pages)
positions = list ( paginate (client.get_portfolio_positions))
GET /v1/portfolio/positions/aggregated
🔐 🪙 10
Fetches aggregated positions for the authenticated user.
Parameters:
limit
: int (optional, max=10,000) — used for pagination
offset
: int (optional) — used for pagination
Output type : ApiPage[AggregatedPosition]
Example output
Copy {
"result" : [
{
"iv" : "0" ,
"notional" : "65833.1739032583" ,
"position_info" : {
"avg_entry_price" : "65215" ,
"company" : "af13119d-4ed1-4718-aea3-fecee4764837" ,
"instrument" : {
"expiry" : "2024-04-05T08:00:00Z" ,
"instrument_type" : "dated_future" ,
"settlement_asset" : "USDC" ,
"underlying" : "BTC"
} ,
"pool_location" : "00000000-0000-0000-0000-000000000000" ,
"qty" : "1" ,
"taker_qty" : "0" ,
"updated_at" : "2024-04-02T23:16:52.344386Z"
} ,
"price" : "65896.65104296" ,
"sum_delta" : "1" ,
"sum_gamma" : "0" ,
"sum_rho" : "0" ,
"sum_theta" : "0" ,
"sum_vega" : "0" ,
"underlying_price" : "65833.1739032583" ,
"upnl" : "681.65104296"
}
] ,
"pagination" : {
"next_page" : null
} ,
}
Python SDK:
Copy def get_portfolio_aggregated_positions ( self , page : Optional [ Dict ] = None ) \
-> ApiPage [ AggregatedPosition ]
SDK examples
Copy # iterate over your company's aggregated positions
for positions in paginate (client.get_portfolio_aggregated_positions):
...
# load all your aggregated positions into a list (eagerly request all pages)
positions = list ( paginate (client.get_portfolio_aggregated_positions))
GET /v1/portfolio/trades
🔐 🪙 1
Fetches trades for the authenticated user.
Parameters:
pool
: Uuid (optional) — filters output by settlement pool
id
: Uuid (optional) — filters output by trade ID
limit
: int (optional, max=10,000) — used for pagination
offset
: int (optional) — used for pagination
Output type : ApiPage[Trade]
Example output
Copy {
"result" : [
{
"company" : "af13119d-4ed1-4718-aea3-fecee4764837" ,
"created_at" : "2024-04-02T23:16:52.344386Z" ,
"id" : "01efd105-07d7-43d9-9f51-886af0aa8b25" ,
"instrument" : {
"expiry" : "2024-04-05T08:00:00Z" ,
"instrument_type" : "dated_future" ,
"settlement_asset" : "USDC" ,
"underlying" : "BTC"
} ,
"pool_location" : "cdfbea44-7e75-4688-a3ea-e8d097ae7ede" ,
"price" : "65215" ,
"qty" : "1" ,
"role" : "maker" ,
"side" : "buy" ,
"source_quote" : "adb18efb-aee3-4c0f-9e96-082c2849601d" ,
"source_rfq" : "564eeecb-7466-4af4-b833-907835d6e83b" ,
"source_rfq_leg_id" : "635976ac-d5ea-4f44-b25a-2de18cc0cade" ,
"trade_type" : "trade"
}
] ,
"pagination" : {
"next_page" : null
}
}
Python SDK:
Copy def get_portfolio_trades ( self , pool : Optional [ str ] = None , id : Optional [ str ] = None ,
page : Optional [ Dict ] = None ) -> ApiPage [ Trade ]
SDK examples
Copy # iterate over trades in a specific settlement pool
pool_id = "cdfbea44-7e75-4688-a3ea-e8d097ae7ede"
for trade in paginate (client.get_portfolio_trades, pool = pool_id):
...
# fetch a trade by id
trade_id = "01efd105-07d7-43d9-9f51-886af0aa8b25"
trade = client . get_portfolio_trades (id = trade_id). result [ 0 ]
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]
Example output
Copy {
"result" : {
"sum_balance" : "1169.5439289533" ,
"sum_delta" : "1" ,
"sum_dollar_delta" : "65660.2180115883" ,
"sum_dollar_gamma" : "0" ,
"sum_gamma" : "0" ,
"sum_notional" : "65660.2180115883" ,
"sum_rho" : "0" ,
"sum_theta" : "0" ,
"sum_upnl" : "529.6761819533" ,
"sum_vega" : "0"
}
}
Python SDK:
Copy def get_portfolio_summary ( self ) -> ApiSingle [ PortfolioSummary ]
SDK examples
Copy summary = client . get_portfolio_summary (). result
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 ID
limit
: int (optional, max=1,000) — used for pagination
offset
: int (optional) — used for pagination
Output type : ApiPage[Quote]
Example output
Copy {
"result" : [
{
"aggregated_ask" : null ,
"aggregated_bid" : "65215" ,
"clearing_events" : [
{
"created_at" : "2024-04-02T22:52:46.609140Z" ,
"parent_quote_id" : "5368f58e-f385-44cc-a9e5-2e8ea51913bb" ,
"rfq_id" : "564eeecb-7466-4af4-b833-907835d6e83b" ,
"status" : "pending_pool_creation" ,
"taker_side" : "sell"
} ,
{
"created_at" : "2024-04-02T22:55:34.122263Z" ,
"parent_quote_id" : "5368f58e-f385-44cc-a9e5-2e8ea51913bb" ,
"rfq_id" : "564eeecb-7466-4af4-b833-907835d6e83b" ,
"status" : "pending_taker_deposit_approval" ,
"taker_side" : null
}
] ,
"clearing_status" : "pending_taker_deposit_approval" ,
"client_quote_id" : "my quote 2" ,
"creator_params" : {
"margin_mode" : "simple" ,
"params" : {
"asset_params" : {} ,
"auto_liquidation" : true ,
"default_asset_param" : {
"futures_initial_margin" : "0.02" ,
"futures_leverage" : "20000" ,
"futures_maintenance_margin" : "0.01" ,
"option_initial_margin" : "0.15" ,
"option_initial_margin_min" : "0.1" ,
"option_maintenance_margin" : "0.075"
} ,
"liquidation_penalty" : "0.1"
}
} ,
"expires_at" : "2024-04-03T10:49:20.685499Z" ,
"maker_company" : "af13119d-4ed1-4718-aea3-fecee4764837" ,
"new_pool_name" : "API test pool" ,
"other_params" : {
"margin_mode" : "simple" ,
"params" : {
"asset_params" : {} ,
"auto_liquidation" : true ,
"default_asset_param" : {
"futures_initial_margin" : "0.02" ,
"futures_leverage" : "20000" ,
"futures_maintenance_margin" : "0.01" ,
"option_initial_margin" : "0.15" ,
"option_initial_margin_min" : "0.1" ,
"option_maintenance_margin" : "0.075"
} ,
"liquidation_penalty" : "0.1"
}
} ,
"parent_quote_id" : "5368f58e-f385-44cc-a9e5-2e8ea51913bb" ,
"per_leg_quotes" : [
{
"ask" : null ,
"bid" : "65215" ,
"target_rfq_leg_id" : "635976ac-d5ea-4f44-b25a-2de18cc0cade"
}
] ,
"pool_location" : "cdfbea44-7e75-4688-a3ea-e8d097ae7ede" ,
"target_rfq_id" : "564eeecb-7466-4af4-b833-907835d6e83b"
}
] ,
"pagination" : {
"next_page" : null
}
}
Python SDK:
Copy 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 ]
SDK examples
Copy # iterate over all of your company's sent quotes
for quote in paginate (client.get_quotes_sent):
...
# fetch a received quote by id
quote_id = "5368f58e-f385-44cc-a9e5-2e8ea51913bb"
quote = client . get_quotes_received (id = quote_id). result [ 0 ]
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 RFQ
expires_at
: DateTimeRFC3339 — expiration time
leg_quotes
: List[LegQuote] — quotes for individual RFQ legs
pool_strategy
: PoolStrategy — reuse an existing pool or create a new one
client_quote_id
: str (optional, max length: 50 characters) — arbitrary string for your internal reference
Example input
Copy {
"rfq_id" : "564eeecb-7466-4af4-b833-907835d6e83b" ,
"expires_at" : "2024-04-03T10:45:24.967356Z" ,
"leg_quotes" : [
{
"target_rfq_leg_id" : "635976ac-d5ea-4f44-b25a-2de18cc0cade" ,
"bid" : "65220"
}
] ,
"pool_strategy" : {
"strategy" : "create_new" ,
"name" : "API test pool" ,
"creator_params" : {
"margin_mode" : "simple" ,
"params" : {
"liquidation_penalty" : "0.1" ,
"auto_liquidation" : true ,
"asset_params" : {} ,
"default_asset_param" : {
"futures_initial_margin" : "0.02" ,
"futures_maintenance_margin" : "0.01" ,
"futures_leverage" : "20000" ,
"option_initial_margin" : "0.15" ,
"option_initial_margin_min" : "0.1" ,
"option_maintenance_margin" : "0.075"
}
}
} ,
"other_params" : {
"margin_mode" : "simple" ,
"params" : {
"liquidation_penalty" : "0.1" ,
"auto_liquidation" : true ,
"asset_params" : {} ,
"default_asset_param" : {
"futures_initial_margin" : "0.02" ,
"futures_maintenance_margin" : "0.01" ,
"futures_leverage" : "20000" ,
"option_initial_margin" : "0.15" ,
"option_initial_margin_min" : "0.1" ,
"option_maintenance_margin" : "0.075"
}
}
}
} ,
"client_quote_id" : "my quote"
}
Output type: ApiSingle[Quote]
Example output
Copy {
"result" : {
"aggregated_ask" : null ,
"aggregated_bid" : "65220" ,
"clearing_events" : [] ,
"clearing_status" : null ,
"client_quote_id" : "my quote" ,
"creator_params" : {
"margin_mode" : "simple" ,
"params" : {
"asset_params" : {} ,
"auto_liquidation" : true ,
"default_asset_param" : {
"futures_initial_margin" : "0.02" ,
"futures_leverage" : "20000" ,
"futures_maintenance_margin" : "0.01" ,
"option_initial_margin" : "0.15" ,
"option_initial_margin_min" : "0.1" ,
"option_maintenance_margin" : "0.075"
} ,
"liquidation_penalty" : "0.1"
}
} ,
"expires_at" : "2024-04-03T10:45:24.967356Z" ,
"maker_company" : "af13119d-4ed1-4718-aea3-fecee4764837" ,
"new_pool_name" : "API test pool" ,
"other_params" : {
"margin_mode" : "simple" ,
"params" : {
"asset_params" : {} ,
"auto_liquidation" : true ,
"default_asset_param" : {
"futures_initial_margin" : "0.02" ,
"futures_leverage" : "20000" ,
"futures_maintenance_margin" : "0.01" ,
"option_initial_margin" : "0.15" ,
"option_initial_margin_min" : "0.1" ,
"option_maintenance_margin" : "0.075"
} ,
"liquidation_penalty" : "0.1"
}
} ,
"parent_quote_id" : "37dac6e5-8f91-4cef-9e1e-53042e30991a" ,
"per_leg_quotes" : [
{
"ask" : null ,
"bid" : "65220" ,
"target_rfq_leg_id" : "635976ac-d5ea-4f44-b25a-2de18cc0cade"
}
] ,
"pool_location" : null ,
"target_rfq_id" : "564eeecb-7466-4af4-b833-907835d6e83b"
}
}
Python SDK:
Copy 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 ]
SDK examples
Copy margin_params = {
"margin_mode" : MarginMode . SIMPLE ,
"params" : {
"liquidation_penalty" : "0.1" ,
"auto_liquidation" : True ,
"asset_params" : {},
"default_asset_param" : {
"futures_initial_margin" : "0.02" ,
"futures_maintenance_margin" : "0.01" ,
"futures_leverage" : "20000" ,
"option_initial_margin" : "0.15" ,
"option_initial_margin_min" : "0.1" ,
"option_maintenance_margin" : "0.075" ,
},
}
}
new_quote = maker_client . create_quote (
rfq_id = "564eeecb-7466-4af4-b833-907835d6e83b" ,
expires_at = "2024-04-03T10:45:24.967356Z" ,
client_quote_id = "my quote" ,
leg_quotes = [
{
"target_rfq_leg_id" : "635976ac-d5ea-4f44-b25a-2de18cc0cade" ,
"bid" : "65220"
}
],
pool_strategy = {
"strategy" : PoolStrategyType.CREATE_NEW,
"name" : "API test pool" ,
"creator_params" : margin_params,
"other_params" : margin_params
}
). result
POST /v1/quotes/cancel
🔐 🪙 20
Cancels a previously created quote.
JSON payload keys:
id
: Uuid — ID of the quote to cancel
Example input
Copy {
"id" : "37dac6e5-8f91-4cef-9e1e-53042e30991a"
}
Output type: ApiSingle[bool]
Example outputPython SDK:
Copy def cancel_quote ( self , id : UUIDv4) -> ApiSingle [ bool ]
SDK example
Copy client . cancel_quote (id = "3025fca3-114e-4476-a993-93286a7dd43f" )
POST /v1/quotes/cancel_all
🔐 🪙 20
Cancels all of the authenticated user's outstanding quotes.
Output type: ApiSingle[bool]
Example outputPython SDK:
Copy def cancel_all_quotes ( self ) -> ApiSingle [ bool ]
SDK examples
Copy client . cancel_all_quotes ()
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 cancel
rfq_id
: Uuid — ID of the target RFQ
expires_at
: DateTimeRFC3339 — expiration time
leg_quotes
: List[LegQuote] — quotes for individual RFQ legs
pool_strategy
: PoolStrategy — reuse an existing pool or create a new one
client_quote_id
: str (optional) — arbitrary string for your internal reference
Example input
Copy {
"parent_quote_id" : "37dac6e5-8f91-4cef-9e1e-53042e30991a" ,
"rfq_id" : "564eeecb-7466-4af4-b833-907835d6e83b" ,
"expires_at" : "2024-04-03T10:49:20.685499Z" ,
"leg_quotes" : [
{
"target_rfq_leg_id" : "635976ac-d5ea-4f44-b25a-2de18cc0cade" ,
"bid" : "65215"
}
] ,
"pool_strategy" : {
"strategy" : "create_new" ,
"name" : "API test pool" ,
"creator_params" : {
"margin_mode" : "simple" ,
"params" : {
"liquidation_penalty" : "0.1" ,
"auto_liquidation" : true ,
"asset_params" : {} ,
"default_asset_param" : {
"futures_initial_margin" : "0.02" ,
"futures_maintenance_margin" : "0.01" ,
"futures_leverage" : "20000" ,
"option_initial_margin" : "0.15" ,
"option_initial_margin_min" : "0.1" ,
"option_maintenance_margin" : "0.075"
}
}
} ,
"other_params" : {
"margin_mode" : "simple" ,
"params" : {
"liquidation_penalty" : "0.1" ,
"auto_liquidation" : true ,
"asset_params" : {} ,
"default_asset_param" : {
"futures_initial_margin" : "0.02" ,
"futures_maintenance_margin" : "0.01" ,
"futures_leverage" : "20000" ,
"option_initial_margin" : "0.15" ,
"option_initial_margin_min" : "0.1" ,
"option_maintenance_margin" : "0.075"
}
}
}
} ,
"client_quote_id" : "my quote 2"
}
Output type: ApiSingle[Quote]
Example output
Copy {
"result" : {
"aggregated_ask" : null ,
"aggregated_bid" : "65215" ,
"clearing_events" : [] ,
"clearing_status" : null ,
"client_quote_id" : "my quote 2" ,
"creator_params" : {
"margin_mode" : "simple" ,
"params" : {
"asset_params" : {} ,
"auto_liquidation" : true ,
"default_asset_param" : {
"futures_initial_margin" : "0.02" ,
"futures_leverage" : "20000" ,
"futures_maintenance_margin" : "0.01" ,
"option_initial_margin" : "0.15" ,
"option_initial_margin_min" : "0.1" ,
"option_maintenance_margin" : "0.075"
} ,
"liquidation_penalty" : "0.1"
}
} ,
"expires_at" : "2024-04-03T10:49:20.685499Z" ,
"maker_company" : "af13119d-4ed1-4718-aea3-fecee4764837" ,
"new_pool_name" : "API test pool" ,
"other_params" : {
"margin_mode" : "simple" ,
"params" : {
"asset_params" : {} ,
"auto_liquidation" : true ,
"default_asset_param" : {
"futures_initial_margin" : "0.02" ,
"futures_leverage" : "20000" ,
"futures_maintenance_margin" : "0.01" ,
"option_initial_margin" : "0.15" ,
"option_initial_margin_min" : "0.1" ,
"option_maintenance_margin" : "0.075"
} ,
"liquidation_penalty" : "0.1"
}
} ,
"parent_quote_id" : "5368f58e-f385-44cc-a9e5-2e8ea51913bb" ,
"per_leg_quotes" : [
{
"ask" : null ,
"bid" : "65215" ,
"target_rfq_leg_id" : "635976ac-d5ea-4f44-b25a-2de18cc0cade"
}
] ,
"pool_location" : null ,
"target_rfq_id" : "564eeecb-7466-4af4-b833-907835d6e83b"
}
}
Python SDK:
Copy 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 ]
SDK examples
Copy margin_params = {
"margin_mode" : MarginMode . SIMPLE ,
"params" : {
"liquidation_penalty" : "0.1" ,
"auto_liquidation" : True ,
"asset_params" : {},
"default_asset_param" : {
"futures_initial_margin" : "0.02" ,
"futures_maintenance_margin" : "0.01" ,
"futures_leverage" : "20000" ,
"option_initial_margin" : "0.15" ,
"option_initial_margin_min" : "0.1" ,
"option_maintenance_margin" : "0.075" ,
},
}
}
new_quote = maker_client . replace_quote (
parent_quote_id = "37dac6e5-8f91-4cef-9e1e-53042e30991a" ,
rfq_id = "564eeecb-7466-4af4-b833-907835d6e83b" ,
expires_at = "2024-04-03T10:49:20.685499Z" ,
client_quote_id = "my quote 2" ,
leg_quotes = [
{
"target_rfq_leg_id" : "635976ac-d5ea-4f44-b25a-2de18cc0cade" ,
"bid" : "65215"
}
],
pool_strategy = {
"strategy" : PoolStrategyType.CREATE_NEW,
"name" : "API test pool" ,
"creator_params" : margin_params,
"other_params" : margin_params
}
). result
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 accept
rfq_id
: Uuid — ID of the target RFQ
side
: TradeSide — "buy" or "sell"
Example input
Copy {
"parent_quote_id" : "5368f58e-f385-44cc-a9e5-2e8ea51913bb" ,
"rfq_id" : "564eeecb-7466-4af4-b833-907835d6e83b" ,
"side" : "sell"
}
Output type: ApiSingle[QuoteAcceptResponse]
Example output
Copy {
"result" : {
"new_clearing_status" : "pending_pool_creation" ,
"pending_deposits_sum_qty" : "2103.191818" ,
"pending_settlement_pool" : {
"company_id" : "bdd68c99-65fe-4500-baae-5bc09b4af183" ,
"data" : {
"creator_address" : "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" ,
"creator_company_margin_usage" : {
"balance" : "0" ,
"company" : "bdd68c99-65fe-4500-baae-5bc09b4af183" ,
"margin_params" : {
"margin_mode" : "simple" ,
"params" : {
"asset_params" : {} ,
"auto_liquidation" : true ,
"default_asset_param" : {
"futures_initial_margin" : "0.02" ,
"futures_leverage" : "20000" ,
"futures_maintenance_margin" : "0.01" ,
"option_initial_margin" : "0.15" ,
"option_initial_margin_min" : "0.1" ,
"option_maintenance_margin" : "0.075"
} ,
"liquidation_penalty" : "0.1"
}
} ,
"margin_usage" : {
"initial_margin" : "0" ,
"maintenance_margin" : "0"
} ,
"max_withdrawable_amount" : "0"
} ,
"other_address" : "0xa0ee7a142d267c1f36714e4a8f75612f20a79720" ,
"other_company_margin_usage" : {
"balance" : "0" ,
"company" : "af13119d-4ed1-4718-aea3-fecee4764837" ,
"margin_params" : {
"margin_mode" : "simple" ,
"params" : {
"asset_params" : {} ,
"auto_liquidation" : true ,
"default_asset_param" : {
"futures_initial_margin" : "0.02" ,
"futures_leverage" : "20000" ,
"futures_maintenance_margin" : "0.01" ,
"option_initial_margin" : "0.15" ,
"option_initial_margin_min" : "0.1" ,
"option_maintenance_margin" : "0.075"
} ,
"liquidation_penalty" : "0.1"
}
} ,
"margin_usage" : {
"initial_margin" : "0" ,
"maintenance_margin" : "0"
} ,
"max_withdrawable_amount" : "0"
} ,
"pool_address" : null ,
"pool_name" : "API test pool" ,
"positions" : [] ,
"status" : "pending"
} ,
"pool_id" : "cdfbea44-7e75-4688-a3ea-e8d097ae7ede"
}
}
}
Python SDK:
Copy def accept_quote ( self , rfq_id : UUIDv4 , parent_quote_id : UUIDv4 ,
side : TradeSide) -> ApiSingle [ QuoteAcceptResponse ]
SDK examples
Copy accepted = taker_client . accept_quote (
rfq_id = "564eeecb-7466-4af4-b833-907835d6e83b" ,
parent_quote_id = "5368f58e-f385-44cc-a9e5-2e8ea51913bb" ,
side = TradeSide.SELL,
). result
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; to progress the trade, the taker must execute SettlementPoolFactory.createPool()
on-chain, making sure to include rfq_id
and parent_quote_id
(see Taker Tutorial )
pending_taker_deposit_approval
: the taker must execute ERC20.approve()
on-chain with the settlement pool address as the spender and the amount greater or equal to pending_deposits_sum_qty
to progress the trade
pending_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 quote
rfq_id
: Uuid — ID of the RFQ
action
: RequestAction — "accept" or "reject"
Example input
Copy {
"parent_quote_id" : "5368f58e-f385-44cc-a9e5-2e8ea51913bb" ,
"rfq_id" : "564eeecb-7466-4af4-b833-907835d6e83b" ,
"action" : "accept"
}
Output Type: ApiSingle[MakerLastLookResponse]
Example output
Copy {
"result" : {
"atomic_deposit_details" : {
"creator_address" : "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" ,
"creator_transfer_amount" : "2103.191818" ,
"other_address" : "0xa0ee7a142d267c1f36714e4a8f75612f20a79720" ,
"other_transfer_amount" : "639.867747" ,
"parent_quote_id" : "5368f58e-f385-44cc-a9e5-2e8ea51913bb" ,
"pool_address" : "0x5e5137b6a596a5d7508756c14d07f83ce8535944" ,
"rfq_id" : "564eeecb-7466-4af4-b833-907835d6e83b"
} ,
"new_clearing_status" : "pending_maker_deposit_approval" ,
"pending_deposits_sum_qty" : "639.867747"
}
}
Python SDK:
Copy def maker_last_look ( self , rfq_id : UUIDv4 , parent_quote_id : UUIDv4 ,
action : RequestAction) -> ApiSingle [ MakerLastLookResponse ]
SDK examples
Copy last_look = maker_client . maker_last_look (
rfq_id = "564eeecb-7466-4af4-b833-907835d6e83b" ,
parent_quote_id = "5368f58e-f385-44cc-a9e5-2e8ea51913bb" ,
action = RequestAction.ACCEPT,
). result
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
: the maker must execute ERC20.approve()
on-chain with the settlement pool address as the spender and the amount greater or equal to pending_deposits_sum_qty
to progress the trade
pending_atomic_deposit
: the maker must execute SettlementPool.depositUSDCAtomic()
on-chain using the settlement pool address as the contract address and the data from atomic_deposit_details
as arguments
success_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 ID
limit
: int (optional, max=1,000) — used for pagination
offset
: int (optional) — used for pagination
Output type : ApiPage[RFQ]
Example output
Copy {
"result" : [
{
"asks" : [] ,
"bids" : [
{
"additional_margin_requirements" : null ,
"margin_requirements" : null ,
"parent_quote_id" : "5368f58e-f385-44cc-a9e5-2e8ea51913bb" ,
"quote_price" : "65215"
}
] ,
"created_at" : "2024-04-02T22:42:19.816573Z" ,
"qty" : "1" ,
"quotes_common_metadata" : {
"5368f58e-f385-44cc-a9e5-2e8ea51913bb" : {
"clearing_events" : [
{
"created_at" : "2024-04-02T22:52:46.609140Z" ,
"parent_quote_id" : "5368f58e-f385-44cc-a9e5-2e8ea51913bb" ,
"rfq_id" : "564eeecb-7466-4af4-b833-907835d6e83b" ,
"status" : "pending_pool_creation" ,
"taker_side" : "sell"
} ,
{
"created_at" : "2024-04-02T22:55:34.122263Z" ,
"parent_quote_id" : "5368f58e-f385-44cc-a9e5-2e8ea51913bb" ,
"rfq_id" : "564eeecb-7466-4af4-b833-907835d6e83b" ,
"status" : "pending_taker_deposit_approval" ,
"taker_side" : null
}
] ,
"clearing_status" : "pending_taker_deposit_approval" ,
"creator_params" : {
"margin_mode" : "simple" ,
"params" : {
"asset_params" : {} ,
"auto_liquidation" : true ,
"default_asset_param" : {
"futures_initial_margin" : "0.02" ,
"futures_leverage" : "20000" ,
"futures_maintenance_margin" : "0.01" ,
"option_initial_margin" : "0.15" ,
"option_initial_margin_min" : "0.1" ,
"option_maintenance_margin" : "0.075"
} ,
"liquidation_penalty" : "0.1"
}
} ,
"expires_at" : "2024-04-03T10:49:20.685499Z" ,
"maker_company" : "af13119d-4ed1-4718-aea3-fecee4764837" ,
"new_pool_name" : "API test pool" ,
"other_params" : {
"margin_mode" : "simple" ,
"params" : {
"asset_params" : {} ,
"auto_liquidation" : true ,
"default_asset_param" : {
"futures_initial_margin" : "0.02" ,
"futures_leverage" : "20000" ,
"futures_maintenance_margin" : "0.01" ,
"option_initial_margin" : "0.15" ,
"option_initial_margin_min" : "0.1" ,
"option_maintenance_margin" : "0.075"
} ,
"liquidation_penalty" : "0.1"
}
} ,
"parent_quote_id" : "5368f58e-f385-44cc-a9e5-2e8ea51913bb" ,
"pool_creator_company" : "bdd68c99-65fe-4500-baae-5bc09b4af183" ,
"pool_creator_params" : {
"margin_mode" : "simple" ,
"params" : {
"asset_params" : {} ,
"auto_liquidation" : true ,
"default_asset_param" : {
"futures_initial_margin" : "0.02" ,
"futures_leverage" : "20000" ,
"futures_maintenance_margin" : "0.01" ,
"option_initial_margin" : "0.15" ,
"option_initial_margin_min" : "0.1" ,
"option_maintenance_margin" : "0.075"
} ,
"liquidation_penalty" : "0.1"
}
} ,
"pool_location" : "cdfbea44-7e75-4688-a3ea-e8d097ae7ede" ,
"pool_other_company" : "af13119d-4ed1-4718-aea3-fecee4764837" ,
"pool_other_params" : {
"margin_mode" : "simple" ,
"params" : {
"asset_params" : {} ,
"auto_liquidation" : true ,
"default_asset_param" : {
"futures_initial_margin" : "0.02" ,
"futures_leverage" : "20000" ,
"futures_maintenance_margin" : "0.01" ,
"option_initial_margin" : "0.15" ,
"option_initial_margin_min" : "0.1" ,
"option_maintenance_margin" : "0.075"
} ,
"liquidation_penalty" : "0.1"
}
}
}
} ,
"rfq_expires_at" : "2024-04-03T10:42:19.795911Z" ,
"rfq_id" : "564eeecb-7466-4af4-b833-907835d6e83b" ,
"rfq_legs" : [
{
"instrument" : {
"expiry" : "2024-04-05T08:00:00Z" ,
"instrument_type" : "dated_future" ,
"settlement_asset" : "USDC" ,
"underlying" : "BTC"
} ,
"qty" : "1" ,
"rfq_id" : "564eeecb-7466-4af4-b833-907835d6e83b" ,
"rfq_leg_id" : "635976ac-d5ea-4f44-b25a-2de18cc0cade" ,
"side" : "buy"
}
] ,
"rfq_status" : "closed" ,
"structure" : {
"legs" : [
{
"instrument" : {
"expiry" : "2024-04-05T08:00:00Z" ,
"instrument_type" : "dated_future" ,
"settlement_asset" : "USDC" ,
"underlying" : "BTC"
} ,
"ratio" : 1 ,
"side" : "buy"
}
]
} ,
"structure_price" : null ,
"taker_company" : "bdd68c99-65fe-4500-baae-5bc09b4af183"
}
] ,
"pagination" : {
"next_page" : null
}
}
Python SDK:
Copy 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 ]
SDK examples
Copy # iterate over all of your company's sent RFQs
for quote in paginate (client.get_rfqs_sent):
...
# fetch a received RFQ by id
rfq_id = "27581879-bc89-4134-87e9-7d9b1bfec396"
quote = client . get_rfqs_received (id = rfq_id). result [ 0 ]
POST /v1/rfqs/new
🔐 🪙 20
Used to create a new RFQ as a taker.
JSON payload keys:
structure
: Structure — what is being traded
qty
: DecimalStr — quantity in units of the structure (multiplied by ratio per leg)
expires_at
: DateTimeRFC3339 — expiration time
target_companies
: List of Uuid — specific companies that will see the request
Example input
Copy {
"structure" : {
"legs" : [
{
"instrument" : {
"instrument_type" : "dated_future" ,
"underlying" : "BTC" ,
"settlement_asset" : "USDC" ,
"expiry" : "2024-04-05T08:00:00Z"
} ,
"ratio" : 1 ,
"side" : "buy"
}
]
} ,
"qty" : "1" ,
"expires_at" : "2024-04-03T10:42:19.795911Z" ,
"target_companies" : [
"af13119d-4ed1-4718-aea3-fecee4764837"
]
}
Output type: ApiSingle[RFQ]
Example output
Copy {
"result" : {
"asks" : [] ,
"bids" : [] ,
"created_at" : "2024-04-02T22:42:19.816573Z" ,
"qty" : "1" ,
"quotes_common_metadata" : {} ,
"rfq_expires_at" : "2024-04-03T10:42:19.795911Z" ,
"rfq_id" : "564eeecb-7466-4af4-b833-907835d6e83b" ,
"rfq_legs" : [
{
"instrument" : {
"expiry" : "2024-04-05T08:00:00Z" ,
"instrument_type" : "dated_future" ,
"settlement_asset" : "USDC" ,
"underlying" : "BTC"
} ,
"qty" : "1" ,
"rfq_id" : "564eeecb-7466-4af4-b833-907835d6e83b" ,
"rfq_leg_id" : "635976ac-d5ea-4f44-b25a-2de18cc0cade" ,
"side" : "buy"
}
] ,
"rfq_status" : "open" ,
"structure" : {
"legs" : [
{
"instrument" : {
"expiry" : "2024-04-05T08:00:00Z" ,
"instrument_type" : "dated_future" ,
"settlement_asset" : "USDC" ,
"underlying" : "BTC"
} ,
"ratio" : 1 ,
"side" : "buy"
}
]
} ,
"structure_price" : {
"delta" : "1" ,
"gamma" : "0" ,
"native_price" : "1" ,
"price" : "65806.226554946" ,
"rho" : "0" ,
"theta" : "0" ,
"timestamp" : "2024-04-02T22:42:19.836190673Z" ,
"vega" : "0"
} ,
"taker_company" : "bdd68c99-65fe-4500-baae-5bc09b4af183"
}
}
Python SDK:
Copy def create_rfq(self, structure: Structure, qty: StrDecimal,
expires_at: DateTimeRFC3339,
target_companies: List[UUIDv4]) -> ApiSingle[RFQ]
SDK examples
Copy structure = {"legs": [
{
"instrument": {
"instrument_type": InstrumentType.DATED_FUTURE,
"underlying": "BTC",
"settlement_asset": "USDC",
"expiry": "2024-04-05T08:00:00Z"
},
"ratio": 1,
"side": TradeSide.BUY
}
]}
# send to one company
target_companies = ["af13119d-4ed1-4718-aea3-fecee4764837"]
new_rfq = client.create_rfq(
structure=structure,
qty="1",
expires_at="2024-04-03T10:42:19.795911Z",
target_companies=target_companies
).result
# send to all companies
my_company_id = client.get_status().result["auth"]["company_id"]
target_companies = [c["id"] for c in paginate(client.get_companies)
if c["id"] != my_company_id]
new_rfq = client.create_rfq(
structure=structure,
qty="1",
expires_at="2024-04-03T10:42:19.795911Z",
target_companies=target_companies
).result
POST /v1/rfqs/cancel
🔐 🪙 20
Cancels a previously created RFQ.
JSON payload keys:
id
: Uuid — ID of the RFQ to cancel
Example input
Copy {
"id": "564eeecb-7466-4af4-b833-907835d6e83b"
}
Output type: ApiSingle[bool]
Example outputPython SDK:
Copy def cancel_rfq(self, id: UUIDv4) -> ApiSingle[bool]
SDK examples
Copy client.cancel_rfq(id="3025fca3-114e-4476-a993-93286a7dd43f")
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 ID
limit
: int (optional, max=1,000) — used for pagination
offset
: int (optional) — used for pagination
Output type : ApiPage[SettlementPoolItem]
Example output
Copy {
"result": [
{
"company_id": "bdd68c99-65fe-4500-baae-5bc09b4af183",
"data": {
"creator_address": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
"creator_company_margin_usage": {
"balance": "0",
"company": "bdd68c99-65fe-4500-baae-5bc09b4af183",
"margin_params": {
"margin_mode": "simple",
"params": {
"asset_params": {},
"auto_liquidation": true,
"default_asset_param": {
"futures_initial_margin": "0.02",
"futures_leverage": "20000",
"futures_maintenance_margin": "0.01",
"option_initial_margin": "0.15",
"option_initial_margin_min": "0.1",
"option_maintenance_margin": "0.075"
},
"liquidation_penalty": "0.1"
}
},
"margin_usage": {
"initial_margin": "0",
"maintenance_margin": "0"
},
"max_withdrawable_amount": "0"
},
"other_address": "0xa0ee7a142d267c1f36714e4a8f75612f20a79720",
"other_company_margin_usage": {
"balance": "0",
"company": "af13119d-4ed1-4718-aea3-fecee4764837",
"margin_params": {
"margin_mode": "simple",
"params": {
"asset_params": {},
"auto_liquidation": true,
"default_asset_param": {
"futures_initial_margin": "0.02",
"futures_leverage": "20000",
"futures_maintenance_margin": "0.01",
"option_initial_margin": "0.15",
"option_initial_margin_min": "0.1",
"option_maintenance_margin": "0.075"
},
"liquidation_penalty": "0.1"
}
},
"margin_usage": {
"initial_margin": "0",
"maintenance_margin": "0"
},
"max_withdrawable_amount": "0"
},
"pool_address": "0x5e5137b6a596a5d7508756c14d07f83ce8535944",
"pool_name": "API test pool",
"positions": [],
"status": "open"
},
"pool_id": "cdfbea44-7e75-4688-a3ea-e8d097ae7ede"
}
],
"pagination": {
"next_page": null
}
}
Python SDK:
Copy def get_settlement_pools(self, id: Optional[str] = None,
page: Optional[Dict] = None) -> ApiPage[SettlementPoolItem]
SDK examples
Copy # iterate over settlement pools
for pool in paginate(client.get_settlement_pools):
...
# load all settlement pools into a list (eagerly request all pages)
pools = list(paginate(client.get_settlement_pools))
# fetch company metadata by id
company_id = "60c84784-5516-478d-a320-ee82d7303581"
pool = client.get_settlement_pools(id=company_id).result[0]
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 pool
company_other
: Uuid — counterparty company ID
creator_params
: MarginParams — margin parameters for your company
other_params
: MarginParams — margin parameters for the counterparty
Example input
Copy {
"pool_name": "Test pool",
"company_other": "af13119d-4ed1-4718-aea3-fecee4764837",
"creator_params": {
"margin_mode": "simple",
"params": {
"liquidation_penalty": "0.1",
"auto_liquidation": true,
"asset_params": {},
"default_asset_param": {
"futures_initial_margin": "0.02",
"futures_maintenance_margin": "0.01",
"futures_leverage": "20000",
"option_initial_margin": "0.15",
"option_initial_margin_min": "0.1",
"option_maintenance_margin": "0.075"
}
}
},
"other_params": {
"margin_mode": "simple",
"params": {
"liquidation_penalty": "0.1",
"auto_liquidation": true,
"asset_params": {},
"default_asset_param": {
"futures_initial_margin": "0.02",
"futures_maintenance_margin": "0.01",
"futures_leverage": "20000",
"option_initial_margin": "0.15",
"option_initial_margin_min": "0.1",
"option_maintenance_margin": "0.075"
}
}
}
}
Output type: ApiSingle[SettlementPool]
Example output
Copy {
"result": {
"company_id": "bdd68c99-65fe-4500-baae-5bc09b4af183",
"data": {
"creator_address": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
"creator_company_margin_usage": {
"balance": "0",
"company": "bdd68c99-65fe-4500-baae-5bc09b4af183",
"margin_params": {
"margin_mode": "simple",
"params": {
"asset_params": {},
"auto_liquidation": true,
"default_asset_param": {
"futures_initial_margin": "0.02",
"futures_leverage": "20000",
"futures_maintenance_margin": "0.01",
"option_initial_margin": "0.15",
"option_initial_margin_min": "0.1",
"option_maintenance_margin": "0.075"
},
"liquidation_penalty": "0.1"
}
},
"margin_usage": {
"initial_margin": "0",
"maintenance_margin": "0"
},
"max_withdrawable_amount": "0"
},
"other_address": "0xa0ee7a142d267c1f36714e4a8f75612f20a79720",
"other_company_margin_usage": {
"balance": "0",
"company": "af13119d-4ed1-4718-aea3-fecee4764837",
"margin_params": {
"margin_mode": "simple",
"params": {
"asset_params": {},
"auto_liquidation": true,
"default_asset_param": {
"futures_initial_margin": "0.02",
"futures_leverage": "20000",
"futures_maintenance_margin": "0.01",
"option_initial_margin": "0.15",
"option_initial_margin_min": "0.1",
"option_maintenance_margin": "0.075"
},
"liquidation_penalty": "0.1"
}
},
"margin_usage": {
"initial_margin": "0",
"maintenance_margin": "0"
},
"max_withdrawable_amount": "0"
},
"pool_address": null,
"pool_name": "Test pool",
"positions": [],
"status": "pending"
},
"pool_id": "06783112-1acf-4aee-b14b-1b742091a8ab"
}
}
Python SDK:
Copy def create_settlement_pool(self, pool_name: str, company_other: UUIDv4,
creator_params: MarginParams,
other_params: MarginParams) -> ApiSingle[SettlementPool]
SDK examples
Copy margin_params = {
"margin_mode": MarginMode.SIMPLE,
"params": {
"liquidation_penalty": "0.1",
"auto_liquidation": True,
"asset_params": {},
"default_asset_param": {
"futures_initial_margin": "0.02",
"futures_maintenance_margin": "0.01",
"futures_leverage": "20000",
"option_initial_margin": "0.15",
"option_initial_margin_min": "0.1",
"option_maintenance_margin": "0.075",
},
}
}
client.create_settlement_pool(
pool_name="Test pool",
company_other="af13119d-4ed1-4718-aea3-fecee4764837",
creator_params=margin_params,
other_params=margin_params,
)
Transfers
GET /v1/transfers
🔐 🪙 1
Fetches transfers for the authenticated user.
Parameters:
pool
: Uuid (optional) — filters output by settlement pool
id
: Uuid (optional) — filters output by transfer ID
limit
: int (optional, max=10,000) — used for pagination
offset
: int (optional) — used for pagination
Output type : ApiPage[Transfer]
Example output
Copy {
"result": [
{
"asset": "USDC",
"company": "af13119d-4ed1-4718-aea3-fecee4764837",
"created_at": "2024-04-02T23:16:52.344386Z",
"id": "1b9eeb56-1c61-4512-aad4-424736826714",
"oracle_request_id": null,
"parent_quote_id": "5368f58e-f385-44cc-a9e5-2e8ea51913bb",
"qty": "0.00000000082679",
"reference_instrument": null,
"rfq_id": "564eeecb-7466-4af4-b833-907835d6e83b",
"status": "confirmed",
"target_pool_location": "cdfbea44-7e75-4688-a3ea-e8d097ae7ede",
"transfer_type": "deposit"
},
{
"asset": "USDC",
"company": "af13119d-4ed1-4718-aea3-fecee4764837",
"created_at": "2024-04-02T23:02:21.418980Z",
"id": "0ab57115-bbac-4e1b-9e9e-685dfd44dd89",
"oracle_request_id": null,
"parent_quote_id": "5368f58e-f385-44cc-a9e5-2e8ea51913bb",
"qty": "639.86774699917321",
"reference_instrument": null,
"rfq_id": "564eeecb-7466-4af4-b833-907835d6e83b",
"status": "confirmed",
"target_pool_location": "cdfbea44-7e75-4688-a3ea-e8d097ae7ede",
"transfer_type": "deposit"
}
],
"pagination": {
"next_page": null
}
}
Python SDK:
Copy def get_transfers(self, pool: Optional[str] = None, id: Optional[str] = None,
page: Optional[Dict] = None) -> ApiPage[Transfer]
SDK examples
Copy # iterate over all of your company's transfers
for transfer in paginate(client.get_transfers):
...
# fetch a transfer by id
transfer_id = "0ab57115-bbac-4e1b-9e9e-685dfd44dd89"
transfer = client.get_transfers(id=transfer_id).result[0]
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
transfer_type : TransferType — deposit
or withdrawal
Example input
Copy {
"asset": "USDC",
"qty": "10000",
"target_pool_location": "49dc28fd-c1b1-494b-908c-4eecfa0a3934",
"transfer_type": "deposit"
}
Output type: ApiSingle[Transfer]
Example output
Copy {
"result": {
"asset": "USDC",
"company": "f58b3d2f-b5a6-488d-b8a9-dc2b1f782be8",
"created_at": "2024-04-18T06:45:44.391006Z",
"id": "f5e972eb-1197-4594-a3cd-94304fb5a978",
"oracle_request_id": null,
"parent_quote_id": null,
"qty": "10000",
"reference_instrument": null,
"rfq_id": null,
"status": "pending",
"target_pool_location": "49dc28fd-c1b1-494b-908c-4eecfa0a3934",
"transfer_type": "deposit"
}
}
Python SDK:
Copy def create_transfer(self, asset: AssetToken, qty: StrDecimal,
target_pool_location: UUIDv4,
transfer_type: TransferType) -> ApiSingle[Transfer]
SDK examples
Copy transfer = client.create_transfer(
asset="USDC",
qty="10000",
target_pool_location=pool['pool_id'],
transfer_type=TransferType.DEPOSIT,
).result
from variational import PollingHelper
poller = PollingHelper(api_client)
transfer = poller.wait_for_transfer(transfer['id'])
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
Example input
Copy {
"pool_address": "0xb1be60448b947528298a2200f27a8abc3964097b",
"allowance": {
"type": "decimal",
"value": "10000"
},
"seconds_until_expiry": 3600
}
Output type : ApiSingle[dict]
Example output
Copy {
"result": {
"domain": {
"chainId": "0xa4b1",
"name": "TestUSDC",
"verifyingContract": "0xd985d4707ee37295652545513822835b28a9189c",
"version": "1"
},
"message": {
"deadline": 1713459016,
"nonce": 0,
"owner": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
"spender": "0xb1be60448b947528298a2200f27a8abc3964097b",
"value": 10000000000
},
"primaryType": "Permit",
"types": {
"EIP712Domain": [
{
"name": "name",
"type": "string"
},
{
"name": "version",
"type": "string"
},
{
"name": "chainId",
"type": "uint256"
},
{
"name": "verifyingContract",
"type": "address"
}
],
"Permit": [
{
"name": "owner",
"type": "address"
},
{
"name": "spender",
"type": "address"
},
{
"name": "value",
"type": "uint256"
},
{
"name": "nonce",
"type": "uint256"
},
{
"name": "deadline",
"type": "uint256"
}
]
}
}
}
Python SDK:
Copy def generate_transfer_permit(self, pool_address: H160, allowance: Allowance,
seconds_until_expiry: Optional[int] = None) \
-> ApiSingle[dict]
SDK examples
Copy msg = self.client.generate_transfer_permit(
pool_address="0xb1be60448b947528298a2200f27a8abc3964097b",
allowance={
"type": AllowanceType.DECIMAL,
"value": "10000"
},
seconds_until_expiry=3600
).result
# or use the helper to generate, sign and submit the permit
from variational import TransferPermitHelper
permits = TransferPermitHelper(client=client, private_key=WALLET_PK)
permits.sign_and_submit_decimal(
pool_address="0xb1be60448b947528298a2200f27a8abc3964097b",
allowance=str(10000)
)
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:
signature : str — produced using message and the company wallet's private key
Example input
Copy {
"message": {
"domain": {
"chainId": 42161,
"name": "TestUSDC",
"verifyingContract": "0xd985d4707ee37295652545513822835b28a9189c",
"version": "1"
},
"message": {
"deadline": 1713459016,
"nonce": 0,
"owner": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
"spender": "0xb1be60448b947528298a2200f27a8abc3964097b",
"value": 10000000000
},
"primaryType": "Permit",
"types": {
"EIP712Domain": [
{
"name": "name",
"type": "string"
},
{
"name": "version",
"type": "string"
},
{
"name": "chainId",
"type": "uint256"
},
{
"name": "verifyingContract",
"type": "address"
}
],
"Permit": [
{
"name": "owner",
"type": "address"
},
{
"name": "spender",
"type": "address"
},
{
"name": "value",
"type": "uint256"
},
{
"name": "nonce",
"type": "uint256"
},
{
"name": "deadline",
"type": "uint256"
}
]
}
},
"signature": "ada7c1b898baf4880c9978ccc1ee38aab685c87b66fd8feff5caf5fc1c07e41106ec04e064e001e6a3064e50b1a9a49f375da04745e347be4d93036b076a099e1c"
}
Output type: ApiSingle[bool]
Example outputPython SDK:
Copy def submit_transfer_permit(self, message: dict, signature: str) -> ApiSingle[bool]
SDK examples
Copy msg = self.client.generate_transfer_permit(
pool_address="0xb1be60448b947528298a2200f27a8abc3964097b",
allowance={
"type": AllowanceType.DECIMAL,
"value": "10000"
},
seconds_until_expiry=3600
).result
# produce_signature() is not provided
signature = produce_signature(msg, WALLET_PK)
client.submit_transfer_permit(message=msg, signature=signature)
# or use the helper to generate, sign and submit the permit
from variational import TransferPermitHelper
permits = TransferPermitHelper(client=client, private_key=WALLET_PK)
permits.sign_and_submit_decimal(
pool_address="0xb1be60448b947528298a2200f27a8abc3964097b",
allowance=str(10000)
)
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]
Example output
Copy {
"result": {
"auth": null,
"server_timestamp_ms": 1707156691716
}
}
Python SDK:
Copy def get_status(self) -> ApiSingle[Status]
SDK examples
Copy status = client.get_status().result
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]]]
Example output
Copy {
"result":
{
"BTC":
[
{
"asset": "BTC",
"asset_name": "BTC",
"is_dex": false,
"last_updated_at": "2024-03-07T00:03:20.836Z",
"precision": 8,
"variational_funding_rate_params":
{
"extreme_slope": "0.0000001",
"extreme_threshold": "0.9",
"high_slope": "0.00000003",
"high_threshold": "0.7",
"min_imbalance_dollars": "10000",
"normal_slope": "0.00000001",
"normal_threshold": "0.5"
}
}
],
"ETH":
[
{
"asset": "ETH",
"asset_name": "ETH",
"is_dex": false,
"last_updated_at": "2024-03-07T00:03:20.831Z",
"precision": 8,
"variational_funding_rate_params":
{
"extreme_slope": "0.0000001",
"extreme_threshold": "0.9",
"high_slope": "0.00000003",
"high_threshold": "0.7",
"min_imbalance_dollars": "10000",
"normal_slope": "0.00000001",
"normal_threshold": "0.5"
}
}
]
}
}
Python SDK:
Copy def get_supported_assets(self, verified: Optional[bool] = False,
page: Optional[Dict] = None) \
-> ApiSingle[Dict[AssetToken, List[SupportedAssetDetails]]]
SDK examples
Copy all_supported_assets = client.get_supported_assets().result
verified_supported_assets = client.get_supported_assets(verified=True).result