Documentation

API Overview

The Pingovo REST API lets you verify email addresses and send transactional email (order confirmations, password resets, one-time codes) from your own application, then read back what happened to every message. API access requires a paid plan (Lite and above).

Quickstart

  1. 1
    Create an API key in Dashboard → API (see Managing API Keys). Copy it straight away — it is shown only once.
  2. 2
    Check it works by asking for your balance: curl https://pingovo.com/api/v1/credits -H "X-API-Key: YOUR_API_KEY"
  3. 3
    Verify an address with POST /verify, or send an email with POST /send.
  4. 4
    Look at what you sent in Dashboard → API Sends, or read it back with GET /sends.
curl https://pingovo.com/api/v1/credits \
  -H "X-API-Key: YOUR_API_KEY"

Basics

PropertyValue
Base URLhttps://pingovo.com/api/v1
AuthenticationX-API-Key: YOUR_KEY header on every request
Request formatJSON body (Content-Type: application/json)
Response formatJSON. Successful responses carry "success": true
Rate limitSet by your plan (requests per minute and per day), shared by all of your keys. See Errors & Rate Limits
Credit costCharged per call. See the table below

Endpoints

What each call costs

CallCredits
POST /verify1 per email
POST /verify/batch1 per email in the batch
GET /credits, /sends, /sends/:id, /activityFree
POST /send — delivery1 per email delivered
POST /send — verify before send1 per recipient checked (on by default; you never send to an address that comes back invalid)
POST /send — open / click trackingA flat extra charge per tracked email, only if you turn tracking on

Credit costs are set by Pingovo and can change over time. The current figures are shown at the top of Dashboard → API Sends, and a price change never reprices an existing subscriber mid-plan.

Authentication

Send your key in the X-API-Key header. Keep it on your server — never in a browser, mobile app or public repository. If a key leaks, delete it and create a new one.

Repeated requests with unknown or missing keys block the calling IP address for a while, and while it is blocked even a valid key from that address is refused with 429 AUTH_THROTTLED. Check for typos in the header name and value before retrying in a loop.

Response envelope

Every response is JSON. A success looks like this:

{
  "success": true,
  "data": { ... },
  "credits_used": 1,
  "credits_remaining": 499
}

A failure has the HTTP status plus a machine-readable error code:

{
  "success": false,
  "error": "INSUFFICIENT_CREDITS",
  "message": "Not enough credits to send this email"
}

Branch on error, never on the wording of message. The full list is in Errors & Rate Limits.

Still have questions?

Our support team is happy to help. Open a ticket from your dashboard or use the contact form.

We use essential cookies to run this site, and optional functional/analytics cookies to improve it. See our Privacy Policy for details.