One call starts a verification, one call checks the code. The SMS-then-email fallback ladder is built in, and you pay only when the person actually gets through.
The platform fee is charged when a code is entered correctly. A code that was never delivered, or never entered, costs nothing beyond the channel.
Ask for SMS and email in one request. If the SMS is not delivered in time, the email goes out; the user sees one code and one input box.
Carriers are ranked by how often people enter the code they carried, not by whether a delivery receipt said OK. That signal exists only because Woyra owns the verification layer.
Pass a locale such as am-ET or sw-KE and the message arrives in that language, on a sender ID that country allows.
The same key works on every country endpoint; which one you call sets the rules and the currency.
curl -X POST https://api.woyra.io/v1/verifications \
-H "Authorization: Bearer $WOYRA_KEY" \
-H 'Content-Type: application/json' \
-d '{"to": "+254712345678", "email": "abebe@example.com", "channels": ["sms", "email"]}'
# Later, when the user types the code:
curl -X POST https://api.woyra.io/v1/verifications/ver_01J.../check \
-H "Authorization: Bearer $WOYRA_KEY" \
-d '{"code": "483920"}'Reference price: Twilio Verify $0.05. Full list on the pricing page.
$0.01 when the code is entered correctly, plus the SMS or email that carried it. Nothing when it is not.
Yes. Ask for email alone, SMS alone, or both in order; Woyra falls back to the next channel when the first does not deliver in time.
Ten minutes by default, configurable per request. A code can be checked a limited number of times before the verification is cancelled.
No. Verification codes go out on a sender that is already registered in each country. Bring your own brand name when you have one.
Each market has its own rules, currency and endpoint. Pick yours.