curl --request GET \
--url https://calibri.io/api/v2/atlas/account/contracts \
--header 'X-Auth-Apikey: <api-key>'import requests
url = "https://calibri.io/api/v2/atlas/account/contracts"
headers = {"X-Auth-Apikey": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Auth-Apikey': '<api-key>'}};
fetch('https://calibri.io/api/v2/atlas/account/contracts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://calibri.io/api/v2/atlas/account/contracts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Auth-Apikey: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://calibri.io/api/v2/atlas/account/contracts"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Auth-Apikey", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://calibri.io/api/v2/atlas/account/contracts")
.header("X-Auth-Apikey", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://calibri.io/api/v2/atlas/account/contracts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Auth-Apikey"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"avg_price": 0.6,
"created_at": "2026-08-07T10:00:00Z",
"direction": "buy",
"event_slug": "btc-updown-5m-1730",
"event_title": "Bitcoin Up or Down 5m",
"funds_spent": 60,
"id": "usdc",
"market_id": "12",
"market_title": "Will BTC close above its open?",
"match_type": "mint",
"price": 0.6,
"proceeds": 0,
"quote_currency": "usdc",
"side": "yes",
"state": "active",
"taker_fee_amount": "0.17",
"taker_fee_refunded": false,
"volume": 100,
"outcome_labels": [
"Above $77,500",
"Below $77,500"
],
"settled_at": "2026-08-08T00:00:00Z",
"settlement_status": "confirmed",
"settlement_status_raw": "matched"
}
]Your contracts
Your matched positions. A winning contract settles to the full 1.00 per share — the fee was taken at trade time — but winnings are NOT auto-paid: you redeem them yourself.
curl --request GET \
--url https://calibri.io/api/v2/atlas/account/contracts \
--header 'X-Auth-Apikey: <api-key>'import requests
url = "https://calibri.io/api/v2/atlas/account/contracts"
headers = {"X-Auth-Apikey": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Auth-Apikey': '<api-key>'}};
fetch('https://calibri.io/api/v2/atlas/account/contracts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://calibri.io/api/v2/atlas/account/contracts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Auth-Apikey: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://calibri.io/api/v2/atlas/account/contracts"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Auth-Apikey", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://calibri.io/api/v2/atlas/account/contracts")
.header("X-Auth-Apikey", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://calibri.io/api/v2/atlas/account/contracts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Auth-Apikey"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"avg_price": 0.6,
"created_at": "2026-08-07T10:00:00Z",
"direction": "buy",
"event_slug": "btc-updown-5m-1730",
"event_title": "Bitcoin Up or Down 5m",
"funds_spent": 60,
"id": "usdc",
"market_id": "12",
"market_title": "Will BTC close above its open?",
"match_type": "mint",
"price": 0.6,
"proceeds": 0,
"quote_currency": "usdc",
"side": "yes",
"state": "active",
"taker_fee_amount": "0.17",
"taker_fee_refunded": false,
"volume": 100,
"outcome_labels": [
"Above $77,500",
"Below $77,500"
],
"settled_at": "2026-08-08T00:00:00Z",
"settlement_status": "confirmed",
"settlement_status_raw": "matched"
}
]Authorizations
HMAC-signed API key. Send X-Auth-Apikey, X-Auth-Nonce and X-Auth-Signature.
Query Parameters
Contracts per page. Defaults to 50.
x >= 1Page number, from 1. Newest contract first.
x >= 1Contracts either leg of which came from this order — useful for following one fill. Matches the yes side or the no side.
Filter to one market, by the engine's market id.
Filter by verdict — the same vocabulary the state field returns: active, settled_yes, settled_no, voided. Two conveniences on top: settled is shorthand for both settled values, and a comma-separated list is an OR (settled_yes,voided). pending is accepted as an alias of active. Not an enum in this schema precisely because a list is a legal value.
Response
Volume-weighted average across fills.
0.6
ISO-8601.
"2026-08-07T10:00:00Z"
Whether you bought or sold side on this contract. Always buy on a mint.
buy, sell "buy"
The parent event's slug — what a portfolio row links to.
"btc-updown-5m-1730"
"Bitcoin Up or Down 5m"
Cash paid, on a buy. 0 on a sell.
60
"usdc"
The market this position is in.
"12"
"Will BTC close above its open?"
mint creates a YES/NO pair from two buys; transfer moves an existing token from a seller to a buyer; merge redeems a YES and a NO from two sellers.
mint, transfer, merge "mint"
Fill price, a probability in (0,1).
0.6
Cash received before fees, on a sell. 0 on a buy.
0
"usdc"
The outcome you traded on this contract. On an exit this is the outcome you sold or bought, not the book side.
yes, no "yes"
Lifecycle. A settled contract names the winning side.
active, settled_yes, settled_no, voided "active"
The taker fee charged at trade time. Nothing further is taken at settlement — a winning share pays the full 1.00.
"0.17"
True when the market voided and the fee was returned.
false
Shares held.
100
The market’s YES and NO leg names, in that order. Absent on a market using the Yes/No default.
["Above $77,500", "Below $77,500"]
When the market resolved. Null while the contract is open.
"2026-08-08T00:00:00Z"
The on-chain mint badge: pending until confirmed, reversed if the market voided.
pending, confirmed, reversed "confirmed"
The internal state-machine value behind the badge.
"matched"