curl --request GET \
--url https://api-uat.dimetrades.com/api/trades/my/history \
--header 'Authorization: Bearer <token>' \
--header 'X-API-Key: <api-key>'import requests
url = "https://api-uat.dimetrades.com/api/trades/my/history"
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/trades/my/history', 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/trades/my/history",
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/trades/my/history"
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/trades/my/history")
.header("Authorization", "Bearer <token>")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-uat.dimetrades.com/api/trades/my/history")
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": {
"trades": [
{
"id": 15,
"tradeId": "019f2cfb-a1b2-733c-9d4e-42a3620ee901",
"marketId": 60497,
"orderId": "019f2cfb-9df3-733c-b8af-42a3620ee455",
"price": 60,
"quantity": 9,
"role": "maker",
"fees": 0.04,
"status": "active",
"yesPrice": 60,
"bustedAt": null,
"bustReason": null,
"correctedPrice": null,
"correctionId": null,
"correctedAt": null,
"order": {
"id": 34,
"orderId": "019f2cfb-9df3-733c-b8af-42a3620ee455",
"type": "limit",
"price": 60,
"userId": 67,
"quantity": 9,
"quantityFilled": 9,
"predictionSide": "yes",
"isConvertedOrder": false,
"status": "filled"
},
"createdAt": "2026-07-04T11:55:17.463Z",
"updatedAt": "2026-07-04T11:55:17.463Z"
}
],
"pagination": {
"count": 1,
"totalCount": 42,
"hasPreviousPage": false,
"hasNextPage": true
}
},
"errors": []
}My trade history
Returns the authenticated user’s own executed trades, each with the originating order, maker/taker role, and fees. Optionally filter by market.
Busted and price-corrected trades come from this endpoint
There is no separate API for busted or price-corrected trades, and none
is planned. An admin action never deletes or moves a trade — it mutates the
same row in place and flips status. Page this endpoint and branch on
status:
status | What happened | What the row holds |
|---|---|---|
active | Normal executed trade | Original values |
busted | Admin reversed the trade | Original price / quantity / fees; bustedAt + bustReason set. Money and contracts already refunded. |
corrected | Admin re-priced the trade | Restated price and yesPrice; correctedPrice, correctionId, correctedAt set. Wallet delta already applied. |
settled | Market settled, trade closed out | Original values |
⚠️ A busted trade is still in this list, with its original price and quantity. Filter
status !== 'busted'before totalling volume, cost basis, or P&L, or you will count a trade that was reversed.
updatedAt moves whenever a bust or correction is applied while createdAt
does not, so updatedAt is the field to poll on if you cache trades
locally. tradeId is stable across both operations — use it as the
reconciliation key.
A trade can be corrected more than once. correctionId always reflects the
most recent correction and price is the price after all of them. The
pre-correction price is not returned here — capture it before you
overwrite your copy, or read the PRICE_CORRECTED WebSocket event, which
carries both oldPrice and newPrice.
Prices
The top-level price is already your effective price for the contract
you actually traded — do not invert it. The nested order.price and
order.predictionSide are in orderbook representation and need converting
when order.isConvertedOrder is true. See
Conventions → Order prices.
curl --request GET \
--url https://api-uat.dimetrades.com/api/trades/my/history \
--header 'Authorization: Bearer <token>' \
--header 'X-API-Key: <api-key>'import requests
url = "https://api-uat.dimetrades.com/api/trades/my/history"
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/trades/my/history', 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/trades/my/history",
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/trades/my/history"
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/trades/my/history")
.header("Authorization", "Bearer <token>")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-uat.dimetrades.com/api/trades/my/history")
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": {
"trades": [
{
"id": 15,
"tradeId": "019f2cfb-a1b2-733c-9d4e-42a3620ee901",
"marketId": 60497,
"orderId": "019f2cfb-9df3-733c-b8af-42a3620ee455",
"price": 60,
"quantity": 9,
"role": "maker",
"fees": 0.04,
"status": "active",
"yesPrice": 60,
"bustedAt": null,
"bustReason": null,
"correctedPrice": null,
"correctionId": null,
"correctedAt": null,
"order": {
"id": 34,
"orderId": "019f2cfb-9df3-733c-b8af-42a3620ee455",
"type": "limit",
"price": 60,
"userId": 67,
"quantity": 9,
"quantityFilled": 9,
"predictionSide": "yes",
"isConvertedOrder": false,
"status": "filled"
},
"createdAt": "2026-07-04T11:55:17.463Z",
"updatedAt": "2026-07-04T11:55:17.463Z"
}
],
"pagination": {
"count": 1,
"totalCount": 42,
"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
ISO-8601 timestamp. Returns only trades created or changed (busted or price-corrected) after it, filtered on updatedAt, ordered oldest change first (updatedAt ASC, id ASC) so you can page forward and resume from the last updatedAt you saw. Without it the order is newest first (createdAt DESC, id DESC); id breaks ties so rows never shuffle between pages.
"2026-10-01T00:00:00.000Z"
1-based page number for paginated results.
x >= 1Number of rows per page.
1 <= x <= 100^[0-9]+$"60497"
