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.

  1. 01

    Create a key

    Dashboard → API. Copy it once.

  2. 02

    Install the SDK

    Node, Python, Java, or .NET. Or raw HTTP.

  3. 03

    Validate, then send

    Keep deliverable. Drop the rest.

HTTP header

Authorization:Bearer

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.

  1. 01

    Create a key in Dashboard → API and copy it once.

  2. 02

    Store it as VERIFY_API_KEY on your server only.

  3. 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.

@zindua/verifyValidate an email

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 signup

Guides

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. 1

    User submits email or phone on your form.

  2. 2

    Your server POSTs to /api/v1/validate with Bearer.

  3. 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.

Open Integrations

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. 1

    Verify → Integrations → Zapier → Connect. Copy the webhook URL.

  2. 2

    In Zapier, Create Zap. Trigger = the app that receives the lead.

  3. 3

    Action: Webhooks by Zapier → Custom Request (not Catch Hook).

  4. 4

    Method POST. Paste the Verify URL. Payload Type = JSON.

  5. 5

    Data: { "email": map the trigger email }. Or phone + country.

  6. 6

    Test. You should see result.verdict in the response.

  7. 7

    Filter: continue only if result.verdict Exactly matches deliverable.

  8. 8

    Final action: create or update the contact in your CRM.

Make.com

Same flow with modules.

  1. 1

    Copy your Verify webhook from Integrations → Make.

  2. 2

    Scenario: Module 1 = your source (form, CRM, sheet).

  3. 3

    Add HTTP → Make a request. Method POST. Paste the URL.

  4. 4

    Body Raw JSON: { "email": "{{email from module 1}}" }.

  5. 5

    Filter or Router: continue only if result.verdict = deliverable.

Notion

Free. Same workspace credits.

  1. 1

    Copy your Verify webhook from Integrations → Notion.

  2. 2

    Open the database with an Email property.

  3. 3

    ⋯ → Automations → When page added.

  4. 4

    Action: Send webhook request. Method POST. Paste the URL.

  5. 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. 1

    Connect the CRM card and copy the webhook URL.

  2. 2

    In the CRM workflow, POST email or phone to that URL.

  3. 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

FieldMeaning
kindemail or phone
remainingCredits left this period
result.verdictdeliverable · risky · undeliverable
result.score0–100
result.headlineOne line you can show a person
result.youShouldWhat to do before you send
bulk.resultsArray of the same result objects

Fail closed. Do not send on error

StatusWhen
401Missing or invalid Bearer key
400No email / phone, or both kinds in one bulk call
402Out of credits for this kind

Get a live key

Keys live in your workspace. Credits match the UI.

Open API dashboard