Overview
The MatchKraft API is asynchronous. Every operation — domain scanning, email validation, or email finding — runs as a background job. This means you get a response instantly while your data is processed in parallel, without waiting for results.
How it works
Submit a job
POST your records to the relevant endpoint.
Receive a jobId
The API responds immediately with a unique jobId.
Job processes in background
MatchKraft processes your records asynchronously.
Webhook fires on completion
Your configured webhook endpoint receives a notification with the jobId and status.
Fetch results
Use the jobId from the webhook to call the results endpoint and retrieve your data.
Webhook (recommended)
Configure a webhook URL in your dashboard. MatchKraft will POST to it the moment your job completes. Use the jobId from the payload to fetch results.
Polling
Alternatively, call the results endpoint periodically using your jobId until the status is COMPLETED.
Authentication
All API requests must include your API key as a request header. You can find your API key in your MatchKraft dashboard under Settings → API Keys.
apikey: YOUR_API_KEYWhere to find your API key
Navigate to Integrations → API Key in your MatchKraft dashboard to copy your key and view the base URL.

Domain Scan
Scan one or more domains to extract verified B2B contact emails associated with each website. Submit a list of URLs and receive a jobId to track progress.
Submit job
curl --location 'https://app.matchkraft.com/api/v2/domain-scan' \
--header 'apikey: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"jobName": "Domain Scan",
"records": [
"https://example.com",
"https://example2.com"
]
}'Response
{
"jobId": "20f70187-b941-4bb0-b10f-599b025fc425",
"jobName": "My Job",
"status": "PENDING"
}Store the jobId. You will need it to fetch results after your webhook fires.
Fetch results
Replace {jobId} with the value returned when the job was submitted. Call this after your webhook notifies you that the job is complete.
Email Validation
Validate one or more email addresses for deliverability, syntax, domain health, and spam-trap detection. Results include a verified status for each address.
Submit job
curl --location 'https://app.matchkraft.com/api/v2/email-validation' \
--header 'apikey: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"jobName": "Lead Generation Influencers",
"records": [
"john@gmail.com",
"test@domain.com"
]
}'Response
{
"jobId": "20f70187-b941-4bb0-b10f-599b025fc425",
"jobName": "My Job",
"status": "PENDING"
}Fetch results
Email Finder
Find verified professional email addresses for a list of contacts given their first name, last name, and company website. Each record in records is an object with those three fields.
Submit job
curl --location 'https://app.matchkraft.com/api/v2/email-finder' \
--header 'apikey: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"jobName": "Email Finder Job",
"records": [
{
"firstName": "Arseniy",
"lastName": "Grusha",
"website": "https://dataprana.io"
},
{
"firstName": "Randi",
"lastName": "Zuckerberg",
"website": "https://zuckerbergmedia.com"
}
]
}'Request fields
| Field | Type | Description |
|---|---|---|
| jobName | string | Human-readable label for the job. |
| records[].firstName | string | Contact's first name. |
| records[].lastName | string | Contact's last name. |
| records[].website | string | Company website URL. |
Response
{
"jobId": "20f70187-b941-4bb0-b10f-599b025fc425",
"jobName": "My Job",
"status": "PENDING"
}Fetch results
Webhooks
Configure a webhook URL in your MatchKraft dashboard. When a job finishes, MatchKraft sends a single HTTP POST to that URL. The payload is intentionally minimal — it tells you which job completed, not the results themselves.
Setting up your webhook
Go to Integrations → Webhook in your dashboard, paste your endpoint URL, and click Save Webhook. Use Test Webhook to verify the connection.

What the webhook contains
- ✓jobId — the unique identifier of the completed job
- ✓event — always "job.completed"
- ✓jobType — which endpoint the job belongs to
- ✓status — COMPLETED or FAILED
- ✗Results data — NOT included. Fetch these separately using the jobId.
Webhook payload example
{
"event": "job.completed",
"jobId": "20f70187-b941-4bb0-b10f-599b025fc425",
"jobType": "email-validation",
"status": "COMPLETED"
}After receiving the webhook
- 1Extract the jobId from the payload.
- 2Determine the endpoint from jobType (e.g. email-validation → /email-validation/results/{jobId}).
- 3Call the corresponding results endpoint with your API key.
- 4Process the results.
Webhook best practices
- Respond to the webhook with HTTP 200 immediately — process the jobId asynchronously.
- Implement idempotency using the jobId in case the webhook is delivered more than once.
- Validate that the incoming payload contains a recognized jobId before fetching results.
- Use HTTPS for your webhook endpoint to protect data in transit.