API Documentation

Welcome to the Bullio API. You can use this API to verify email addresses, find emails by name and domain, process bulk requests, look up phone numbers, and manage customers programmatically.

The API is organized around REST. All requests should be made over HTTPS. All request and response bodies, including errors, are encoded in JSON.

Base URL

https://bullio.co/api/v1

Authentication

Authenticate your API requests by including your API key as a query parameter on every request. You can find your API key in your Dashboard.

Example

GET /api/v1/email/verify?api_key=YOUR_API_KEY&email=test@example.com

Response Format

All responses are returned as JSON. Successful responses include a state or status field set to true.

{
  "state": true,
  "result": { ... },
  "remain_credits": 9500,
  "credits_consumed": 1
}

Error Codes

HTTP Status Meaning
200Success
201Resource created
400Bad request — invalid parameters
403Forbidden — invalid or missing API key
429Too many requests — insufficient credits

Credit System

Every API call consumes credits from your account balance. The number of credits varies by operation:

Operation Credits
Find email (unverified)1
Find email + verify2
Single email verification2

Remaining credits are returned in the remain_credits field of most responses.


Email Verification API

GET /email/verify

Submit a single email address for verification. Returns an ID that you can use to poll for the result via /email/status.

Parameters

Parameter Type Required Description
api_key string Yes Your API key
email string Yes The email address to verify
webhook string No URL to receive a callback when verification completes

Response

{
  "state": true,
  "id": 12345
}

Errors

// 403 — Invalid API key
{
  "result": "failed",
  "errors": ["Wrong API key"]
}

// 429 — Insufficient credits
{
  "result": "failed",
  "errors": ["Not enough credits"]
}
GET /email/status

Retrieve the result of a previously submitted email verification by its ID.

Parameters

Parameter Type Required Description
api_key string Yes Your API key
id integer Yes The verification ID returned by /email/verify

Response

{
  "state": true,
  "result": {
    "id": 12345,
    "email": "john@example.com",
    "result": "deliverable",
    "verify_at": {
      "date": "2025-01-15 10:30:00.000000",
      "timezone_type": 3,
      "timezone": "Europe/Helsinki"
    }
  },
  "remain_credits": 9500,
  "credits_consumed": 2
}
POST /email/bulk/verify

Submit a list of email addresses for bulk verification. Send a JSON array of emails in the request body.

Parameters

Parameter Type Required Description
api_key string Yes Your API key (query parameter)
emails array Yes Array of email addresses (JSON body)
webhook string No URL to receive a callback when processing completes

Request

POST /api/v1/email/bulk/verify?api_key=YOUR_API_KEY
Content-Type: application/json

{
  "emails": [
    "alice@example.com",
    "bob@company.org",
    "carol@startup.io"
  ],
  "webhook": "https://yourserver.com/webhook"
}

Response

{
  "state": true,
  "id": 789
}

Errors

// 400 — Invalid input
{
  "result": "failed",
  "errors": ["Emails must be an array"]
}

// 429 — Insufficient credits
{
  "result": "failed",
  "errors": ["Not enough credits"]
}

Email Finder API

GET /email/get

Find an email address by first name, last name, and company domain. Returns instantly from the database without deliverability verification. Costs 1 credit.

Parameters

Parameter Type Required Description
api_key string Yes Your API key
first_name string Yes Contact's first name
last_name string Yes Contact's last name
domain string Yes Company domain name

Response

{
  "email": "john@apple.com",
  "remain_credits": 9500,
  "credits_consumed": 1
}

Returns an empty array if no email is found.

GET /email/get/verified

Find an email address and verify its deliverability. This is an asynchronous operation — use the returned ID with /email/status to retrieve the result. Costs 2 credits.

Parameters

Parameter Type Required Description
api_key string Yes Your API key
first_name string Yes Contact's first name
last_name string Yes Contact's last name
domain string Yes Company domain name

Response

{
  "state": true,
  "id": 12345
}

Poll /email/status with the returned id to get the final result.


Bulk Email Finder API

POST /email/bulk

Submit up to 1,000 contacts for bulk email lookup. Each contact should include a name and one or more domains.

Parameters

Parameter Type Required Description
api_key string Yes Your API key (query parameter)
contacts array Yes Array of contact objects (JSON body, max 1000)
mode string No "regular" (default) or "deep"
webhook string No URL to receive a callback when processing completes

Request

POST /api/v1/email/bulk?api_key=YOUR_API_KEY
Content-Type: application/json

{
  "contacts": [
    {
      "id": "c1",
      "first_name": "John",
      "last_name": "Doe",
      "domains": ["apple.com"]
    },
    {
      "id": "c2",
      "first_name": "Jane",
      "last_name": "Smith",
      "domains": ["google.com", "alphabet.com"]
    }
  ],
  "mode": "regular",
  "webhook": "https://yourserver.com/webhook"
}

Response

{
  "status": true,
  "process": 456
}

Errors

// 403 — Contacts empty or exceeds 1000
{
  "result": "failed",
  "errors": ["Too many contacts. Maximum is 1000"]
}
GET /email/bulk/process

Check the processing status of a bulk email finder request.

Parameters

Parameter Type Required Description
api_key string Yes Your API key
id integer Yes The process ID returned by /email/bulk

Response

{
  "status": true,
  "worker": {
    "id": 456,
    "status": "completed",
    "total": 2,
    "processed": 2
  }
}
GET /email/bulk/results

Retrieve the results of a completed bulk email finder process.

Parameters

Parameter Type Required Description
api_key string Yes Your API key
process integer Yes The process ID returned by /email/bulk

Response

{
  "status": true,
  "results": [
    {
      "id": "c1",
      "email": "john@apple.com",
      "result": "deliverable"
    },
    {
      "id": "c2",
      "email": "jane@google.com",
      "result": "deliverable"
    }
  ]
}

Phone Finder API

POST /phone/bulk

Submit up to 1,000 contacts for bulk phone number lookup.

Parameters

Parameter Type Required Description
api_key string Yes Your API key (query parameter)
items array Yes Array of contact objects (JSON body, max 1000)
webhook string No URL to receive a callback when processing completes

Request

POST /api/v1/phone/bulk?api_key=YOUR_API_KEY
Content-Type: application/json

{
  "items": [
    {
      "id": "p1",
      "full_name": "John Doe",
      "position": "CEO"
    },
    {
      "id": "p2",
      "full_name": "Jane Smith",
      "position": "CTO"
    }
  ],
  "webhook": "https://yourserver.com/webhook"
}

Response

{
  "status": true,
  "process": 789
}

Errors

// 403 — Items empty or exceeds 1000
{
  "result": "failed",
  "errors": ["Too many items. Maximum is 1000"]
}

Customer API

GET /customer/list

Retrieve a paginated list of your customers.

Parameters

Parameter Type Required Description
api_key string Yes Your API key
page integer No Page number (defaults to 1)

Response

{
  "result": [
    {
      "id": 1,
      "email": "customer@example.com",
      "active": true
    }
  ],
  "pages": 5,
  "page": 1
}
POST /customer/create

Create a new customer or update an existing one. If a customer with the given email already exists, the record is updated.

Parameters

Parameter Type Required Description
api_key string Yes Your API key (query parameter)
data object Yes Customer data object (JSON body)

Request

POST /api/v1/customer/create?api_key=YOUR_API_KEY
Content-Type: application/json

{
  "data": {
    "email": "newcustomer@example.com"
  }
}

Response

{
  "id": 42,
  "active": true
}

Errors

// 403 — Invalid API key
{
  "result": "failed",
  "errors": ["Wrong API key"]
}