curl -sS -X POST \
-H "Authorization: Bearer $OXINSIDER_API_KEY" \
'https://api.0xinsider.com/api/v1/trader/{address}/export/cancel?job_id=123'import requests
url = "https://api.0xinsider.com/api/v1/trader/{address}/export/cancel"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.0xinsider.com/api/v1/trader/{address}/export/cancel', 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/cancel",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
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/cancel"
req, _ := http.NewRequest("POST", 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.post("https://api.0xinsider.com/api/v1/trader/{address}/export/cancel")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.0xinsider.com/api/v1/trader/{address}/export/cancel")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "trader_export_job",
"data": {
"job_id": 123,
"status": "cancelled",
"format": "csv",
"total_trades": 4821,
"processed_trades": 0,
"file_size": null,
"error": null,
"terminal": true,
"next_action": "resubmit",
"created_at": "2026-09-22T09:00:00Z",
"started_at": null,
"ready_at": null,
"failed_at": null,
"expires_at": "2026-09-23T09:00:00Z",
"expired_at": null,
"data_as_of": null,
"cancel_requested_at": "2026-09-22T09:00:02Z",
"cancelled_at": "2026-09-22T09:00:02Z",
"attempt": 0,
"max_attempts": 3
},
"meta": {
"request_id": "req_example",
"cached": false,
"cost": 1
}
}Cancel a trader export
Stop an export job you no longer need and get back the job, cancelled or on its way to cancelled.
curl -sS -X POST \
-H "Authorization: Bearer $OXINSIDER_API_KEY" \
'https://api.0xinsider.com/api/v1/trader/{address}/export/cancel?job_id=123'import requests
url = "https://api.0xinsider.com/api/v1/trader/{address}/export/cancel"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.0xinsider.com/api/v1/trader/{address}/export/cancel', 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/cancel",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
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/cancel"
req, _ := http.NewRequest("POST", 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.post("https://api.0xinsider.com/api/v1/trader/{address}/export/cancel")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.0xinsider.com/api/v1/trader/{address}/export/cancel")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "trader_export_job",
"data": {
"job_id": 123,
"status": "cancelled",
"format": "csv",
"total_trades": 4821,
"processed_trades": 0,
"file_size": null,
"error": null,
"terminal": true,
"next_action": "resubmit",
"created_at": "2026-09-22T09:00:00Z",
"started_at": null,
"ready_at": null,
"failed_at": null,
"expires_at": "2026-09-23T09:00:00Z",
"expired_at": null,
"data_as_of": null,
"cancel_requested_at": "2026-09-22T09:00:02Z",
"cancelled_at": "2026-09-22T09:00:02Z",
"attempt": 0,
"max_attempts": 3
},
"meta": {
"request_id": "req_example",
"cached": false,
"cost": 1
}
}status to see what the cancel did.
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 on this route. An API key needs nothing extra.
What the cancel does
The answer is always200 with the job. What the job reads depends on where it was when the cancel arrived.
| The job was | It reads | What happens next |
|---|---|---|
queued | cancelled | Nothing. No worker will start it. |
running | cancel_requested | The worker stops at its next safe point and the job reads cancelled. Poll the status route at poll_after_s until terminal is true. |
running, with its file already being published | unchanged | The job finishes as ready, or as reconcile_required if the storage answer is lost. A cancel cannot reach it any more. |
cancel_requested or cancelled | unchanged | A repeat converges on the same state. |
ready, reconcile_required, failed, or expired | unchanged | A cancel never deletes a ready file. |
cancelled within a few minutes at most. If the worker itself stops first, the job reads cancelled after its 30-minute lease lapses, at the next hourly cleanup.
Key response fields
| Field | Meaning |
|---|---|
status | cancelled, cancel_requested, or the status the job already had. |
terminal | true once status can no longer change. cancel_requested is not terminal. |
cancel_requested_at | When you asked to cancel. It is null when the cancel did not reach the job. |
cancelled_at | When the job reached cancelled. It is null until then. |
next_action | resubmit on a cancelled job, poll while it is cancel_requested. |
Quota
Cancelling does not give quota back. The submit already counted against the 20 exports per account in 24 hours and the 5 per wallet in an hour, and that count stays for its full window, the same as a failed export’s. A later submit for the same wallet and format queues a new job. It never reuses a job you asked to cancel.Example
curl -X POST -H "Authorization: Bearer $OXINSIDER_API_KEY" \
"https://api.0xinsider.com/api/v1/trader/swisstony/export/cancel?job_id=123"
client.cancelTraderExport(address, jobId) from @0xinsider/sdk 0.11.0. The SDK retries it on a network error or a 5xx, because a repeat is safe.
What it does not do
- Delete a ready file. Once the file is being published, the job is returned unchanged and finishes normally.
- Return quota. The submit’s count stays for its full window.
- Take an
Idempotency-Key. A repeat is safe without one, because the second cancel returns the state the first one reached. - Cancel a job belonging to another account, or a job submitted for a different wallet. Both answer
404, the same as the status route. - Notify you by webhook unless you subscribe. An endpoint subscribed to
export_job_cancelledgets one delivery when the job reachescancelled.
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?