> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orthogonal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List Endpoints

> Get all available APIs and endpoints

List all discoverable APIs and their endpoints. Useful for browsing the catalog or building custom search interfaces.

## Request

<ParamField query="limit" type="number" default="100">
  Maximum number of APIs to return. Max: 500
</ParamField>

<ParamField query="offset" type="number" default="0">
  Number of APIs to skip (for pagination)
</ParamField>

## Response

```json theme={null}
{
  "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

<CodeGroup>
  ```bash cURL theme={null}
  # 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'
  ```

  ```javascript Node.js theme={null}
  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 }))
  );
  ```

  ```python Python theme={null}
  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]}")
  ```
</CodeGroup>

## Pagination

For large result sets, use `limit` and `offset` to paginate:

```javascript theme={null}
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`                      |
