List Endpoints
curl --request GET \
--url https://api.orthogonal.com/v1/list-endpoints \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.orthogonal.com/v1/list-endpoints', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.orthogonal.com/v1/list-endpoints"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)Discovery API
List Endpoints
Get all available APIs and endpoints
GET
/
v1
/
list-endpoints
List Endpoints
curl --request GET \
--url https://api.orthogonal.com/v1/list-endpoints \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.orthogonal.com/v1/list-endpoints', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.orthogonal.com/v1/list-endpoints"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)List all discoverable APIs and their endpoints. Useful for browsing the catalog or building custom search interfaces.
Request
number
default:"100"
Maximum number of APIs to return. Max: 500
number
default:"0"
Number of APIs to skip (for pagination)
Response
{
"success": true,
"apis": [
{
"name": "Olostep",
"slug": "olostep",
"description": "Web scraping and content extraction API",
"baseUrl": "https://api.olostep.com",
"verified": true,
"endpoints": [
{
"path": "/v1/scrapes",
"method": "POST",
"description": "Scrape any webpage and get clean markdown",
"price": "$0.005",
"isPayable": true,
"docsUrl": "https://docs.olostep.com/api/scrape",
"queryParams": [],
"bodyParams": [
{
"name": "url",
"type": "string",
"required": true,
"description": "URL to scrape"
}
]
}
]
},
{
"name": "Hunter.io",
"slug": "hunter",
"description": "Email finder and verification",
"baseUrl": "https://api.hunter.io/v2",
"verified": true,
"endpoints": [
{
"path": "/domain-search",
"method": "POST",
"description": "Find email addresses for a domain",
"price": "$0.01",
"isPayable": true
}
]
}
],
"count": 2,
"totalEndpoints": 2,
"pagination": {
"limit": 100,
"offset": 0,
"hasMore": false
}
}
Response Fields
| Field | Description |
|---|---|
apis | Array of APIs with their endpoints |
apis[].slug | API identifier for use with /v1/run |
apis[].verified | Whether Orthogonal has verified this API |
apis[].endpoints | All available endpoints for this API |
count | Number of APIs returned |
totalEndpoints | Total number of endpoints across all APIs |
pagination.hasMore | Whether more results are available |
Example
# List all APIs
curl 'https://api.orthogonal.com/v1/list-endpoints' \
-H 'Authorization: Bearer YOUR_API_KEY'
# Paginate through results
curl 'https://api.orthogonal.com/v1/list-endpoints?limit=50&offset=50' \
-H 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.orthogonal.com/v1/list-endpoints', {
headers: {
'Authorization': `Bearer ${process.env.ORTHOGONAL_API_KEY}`
}
});
const { apis, totalEndpoints } = await response.json();
console.log(`Found ${apis.length} APIs with ${totalEndpoints} total endpoints`);
// List all scraping endpoints
const scrapingEndpoints = apis.flatMap(api =>
api.endpoints.filter(ep =>
ep.description?.toLowerCase().includes('scrape')
).map(ep => ({ api: api.slug, ...ep }))
);
import requests
import os
response = requests.get(
'https://api.orthogonal.com/v1/list-endpoints',
headers={'Authorization': f'Bearer {os.environ["ORTHOGONAL_API_KEY"]}'}
)
data = response.json()
print(f"Found {data['count']} APIs with {data['totalEndpoints']} total endpoints")
# List all verified APIs
verified = [api for api in data['apis'] if api['verified']]
print(f"Verified APIs: {[api['name'] for api in verified]}")
Pagination
For large result sets, uselimit and offset to paginate:
async function getAllApis() {
const allApis = [];
let offset = 0;
const limit = 100;
while (true) {
const response = await fetch(
`https://api.orthogonal.com/v1/list-endpoints?limit=${limit}&offset=${offset}`,
{ headers: { 'Authorization': `Bearer ${apiKey}` } }
);
const { apis, pagination } = await response.json();
allApis.push(...apis);
if (!pagination.hasMore) break;
offset += limit;
}
return allApis;
}
Search vs List
| Use Case | Endpoint |
|---|---|
| Find APIs for a specific task | POST /v1/search with natural language |
| Browse all available APIs | GET /v1/list-endpoints |
| Get details for one endpoint | POST /v1/details |
⌘I
