Developers
Verify API
Check an email or a phone before you send. One API. Same credits as the dashboard. Base URL is always https://verify.zindua.run.
01
Create a key
Dashboard → API. Copy it once.
02
Install the SDK
Node, Python, Java, or .NET. Or raw HTTP.
03
Validate, then send
Keep deliverable. Drop the rest.
HTTP header
Authentication
Bearer token on every request
Verify uses HTTP Bearer auth. Put your workspace key in the Authorization header. Never ship the key in a browser or mobile app.
01
Create a key in Dashboard → API and copy it once.
02
Store it as VERIFY_API_KEY on your server only.
03
Send Authorization: Bearer <key> on every /api/v1 call.
Where the key lives
Server env, CI secret, or your backend config. Same credits as the dashboard.
HTTP header
.env
VERIFY_API_KEY=zdv1.your_live_key_here # Every request Authorization: Bearer $VERIFY_API_KEY
Install
Pick a language. Copy the install.
Official packages. The default base is already https://verify.zindua.run/api/v1.
Install
terminal
npm i @zindua/verify
Usage
verify.ts
import { VerifyClient } from "@zindua/verify";
const verify = new VerifyClient({
apiKey: process.env.VERIFY_API_KEY!,
});
const { result } = await verify.validateEmail("ada.martin@acme.be");
if (result.verdict !== "deliverable") {
throw new Error(result.youShould || "Undeliverable email");
}
// create account / continue signupGuides
Four ways teams use Verify
Same API. Pick the flow that matches your product: signup, CRM, campaign, or custom app.
Block bad contacts at registration
On signup or login, validate the email or phone before you create the account. Keep only deliverable.
- 1
User submits email or phone on your form.
- 2
Your server POSTs to /api/v1/validate with Bearer.
- 3
Create the user only if verdict is deliverable.
Signup & login
register.ts
// auth/register.ts (or your CRM webhook handler)
import { VerifyClient } from "@zindua/verify";
const verify = new VerifyClient({ apiKey: process.env.VERIFY_API_KEY! });
export async function assertDeliverableEmail(email: string) {
const { result } = await verify.validateEmail(email);
if (result.verdict !== "deliverable") {
return { ok: false as const, message: result.youShould || result.headline };
}
return { ok: true as const };
}
// usage at signup:
const check = await assertDeliverableEmail("ada.martin@acme.be");
if (!check.ok) return Response.json({ error: check.message }, { status: 400 });
// insert user…Zapier, Make & CRM without writing code
Connect with a private webhook from Dashboard → Integrations. Exact click path below for non-developers.
Connect creates a secret URL. Paste it into Webhooks by Zapier, Make HTTP, or Notion Automations. A native app is on the roadmap.
Zapier
Free · webhook
Notion
Free · automation
Make
Free · HTTP
HubSpot
Starter / Pro
Salesforce
Starter / Pro
Zoho
Starter / Pro
Pipedrive
Starter / Pro
Odoo
Starter / Pro
Zapier, step by step
Typeform, Google Sheet or HubSpot → Verify → only good emails reach your CRM.
- 1
Verify → Integrations → Zapier → Connect. Copy the webhook URL.
- 2
In Zapier, Create Zap. Trigger = the app that receives the lead.
- 3
Action: Webhooks by Zapier → Custom Request (not Catch Hook).
- 4
Method POST. Paste the Verify URL. Payload Type = JSON.
- 5
Data: { "email": map the trigger email }. Or phone + country.
- 6
Test. You should see result.verdict in the response.
- 7
Filter: continue only if result.verdict Exactly matches deliverable.
- 8
Final action: create or update the contact in your CRM.
Make.com
Same flow with modules.
- 1
Copy your Verify webhook from Integrations → Make.
- 2
Scenario: Module 1 = your source (form, CRM, sheet).
- 3
Add HTTP → Make a request. Method POST. Paste the URL.
- 4
Body Raw JSON: { "email": "{{email from module 1}}" }.
- 5
Filter or Router: continue only if result.verdict = deliverable.
Notion
Free. Same workspace credits.
- 1
Copy your Verify webhook from Integrations → Notion.
- 2
Open the database with an Email property.
- 3
⋯ → Automations → When page added.
- 4
Action: Send webhook request. Method POST. Paste the URL.
- 5
JSON body: { "email": "{{Email property}}" }. Save.
HubSpot, Salesforce, Zoho, Pipedrive, Odoo
On Starter or Pro, Connect gives the same webhook. Use it in your CRM automation when a contact is created.
- 1
Connect the CRM card and copy the webhook URL.
- 2
In the CRM workflow, POST email or phone to that URL.
- 3
Tag or skip the contact from result.verdict.
Try a number or an email
Country comes from your location. Change it for a foreign number. Same check as your workspace.
A few free checks here. Lists use your workspace credits.
Two endpoints. Email or phone
One kind per request. Bulk max 1,000 rows.
Single
POST /api/v1/validate
curl -X POST https://verify.zindua.run/api/v1/validate \
-H "Authorization: Bearer $VERIFY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email":"ada.martin@acme.be"}'
curl -X POST https://verify.zindua.run/api/v1/validate \
-H "Authorization: Bearer $VERIFY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"phone":"+32 470 12 34 56","country":"BE"}'Bulk · max 1,000
POST /api/v1/validate/bulk
curl -X POST https://verify.zindua.run/api/v1/validate/bulk \
-H "Authorization: Bearer $VERIFY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"emails":["ada.martin@acme.be","bounce@mailinator.com"]}'
curl -X POST https://verify.zindua.run/api/v1/validate/bulk \
-H "Authorization: Bearer $VERIFY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"phones":["+32 470 12 34 56"],"country":"BE"}'What you read before you send
| Field | Meaning |
|---|---|
| kind | email or phone |
| remaining | Credits left this period |
| result.verdict | deliverable · risky · undeliverable |
| result.score | 0–100 |
| result.headline | One line you can show a person |
| result.youShould | What to do before you send |
| bulk.results | Array of the same result objects |
Fail closed. Do not send on error
| Status | When |
|---|---|
| 401 | Missing or invalid Bearer key |
| 400 | No email / phone, or both kinds in one bulk call |
| 402 | Out of credits for this kind |
Get a live key
Keys live in your workspace. Credits match the UI.