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

limit
number
default:"100"
Maximum number of APIs to return. Max: 500
offset
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

FieldDescription
apisArray of APIs with their endpoints
apis[].slugAPI identifier for use with /v1/run
apis[].verifiedWhether Orthogonal has verified this API
apis[].endpointsAll available endpoints for this API
countNumber of APIs returned
totalEndpointsTotal number of endpoints across all APIs
pagination.hasMoreWhether 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, use limit 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 CaseEndpoint
Find APIs for a specific taskPOST /v1/search with natural language
Browse all available APIsGET /v1/list-endpoints
Get details for one endpointPOST /v1/details