Documentation

API: Sends & Activity

Read back what happened to the emails you sent through POST /send: whether each was delivered, bounced or refused, what it cost, and whether it was opened or clicked. These calls are read-only and cost no credits.

The same data is available without code under Dashboard → API Sends: a filterable log of every send, plus Streams that roll your tags up into delivery, engagement, recipient and error views, with CSV export.

List sends

MethodGET
Endpoint/api/v1/sends
OrderNewest first
Query parameterDescription
tagOnly sends carrying this tag.
statussent, failed, bounced, soft_bounced, suppressed, invalid, skipped or blocked.
qFree-text search across recipient, subject, message id and stream.
domainRecipient domain, e.g. gmail.com.
message_idA specific Message-ID.
template_idOnly sends made from this template.
startDate, endDateDate range, YYYY-MM-DD.
pagePage number. Default 1.
limitPage size. Default 20, maximum 100.

Get one send

MethodGET
Endpoint/api/v1/sends/:id
idThe send_id that POST /send returned
# Newest first. Filter by tag, status, date range, recipient domain and more.
curl "https://pingovo.com/api/v1/sends?tag=orders&status=sent&limit=20" \
  -H "X-API-Key: YOUR_API_KEY"

# One send, by the send_id that POST /send returned
curl https://pingovo.com/api/v1/sends/SEND_ID \
  -H "X-API-Key: YOUR_API_KEY"

The send object

FieldTypeDescription
idstringThe send_id.
request_idstringThe id of the API call that made it.
to, subject, fromstringRecipient, subject and sending address.
tagsstring[]The tags you passed.
streamstringThe group it appears under: its first tag, else its template, else the API key it was sent with.
statusstringsent, failed, bounced, soft_bounced, suppressed, invalid, skipped or blocked.
error, messagestring | nullError code and reason when the email did not go out.
message_idstring | nullThe Message-ID header of the delivered email.
credits.verification / .send / .trackingnumberWhat this send cost, by part.
tracking.opens / .clicksbooleanWhether each kind of tracking was on for this email.
tracking.opened_at / .clicked_atdate | nullWhen the first open / click was recorded.
bounced_atdate | nullSet when the receiving server accepted the mail and bounced it later.
created_atdateWhen the call was made.

Statuses

StatusMeaning
sentThe receiving server accepted the email.
bouncedA hard bounce — the address does not exist. It is added to your suppression list so you do not mail it again.
soft_bouncedA temporary refusal such as a full mailbox. Safe to retry later.
blockedThe receiving server rejected the mail itself. Contact support if this repeats.
suppressedNot sent: the address is on your suppression list.
invalidNot sent: the address failed verification.
skippedNot sent: one of your skip rules left the address out.
failedNot sent: the call was refused or delivery failed. error says why.

A sent email can still turn into bounced later: some servers accept a message and bounce it afterwards. Poll GET /sends/:id, or filter the list by status, rather than treating a 200 from POST /send as final delivery.

Your call history

GET /api/v1/activity is a log of your own past API calls — /verify, /verify/batch and /send — with each call's outcome, error code and credits charged. Use /sends for per-email detail and /activity for per-call detail.

Query parameterDescription
typeverify_single, verify_batch or send.
statussuccess or failed.
startDate, endDateDate range, YYYY-MM-DD.
page, limitPagination. Default limit 20, maximum 100.

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.