Use cases · Inalambria Verify

Inalambria Verify: OTP verification in two calls

Confirm that your users’ phone numbers and email addresses really belong to them without ever exposing the code. Verify delivers it over WhatsApp, SMS or Email with an automatic cascade, includes anti-fraud and only charges for approved verifications.

Close-up of a person using their phone to confirm a code
99.9%
contractual availability SLA
< 1 s
from the request to the first message on its way
500/s
sustained verifications, with bursts of 2,000 per second
4
carriers connected directly: Claro, Movistar, Tigo and WOM

Verifying a phone number or email is the most fragile step in any sign-up: if the code does not arrive, the user leaves, and building the logic in-house means maintaining secure codes, expiry, attempt limits, retries, WhatsApp templates and fraud defenses.

With Inalambria Verify your application makes two HTTP calls, one to send the code and one to check it, and we take care of everything else: the code never touches your systems, is never stored in clear text and never shows up in a log. It all runs on the same redundant network, connected directly to all four Colombian carriers, that we already use to deliver OTPs for Colombia’s most demanding banks and fintechs.

Examples

  • Phone or email verification at sign-up
  • Two-factor authentication (2FA) at login
  • Password recovery
  • Transaction and payment confirmation
  • Delivery and courier confirmation
  • Periodic re-verification of contact details

What we commit to

Three commitments you can hold us to

  1. Zero code exposure

    It never passes through your systems, it is stored as an irreversible hash and it never shows up in a log. There is nothing to leak.

  2. There is always an answer

    Every verification ends, approved, expired or failed, and your backend finds out through a signed webhook, without having to ask.

  3. You only pay for the yes

    Expired, failed, blocked for fraud or out of attempts: zero. You pay for verified users, not for messages.

How it works

From code to approval, in two calls

Your application only sends and checks. Verify takes care of generating the code, the channel cascade, the attempts and closing the verification.

  1. Your user wants to sign up or log in, and your app needs to check that the number is theirs.
  2. Your backend calls POST /v1/verifications with the number.
  3. Verify generates the code, stores only its hash, checks the anti-fraud limits and responds right away with the id and the pending status.
  4. The code goes out over the first channel in the cascade, WhatsApp, with the authentication template.
  5. Your user receives the code.
  6. If nobody has checked the code after 120 seconds, the cascade moves on by itself: the same code goes out by SMS. Either the WhatsApp or the SMS code works.
  7. Your user types the code into your form.
  8. Your backend sends it to POST /v1/verifications/{id}/check.
  9. Verify compares it against the hash, closes the verification, cancels any pending channels and responds approved.
  10. A signed webhook confirms the result to your backend; it also tells you if the verification expires or fails.
Only approved verifications are billed. Expiring, running out of attempts or being blocked costs nothing, however many messages went out.

Read the Verify documentation

Behind the six boxes

Nine problems that are no longer yours

What your user sees as a six-digit field hides all of this. Verify solves it for you.

  1. 01

    Generating a code nobody can guess

    Cryptographic randomness (CSPRNG), 4 to 10 digits.

  2. 02

    Retrying the call without sending another code

    With an Idempotency-Key, if your system retries after a network glitch, only one message goes out.

  3. 03

    Stopping abuse before it costs you

    Limits per number, IP and application, plus blocking by country or prefix, stop inflated traffic.

  4. 04

    Having the template each channel requires

    Approved authentication templates for WhatsApp, SMS and Email, ready from the first send.

  5. 05

    Switching channels when it does not arrive

    With no answer after 120 s, the same code goes out over the next channel.

  6. 06

    Expiring and closing by itself

    Every code expires in minutes (5 by default) and the verification closes itself.

  7. 07

    Locking after too many attempts

    After 3 failed attempts it locks: nobody can guess at random.

  8. 08

    Reporting the result, signed

    Your backend receives a signed webhook with every result.

  9. 09

    Storing it without being able to read it

    It is stored as an irreversible hash: nobody can read it, not even us.

Security and compliance

The code cannot be read. Not even by us.

In Verify

  • Code generated with cryptographic randomness (CSPRNG)
  • Stored with salted Argon2id; deleted when the verification closes
  • Banned from logs: the build fails if it shows up
  • Numbers masked in every output, and an immutable audit trail
  • TLS 1.2+ in transit and AES-256 at rest

