Search
curl --request POST \
--url https://api.orthogonal.com/v1/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"prompt": "<string>",
"limit": 123
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({prompt: '<string>', limit: 123})
};
fetch('https://api.orthogonal.com/v1/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.orthogonal.com/v1/search"
payload = {
"prompt": "<string>",
"limit": 123
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)Discovery API
Search
Find APIs using natural language
POST
/
v1
/
search
Search
curl --request POST \
--url https://api.orthogonal.com/v1/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"prompt": "<string>",
"limit": 123
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({prompt: '<string>', limit: 123})
};
fetch('https://api.orthogonal.com/v1/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.orthogonal.com/v1/search"
payload = {
"prompt": "<string>",
"limit": 123
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)Search for APIs by describing what you need. Uses semantic search to find the most relevant endpoints.
Request
string
required
Natural language description of what you’re looking for.Examples:
- “enrich lead with contact info”
- “find email for a person”
- “company enrichment from domain”
number
default:"10"
Maximum number of results to return. Max: 50
Response
Results are grouped by API, with each API containing its matching endpoints:{
"success": true,
"results": [
{
"id": "api-uuid",
"name": "Apollo.io",
"slug": "apollo",
"baseUrl": "https://api.apollo.io",
"payableBaseUrl": "https://api.orthogonal.com/pay/apollo",
"endpoints": [
{
"id": "endpoint-uuid",
"path": "/v1/people/match",
"method": "POST",
"description": "Enrich a person by email, name, or LinkedIn URL",
"price": "0.03",
"isPayable": true,
"verified": true,
"score": 0.95
},
{
"path": "/v1/organizations/enrich",
"method": "POST",
"description": "Enrich a company by domain",
"price": "0.03",
"verified": true,
"score": 0.90
}
]
},
{
"id": "api-uuid-2",
"name": "Hunter.io",
"slug": "hunter",
"endpoints": [
{
"path": "/domain-search",
"method": "POST",
"description": "Find email addresses for a company domain",
"price": "0.01",
"verified": true,
"score": 0.85
}
]
}
],
"count": 3,
"apisCount": 2,
"prompt": "enrich lead with contact info",
"searchType": "semantic",
"responseTime": 145
}
Response Fields
| Field | Description |
|---|---|
results | Array of APIs, each containing matching endpoints |
results[].slug | API identifier to use with /v1/run |
results[].endpoints[].path | Endpoint path to use with /v1/run |
results[].endpoints[].verified | Whether the API is verified by Orthogonal |
results[].endpoints[].score | Relevance score (0-1, higher is better) |
count | Total number of endpoints returned |
Example
curl -X POST 'https://api.orthogonal.com/v1/search' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"prompt": "enrich lead find email",
"limit": 5
}'
const response = await fetch('https://api.orthogonal.com/v1/search', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.ORTHOGONAL_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
prompt: 'enrich lead find email',
limit: 5
})
});
const { results } = await response.json();
// Get verified endpoints only
const verified = results.flatMap(api =>
api.endpoints.filter(ep => ep.verified)
);
console.log('Verified endpoints:', verified);
import requests
import os
response = requests.post(
'https://api.orthogonal.com/v1/search',
headers={'Authorization': f'Bearer {os.environ["ORTHOGONAL_API_KEY"]}'},
json={'prompt': 'enrich lead find email', 'limit': 5}
)
results = response.json()['results']
# Get verified endpoints only
verified = [ep for api in results for ep in api['endpoints'] if ep.get('verified')]
print(f"Found {len(verified)} verified endpoints")
Using Search Results
Theslug and path from search results can be used directly with the Run API:
# From search: slug="apollo", path="/v1/people/match"
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"}
}'
⌘I
