v:verza
verza / docs / contact-validation-api

South African contact validation API

One call checks a South African phone number, an email address, an ID number, or any mix of the three. The price is a flat $0.02. A phone-only request is one check and one charge. Adding an email or an ID number does not add a second charge.

The phone result is an E.164 number, a line type and the operator the prefix was first allocated to. It is not a live network lookup. Mobile numbers move between operators, and the response says so. The email result is syntax, DNS and a disposable or role flag. It does not prove the mailbox exists.

Endpoints

POST /v1/contact-validate

Validate a South African phone number, an email address and an optional ID number in one call. Phone returns E.164, line type and the original network allocation, which is not the current network because the number may have been ported. Email checks syntax, MX, disposable and role flags, and does not confirm the mailbox exists. A phone-only request is one check and one charge.

$0.02 per call · example: /v1/contact-validate

How you pay

API key. The free tier issues a key at /signup: send it as Authorization: Bearer <key> and calls come off a monthly allowance, no crypto anywhere in that path. Every key comes with a sandbox twin (vz_test_) that never counts against quota and accepts only the documented test inputs, so you can wire up an integration before spending a single call.

Pay per call. Send no key at all and a paid endpoint replies HTTP 402 with the exact payment requirements; an x402 client pays USDC on Base (about two seconds to settle) and retries automatically. No account, no signup, which is what makes it work for autonomous agents.

Either way, invalid input is rejected with a free 400 before any payment is challenged, so you never pay (or spend quota) to learn you made a typo.

Questions

How do I validate a South African phone number?
POST /v1/contact-validate with a JSON body, for example {"phone":"082 123 4567"}. The same call accepts email and id. 082 123 4567, +27 82 123 4567, 27821234567 and 0027821234567 all normalise to +27821234567. A malformed body is a free 400. A well-formed body that has not been paid is a 402 at $0.02.
Is the network reliable?
No. original_network is the operator the prefix range was first allocated to. Mobile number portability means the number may now be on a different network. Treat it as a best guess, not a live lookup. The response includes that caveat on every mobile result.
Do you check the mailbox exists?
No. Email validation checks syntax, then MX records, and falls back to an A or AAAA record when no MX exists. A disposable-domain list and a role-account list are applied locally. There is no SMTP probe, and the response says the mailbox was not confirmed.
Is my data stored?
No. The phone number, email address and ID number are validated in memory and never stored or logged. Access logs record the path and the HTTP status only. The email domain, not the address, is sent to this server's DNS resolver.
Why POST?
The values are personal information. A POST body keeps them out of the URL, out of the 402 resource URL, and out of access logs. GET, PUT and the other methods return 405 with the example body and the price.

Related

South African ID number validation API South African VAT number validation API NCA credit agreement lawfulness API South African KYB and onboarding API CIPC registration number check Domain age and registry status API IP address screening API Business pre-screen API Risk score API Guides: how the interest rate caps work zaref: NCA maximum interest rates