At Inalambria

  • ISO/IEC 27001:2022 certified ISMS
  • SIEM/SOC monitoring for incident detection
  • Tested, up-to-date contingency and disaster recovery plans
  • MFA, least privilege and vendor management
  • Law 1581 of 2012 (data protection) and configurable retention
Defense in depth, layer by layer

24/7 response · alerts and escalation

Detection · SIEM/SOC and continuous monitoring

Edge · WAF, DDoS, bot management and limits

Network · private subnets and IPSec VPN

Identity · MFA, SSO and least privilege

Data · AES-256 encryption, versioning and retention

The code: an Argon2id hash, never in clear text

Optional · Risk signals

Add SIM Swap and portability to your verifications

An OTP confirms that someone receives the code, not whether the line was hijacked. With Inalambria you can also add two optional checks that spot risk signals before you send the code or approve a sensitive operation.

SIM Swap

Was this number’s SIM changed recently?

Checks whether the SIM tied to the number was changed recently. It is the classic sign of SIM hijacking: someone duplicates your user’s SIM to receive their codes. If the change is recent, you can ask for an extra factor, hold the operation or review it before sending the OTP.

Number portability

Did this number switch carriers in Colombia?

Checks whether the number was ported and which carrier it belongs to today. A recent port, right before a sign-up or a change of details, is a risk signal worth weighing, and knowing the current carrier confirms the number is valid and active in Colombia.

  1. Check SIM Swap and portability
  2. Decide based on the risk
  3. Verify with the OTP

Both checks are optional and combine with Verify in the same flow: you decide which signal calls for an extra step, such as a second factor or a manual review. They are ideal for sign-ups, account recovery, changes of details and high-value transactions.

Integration, availability and support

Built for the volume and standards of a bank

Stateless services with autoscaling: if a non-critical component goes down, such as analytics, webhooks or a channel, verifications keep going.

Three ways to connect, to fit your network policy

Protected public API

REST API behind Cloudflare: WAF, DDoS protection, rate limiting, IP and country blocking, and TLS.

AWS PrivateLink

100% private traffic between AWS accounts: no public IP, no internet, no VPN.

Site-to-site VPN

IPSec IKEv2 tunnel with AES-256 encryption from your core systems or your datacenter.

A managed operation, not just an API

Two regions, no single point of failure

Multi-AZ with cross-region replication and failover, backups and tested disaster recovery.

24/7 monitoring

Operations watched day and night, tracking SLA compliance.

Incidents with a protocol

Portal, email and WhatsApp, handling through resolution, and a relationship manager with monthly reviews.

Your own traceability

A portal with reports, users and roles, a status API and webhooks with 32+ states.

Frequently asked questions

Can Inalambria see the codes it sends?

No. The code is generated with cryptographic randomness, stored only as a salted Argon2id hash and deleted when the verification closes. No response, log or webhook includes it.

What happens if the WhatsApp message does not arrive?

If nobody checks the code within 120 seconds, the cascade sends the same code by SMS and then by Email. Any of the messages received works, and your application does not have to do anything.

How much does a verification that is not completed cost?

Nothing. Only approved verifications are billed: expired, failed, fraud-blocked or out-of-attempts verifications cost nothing, however many messages went out.

Can I tell whether my user’s SIM was swapped or their number ported?

Yes. Besides Verify, Inalambria offers optional SIM Swap checks, which tell you whether the number’s SIM changed recently, and number portability checks in Colombia, which tell you whether the number switched carriers and which one it belongs to today. You can run them before sending the code or approving a sensitive operation, and ask for an extra step when there is risk.

How do I connect if my network policy does not allow internet traffic?

Besides the public API protected by Cloudflare, you can connect over AWS PrivateLink, with no public IP or internet, or through a site-to-site IPSec VPN from your datacenter.

Can I try Verify before signing up?

Yes. The test environment with test_ keys sends no messages and is never billed, and the full documentation is at docs.inalambria.com. After that, a pilot with measurable goals takes your flow to production.

Verifying your users should not be a risk. With Inalambria Verify, it is not.

Start today with test keys and documentation, then go live with a measurable pilot.