Key Takeaways
- A KYC reminder CSV is a countdown file. The moment the user completes verification, that row must leave the next drip.
- Do not reuse a collections template or a marketing coupon in a KYC body.
- Free is 1 device, 300 SMS lifetime, and 300 contacts. Developer is 25,000 SMS per year. Platform price is devices plus send volume.
- Login OTP stays off the KYC batch SIM even when both look “compliance-ish.”
- File hash plus user-id plus campaign-day stops a re-export from nagging twice.
Summary
Scenario 101 is fintech bulk CSV for KYC and account-restriction nudges — not yesterday’s payout file. Compliance exports a daily stale-user list. Product wants a friendly reminder. Risk wants a hard “upload by Friday or the wallet freezes.” Those are different templates and different drip days. Service pricing is devices plus SMS send volume. You bring the phone and operator credit. Free is 1 device, 300 SMS lifetime, and 300 contacts.
Developer is 25,000 SMS per year on one device — a staging ceiling. Starter allows 2 devices so login OTP and the KYC batch are not the same radio. Paid “Unlimited SMS” is uncapped platform volume, not free airtime. Confirm fields in Developer Center.
day-0 · day-3 · freeze notice
completed KYC drops out before day-3
KYC nudge files are not collections
Collections imply a debt. KYC implies a missing document. Mixing tone is how you get complaints and wrong legal treatment. Allowed columns: user id, E.164, locale, stage (soft / hard / freeze), correlation id, expiry date. Forbidden: full national id, selfie URLs in the clear, OTPs, card PAN.
OTP, consent-minded bulk, security.
If the user finishes KYC at 09:12 and finance drops yesterday’s file at 09:20, your import must join live status and skip them. A “upload your ID” text after they already did is a trust failure and wasted airtime.
KYC CSV matrix
| Stage | Gate | If you skip it |
|---|---|---|
| Soft reminder | Status still incomplete | Nag after success |
| Hard deadline | Same user-id not already hard-sent this campaign | Two freeze threats in one morning |
| Freeze notice | Core says restricted=true | False freeze SMS; support flood |
| Wrong locale | Fail or fall back to legal default | English threat to a market that requires local copy |
Sunset rows when the user finishes
Re-query status at import time, not at file-export time. Persist file hash + user-id + campaign-day. Drip inside OEM and carrier fair-use — raising Android ceilings is not unlimited carrier SMS. DLR is radio outcome. Core is customer outcome.
Locale and legal copy
Template ids are per locale. Counsel owns freeze wording. This blog does not. Conceptual sends only — live JSON in Developer Center. BIS CPMI is risk framing, not your statute.
Devices, volume, and airtime
Three meters: Androids, platform sends, operator SMS. We bill the first two. Free (1/300/300) is a dry run. A completed user skipped at import costs nothing on the radio.
Compliance-week operations
Before drip: pairing, charge, OTP pool healthy, live status join tested on a staff user. After OEM updates: canary one soft and one freeze template. Setup, Downloads, pricing.
Decision guide
Ship when live-status join, campaign-day idempotency, and OTP isolation exist. Delay if compliance emails a CSV that “must go out as-is.” If you will not run phones, buy aggregator traffic for that regulated lane.
KYC import checklist
- No national-id or selfie URLs in the file.
- Join live KYC status at import.
- Idempotency = file hash + user-id + campaign-day.
- OTP device isolated.
- Locale templates counsel-approved.
- Staff canary before the freeze wave.
- Developer Center fields confirmed.
Next steps
Gateway overview, scenario 41 payout CSV, API hub.
Related product pages
Jump to the live product docs for this topic—not another long-form article.
- bulk SMS from Excel and CSVSpreadsheet campaigns
- contacts, lists, and segmentsAudience hygiene
- bulk SMS with consent best practicesHigh-volume outreach
- SMS API documentationLive endpoint reference





