Akedly

Dev Mode & Test Pairs

Dev mode lets you drive a complete verification flow — request, deliver, verify — without sending a single message to anyone. You get a temporary test pair: a synthetic phone number and a matching OTP. Send the OTP request to that number, type that code, and the transaction succeeds exactly as a real one would.


How it works

Enable dev mode on the surface you're integrating against:

  • V1.2 REST API → enable it on the pipeline. The dev-mode panel is only rendered for v1.2 pipelines; it does not appear on other pipeline versions.
  • V2.0 Widget SDK → enable it on the widget.

Akedly then mints a test pair and holds it for a 60-minute window. While that window is open, any verification request whose phone number matches the test pair's number is treated as a test: the stored test OTP becomes the transaction's OTP, and the whole delivery path is skipped.

Any other phone number sent to the same pipeline or widget during that window behaves completely normally — real code, real delivery, real billing. Dev mode does not put your integration into a global test state; it only special-cases the one number. (One exception: V1.2's optional bypass toggles, which are pipeline-wide — see Proof-of-work and Turnstile below.)


Choosing the OTP length

When you enable or rotate a test pair, the OTP can be 4, 5 or 6 digits. This is the length you will actually type, and it is the length the transaction is created with — so it is how you test a non-default digit length end to end.

  • Name
    Length
    Type
    4 | 5 | 6
    Description

    The number of digits in the minted test OTP. Defaults to 6.

  • Name
    Scope
    Type
    per rotation
    Description

    The length is a property of the pair you just minted, not a saved pipeline or widget setting. Rotate again at a different length and the new pair simply has a different length.

Because the length lives in the pair itself, the rule is simply: the test pair's OTP length is the length. There is no separate setting that could drift out of sync with the code you were given.


What is skipped

A test transaction deliberately bypasses the machinery that would otherwise have real-world side effects:

SkippedWhy it matters
Message deliveryNo WhatsApp, SMS, Telegram or email is sent — the successful delivery is synthesized for display.
BillingThe transaction carries no billing state, so repeated testing costs nothing.
Meta delivery-status forwardingmetaWebhookForwardUrl is not attached, so provider/Meta delivery-status traffic is not forwarded for test traffic. This is not your back-end callback URL — see below.
Operational alertsTest transactions do not raise the internal success/failure notifications real traffic does.
Rate limiting & circuit breakerSkipped only for requests matching the test pair — the server flags a request as test traffic when dev mode is on and the phone number matches, and only that flag short-circuits the two middlewares. Every other request to the pipeline stays fully protected. Test traffic is also excluded from the counters and buckets they measure, so a tight test loop neither consumes your budget nor trips the breaker for real users.

Proof-of-work and Turnstile are handled differently

These two are not simply "off in dev mode", and they differ by surface:

  • V2.0 Widget SDK — proof-of-work is skipped for the test-pair attempt only; real traffic against the same widget keeps full protection. Turnstile is still required for test attempts, but the hosted widget completes it for you, so it costs you nothing.
  • V1.2 REST API — proof-of-work and Turnstile still apply to the test number. If your test client cannot solve them, the dev-mode panel offers two explicit opt-in toggles, Bypass PoW and Bypass Turnstile.

The panel on a v1.2 pipeline carries three switches: Enable Dev Mode, which opens a one-hour window in which the test number skips rate limiting and the circuit breaker; Bypass PoW, for when proof-of-work blocks your test client; and Bypass Turnstile, useful when testing from localhost without a registered domain. Note the asymmetry — the rate-limit and breaker skip applies only to the test number, while the two bypass toggles apply pipeline-wide.


Using it

  1. Enable dev mode on the pipeline (V1.2, and only if it is not attached to a widget) or on the widget (V2) in the dashboard, choosing an OTP length of 4, 5 or 6. The window runs for one hour.
  2. Copy the test pair — the dashboard shows the synthetic phone number and its OTP, with separate Copy Phone number and Copy OTP buttons.
  3. Start a verification for that phone number exactly as you would for a real user.
  4. Submit the test OTP. The transaction verifies and nothing is sent or billed — but your back-end callback URL is still called, with mainTransaction.isTest on V1.2 or widgetAttempt.isTest on V2.

Was this page helpful?