Skip to main content
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

api
string
required
API slug from search results (e.g., “apollo”, “linkup”, “olostep”)
path
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

FieldDescription
apiAPI metadata (name, slug, description, verification status)
endpoint.pathParamsURL path parameters like {id}
endpoint.queryParamsQuery string parameters
endpoint.bodyParamsRequest body parameters
endpoint.priceCost per call (or “dynamic” for variable pricing)
usageExample 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 });