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
Method
GET
Endpoint
/api/v1/sends
Order
Newest first
Query parameter
Description
tag
Only sends carrying this tag.
status
sent, failed, bounced, soft_bounced, suppressed, invalid, skipped or blocked.
q
Free-text search across recipient, subject, message id and stream.
domain
Recipient domain, e.g. gmail.com.
message_id
A specific Message-ID.
template_id
Only sends made from this template.
startDate, endDate
Date range, YYYY-MM-DD.
page
Page number. Default 1.
limit
Page size. Default 20, maximum 100.
Get one send
Method
GET
Endpoint
/api/v1/sends/:id
id
The 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
Field
Type
Description
id
string
The send_id.
request_id
string
The id of the API call that made it.
to, subject, from
string
Recipient, subject and sending address.
tags
string[]
The tags you passed.
stream
string
The group it appears under: its first tag, else its template, else the API key it was sent with.
status
string
sent, failed, bounced, soft_bounced, suppressed, invalid, skipped or blocked.
error, message
string | null
Error code and reason when the email did not go out.
message_id
string | null
The Message-ID header of the delivered email.
credits.verification / .send / .tracking
number
What this send cost, by part.
tracking.opens / .clicks
boolean
Whether each kind of tracking was on for this email.
tracking.opened_at / .clicked_at
date | null
When the first open / click was recorded.
bounced_at
date | null
Set when the receiving server accepted the mail and bounced it later.
created_at
date
When the call was made.
Statuses
Status
Meaning
sent
The receiving server accepted the email.
bounced
A hard bounce — the address does not exist. It is added to your suppression list so you do not mail it again.
soft_bounced
A temporary refusal such as a full mailbox. Safe to retry later.
blocked
The receiving server rejected the mail itself. Contact support if this repeats.
suppressed
Not sent: the address is on your suppression list.
invalid
Not sent: the address failed verification.
skipped
Not sent: one of your skip rules left the address out.
failed
Not 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 parameter
Description
type
verify_single, verify_batch or send.
status
success or failed.
startDate, endDate
Date range, YYYY-MM-DD.
page, limit
Pagination. 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.