---
title: "Create new purchase"
method: POST
path: "/v1/purchases/"
tags: ["Purchases"]
---

# Create new purchase

`POST /v1/purchases/`

Creates a new purchase for specified country. Deducts balance immediately and returns purchase with `PENDING` status.

**Purchase Creation Process**
1. Validates country availability and user balance.
2. Reserves account from provider.
3. Atomically deducts balance and creates purchase record.
4. Returns purchase in `PENDING` status.

**Next steps.** Call `POST /purchases/:id/request-code` to retrieve login credentials.

**Country availability.** Accounts may become unavailable between checking `/accounts` and creating purchase. Always handle availability errors gracefully.

## Request body

- object
  - `country_code` string, required — ISO 3166-1 alpha-2 country code.

## Response `200`

Response for status 200

- object
  - `id` integer, required — Unique purchase identifier.
  - `country_code` string, required — ISO 3166-1 alpha-2 country code.
  - `display_name` object, required
    - `ru` string, required — Name in Russian.
    - `en` string, required — Name in English.
  - `phone_number` string, nullable, required — **E.164 International Format.** Phone number with country code prefix (e.g., `+12025550123` for US, `+79991234567` for Russia). **Usage.** This is your Telegram account login. Use it with `verification.code` and `verification.password` to access the account.
  - `price` object, required — **Final Price After Discount.** The actual amount deducted from your balance, with your personal discount already applied. **To see pricing breakdown before purchase.** Check `GET /accounts/:country_code` which shows both discounted price and original `base_price`. **Discount eligibility.** Based on your total successful purchase count. Higher volume = bigger discounts.
    - `amount` string, required — Monetary amount as a string with up to 2 decimal places.
    - `currency_code` string, required — ISO 4217 currency code.
  - `status` 'PENDING' | 'SUCCESS' | 'ERROR' | 'REFUND', required — **Purchase Status Lifecycle.** `PENDING` (initial) → `SUCCESS` (after code request) or `ERROR` (provider failure). Any status can transition to `REFUND` via admin action. **Important.** Status is immutable once set to `SUCCESS`, `ERROR`, or `REFUND`. **Filter options** - `PENDING` - code not requested. - `SUCCESS` - code ready. - `ERROR` - provider failed. - `REFUND` - money returned.
  - `purchase_type` 'SINGLE' | 'BULK' | 'ADMIN', required — Type of purchase: SINGLE (regular), BULK (batch purchase), ADMIN (admin deduction)
  - `verification` object, nullable, required — **Verification Credentials.** Login credentials for the purchased Telegram account. Initially `null` after purchase creation. **Availability.** Populated after calling `POST /purchases/:id/request-code`. Once received, credentials are permanent and cannot be re-requested. **Security.** Verification data is only visible to the purchase owner.
    - `code` string, required — Verification code for account.
    - `password` string, required — Account password.
    - `received_at` string, required — **Code Retrieval Timestamp.** Marks when verification code was successfully fetched from the provider (not when purchase was created). **Example timeline.** - `created_at`: `2024-11-19T10:00:00Z` (purchase created) - `received_at`: `2024-11-19T10:05:02Z` (code requested 5 minutes later) **Note.** These timestamps may be identical if code is requested immediately after purchase.
  - `created_at` string, required — Purchase creation time in ISO 8601 format (UTC).

---

[API](https://skmtc.net/getmytg/apis/get-my-tg-api.md) · [All operations](https://skmtc.net/getmytg/apis/get-my-tg-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/getmytg/get-my-tg-api/versions/30f975c0d1e6/schema)
