---
title: "Paid reuse of an expired or completed verification"
method: POST
path: "/verifications/{id}/reuse/paid"
tags: ["Verifications"]
---

# Paid reuse of an expired or completed verification

`POST /verifications/{id}/reuse/paid`

## Request

- Base URL: `https://dashboard.voidmob.com/api/v1`
- URL: `https://dashboard.voidmob.com/api/v1/verifications/{id}/reuse/paid`
- Auth: HTTP bearer

Reclaims a number from the available pool by charging a fixed
`paid_reuse_price_cents` (currently 50 = $0.50). The charge happens
atomically; on any failure (number left the pool, eligibility closed)
the wallet is refunded and the call returns `409 REUSE_NOT_ALLOWED`.

You **must** send `accept_charge_cents` in the body matching the
current `paid_reuse_price_cents` - this is an explicit consent guard
against accidental charges. Read the value off the verification
resource instead of hardcoding.

After a paid reuse `allow_paid_reuse` flips to `false`; it re-arms once
the number reaches the next eligible state transition (the reused rental
expires, is confirmed, or receives a message), at which point a further
paid reuse becomes available again - best-effort.

Per-rental cooldown is 30 seconds. LTR rentals must re-rent through
the create endpoint instead.

## Path parameters

- `id` string, required: Opaque verification (SMS rental) identifier.

## Headers

- `Idempotency-Key` string, required

## Request body

- PaidReuseRequest
  - `accept_charge_cents` integer, required: Must equal the current `paid_reuse_price_cents` from the verification resource. Explicit consent guard against accidental charges from misrouted requests.

## Response `200`

Paid reuse successful. `charged_reuse_cents` reflects what was deducted.

- object
  - `success` true, required
  - `data` object, required
    - `verification` Verification, required
      - `id` string, required: Opaque verification (SMS rental) identifier.
      - `display_id` string, nullable: Human-readable order identifier for display in dashboards and receipts (e.g. `SMS7K4P2N`). Null for legacy rentals created before this field was introduced.
      - `status` 'waiting_for_code' | 'code_received' | 'cancelled' | 'expired' | 'failed', required: `waiting_for_code` - number is live (up to 15 minutes, see `expires_at`), no SMS yet. `code_received` - at least one SMS arrived. `cancelled` - the price was refunded, either because you cancelled or because the window closed with no SMS (automatic refund). `expired` - the window closed with no SMS and no automatic refund (services marked non-refundable, or rare cases where the refund could not be applied automatically). `failed` is reserved and not emitted.
      - `phone_number` string, required: E.164 phone number (with leading +).
      - `service_id` string: Opaque public service identifier.
      - `service_name` string, required
      - `charged_price_cents` integer, required: Actual amount deducted from the wallet for this verification.
      - `pricing_source` 'regular' | 'category' | 'override' | 'promo': Attribution for the charged price. Omitted for legacy rentals. "promo" means a redeemed service-discount code priced this purchase.
      - `expires_at` string, date-time, required
      - `can_cancel` boolean, required: Whether the rental is currently cancellable. Becomes false once a code arrives or the cancel window closes.
      - `created_at` string, date-time, required
      - `code` string: The received SMS code. Present only when `status = code_received`.
      - `code_received_at` string, date-time: When the code arrived. Present only when `status = code_received`.
      - `reuse_counter` integer, required: Number of user-initiated reuses (free or paid) on this number. Starts at 0. Automatic reuses are not counted.
      - `allow_reuse` boolean, required: Free reuse is currently available.
      - `allow_paid_reuse` boolean, required: Paid reuse is currently available. STR rentals only.
      - `paid_reuse_price_cents` integer, required: Fixed price for one paid reuse.
      - `charged_reuse_cents` integer: Set on the response of a successful POST /reuse/paid. Not present otherwise.
      - `refunded_cents` integer: Set on the response of a successful POST /cancel. Not present otherwise.

## Other responses

- `400`: 400 - Request failed validation.
- `401`: 401 - Authentication required.
- `402`: 402 - Your wallet balance is too low for this purchase.
- `404`: 404 - Verification not found.
- `409`: 409 - Reuse is not available for this verification. Check allow_reuse / allow_paid_reuse on the verification before calling.
- `422`: 422 - This action is not supported.
- `429`: 429 - Too many reuse attempts on this verification. Try again shortly.

---

[API](https://skmtc.dev/voidmob/apis/voidmob-public-api.md) · [All operations](https://skmtc.dev/voidmob/apis/voidmob-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/voidmob/apis/voidmob-public-api/revisions/066023313ebe?raw)
