---
title: "Request verification code"
method: POST
path: "/v1/purchases/{purchase_id}/request-code"
tags: ["Purchases"]
---

# Request verification code

`POST /v1/purchases/{purchase_id}/request-code`

Requests verification code and password from provider. Updates purchase status to SUCCESS.

**Idempotent Operation.** Safe to retry on network errors - will not generate duplicate codes.

**Behavior.**
- First call: Fetches code from provider, updates status to `SUCCESS`
- Subsequent calls: Returns conflict error (use `GET /purchases/:id` to retrieve existing code)

**Provider timeout.** Code retrieval may take 5-30 seconds depending on provider availability.

**Webhook notification.** Optionally provide `callback_url` to receive a POST webhook when code is retrieved. See [Webhooks](#tag/webhooks) section for payload structure and **Models** section for `WebhookSuccessPayload` / `WebhookFailedPayload` schemas.

## Path parameters

- `purchase_id` integer, required — Unique purchase identifier.

## Request body

- object
  - `callback_url` string, uri — URL to receive webhook notification when code is received. POST request will be sent with either `WebhookSuccessPayload` or `WebhookFailedPayload`. **Retry policy.** If your endpoint does not return HTTP 200, webhook will be retried up to 3 times with delays: immediately, after 10 seconds, after 30 seconds. Any non-200 response triggers retry.

## Response `200`

Response for status 200

- object
  - `purchase` object, required
    - `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).
  - `code_request` object, required
    - `status` 'not_requested' | 'pending' | 'success' | 'failed', required — Current status of the code request
    - `attempt` integer, required — Current attempt number
    - `max_attempts` integer, required — Maximum number of attempts
    - `next_attempt_at` string, nullable, required — ISO timestamp of next attempt (null if not scheduled)
    - `retry_after` integer, nullable, required — Seconds until next attempt (null if not scheduled)

---

[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)
