Run
curl --request POST \
--url https://api.orthogonal.com/v1/run \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"api": "<string>",
"path": "<string>",
"body": {},
"query": {}
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({api: '<string>', path: '<string>', body: JSON.stringify({}), query: {}})
};
fetch('https://api.orthogonal.com/v1/run', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.orthogonal.com/v1/run"
payload = {
"api": "<string>",
"path": "<string>",
"body": {},
"query": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)Run API
Run
Execute an API call
POST
/
v1
/
run
Run
curl --request POST \
--url https://api.orthogonal.com/v1/run \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"api": "<string>",
"path": "<string>",
"body": {},
"query": {}
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({api: '<string>', path: '<string>', body: JSON.stringify({}), query: {}})
};
fetch('https://api.orthogonal.com/v1/run', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.orthogonal.com/v1/run"
payload = {
"api": "<string>",
"path": "<string>",
"body": {},
"query": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)Execute any API endpoint through Orthogonal. This is the main endpoint for making API calls.
Request
string
required
API slug (e.g., “sixtyfour”, “fiber”). Get this from search results.
string
required
Endpoint path (e.g., “/enrich-lead”, “/find-email”). Get this from search results.
object
Request body for POST/PUT/PATCH endpoints. Can be an object or array depending on the endpoint.
object
Query string parameters as key-value pairs.
The HTTP method (GET, POST, etc.) is determined automatically based on the endpoint configuration.
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"
}
}'
const response = await fetch('https://api.orthogonal.com/v1/run', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.ORTHOGONAL_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
api: 'apollo',
path: '/v1/people/match',
body: {
email: 'ceo@stripe.com'
}
})
});
const { success, priceCents, data } = await response.json();
console.log(`Enriched for $${(priceCents / 100).toFixed(2)}`);
console.log(data);
import requests
import os
response = requests.post(
'https://api.orthogonal.com/v1/run',
headers={'Authorization': f'Bearer {os.environ["ORTHOGONAL_API_KEY"]}'},
json={
'api': 'apollo',
'path': '/v1/people/match',
'body': {
'email': 'ceo@stripe.com'
}
}
)
result = response.json()
print(f"Enriched for ${result['priceCents'] / 100:.2f}")
print(result['data'])
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": "/v1/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' \
-d '{"api": "linkup", "path": "/v1/search", "body": {"q": "Stripe company funding valuation 2026"}}'
# Step 2: Enrich the CEO (Apollo)
curl -X POST 'https://api.orthogonal.com/v1/run' \
-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' \
-d '{"api": "hunter", "path": "/domain-search", "body": {"domain": "stripe.com"}}'
Error Handling
Insufficient Credits (402)
{
"success": false,
"priceCents": 10,
"error": "Insufficient credits. Cost: $0.10, Available: $0.02"
}
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 | Add credits at dashboard |
| 404 | Not found | Check the api/path values |
| 5xx | Upstream error | Check the error message |
