cURL
curl -sS -X POST 'https://api.0xinsider.com/api/v1/agents/register'import requests
url = "https://api.0xinsider.com/api/v1/agents/register"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://api.0xinsider.com/api/v1/agents/register', 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/agents/register",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$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/agents/register"
req, _ := http.NewRequest("POST", url, nil)
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/agents/register")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.0xinsider.com/api/v1/agents/register")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_body{
"object": "agent_registration",
"data": {
"api_key": "oxi_sk_test_<64 lowercase hex characters>",
"livemode": false,
"environment": "sandbox",
"created_at": "2026-09-14T12:00:00Z",
"sandbox": {
"api_base_url": "https://0xinsider.com/sandbox/api/v1",
"first_request_url": "https://0xinsider.com/sandbox/api/v1/leaderboard",
"openapi_url": "https://0xinsider.com/sandbox/api/v1/openapi.json"
},
"live_access": {
"api_base_url": "https://api.0xinsider.com/api/v1",
"requirement": "An 0xinsider account with an active Pro subscription. A person creates a live key (oxi_sk_live_) at api_keys_url, or approves an OAuth grant for a client registered at oauth_registration_endpoint.",
"api_keys_url": "https://0xinsider.com/developers",
"oauth_authorization_server_metadata_url": "https://api.0xinsider.com/.well-known/oauth-authorization-server",
"oauth_registration_endpoint": "https://api.0xinsider.com/oauth/register",
"pricing_url": "https://0xinsider.com/pricing",
"auth_guide_url": "https://0xinsider.com/auth.md"
}
},
"meta": {
"request_id": "req_example",
"cached": false,
"cost": 1
}
}{
"object": "error",
"error": {
"code": "bad_request",
"message": "<string>",
"doc_url": "<string>",
"param": "<string>",
"retry_at": "2023-11-07T05:31:56Z",
"freshness": {
"max_age_s": 1,
"data_quality_status": "fresh",
"actual_age_s": 1,
"as_of": "2023-11-07T05:31:56Z"
},
"reason": "cursor_expired"
},
"meta": {
"request_id": "<string>",
"cached": true,
"cost": 123,
"cache_age_s": 123,
"ranking_generation": 123,
"ranking_as_of": "2023-11-07T05:31:56Z",
"directional_source": "live",
"ranking_source": "live",
"category_skill_source": "live",
"category_skill_model_version": "<string>",
"category_skill_taxonomy_version": "<string>",
"category_skill_platform": "polymarket",
"category_skill_scope": "observed_goldsky_primary_taker_fill",
"category_skill_source_coverage": "partial_whale_threshold_fills",
"category_skill_observation_started_at": "2023-11-07T05:31:56Z",
"category_skill_model_operationally_degraded": true,
"category_skill_status_counts": {
"live": 1,
"insufficient": 1,
"stale": 1,
"unknown": 1,
"degraded": 1
},
"category_skill_base_payload_hash": "<string>",
"category_skill_enriched_base_payload_hash": "<string>"
}
}{
"object": "error",
"error": {
"code": "bad_request",
"message": "<string>",
"doc_url": "<string>",
"param": "<string>",
"retry_at": "2023-11-07T05:31:56Z",
"freshness": {
"max_age_s": 1,
"data_quality_status": "fresh",
"actual_age_s": 1,
"as_of": "2023-11-07T05:31:56Z"
},
"reason": "cursor_expired"
},
"meta": {
"request_id": "<string>",
"cached": true,
"cost": 123,
"cache_age_s": 123,
"ranking_generation": 123,
"ranking_as_of": "2023-11-07T05:31:56Z",
"directional_source": "live",
"ranking_source": "live",
"category_skill_source": "live",
"category_skill_model_version": "<string>",
"category_skill_taxonomy_version": "<string>",
"category_skill_platform": "polymarket",
"category_skill_scope": "observed_goldsky_primary_taker_fill",
"category_skill_source_coverage": "partial_whale_threshold_fills",
"category_skill_observation_started_at": "2023-11-07T05:31:56Z",
"category_skill_model_operationally_degraded": true,
"category_skill_status_counts": {
"live": 1,
"insufficient": 1,
"stale": 1,
"unknown": 1,
"degraded": 1
},
"category_skill_base_payload_hash": "<string>",
"category_skill_enriched_base_payload_hash": "<string>"
}
}{
"object": "error",
"error": {
"code": "bad_request",
"message": "<string>",
"doc_url": "<string>",
"param": "<string>",
"retry_at": "2023-11-07T05:31:56Z",
"freshness": {
"max_age_s": 1,
"data_quality_status": "fresh",
"actual_age_s": 1,
"as_of": "2023-11-07T05:31:56Z"
},
"reason": "cursor_expired"
},
"meta": {
"request_id": "<string>",
"cached": true,
"cost": 123,
"cache_age_s": 123,
"ranking_generation": 123,
"ranking_as_of": "2023-11-07T05:31:56Z",
"directional_source": "live",
"ranking_source": "live",
"category_skill_source": "live",
"category_skill_model_version": "<string>",
"category_skill_taxonomy_version": "<string>",
"category_skill_platform": "polymarket",
"category_skill_scope": "observed_goldsky_primary_taker_fill",
"category_skill_source_coverage": "partial_whale_threshold_fills",
"category_skill_observation_started_at": "2023-11-07T05:31:56Z",
"category_skill_model_operationally_degraded": true,
"category_skill_status_counts": {
"live": 1,
"insufficient": 1,
"stale": 1,
"unknown": 1,
"degraded": 1
},
"category_skill_base_payload_hash": "<string>",
"category_skill_enriched_base_payload_hash": "<string>"
}
}Discovery
Register an agent
Create a sandbox key and get the URLs for example data and live access.
POST
/
api
/
v1
/
agents
/
register
cURL
curl -sS -X POST 'https://api.0xinsider.com/api/v1/agents/register'import requests
url = "https://api.0xinsider.com/api/v1/agents/register"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://api.0xinsider.com/api/v1/agents/register', 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/agents/register",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$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/agents/register"
req, _ := http.NewRequest("POST", url, nil)
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/agents/register")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.0xinsider.com/api/v1/agents/register")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_body{
"object": "agent_registration",
"data": {
"api_key": "oxi_sk_test_<64 lowercase hex characters>",
"livemode": false,
"environment": "sandbox",
"created_at": "2026-09-14T12:00:00Z",
"sandbox": {
"api_base_url": "https://0xinsider.com/sandbox/api/v1",
"first_request_url": "https://0xinsider.com/sandbox/api/v1/leaderboard",
"openapi_url": "https://0xinsider.com/sandbox/api/v1/openapi.json"
},
"live_access": {
"api_base_url": "https://api.0xinsider.com/api/v1",
"requirement": "An 0xinsider account with an active Pro subscription. A person creates a live key (oxi_sk_live_) at api_keys_url, or approves an OAuth grant for a client registered at oauth_registration_endpoint.",
"api_keys_url": "https://0xinsider.com/developers",
"oauth_authorization_server_metadata_url": "https://api.0xinsider.com/.well-known/oauth-authorization-server",
"oauth_registration_endpoint": "https://api.0xinsider.com/oauth/register",
"pricing_url": "https://0xinsider.com/pricing",
"auth_guide_url": "https://0xinsider.com/auth.md"
}
},
"meta": {
"request_id": "req_example",
"cached": false,
"cost": 1
}
}{
"object": "error",
"error": {
"code": "bad_request",
"message": "<string>",
"doc_url": "<string>",
"param": "<string>",
"retry_at": "2023-11-07T05:31:56Z",
"freshness": {
"max_age_s": 1,
"data_quality_status": "fresh",
"actual_age_s": 1,
"as_of": "2023-11-07T05:31:56Z"
},
"reason": "cursor_expired"
},
"meta": {
"request_id": "<string>",
"cached": true,
"cost": 123,
"cache_age_s": 123,
"ranking_generation": 123,
"ranking_as_of": "2023-11-07T05:31:56Z",
"directional_source": "live",
"ranking_source": "live",
"category_skill_source": "live",
"category_skill_model_version": "<string>",
"category_skill_taxonomy_version": "<string>",
"category_skill_platform": "polymarket",
"category_skill_scope": "observed_goldsky_primary_taker_fill",
"category_skill_source_coverage": "partial_whale_threshold_fills",
"category_skill_observation_started_at": "2023-11-07T05:31:56Z",
"category_skill_model_operationally_degraded": true,
"category_skill_status_counts": {
"live": 1,
"insufficient": 1,
"stale": 1,
"unknown": 1,
"degraded": 1
},
"category_skill_base_payload_hash": "<string>",
"category_skill_enriched_base_payload_hash": "<string>"
}
}{
"object": "error",
"error": {
"code": "bad_request",
"message": "<string>",
"doc_url": "<string>",
"param": "<string>",
"retry_at": "2023-11-07T05:31:56Z",
"freshness": {
"max_age_s": 1,
"data_quality_status": "fresh",
"actual_age_s": 1,
"as_of": "2023-11-07T05:31:56Z"
},
"reason": "cursor_expired"
},
"meta": {
"request_id": "<string>",
"cached": true,
"cost": 123,
"cache_age_s": 123,
"ranking_generation": 123,
"ranking_as_of": "2023-11-07T05:31:56Z",
"directional_source": "live",
"ranking_source": "live",
"category_skill_source": "live",
"category_skill_model_version": "<string>",
"category_skill_taxonomy_version": "<string>",
"category_skill_platform": "polymarket",
"category_skill_scope": "observed_goldsky_primary_taker_fill",
"category_skill_source_coverage": "partial_whale_threshold_fills",
"category_skill_observation_started_at": "2023-11-07T05:31:56Z",
"category_skill_model_operationally_degraded": true,
"category_skill_status_counts": {
"live": 1,
"insufficient": 1,
"stale": 1,
"unknown": 1,
"degraded": 1
},
"category_skill_base_payload_hash": "<string>",
"category_skill_enriched_base_payload_hash": "<string>"
}
}{
"object": "error",
"error": {
"code": "bad_request",
"message": "<string>",
"doc_url": "<string>",
"param": "<string>",
"retry_at": "2023-11-07T05:31:56Z",
"freshness": {
"max_age_s": 1,
"data_quality_status": "fresh",
"actual_age_s": 1,
"as_of": "2023-11-07T05:31:56Z"
},
"reason": "cursor_expired"
},
"meta": {
"request_id": "<string>",
"cached": true,
"cost": 123,
"cache_age_s": 123,
"ranking_generation": 123,
"ranking_as_of": "2023-11-07T05:31:56Z",
"directional_source": "live",
"ranking_source": "live",
"category_skill_source": "live",
"category_skill_model_version": "<string>",
"category_skill_taxonomy_version": "<string>",
"category_skill_platform": "polymarket",
"category_skill_scope": "observed_goldsky_primary_taker_fill",
"category_skill_source_coverage": "partial_whale_threshold_fills",
"category_skill_observation_started_at": "2023-11-07T05:31:56Z",
"category_skill_model_operationally_degraded": true,
"category_skill_status_counts": {
"live": 1,
"insufficient": 1,
"stale": 1,
"unknown": 1,
"degraded": 1
},
"category_skill_base_payload_hash": "<string>",
"category_skill_enriched_base_payload_hash": "<string>"
}
}Use this public endpoint to get a sandbox key before creating a live credential. The sandbox provides example responses for documented operations, so you can build your client without production data.
Send no request body. The response includes the sandbox URLs and the URLs for obtaining live access.
Nothing is stored. The key cannot be listed or revoked, it does not expire, and every call returns a different one. Register again whenever you want a new key.
Then send
Key response fields
| Field | Meaning |
|---|---|
api_key | The sandbox key: oxi_sk_test_ followed by 64 hex characters. The last 8 of those are a checksum, so the sandbox can tell a mistyped key from a real one. It is not a secret and it opens no production data. |
livemode | Always false. This key never reaches live data. |
sandbox.api_base_url | https://0xinsider.com/sandbox/api/v1. Send sandbox requests to this origin. |
sandbox.first_request_url | A read you can send straight away with the new key. |
live_access.api_keys_url | Where a signed-in Pro or Max user creates an oxi_sk_live_ key. |
live_access.oauth_registration_endpoint | The RFC 7591 dynamic client registration endpoint for a public OAuth client. |
Example
curl -X POST "https://api.0xinsider.com/api/v1/agents/register"
data.api_key as an Authorization: Bearer header to sandbox.first_request_url.
What it does not do
- Reach production data. The live API answers a sandbox key with
401,error.codeinvalid_api_key, anderror.reasonsandbox_api_key. - Require the key on the sandbox. The key is optional there: a well-formed key gets an
X-Oxi-Sandbox-Key: validresponse header, and a malformed one gets the same401production would give. - Read a request body. Send nothing.
- Issue a live key. That needs an account with an active Pro or Max subscription, and then either an
oxi_sk_live_key or an OAuth access token. Every URL for both paths is inlive_access.
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.
Available options:
strict Response
A new sandbox key. Every call returns a different key, with Cache-Control: private, no-store.
Was this page helpful?