Apollo
Access the Apollo.io API with managed OAuth authentication. Search people and organizations, enrich contacts, and manage your sales pipeline.
Quick Start
# Search for people at a company
curl -s -X POST 'https://gateway.maton.ai/apollo/v1/mixed_people/api_search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{"q_organization_name": "Google", "per_page": 10}'
Base URL
https://gateway.maton.ai/apollo/{native-api-path}
Replace {native-api-path} with the actual Apollo API endpoint path. The gateway proxies requests to api.apollo.io and automatically injects your API key.
Authentication
All requests require the Maton API key in the Authorization header:
Authorization: Bearer YOUR_API_KEY
Environment Variable: Set your API key as MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"
Getting Your API Key
- Sign in or create an account at maton.ai
- Go to maton.ai/settings
- Copy your API key
Connection Management
Manage your Apollo connections at https://ctrl.maton.ai.
List Connections
curl -s -X GET 'https://ctrl.maton.ai/connections?app=apollo&status=ACTIVE' \
-H 'Authorization: Bearer YOUR_API_KEY'
Create Connection
curl -s -X POST 'https://ctrl.maton.ai/connections' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{"app": "apollo"}'
Get Connection
curl -s -X GET 'https://ctrl.maton.ai/connections/{connection_id}' \
-H 'Authorization: Bearer YOUR_API_KEY'
Response:
{
"connection": {
"connection_id": "21fd90f9-5935-43cd-b6c8-bde9d915ca80",
"status": "ACTIVE",
"creation_time": "2025-12-08T07:20:53.488460Z",
"last_updated_time": "2026-01-31T20:03:32.593153Z",
"url": "https://connect.maton.ai/?session_token=...",
"app": "apollo",
"metadata": {}
}
}
Open the returned url in a browser to complete OAuth authorization.
Delete Connection
curl -s -X DELETE 'https://ctrl.maton.ai/connections/{connection_id}' \
-H 'Authorization: Bearer YOUR_API_KEY'
Specifying Connection
If you have multiple Apollo connections, specify which one to use with the Maton-Connection header:
curl -s -X POST 'https://gateway.maton.ai/apollo/v1/mixed_people/api_search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Maton-Connection: 21fd90f9-5935-43cd-b6c8-bde9d915ca80' \
-d '{"q_organization_name": "Google", "per_page": 10}'
If omitted, the gateway uses the default (oldest) active connection.
API Reference
People
Search People
POST /apollo/v1/mixed_people/api_search
Content-Type: application/json
{
"q_organization_name": "Google",
"page": 1,
"per_page": 25
}
Enrich Person by Email
POST /apollo/v1/people/match
Content-Type: application/json
{
"email": "john@example.com"
}
Enrich Person by LinkedIn
POST /apollo/v1/people/match
Content-Type: application/json
{
"linkedin_url": "https://linkedin.com/in/johndoe"
}
Organizations
Search Organizations
POST /apollo/v1/organizations/search
Content-Type: application/json
{
"q_organization_name": "Google",
"page": 1,
"per_page": 25
}
Enrich Organization
POST /apollo/v1/organizations/enrich
Content-Type: application/json
{
"domain": "google.com"
}
Contacts
Search Contacts
POST /apollo/v1/contacts/search
Content-Type: application/json
{
"page": 1,
"per_page": 25
}
Create Contact
POST /apollo/v1/contacts
Content-Type: application/json
{
"first_name": "John",
"last_name": "Doe",
"email": "john@example.com",
"organization_name": "Acme Corp"
}
Update Contact
PUT /apollo/v1/contacts/{contactId}
Content-Type: application/json
{
"first_name": "Jane"
}
Accounts
Search Accounts
POST /apollo/v1/accounts/search
Content-Type: application/json
{
"page": 1,
"per_page": 25
}
Create Account
POST /apollo/v1/accounts
Content-Type: application/json
{
"name": "Acme Corp",
"domain": "acme.com"
}
Sequences
Search Sequences
POST /apollo/v1/emailer_campaigns/search
Content-Type: application/json
{
"page": 1,
"per_page": 25
}
Add Contact to Sequence
POST /apollo/v1/emailer_campaigns/{campaignId}/add_contact_ids
Content-Type: application/json
{
"contact_ids": ["contact_id_1", "contact_id_2"]
}
Labels
List Labels
GET /apollo/v1/labels
Search Filters
Common search parameters:
q_organization_name- Company nameq_person_title- Job titleperson_locations- Array of locationsorganization_num_employees_ranges- Employee count rangesq_keywords- General keyword search
Code Examples
JavaScript
const response = await fetch(
'https://gateway.maton.ai/apollo/v1/mixed_people/api_search',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
},
body: JSON.stringify({
q_organization_name: 'Google',
per_page: 10
})
}
);
Python
import os
import requests
response = requests.post(
'https://gateway.maton.ai/apollo/v1/mixed_people/api_search',
headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'},
json={'q_organization_name': 'Google', 'per_page': 10}
)
Notes
- Pagination uses
pageandper_pagein POST body - Most list endpoints use POST with
/searchsuffix - Email enrichment consumes credits
people/searchandmixed_people/searchare deprecated - usemixed_people/api_search
Error Handling
| Status | Meaning |
|---|---|
| 400 | Missing Apollo connection |
| 401 | Invalid or missing Maton API key |
| 429 | Rate limited (10 req/sec per account) |
| 4xx/5xx | Passthrough error from Apollo API |