OutPulse REST API
Programmatic access to email verification, contact discovery, domain search, lead management, deliverability checks, and outreach sequences. All endpoints return JSON unless noted.
Base URL
https://app.outpulse.io/apiAuthentication
OutPulse supports workspace session auth for all product endpoints. API keys (op_...) can be created in Settings → API Access.
Send requests from an authenticated OutPulse workspace session. The Supabase session cookie is set automatically when you are signed in at app.outpulse.io.
Generate keys in Settings → API Access. Pass `Authorization: Bearer op_your_key`. Key-based auth on product endpoints is rolling out; session auth is required today for verify, finder, and deliverability routes.
Authorization: Bearer op_your_api_key_here
Content-Type: application/json
Errors
Errors return JSON with an error string.
| Status | Meaning |
|---|
| 400 | Bad request — missing or invalid parameters. |
| 401 | Unauthorized — sign in or provide a valid API key. |
| 402 | Insufficient credits for this operation. |
| 404 | Resource not found. |
| 429 | Rate limit exceeded — check X-RateLimit-* response headers. |
| 500 | Internal server error. |
| 502 | Upstream provider error during verification or lookup. |
Rate limits & credits
- Each single verification or finder lookup costs 1 credit.
- Bulk verification costs 1 credit per email enqueued.
- Domain search costs 1 credit per domain submitted.
- Deliverability analysis costs 1 credit per domain.
- Finder endpoints return X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers.
- 402 is returned when your credit balance is too low; 429 when per-minute limits are hit.
Email Verification
Verify individual addresses or enqueue bulk jobs. Results include syntax, DNS, SMTP, disposable, and catch-all signals.
Verify one email
Runs a full verification pipeline on a single address. Deducts 1 credit on success.
1 credit
Parameters
emailbody · stringrequiredEmail address to verify.
sourcebody · stringOptional telemetry label (default: single-verify).
Request body
{
"email": "jane.doe@acme.com",
"source": "api"
}Response
{
"email": "jane.doe@acme.com",
"result": "valid",
"reason": "smtp_ok",
"domain": "acme.com",
"meta": {
"source": "api",
"completedAt": "2026-07-15T10:00:00.000Z"
}
}Example
curl -X POST https://app.outpulse.io/api/verify/single \
-H "Content-Type: application/json" \
-H "Cookie: <your-session-cookie>" \
-d '{ "email": "jane.doe@acme.com", "source": "api" }'Enqueue bulk verification
Creates an async bulk job. Poll GET /bulk-jobs/{jobId} for progress and export results.
1 credit per email
Parameters
emailsbody · string[]requiredArray of email addresses to verify.
filenamebody · stringOptional display name for the job.
sourcebody · stringOptional source label for analytics.
Request body
{
"emails": [
"a@acme.com",
"b@acme.com"
],
"filename": "list.csv"
}Response
{
"job": {
"id": "uuid",
"status": "queued",
"total": 2,
"processed": 0
}
}Example
curl -X POST https://app.outpulse.io/api/verify/bulk \
-H "Content-Type: application/json" \
-H "Cookie: <your-session-cookie>" \
-d '{ "emails": [ "a@acme.com", "b@acme.com" ], "filename": "list.csv" }'Verification history
Returns recent single-verification results for the authenticated user.
Email Finder
Discover contact emails by person + domain or list all discoverable addresses at a company domain.
Find contact by name
Looks up the most likely business email for a person at a domain. Deducts 1 credit.
1 credit
Parameters
firstNamebody · stringrequiredContact first name.
lastNamebody · stringrequiredContact last name.
domainbody · stringrequiredCompany domain (e.g. acme.com).
requestIdbody · stringOptional idempotency key for credit deduplication.
Request body
{
"firstName": "Jane",
"lastName": "Doe",
"domain": "acme.com"
}Example
curl -X POST https://app.outpulse.io/api/finder/single \
-H "Content-Type: application/json" \
-H "Cookie: <your-session-cookie>" \
-d '{ "firstName": "Jane", "lastName": "Doe", "domain": "acme.com" }'Find emails at domain
Returns discoverable email addresses for a company domain. Deducts 1 credit.
1 credit
Parameters
domainbody · stringrequiredCompany domain.
Request body
{
"domain": "acme.com"
}Example
curl -X POST https://app.outpulse.io/api/finder/domain \
-H "Content-Type: application/json" \
-H "Cookie: <your-session-cookie>" \
-d '{ "domain": "acme.com" }'Domain Search
Submit domains for org-chart style discovery jobs. Reveal and verify individual results from the app or API.
Create domain search job
Enqueue one or more domains for contact discovery. Costs 1 credit per domain.
1 credit per domain
Parameters
domainsbody · string[]Array of domains to search.
rawTextbody · stringAlternative: newline/comma-separated domain list.
Request body
{
"domains": [
"acme.com",
"globex.io"
]
}Example
curl -X POST https://app.outpulse.io/api/domain-search/jobs \
-H "Content-Type: application/json" \
-H "Cookie: <your-session-cookie>" \
-d '{ "domains": [ "acme.com", "globex.io" ] }'List domain search jobs
Returns all domain search jobs for the workspace.
Get job status and results
Poll job progress. Emails may be masked until revealed.
Parameters
jobIdpath · uuidrequiredDomain search job ID.
Reveal a masked email
Unlocks the full email for a domain-search result. Requires session auth.
Parameters
jobIdpath · uuidrequiredJob ID.
resultIdbody · uuidrequiredResult row to reveal.
Bulk Jobs
Poll, export, resume, or delete bulk verification jobs created via POST /verify/bulk.
Get bulk job
Returns job status, counts, and metadata. Append ?export=csv|json|txt|valid-only to download results.
Parameters
jobIdpath · uuidrequiredBulk job ID.
exportquery · stringcsv | json | txt | valid-only
Update bulk job
Resume a paused job or update job metadata.
Parameters
jobIdpath · uuidrequiredBulk job ID.
Delete bulk job
Permanently removes a bulk job and associated staging data.
Parameters
jobIdpath · uuidrequiredBulk job ID.
Leads
List, import, and manage leads in your workspace.
List leads
Paginated lead list with filters and sort options.
Parameters
pagequery · numberPage number (default 1).
perPagequery · numberPage size (default 10).
statusquery · stringvalid | invalid | risky | unknown | accept-all | all
sourcequery · stringFilter by lead source.
queryquery · stringSearch term.
listIdquery · uuidFilter by list ID.
Delete leads
Bulk delete by ID array.
Parameters
idsbody · uuid[]requiredLead IDs to delete.
Request body
{
"ids": [
"uuid-1",
"uuid-2"
]
}Create lead
Adds a single lead with optional list and sequence assignment.
Parameters
emailbody · stringrequiredLead email.
first_namebody · stringFirst name.
last_namebody · stringLast name.
companybody · stringCompany name.
list_idsbody · uuid[]Lists to assign.
Request body
{
"email": "jane@acme.com",
"first_name": "Jane",
"last_name": "Doe",
"company": "Acme"
}Example
curl -X POST https://app.outpulse.io/api/leads/manual \
-H "Content-Type: application/json" \
-H "Cookie: <your-session-cookie>" \
-d '{ "email": "jane@acme.com", "first_name": "Jane", "last_name": "Doe", "company": "Acme" }'Import leads
Bulk import from a JSON array with duplicate handling.
Parameters
leadsbody · object[]requiredLead objects to import.
duplicateStrategybody · stringskip | update | create (default: skip).
Sequences
List outreach sequences and enroll leads.
List sequences
Returns paginated sequences for the authenticated user.
Parameters
pagequery · numberPage (default 1).
limitquery · numberPage size (default 20).
statusquery · stringFilter by sequence status.
Enroll leads
Enrolls one or more leads into a sequence and schedules step emails.
Parameters
idpath · uuidrequiredSequence ID.
leadIdsbody · uuid[]requiredLead IDs to enroll.
Request body
{
"leadIds": [
"uuid-1",
"uuid-2"
]
}Example
curl -X POST https://app.outpulse.io/api/sequences/{id}/enroll \
-H "Content-Type: application/json" \
-H "Cookie: <your-session-cookie>" \
-d '{ "leadIds": [ "uuid-1", "uuid-2" ] }'Deliverability
Analyse SPF, DKIM, and DMARC configuration for sender domains.
Analyse domain
Runs a full deliverability check and returns a 0–100 score with record details.
1 credit
Parameters
domainbody · stringrequiredSender domain to analyse.
Request body
{
"domain": "acme.com"
}Response
{
"success": true,
"data": {
"domain": "acme.com",
"score": 82,
"spf": "pass",
"dkim": "pass",
"dmarc": "pass"
}
}Example
curl -X POST https://app.outpulse.io/api/deliverability \
-H "Content-Type: application/json" \
-H "Cookie: <your-session-cookie>" \
-d '{ "domain": "acme.com" }'Get deliverability history
Returns the latest check and historical runs for a domain.
Parameters
domainquery · stringrequiredDomain to query.
limitquery · numberHistory entries (default 10).
Usage & Credits
Inspect credit balance and consumption history.
Credit usage history
Returns balance, daily breakdown, and recent credit events.
Parameters
rangequery · string7d | 14d | 30d | all (default 7d).
GDPR / Data
Export or permanently delete all workspace data.
Export user data
JSON archive of leads, sequences, credits, integrations, and API key metadata.
Delete account data
Permanent erasure of all user data and account (right to erasure).