Look up an idempotency key
Shows what happened to a request you sent with an Idempotency-Key: whether it completed (and the response it returned), is still in progress, or is not on record.
Use it when a request timed out on your side and a retry with the same key returns 409 IDEMPOTENCY_KEY_IN_PROGRESS:
completed: the request took effect.responseholds its status code and body, the same response a retry with the key returns. Don’t send it with a new key.in_progresswithstale: false: the request may still be running. Wait and look again.in_progresswithstale: true: no response was recorded within 120 seconds, so the request most likely stopped before finishing. It may or may not have taken effect. Check the result directly (for example list the trader’s accounts), then release the key withPOST /organization/idempotency-keys/releaseand retry.not_found: nothing is on record for this key on this endpoint (never sent, or expired after 24 hours). You can send the request with it.
Keys belong to the caller that sent them: look a key up with the same API key (or the same signed-in member) that sent the request, and give the same method and path. Requires the permission the original endpoint needs.
curl "https://api.hyperprop.com/platform/v1/organization/idempotency-keys?key=acme-order-20058745&method=POST&path=/platform/v1/organization/trading-accounts" \
-H "X-API-Key: hp_live_your_key_here"
curl --request GET \
--url https://api.hyperprop.com/platform/v1/organization/idempotency-keys \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.hyperprop.com/platform/v1/organization/idempotency-keys"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.hyperprop.com/platform/v1/organization/idempotency-keys', 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.hyperprop.com/platform/v1/organization/idempotency-keys",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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.hyperprop.com/platform/v1/organization/idempotency-keys"
req, _ := http.NewRequest("GET", url, nil)
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.hyperprop.com/platform/v1/organization/idempotency-keys")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperprop.com/platform/v1/organization/idempotency-keys")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"key": "acme-order-20058745",
"method": "POST",
"path": "/platform/v1/organization/trading-accounts",
"state": "in_progress",
"startedAt": "2026-10-21T13:37:10.000Z",
"expiresAt": "2026-10-22T13:37:10.000Z",
"stale": true,
"releasableAt": "2026-10-21T13:39:10.000Z",
"response": {
"statusCode": 201,
"body": "<string>"
}
}
}{
"success": false,
"statusCode": 400,
"error": "Bad Request",
"message": "`path` must be the organization endpoint the key was sent to, for example /platform/v1/organization/trading-accounts",
"code": "INVALID_PATH"
}{
"success": false,
"statusCode": 401,
"error": "Unauthorized",
"message": "Authentication required",
"code": "UNAUTHORIZED"
}{
"success": false,
"statusCode": 403,
"error": "Forbidden",
"message": "Your role does not have write access to \"Traders & accounts\"",
"code": "INSUFFICIENT_PERMISSIONS"
}{
"success": false,
"statusCode": 500,
"error": "Internal Server Error",
"message": "An unexpected error occurred",
"code": "INTERNAL_ERROR"
}{
"statusCode": 504,
"error": "Gateway Timeout",
"message": "The request did not complete within 25 seconds. Try again, or narrow it (for example a shorter date range).",
"code": "REQUEST_TIMEOUT"
}Authorizations
Organization API key. Format: "hp_live_{key}". Organization admins manage the key in the dashboard.
Query Parameters
The Idempotency-Key value you sent
1 - 255HTTP method of the original request
POST, PUT, PATCH, DELETE Path of the original request, as sent (/platform/v1/organization/...; a path starting at /v1/ also works). No query string.
1 - 500curl --request GET \
--url https://api.hyperprop.com/platform/v1/organization/idempotency-keys \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.hyperprop.com/platform/v1/organization/idempotency-keys"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.hyperprop.com/platform/v1/organization/idempotency-keys', 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.hyperprop.com/platform/v1/organization/idempotency-keys",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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.hyperprop.com/platform/v1/organization/idempotency-keys"
req, _ := http.NewRequest("GET", url, nil)
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.hyperprop.com/platform/v1/organization/idempotency-keys")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperprop.com/platform/v1/organization/idempotency-keys")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"key": "acme-order-20058745",
"method": "POST",
"path": "/platform/v1/organization/trading-accounts",
"state": "in_progress",
"startedAt": "2026-10-21T13:37:10.000Z",
"expiresAt": "2026-10-22T13:37:10.000Z",
"stale": true,
"releasableAt": "2026-10-21T13:39:10.000Z",
"response": {
"statusCode": 201,
"body": "<string>"
}
}
}{
"success": false,
"statusCode": 400,
"error": "Bad Request",
"message": "`path` must be the organization endpoint the key was sent to, for example /platform/v1/organization/trading-accounts",
"code": "INVALID_PATH"
}{
"success": false,
"statusCode": 401,
"error": "Unauthorized",
"message": "Authentication required",
"code": "UNAUTHORIZED"
}{
"success": false,
"statusCode": 403,
"error": "Forbidden",
"message": "Your role does not have write access to \"Traders & accounts\"",
"code": "INSUFFICIENT_PERMISSIONS"
}{
"success": false,
"statusCode": 500,
"error": "Internal Server Error",
"message": "An unexpected error occurred",
"code": "INTERNAL_ERROR"
}{
"statusCode": 504,
"error": "Gateway Timeout",
"message": "The request did not complete within 25 seconds. Try again, or narrow it (for example a shorter date range).",
"code": "REQUEST_TIMEOUT"
}