Get Details
curl --request POST \
--url https://api.orthogonal.com/v1/details \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"api": "<string>",
"path": "<string>"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({api: '<string>', path: '<string>'})
};
fetch('https://api.orthogonal.com/v1/details', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.orthogonal.com/v1/details"
payload = {
"api": "<string>",
"path": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)Discovery API
Get Details
Get full parameter information for an endpoint
POST
/
v1
/
details
Get Details
curl --request POST \
--url https://api.orthogonal.com/v1/details \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"api": "<string>",
"path": "<string>"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({api: '<string>', path: '<string>'})
};
fetch('https://api.orthogonal.com/v1/details', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.orthogonal.com/v1/details"
payload = {
"api": "<string>",
"path": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)Get complete details about a specific API endpoint, including all parameters, types, and descriptions.
Request
string
required
API slug from search results (e.g., “apollo”, “linkup”, “olostep”)
string
required
Endpoint path (e.g., “/v1/people/match”, “/v1/search”)
Response
{
"success": true,
"api": {
"name": "Apollo.io",
"slug": "apollo",
"description": "B2B lead enrichment and contact database",
"baseUrl": "https://api.apollo.io",
"verified": true
},
"endpoint": {
"path": "/v1/people/match",
"method": "POST",
"description": "Enrich a person by email, name, or LinkedIn URL",
"price": "$0.03",
"isPayable": true,
"docsUrl": "https://apolloio.github.io/apollo-api-docs",
"bodyType": "object",
"pathParams": [],
"queryParams": [],
"bodyParams": [
{
"name": "email",
"type": "string",
"required": false,
"description": "Email address to enrich"
},
{
"name": "first_name",
"type": "string",
"required": false,
"description": "First name of the person"
},
{
"name": "last_name",
"type": "string",
"required": false,
"description": "Last name of the person"
},
{
"name": "organization_name",
"type": "string",
"required": false,
"description": "Company name"
},
{
"name": "linkedin_url",
"type": "string",
"required": false,
"description": "LinkedIn profile URL"
}
]
},
"usage": {
"runApi": "POST /v1/run with {\"api\": \"apollo\", \"path\": \"/v1/people/match\", ...}",
"x402": "https://x402.orthogonal.com/apollo/v1/people/match"
}
}
Response Fields
| Field | Description |
|---|---|
api | API metadata (name, slug, description, verification status) |
endpoint.pathParams | URL path parameters like {id} |
endpoint.queryParams | Query string parameters |
endpoint.bodyParams | Request body parameters |
endpoint.price | Cost per call (or “dynamic” for variable pricing) |
usage | Example URLs for calling this endpoint |
Example
curl -X POST 'https://api.orthogonal.com/v1/details' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"api": "apollo",
"path": "/v1/people/match"
}'
const response = await fetch('https://api.orthogonal.com/v1/details', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.ORTHOGONAL_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
api: 'apollo',
path: '/v1/people/match'
})
});
const { api, endpoint } = await response.json();
console.log(`Price: ${endpoint.price}`);
console.log('Parameters:', endpoint.bodyParams);
import requests
import os
response = requests.post(
'https://api.orthogonal.com/v1/details',
headers={'Authorization': f'Bearer {os.environ["ORTHOGONAL_API_KEY"]}'},
json={'api': 'apollo', 'path': '/v1/people/match'}
)
data = response.json()
print(f"Price: {data['endpoint']['price']}")
print('Parameters:', data['endpoint']['bodyParams'])
Use Case: Building Dynamic Requests
Use details to construct valid API calls programmatically:// 1. Get endpoint details
const details = await getDetails('apollo', '/v1/people/match');
// 2. Build request body from available params
const body = {};
for (const param of details.endpoint.bodyParams) {
if (userInput[param.name]) {
body[param.name] = userInput[param.name];
}
}
// 3. Make the API call
const result = await run('apollo', '/v1/people/match', { body });
⌘I
