---
title: "Create balance top-up or SMS pack"
method: POST
path: "/billing/topups"
tags: ["Billing & Balances"]
---

# Create balance top-up or SMS pack

`POST /billing/topups`

## Request

- Base URL: `https://api.envoisms.ma/v1`
- URL: `https://api.envoisms.ma/v1/billing/topups`
- Auth: HTTP bearer

Creates a custom balance top-up or a prepaid SMS pack. Pack top-ups carry a volume tier, for example `sms-1000` unlocks the `business` SMS price when payment is completed.

## Request body

- object
  - `amount_eur` number: Required for custom top-ups. Optional when pack_id is provided.
  - `pack_id` string
  - `payment_method` 'stripe' | 'crypto' | 'bank_transfer'

## Response `201`

Pending top-up

- object
  - `id` string
  - `status` string
  - `amount_eur` number
  - `amount_mad` number
  - `pack_id` string, nullable
  - `sms_count` integer, nullable
  - `volume_tier` string, nullable
  - `price_per_sms_mad` number, nullable
  - `checkout_url` string, uri
  - `instructions` object

## Other responses

- `400`: Invalid amount, pack, or payment method
- `503`: Requested payment method is not configured. Configure the missing Stripe or bank-transfer fields before retrying.

---

[API](https://skmtc.dev/envoisms/apis/envoisms-ma-api.md) · [All operations](https://skmtc.dev/envoisms/apis/envoisms-ma-api/llms.txt) · [OpenAPI document](https://skmtc.dev/envoisms/apis/envoisms-ma-api/revisions/662db074bd86?raw)
