curl -sS \
-H "Authorization: Bearer $OXINSIDER_API_KEY" \
'https://api.0xinsider.com/api/v1/trader/{address}/export/status?job_id=123'import requests
url = "https://api.0xinsider.com/api/v1/trader/{address}/export/status"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.0xinsider.com/api/v1/trader/{address}/export/status', 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.0xinsider.com/api/v1/trader/{address}/export/status",
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>"
],
]);
$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.0xinsider.com/api/v1/trader/{address}/export/status"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.0xinsider.com/api/v1/trader/{address}/export/status")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.0xinsider.com/api/v1/trader/{address}/export/status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "trader_export_job",
"data": {
"job_id": 123,
"status": "ready",
"format": "csv",
"total_trades": 4821,
"processed_trades": 4821,
"file_size": 1893344,
"error": null,
"terminal": true,
"next_action": "download",
"created_at": "2026-09-22T09:00:00Z",
"started_at": "2026-09-22T09:00:04Z",
"ready_at": "2026-09-22T09:00:31Z",
"failed_at": null,
"expires_at": "2026-09-23T09:00:00Z",
"expired_at": null,
"data_as_of": "2026-09-22T08:58:12Z",
"cancel_requested_at": null,
"cancelled_at": null,
"attempt": 1,
"max_attempts": 3,
"artifact": {
"artifact_id": "export_artifact_123",
"etag": "\"3f2a9c1e5b7d4a6f8e0c2b4d6f8a0c2e-3\"",
"compressed_size_bytes": 412903,
"content_type": "text/csv",
"content_encoding": "gzip",
"manifest": {
"manifest_version": "1",
"format": "csv",
"schema_version": "trader-export-csv-v1",
"coverage": "trades_only",
"generation": {
"id": "9d3e8c45-56cc-47a6-a4f8-1e0f54e3e4d1",
"selected_at": "2026-09-22T09:00:05Z",
"consistency": "repeatable_read",
"source_watermarks": {
"positions": {
"source": "trader_position_snapshots_or_traders_last_synced",
"coverage": "position_snapshot",
"generation": 42,
"data_as_of": "2026-09-22T08:58:12Z"
},
"pnl": {
"source": "trader_trading_pnl",
"coverage": "native_provider",
"revision": 17,
"observed_at": "2026-09-22T08:58:12Z"
},
"categories": {
"source": "trader_category_breakdown_runs",
"coverage": "published_projection",
"publication_fence": "2026-09-22T08:58:12Z",
"data_as_of": "2026-09-22T08:58:12Z"
},
"trades": {
"source": "trades",
"coverage": "all_matching_rows",
"rows": 4821,
"first_activity_date": "2024-01-01"
}
}
},
"row_count": 4821,
"content_size_bytes": 1893344,
"content_sha256": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
"compressed_size_bytes": 412903,
"compressed_sha256": "abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"
}
}
},
"meta": {
"request_id": "req_example",
"cached": false,
"cost": 1
}
}Trader export status
Check a trader export’s state, progress, and next action.
curl -sS \
-H "Authorization: Bearer $OXINSIDER_API_KEY" \
'https://api.0xinsider.com/api/v1/trader/{address}/export/status?job_id=123'import requests
url = "https://api.0xinsider.com/api/v1/trader/{address}/export/status"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.0xinsider.com/api/v1/trader/{address}/export/status', 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.0xinsider.com/api/v1/trader/{address}/export/status",
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>"
],
]);
$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.0xinsider.com/api/v1/trader/{address}/export/status"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.0xinsider.com/api/v1/trader/{address}/export/status")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.0xinsider.com/api/v1/trader/{address}/export/status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "trader_export_job",
"data": {
"job_id": 123,
"status": "ready",
"format": "csv",
"total_trades": 4821,
"processed_trades": 4821,
"file_size": 1893344,
"error": null,
"terminal": true,
"next_action": "download",
"created_at": "2026-09-22T09:00:00Z",
"started_at": "2026-09-22T09:00:04Z",
"ready_at": "2026-09-22T09:00:31Z",
"failed_at": null,
"expires_at": "2026-09-23T09:00:00Z",
"expired_at": null,
"data_as_of": "2026-09-22T08:58:12Z",
"cancel_requested_at": null,
"cancelled_at": null,
"attempt": 1,
"max_attempts": 3,
"artifact": {
"artifact_id": "export_artifact_123",
"etag": "\"3f2a9c1e5b7d4a6f8e0c2b4d6f8a0c2e-3\"",
"compressed_size_bytes": 412903,
"content_type": "text/csv",
"content_encoding": "gzip",
"manifest": {
"manifest_version": "1",
"format": "csv",
"schema_version": "trader-export-csv-v1",
"coverage": "trades_only",
"generation": {
"id": "9d3e8c45-56cc-47a6-a4f8-1e0f54e3e4d1",
"selected_at": "2026-09-22T09:00:05Z",
"consistency": "repeatable_read",
"source_watermarks": {
"positions": {
"source": "trader_position_snapshots_or_traders_last_synced",
"coverage": "position_snapshot",
"generation": 42,
"data_as_of": "2026-09-22T08:58:12Z"
},
"pnl": {
"source": "trader_trading_pnl",
"coverage": "native_provider",
"revision": 17,
"observed_at": "2026-09-22T08:58:12Z"
},
"categories": {
"source": "trader_category_breakdown_runs",
"coverage": "published_projection",
"publication_fence": "2026-09-22T08:58:12Z",
"data_as_of": "2026-09-22T08:58:12Z"
},
"trades": {
"source": "trades",
"coverage": "all_matching_rows",
"rows": 4821,
"first_activity_date": "2024-01-01"
}
}
},
"row_count": 4821,
"content_size_bytes": 1893344,
"content_sha256": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
"compressed_size_bytes": 412903,
"compressed_sha256": "abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"
}
}
},
"meta": {
"request_id": "req_example",
"cached": false,
"cost": 1
}
}next_action: poll again, download the completed file, or submit a replacement job.
Use Download a trader export once the job is ready.
Parameters
| Parameter | Description |
|---|---|
job_id | Required. The integer the submit response returned. |
address | The wallet the job was submitted for. A trd_ id finds a job that was submitted under the bare wallet. |
export scope. A default API key needs no additional scope.
Key response fields
| Field | Meaning |
|---|---|
status | The current state: queued, running, cancel_requested, reconcile_required, ready, failed, expired, or cancelled. |
next_action | poll means read status again, download means retrieve the file, and resubmit means submit a new job. |
poll_after_s | Seconds to wait before another poll. Present while the job needs polling. |
terminal | true means you should stop polling this job. |
cancel_requested_at, cancelled_at | When you asked to cancel the job, and when it stopped. Both are null on a job you did not cancel. See Cancel a trader export. |
processed_trades, total_trades | The completed and expected trade counts. Both are null until the worker sets them, so treat a null as “not known yet” rather than as zero. |
file_size | The file size in bytes. It is set once status is ready. |
error | Why the job failed. It is set only when status is failed. Submit a new job after one fails. |
Example
curl -H "Authorization: Bearer $OXINSIDER_API_KEY" \
"https://api.0xinsider.com/api/v1/trader/swisstony/export/status?job_id=123"
poll_after_s seconds before the next read, and stop polling when next_action is no longer poll.
What it does not return
- The file. Fetch it from Download a trader export once
statusisready. - A job belonging to another account, or a job submitted for a different wallet. Both answer
404. - Notifications in this response. To receive completion events, subscribe to
export_job_ready,export_job_failed,export_job_expired, orexport_job_cancelledthrough Webhooks. - An
ETag. Every poll is a full read.
Authorizations
Legacy default or named integration API key, or OAuth 2.1 access token, in the Authorization header as Bearer oxi_sk_live_... or Bearer oxi_at_.... Default keys retain full access; integration keys are limited to their approved read, webhooks, export and usage scopes and expire within 90 days. All credentials share the owner's account limits. Data calls require an active Pro subscription and return live data. A 401 carries WWW-Authenticate: Bearer resource_metadata="https://api.0xinsider.com/.well-known/oauth-protected-resource" (RFC 6750 section 3, RFC 9728).
Headers
Opt into strict query-name validation. The default is compatible: unknown names are ignored and reported in X-Query-Ignored. With strict, an unknown name returns 400 bad_request with error.reason unknown_query_parameter before the handler runs, including when its percent escape is incomplete.
strict Path Parameters
Trader wallet address (0x...), known trader username-style lookup, or trd_-prefixed trader ID emitted by this API.
Query Parameters
Export job id returned by the submit route.
Was this page helpful?