Browse documentation

Run API

Run

Execute an API call

POST
https://www.orthogonal.com/v1/run

Execute any API endpoint through Orthogonal. This is the main endpoint for making API calls.

Request

apistringrequired
API slug (e.g., “sixtyfour”, “fiber”). Get this from search results.
pathstringrequired
Endpoint path (e.g., “/enrich-lead”, “/find-email”). Get this from search results.
bodyobject
Request body for POST/PUT/PATCH endpoints. Can be an object or array depending on the endpoint.
queryobject
Query string parameters as key-value pairs.

Idempotency-Key

Send an Idempotency-Key header (or X-Idempotency-Key), one per logical call, to make retries safe: a paid call under the same key runs and is billed once. A retry answers 409 when it can’t run:

CodeMeaning
IN_PROGRESSThe call under this key is still running or settling. Retry later with the same key.
ALREADY_PROCESSEDThe call completed and was billed once; requestId names it. The response is not replayed.
RESERVATION_CONFLICTThe key was used for a different request. Use a new key.
RESERVATION_SETTLEDThe key was used for too many attempts that did not complete. Use a new key.

Response

{
"success": true,
"priceCents": 10,
"data": {
// Response from the underlying API
},
"requestId": "run_1234567890_abc123"
}

Response Fields

FieldTypeDescription
successbooleanWhether the call succeeded
priceCentsnumberCost in cents (100 = $1)
dataobjectResponse from the API provider
requestIdstringUnique request identifier

Examples

Lead Enrichment (Apollo)

curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"api": "apollo",
"path": "/v1/people/match",
"body": {
"email": "ceo@stripe.com"
}
}'

AI Web Search (LinkUp)

curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"api": "linkup",
"path": "/search",
"body": {
"q": "latest Series A funding rounds fintech 2026",
"depth": "standard"
}
}'

Web Scraping (Olostep)

curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"api": "olostep",
"path": "/v1/scrapes",
"body": {
"url_to_scrape": "https://stripe.com/about"
}
}'

Multi-API Workflow

Chain APIs for complete lead research:

# Step 1: Research company with AI search (LinkUp)
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api": "linkup", "path": "/search", "body": {"q": "Stripe company funding valuation 2026", "depth": "standard"}}'
# Step 2: Enrich the CEO (Apollo)
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api": "apollo", "path": "/v1/people/match", "body": {"email": "ceo@stripe.com"}}'
# Step 3: Find more contacts at the company (Hunter)
curl -X POST 'https://api.orthogonal.com/v1/run' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"api": "hunter", "path": "/v2/domain-search", "query": {"domain": "stripe.com"}}'

Error Handling

Insufficient Credits (402)

{
"success": false,
"priceCents": 10,
"error": "Insufficient credits. Cost: $0.10, Available: $0.02. Top up your balance at https://www.orthogonal.com/account/add-funds",
"code": "INSUFFICIENT_CREDITS"
}

Spend caps refuse with 402 too, each with its own code. See Spend limits.

API Not Found (404)

{
"success": false,
"error": "API not found: invalid-slug"
}

Error Codes

CodeDescriptionSolution
400Invalid requestCheck api, path, and body format
401UnauthorizedCheck your API key
402Insufficient credits, or a spend cap reachedAdd credits at dashboard, or see Spend limits
403API not on an allowed-APIs listSee Spend limits
404Not foundCheck the api/path values
409Idempotency-Key in progress, already billed, or used upSee Idempotency-Key
5xxUpstream errorCheck the error message