curl --request GET \
--url https://calibri.io/api/v2/atlas/account/contracts/{id} \
--header 'X-Auth-Apikey: <api-key>'import requests
url = "https://calibri.io/api/v2/atlas/account/contracts/{id}"
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/{id}', 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/{id}",
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/{id}"
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/{id}")
.header("X-Auth-Apikey", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://calibri.io/api/v2/atlas/account/contracts/{id}")
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"
}{
"errors": [
"account.custody.deposits_disabled"
]
}Contract by id
One matched position, only if you are a party to it. Same object as a list element — useful when following a fill or settlement deep-link.
curl --request GET \
--url https://calibri.io/api/v2/atlas/account/contracts/{id} \
--header 'X-Auth-Apikey: <api-key>'import requests
url = "https://calibri.io/api/v2/atlas/account/contracts/{id}"
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/{id}', 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/{id}",
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/{id}"
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/{id}")
.header("X-Auth-Apikey", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://calibri.io/api/v2/atlas/account/contracts/{id}")
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"
}{
"errors": [
"account.custody.deposits_disabled"
]
}Authorizations
HMAC-signed API key. Send X-Auth-Apikey, X-Auth-Nonce and X-Auth-Signature.
Path Parameters
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"