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:
| Code | Meaning |
|---|---|
IN_PROGRESS | The call under this key is still running or settling. Retry later with the same key. |
ALREADY_PROCESSED | The call completed and was billed once; requestId names it. The response is not replayed. |
RESERVATION_CONFLICT | The key was used for a different request. Use a new key. |
RESERVATION_SETTLED | The 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
| Field | Type | Description |
|---|---|---|
success | boolean | Whether the call succeeded |
priceCents | number | Cost in cents (100 = $1) |
data | object | Response from the API provider |
requestId | string | Unique 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
| Code | Description | Solution |
|---|---|---|
| 400 | Invalid request | Check api, path, and body format |
| 401 | Unauthorized | Check your API key |
| 402 | Insufficient credits, or a spend cap reached | Add credits at dashboard, or see Spend limits |
| 403 | API not on an allowed-APIs list | See Spend limits |
| 404 | Not found | Check the api/path values |
| 409 | Idempotency-Key in progress, already billed, or used up | See Idempotency-Key |
| 5xx | Upstream error | Check the error message |