Verification workflow
Customer workflow
Section titled “Customer workflow”Base URL: https://api.agentsverify.dev. These six operations use your existing workspace and credits.
Manage your account, API key and purchases in the dashboard.
Use a server-side HTTP client for application integrations. The self-hosted
interactive reference can make customer API requests with an API key from the
documentation site. CSV upload is a separate PUT to the returned storage
URL; it is not performed automatically by the API reference. Dashboard session
origins remain separate. Requests use your workspace and normal credit rules.
- Authenticate and check credits. Send your key in
X-API-Keyto the API only.GET /v1/creditsreturns{"credits": <available balance>}. This is a current balance, not a reservation or guarantee of funding for a later submission. Keep the key out of URLs, replies, application browser bundles and logs. In the API reference, enter it only in the authentication field; it is not persisted across page reloads or sent through a third-party proxy. - Prepare one CSV. Use one-column UTF-8 CSV, optionally with a BOM and an
explicit first-record header such as
email. Standard CSV quoting and LF/CRLF are supported. All address records must be syntactically valid; blank records, extra columns and malformed addresses reject the whole file before checks or credit holds. Duplicates are checked once.GET /v1/verificationsreports the current file-byte and row limits alongside saved history. - Create or recover the verification. Save a UUID request identity, then send
bodyless
POST /v1/verificationswithIdempotency-KeyandX-Upload-Content-Lengthcomputed from the CSV’s UTF-8 bytes. HTTP 201 creates a verification; HTTP 200 recovers the existing one. Save the returnedid. Also send optionalX-Upload-Filenamewith the percent-encoded local basename (for examplecontacts%20October.csv) so dashboard history retains that name. Do not send local directory paths. A one-row CSV remains an upload in history. - Upload the CSV. When the receipt contains
upload, PUT raw CSV bytes toupload.url, usingContent-Type: text/csvand, for a whole-file transfer,Content-Range: bytes 0-<last byte index>/<total bytes>. This is a storage resumable-upload URL, not an API endpoint. Send no API key or Authorization header to storage. HTTP 200/201 confirms durable receipt; HTTP 308 means the transfer is incomplete. After HTTP 200/201, status may briefly remainuploadingwhile the backend detects the completed transfer. Continue polling, respectingRetry-After; do not re-upload after a confirmed transfer. Preserve the same Idempotency-Key to recover an interrupted API creation; use the storage protocol or the Python client to resume interrupted bytes. Transfer examples explain the two stages. Whole-file validation and processing start automatically. - Read progress and results. Poll
GET /v1/verifications/{id}, respectingRetry-After. Readissuefor actionable guidance;credits_requiredmeans adding credits resumes an underfunded file without re-uploading it. DownloadGET /v1/verifications/{id}/resultsfor the available finalized CSV rows, including partial results. The columns areemail,result,message,checked_at. A header-only CSV means no outcomes are available yet. Saved results can be read again without starting another check. Detail and history includecreated_atand nullablecompleted_at. Completion is recorded once all input processing, address outcomes and credit settlement finish, including cancellation or failure. It excludes notification delivery and archival. Subtractcreated_atfor total elapsed time, including upload, preparation and queueing.completed_atis null while unfinished or for historical jobs without a recorded completion timestamp;checked_atremains the separate per-address result timestamp. - Recover or cancel. Retry uncertain creation responses with the same UUID
Idempotency-Key. A new identity creates another verification and can charge
again. Use bodyless
POST /v1/verifications/{id}/cancelto cancel remaining work; settlement and refunds can continue while status iscancelling.
Outcomes, credits and errors
Section titled “Outcomes, credits and errors”- Valid: The address passed our verification checks and is assessed as safe to email, with low expected bounce risk. Delivery is not guaranteed.
- Outcomes are
valid,invalid,catch_all,unknownanderror. Unknown is inconclusive; catch-all is risky. Final unknown results refund their held credit. Other finalized outcomes cost one credit. Unchecked cancelled addresses are refunded and excluded from the results CSV. - Verification status is
uploading,preparing,waiting,verifying,cancelling,completed,completed_with_errors,cancelledorfailed. A failed file has an actionable issue; do not keep polling it as if it were active. - Errors use
issue.code,issue.messageandrequest_id. Fix authentication on 401; fix the specified request or CSV defect before retrying. For 429 or 503, respectRetry-Afterand reuse the original request identity. - Processing time varies with queue and receiver limits. Backend retries are automatic; resubmitting is not a polling or retry mechanism.