curl --request GET \
--url https://api-uat.dimetrades.com/api/positions \
--header 'Authorization: Bearer <token>' \
--header 'X-API-Key: <api-key>'import requests
url = "https://api-uat.dimetrades.com/api/positions"
headers = {
"Authorization": "Bearer <token>",
"X-API-Key": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {Authorization: 'Bearer <token>', 'X-API-Key': '<api-key>'}
};
fetch('https://api-uat.dimetrades.com/api/positions', 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://api-uat.dimetrades.com/api/positions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"X-API-Key: <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://api-uat.dimetrades.com/api/positions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("X-API-Key", "<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://api-uat.dimetrades.com/api/positions")
.header("Authorization", "Bearer <token>")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-uat.dimetrades.com/api/positions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"positions": [
{
"id": 15,
"marketId": 60497,
"market": {
"id": 60497,
"title": "M6.0+ in California",
"status": "open",
"result": null,
"event": {
"id": 5454,
"title": "Will there be a 6.0+ magnitude earthquake in California in 2026?",
"closeAt": "2026-12-31T00:00:00.000Z",
"imageUrl": "https://cdn.dimetrades.com/events/5454.png",
"metaData": {}
}
},
"yesContracts": 9,
"noContracts": 0,
"totalYesCost": 5.4,
"totalNoCost": 0,
"lastUpdatedAt": "2026-07-04T11:55:17.494Z"
}
],
"pagination": {
"count": 2,
"totalCount": 5,
"hasPreviousPage": false,
"hasNextPage": true
}
},
"errors": []
}List my positions
Returns the authenticated user’s positions across all markets. Supports
search, date range, and independent isSettled / isClosed flags.
When neither flag is passed the endpoint defaults to
isSettled=false&isClosed=false — i.e. only positions the user still
actively holds in a tradable market. Pass either flag to opt out of that
default; the two are applied independently, so isClosed=true alone
returns closed positions whatever their settled state.
isSettled and isClosed mean different things and neither implies the
other — see
Conventions → Market and position lifecycle
before filtering on them. For resolved positions with payouts, prefer
GET /positions/portfolio-history,
which returns the settlement fields this endpoint omits.
The flags are filters only — they are not returned on the
Position rows.
curl --request GET \
--url https://api-uat.dimetrades.com/api/positions \
--header 'Authorization: Bearer <token>' \
--header 'X-API-Key: <api-key>'import requests
url = "https://api-uat.dimetrades.com/api/positions"
headers = {
"Authorization": "Bearer <token>",
"X-API-Key": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {Authorization: 'Bearer <token>', 'X-API-Key': '<api-key>'}
};
fetch('https://api-uat.dimetrades.com/api/positions', 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://api-uat.dimetrades.com/api/positions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"X-API-Key: <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://api-uat.dimetrades.com/api/positions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("X-API-Key", "<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://api-uat.dimetrades.com/api/positions")
.header("Authorization", "Bearer <token>")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-uat.dimetrades.com/api/positions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"positions": [
{
"id": 15,
"marketId": 60497,
"market": {
"id": 60497,
"title": "M6.0+ in California",
"status": "open",
"result": null,
"event": {
"id": 5454,
"title": "Will there be a 6.0+ magnitude earthquake in California in 2026?",
"closeAt": "2026-12-31T00:00:00.000Z",
"imageUrl": "https://cdn.dimetrades.com/events/5454.png",
"metaData": {}
}
},
"yesContracts": 9,
"noContracts": 0,
"totalYesCost": 5.4,
"totalNoCost": 0,
"lastUpdatedAt": "2026-07-04T11:55:17.494Z"
}
],
"pagination": {
"count": 2,
"totalCount": 5,
"hasPreviousPage": false,
"hasNextPage": true
}
},
"errors": []
}Authorizations
The end user's JWT access token, sent as Authorization: Bearer <token>.
Obtain one from POST /partner/customers or POST /partner/customers/login
— both return it as token. It identifies which of your users a call
is made for, and is sent alongside your X-API-Key on every authenticated
endpoint.
Event discovery, categories, subcategories and scores are public and need no token.
ISV / partner credential — public half. Required on every request.
Identifies the integration partner (ISV) making the call. Issued by Dime
Trades when the ISV is onboarded and sent on every /partner/* endpoint:
X-API-Key: dt_pk_live_7f3c9a2e5b18
- On the two partner endpoints that create accounts or issue tokens (
POST /partner/customers,POST /partner/customers/login), it is accompanied byX-API-Secretand is the only authentication — there is no user token yet. - On every other partner endpoint it is sent alongside the user's
Authorization: Bearer <token>: the API key says which platform is calling, the bearer token says which user it is calling for.
Credentials are scoped to one or more brands; using a key with a brandId outside that scope returns 403. Staging and production keys are separate.
The key identifies your platform — treat it as a backend credential.
Query Parameters
1-based page number for paginated results.
x >= 1Number of rows per page.
1 <= x <= 100"earthquake"
Filter by settlement status (boolean). Standardized across all endpoints.
Filter on whether the position is closed — the user holds no contracts, or the market was closed to trading. Passing true additionally restricts the result to positions that still hold contracts, so it answers "closed market, contracts intact" rather than returning every position the user has ever emptied. Omit for the live-holdings default.
true, false 