Every MiniMoth project can send OTPs to US and EU-area phone numbers over WhatsApp, using the exact same `POST /v1/otp/send` and `POST /v1/otp/verify` endpoints you already use for Indian (+91) numbers — just pass an international number instead:

```javascript
const res = await fetch('https://api.minimoth.dev/v1/otp/send', {
  method: 'POST',
  headers: { 'X-Api-Key': 'mm_live_...', 'Content-Type': 'application/json' },
  body: JSON.stringify({ phone: '+1-2025551234' }),
})
const { message, otp_id, expires_at } = await res.json()
// 403 REGION_NOT_ENABLED if this project hasn't turned on the number's region yet
// 422 INVALID_PHONE if the number's country isn't a supported region at all
```

```javascript
const res = await fetch('https://api.minimoth.dev/v1/otp/verify', {
  method: 'POST',
  headers: { 'X-Api-Key': 'mm_live_...', 'Content-Type': 'application/json' },
  body: JSON.stringify({ phone: '+1-2025551234', code: '123456' }),
})
const { access_token, refresh_token, expires_at, identity_id } = await res.json()
// Same response shape as a domestic (+91) verify -- nothing about the session,
// identity, or refresh-token lifecycle differs for an international number.
```

<div className="mt-6">
  <Callout variant="accent">
    <p className="font-medium mb-1">Enable International regions</p>
    <p className="text-ink/60">Enable regions from your project's <b className="text-ink">International WhatsApp OTP</b> card in the project details page, which shows the current rate for each region before you turn it on.</p>
  </Callout>
</div>

<div className="mt-8">
<Section label="Supported regions">
  <p>United States / Canada, United Kingdom, France, Netherlands, Germany, Rest of Western Europe, Spain, Italy, Poland, Hungary, Romania, and Rest of Central & Eastern Europe. Each is billed per OTP sent. If your project has its own connected WhatsApp Business Account instead, every international send is billed at a flat facilitation fee regardless of region — see <a href="/docs/branding" className="text-saffron hover:underline">Branding</a> for connecting your own account.</p>
  <p className="mt-2">Current rates for every region are shown in your project's <b className="text-ink">International WhatsApp OTP</b> card in the dashboard before you enable one.</p>
</Section>
</div>

<div className="mt-8">
<Section label="WhatsApp-only — no SMS fallback">
  <p>Domestic (+91) sends try WhatsApp first and automatically fall back to SMS if delivery fails. International sends don't — there's no SMS route for these numbers at all, so a WhatsApp delivery failure surfaces directly instead of silently retrying over a different channel.</p>
  <p>If a WhatsApp delivery fails, you get <code className="font-mono text-xs">502 INTERNATIONAL_WHATSAPP_FAILED</code> and the charge for that attempt is automatically refunded to your wallet — no action needed on your end. See <a href="/docs/error-codes#international-markets" className="text-saffron hover:underline">Error Codes</a> for the full list.</p>
</Section>
</div>

<div className="mt-8">
<Section label="Repeated failures block a number temporarily">
  <p>After enough WhatsApp delivery failures for the same number in a short window, further sends to that number return <code className="font-mono text-xs">502 INTERNATIONAL_WHATSAPP_BLOCKED</code> instead of attempting delivery again — no charge is made for a blocked attempt, since nothing was sent. The block clears on its own after the window passes without a new real failure.</p>
</Section>
</div>

---

Full documentation index: https://minimoth.dev/llms.txt
