# Reseller onboarding QA developer API reference

> Generated from the public developer-only OpenAPI contract. Narrative guides explain purchase recovery and current rental restrictions.

Contract SHA256: `88ac595132bc4b1939f34de72c61327e8a0849ec5a43fb788ee22ded9459dc51`. Release date: 2026-10-13.

Base: `https://onboarding-qa.textverified.org/api/v1/developer`; reseller keys use their own store origin. Authenticate with `X-API-Key` or `Authorization: Bearer`. IDs are returned by the catalog or order API. Durations are milliseconds; prices are USD decimal strings. Every Phone Carrier Lookup API request costs USD0.05 and requires a persisted Idempotency-Key; it never consumes the dashboard free allowance.

SMS purchases require a saved `Idempotency-Key` and `maxPrice`. Proxy purchases require a current catalog offerKey and a saved Idempotency-Key; renewals are available only when the proxy supports them. Persist request keys for connect and reset too. See the proxy chapter for capability, connection-port and recovery details. Reconcile timeouts through purchase attempts. Rental `autoRenew`/`alwaysOn` creation options in the schema are currently rejected; auto-renew consent is dashboard-only. See [rentals](https://onboarding-qa.textverified.org/en/store-docs/rentals) and [retry handling](https://onboarding-qa.textverified.org/en/store-docs/errors-and-retries).

## Operations

### `POST /tools/phone-carrier-lookup`

Look up a phone carrier for USD0.05 from the API key account wallet

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| idempotency-key | header | yes | string |  |
| Idempotency-Key | header | yes | string | Reuse the same key and number for retries. A replay is not charged again. |

JSON body: `PhoneLookupDto`.

Response `200`: `PhoneLookupResponseDto`.

### `GET /tools/phone-carrier-lookup/{key}`

Recover an API lookup result without another charge (24-hour result retention)

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| key | path | yes | string |  |

Response `200`: `PhoneLookupResponseDto`.

### `GET /balance`

Get the balance of the account bound to this key

Response `200`: `DeveloperBalanceDto`.

### `GET /services`

Browse services and current account prices

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| page | query | no | number |  |
| pageSize | query | no | number |  |
| name | query | no | string |  |
| type | query | yes | string (otp, rent) |  |
| countryCode | query | no | string |  |
| inStock | query | no | boolean |  |

Response `200`: `GetListServicesDto`.

### `GET /services/{serviceId}/durations`

Get available terms, stock and exact purchase prices

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| serviceId | path | yes | string |  |
| areaCode | query | no | string | Optional US area code; quote includes a one-time $1 fee per number |
| carrier | query | no | string (att, tmobile) | Carrier choice for US Unlimited rentals |
| countryCode | query | yes | string |  |
| providerId | query | no | string |  |
| kind | query | no | string (otp, rent) |  |

Response `200`: `GetListProviderServiceDurations`.

### `GET /verifications`

RetailDeveloperController_verifications

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| page | query | no | number |  |
| pageSize | query | no | number |  |
| view | query | no | string (active, history) | Active shows reserved orders; history shows completed, cancelled or expired orders. |
| number | query | no | string |  |
| status | query | no | string (reserved, successful, timeout, canceled, expired) |  |
| countryId | query | no | string |  |

Response `200`: `GetListVerificationsDto`.

### `POST /verifications`

Buy an OTP using an exact quote and an idempotency key

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| idempotency-key | header | yes | string |  |
| Idempotency-Key | header | yes | string | Reuse this key for retries of one purchase (8–128 letters, digits, underscores or hyphens). |

JSON body: `DeveloperCreateVerificationDto`.

Response `200`: `CreateOrderResult`.

### `GET /verifications/{id}`

RetailDeveloperController_verification

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| id | path | yes | string |  |

Response `200`: `GetVerificationDto`.

### `GET /verifications/{id}/messages`

RetailDeveloperController_verificationMessages

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| id | path | yes | string |  |
| page | query | no | number |  |
| pageSize | query | no | number |  |
| view | query | no | string (active, history) | Active shows reserved orders; history shows completed, cancelled or expired orders. |
| number | query | no | string |  |
| status | query | no | string (reserved, successful, timeout, canceled, expired) |  |
| countryId | query | no | string |  |

Response `200`: `GetListVerificationMessagesDto`.

### `POST /verifications/{id}/cancel`

RetailDeveloperController_cancelVerification

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| id | path | yes | string |  |

Response `200`: empty body.

### `GET /rentals`

RetailDeveloperController_rentals

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| page | query | no | number |  |
| pageSize | query | no | number |  |
| view | query | no | string (active, history) | Active shows reserved orders; history shows completed, cancelled or expired orders. |
| number | query | no | string |  |
| status | query | no | string (reserved, successful, timeout, canceled, expired) |  |
| countryId | query | no | string |  |

Response `200`: `GetListRentalNumbersDto`.

### `POST /rentals`

RetailDeveloperController_rent

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| idempotency-key | header | yes | string |  |
| Idempotency-Key | header | yes | string |  |

JSON body: `DeveloperRentNumberDto`.

Response `200`: `CreateOrderResult`.

### `GET /rentals/{id}`

RetailDeveloperController_rental

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| id | path | yes | string |  |

Response `200`: `GetRentalNumberDto`.

### `GET /rentals/{id}/messages`

RetailDeveloperController_rentalMessages

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| id | path | yes | string |  |
| page | query | no | number |  |
| pageSize | query | no | number |  |
| view | query | no | string (active, history) | Active shows reserved orders; history shows completed, cancelled or expired orders. |
| number | query | no | string |  |
| status | query | no | string (reserved, successful, timeout, canceled, expired) |  |
| countryId | query | no | string |  |

Response `200`: `GetListRentalMessagesDto`.

### `POST /rentals/{id}/cancel`

RetailDeveloperController_cancelRental

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| id | path | yes | string |  |

Response `200`: empty body.

### `GET /purchase-attempts/{key}`

Inspect a purchase attempt after a timeout before issuing another purchase

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| key | path | yes | string |  |

Response `200`: `DeveloperPurchaseAttemptDto`.

### `GET /proxy-products`

List mobile proxy products and durations

Response `200`: `ProxyProductListDto`.

### `GET /proxy-locations`

List mobile proxy locations

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| pricingCode | query | no | string | Return coverage for the selected currently available pricing option. |

Response `200`: `ProxyLocationListDto`.

### `GET /proxies`

List this account's proxies

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| status | query | no | string |  |

Response `200`: `array of ProxyDto`.

### `POST /proxies`

Buy a mobile proxy from wallet balance

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| idempotency-key | header | yes | string |  |
| Idempotency-Key | header | yes | string | Reuse the same key and body for retries; never charged twice. |

JSON body: `BuyProxyDto`.

Response `201`: `ProxyDto`.

### `GET /proxy-requests/{key}`

RetailDeveloperProxiesController_request

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| key | path | yes | string |  |

Response `200`: `ProxyDto`.

### `GET /proxies/{proxyId}`

Get one proxy

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| proxyId | path | yes | string |  |

Response `200`: `ProxyDto`.

### `GET /proxies/{proxyId}/locations`

List available locations for a proxy

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| proxyId | path | yes | string |  |

Response `200`: `ProxyLocationListDto`.

### `POST /proxies/{proxyId}/connect`

Connect a proxy to a US location

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| proxyId | path | yes | string |  |
| idempotency-key | header | yes | string |  |
| Idempotency-Key | header | no | string | Persist one key for this control request and reuse it after an uncertain response. |

JSON body: `ConnectProxyDto`.

Response `200`: `ProxyDto`.

### `POST /proxies/{proxyId}/disconnect`

Disconnect a proxy from its current location

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| proxyId | path | yes | string |  |

Response `200`: `ProxyDto`.

### `POST /proxies/{proxyId}/reset`

Rotate the proxy IP (fast or hard modem reset)

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| proxyId | path | yes | string |  |
| idempotency-key | header | yes | string |  |
| Idempotency-Key | header | no | string | Persist one key for this control request and reuse it after an uncertain response. |

JSON body: `ResetProxyDto`.

Response `200`: `ProxyDto`.

### `POST /proxies/{proxyId}/fingerprint`

Set the TCP fingerprint for a proxy

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| proxyId | path | yes | string |  |

JSON body: `SetProxyFingerprintDto`.

Response `200`: `ProxyDto`.

### `POST /proxies/{proxyId}/renew`

Renew an active proxy for the same duration

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| proxyId | path | yes | string |  |
| idempotency-key | header | yes | string |  |
| Idempotency-Key | header | yes | string |  |

Response `200`: `ProxyDto`.

## Schemas

### PhoneLookupDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| number | yes | string | International phone number including country code. Spaces, parentheses and hyphens are accepted. |

### PhoneLookupResultDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| valid | yes | boolean |  |
| number | yes | string |  |
| internationalFormat | yes | string \| null |  |
| nationalFormat | yes | string \| null |  |
| carrier | yes | string \| null |  |
| lineType | yes | string \| null |  |
| countryCode | yes | string \| null |  |
| countryName | yes | string \| null |  |
| location | yes | string \| null |  |
| timezones | yes | array of string |  |

### PhoneLookupResponseDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| id | yes | string |  |
| result | yes | PhoneLookupResultDto |  |
| charged | yes | string |  |
| free | yes | boolean | Always false for API requests. |
| replayed | yes | boolean | True when returning the saved result of an identical request, with no additional charge. |

### DeveloperBalanceDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| accountId | yes | string |  |
| balance | yes | string |  |
| currency | yes | string |  |

### GetRentalAreaCodeDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| areaCode | yes | string |  |
| state | yes | string |  |

### GetProviderServiceDurationOptionDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| code | yes | string |  |
| price | yes | string |  |

### GetProviderServiceDurationDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| areaCodePrice | no | string | Total price per number with a custom area code, including the $1 selection fee |
| carrier | no | string (att, tmobile) |  |
| options | yes | array of GetProviderServiceDurationOptionDto |  |
| id | yes | string |  |
| duration | yes | number |  |
| human | yes | string |  |
| count | yes | number |  |
| price | yes | string |  |

### GetServiceDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| cachedPlans | no | object |  |
| category | no | string (ai, apple, applications, backgroundServices, banks, betting, businessServices, cashback, creditCardsLoans, creditUnion, crypto, datingApps, emailServices, financial, fuelServices, gambling, games, gifts, googleServices, infrastructure, investment, kycVerification, marketing, media, merchants, messengers, microsoft, musicStreaming, others, paypal, proxy, realEstate, reviews, rewards, samsung, services, socialMedia, sport, stores, surveys, taxServices, telecommunications, tickets, unlisted, vcc) |  |
| id | yes | string |  |
| name | yes | string |  |
| count | no | number |  |
| minPrice | no | string |  |
| maxPrice | no | string |  |
| income | no | string |  |
| status | yes | object |  |
| markupKind | yes | object |  |
| markupValue | yes | string \| null |  |
| isFavorite | no | boolean |  |
| code | yes | string |  |
| icon | yes | string \| null |  |
| type | yes | string |  |

### GetListServicesDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| items | yes | array of GetServiceDto |  |
| page | yes | number |  |
| pageSize | yes | number |  |
| totalItems | yes | number |  |
| totalPages | yes | number |  |

### GetListProviderServiceDurations

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| items | yes | array of GetProviderServiceDurationDto |  |
| page | yes | number |  |
| pageSize | yes | number |  |
| totalItems | yes | number |  |
| totalPages | yes | number |  |

### OrderServiceDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| id | yes | string |  |
| name | yes | string |  |
| count | no | number |  |
| minPrice | no | string |  |
| maxPrice | no | string |  |
| income | no | string |  |
| isFavorite | no | boolean |  |
| code | yes | string |  |
| icon | yes | string \| null |  |
| type | yes | string |  |

### OrderProviderDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| id | yes | string |  |
| name | yes | string |  |

### GetCountryDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| id | yes | string |  |
| code | yes | string |  |

### GetVerificationDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| capability | yes | string (sms, voice, smsAndVoiceCombo) |  |
| id | yes | string |  |
| number | yes | string |  |
| duration | yes | number |  |
| description | yes | string \| null |  |
| totalPrice | yes | string |  |
| code | yes | string \| null |  |
| sms | yes | string \| null |  |
| status | yes | string |  |
| isTransfering | yes | boolean |  |
| isCancelable | yes | boolean |  |
| service | yes | object \| null |  |
| provider | yes | OrderProviderDto |  |
| country | yes | GetCountryDto |  |
| expiresAt | yes | string |  |
| createdAt | yes | string |  |
| updatedAt | yes | string |  |

### GetListVerificationsDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| items | yes | array of GetVerificationDto |  |
| page | yes | number |  |
| pageSize | yes | number |  |
| totalItems | yes | number |  |
| totalPages | yes | number |  |

### DeveloperCreateVerificationDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| capability | no | string (sms, voice) |  |
| duration | yes | number | Duration in ms |
| serviceId | yes | string |  |
| countryCode | yes | string |  |
| providerId | no | string |  |
| description | no | string |  |
| maxPrice | yes | string | Maximum total charge in USD, taken from the terms quote |

### CreateOrderResult

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| id | yes | string |  |
| number | yes | string |  |
| expiresAt | yes | string |  |
| createdAt | yes | string |  |

### GetVerificationMessageDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| id | yes | string |  |
| text | yes | string |  |
| code | yes | string \| null |  |
| verification | yes | GetVerificationDto |  |
| createdAt | yes | string |  |

### GetListVerificationMessagesDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| items | yes | array of GetVerificationMessageDto |  |
| page | yes | number |  |
| pageSize | yes | number |  |
| totalItems | yes | number |  |
| totalPages | yes | number |  |

### GetRentalNumberDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| capability | yes | string (sms, voice, smsAndVoiceCombo) |  |
| id | yes | string |  |
| number | yes | string |  |
| duration | yes | number |  |
| description | yes | string \| null |  |
| totalPrice | yes | string |  |
| code | yes | string \| null |  |
| sms | yes | string \| null |  |
| status | yes | string |  |
| isTransfering | yes | boolean |  |
| isCancelable | yes | boolean |  |
| shouldRenew | yes | boolean |  |
| isAutoRenewEnabled | yes | boolean | Reseller onboarding QA wallet-funded renewal preference; independent of supplier native auto-renew |
| canAutoRenew | yes | boolean | Whether this active rental supports wallet-funded auto-renew |
| supplierAutoRenewStatus | yes | string (unavailable, not_applicable) | Native supplier auto-renew cannot be read through the supported Quackr API; unavailable is not an off state |
| service | yes | object \| null |  |
| provider | yes | OrderProviderDto |  |
| country | yes | GetCountryDto |  |
| expiresAt | yes | string |  |
| createdAt | yes | string |  |
| updatedAt | yes | string |  |

### GetListRentalNumbersDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| items | yes | array of GetRentalNumberDto |  |
| page | yes | number |  |
| pageSize | yes | number |  |
| totalItems | yes | number |  |
| totalPages | yes | number |  |

### DeveloperRentNumberDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| areaCode | no | string | Optional US area code for T-Mobile Unlimited SMS rentals; adds $1 per number at purchase |
| carrier | no | string (att, tmobile) | Carrier choice for US Unlimited rentals |
| capability | no | string (sms, voice) |  |
| options | no | array of string (alwaysOn, autoRenew) |  |
| duration | yes | number | Duration in ms |
| serviceId | yes | string |  |
| countryCode | yes | string |  |
| providerId | no | string |  |
| description | no | string |  |
| maxPrice | yes | string | Maximum total charge in USD, taken from the terms quote |

### GetRentalMessageDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| id | yes | string |  |
| text | yes | string |  |
| code | yes | string \| null |  |
| rental | yes | GetRentalNumberDto |  |
| createdAt | yes | string |  |

### GetListRentalMessagesDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| items | yes | array of GetRentalMessageDto |  |
| page | yes | number |  |
| pageSize | yes | number |  |
| totalItems | yes | number |  |
| totalPages | yes | number |  |

### DeveloperPurchaseAttemptDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| key | yes | string |  |
| status | yes | string |  |
| activationId | yes | string \| null |  |
| recoveryState | yes | string \| null |  |
| error | yes | string \| null |  |
| createdAt | yes | string |  |

### ProxyPricingDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| coverage | no | object \| null |  |
| offerKey | yes | string |  |
| renewalSupported | yes | boolean |  |
| fingerprintSupported | yes | boolean |  |
| code | yes | string |  |
| label | yes | string |  |
| priceUsd | yes | string |  |
| periodType | yes | string |  |
| periodDuration | yes | number |  |

### ProxyProductDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| code | yes | string |  |
| name | yes | string |  |
| description | yes | object \| null |  |
| enabled | yes | boolean |  |
| pricingOptions | yes | array of ProxyPricingDto |  |

### ProxyProductListDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| products | yes | array of ProxyProductDto |  |

### ProxyLocationDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| city | no | string |  |
| stateCode | no | object \| null |  |
| carrier | no | object \| null |  |
| id | yes | string |  |
| location | yes | string |  |
| available | yes | number \| null |  |

### ProxyLocationListDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| locations | yes | array of ProxyLocationDto |  |

### ProxyDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| socks5Port | yes | object \| null |  |
| capabilities | yes | object |  |
| id | yes | string |  |
| name | yes | object |  |
| status | yes | string |  |
| productName | yes | string |  |
| pricingLabel | yes | string |  |
| pricingCode | yes | string |  |
| renewalPriceUsd | yes | string |  |
| renewalStatus | yes | string \| null (pending, completed, failed) |  |
| amountUsd | yes | string |  |
| ip | yes | object \| null |  |
| port | yes | object \| null |  |
| username | yes | object \| null |  |
| password | yes | object \| null |  |
| locationId | yes | object \| null |  |
| fingerprint | yes | string |  |
| expiresAt | yes | object \| null |  |
| error | yes | object \| null |  |
| createdAt | yes | string |  |

### BuyProxyDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| offerKey | no | string | Offer key from the current proxy catalog. Required when the available plan changes. |
| pricingCode | yes | string (hour_3, hour_1, day_1, day_2, week_1, month_1) |  |
| locationId | no | string | Connect to this location after provisioning |

### ConnectProxyDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| locationId | yes | string |  |

### ResetProxyDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| mode | yes | string (fast, hard) |  |

### SetProxyFingerprintDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| fingerprint | yes | string (none, linux, macos, windows) |  |

### ProxyCoverageDto

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| locationCount | yes | number |  |
| cityCount | yes | number | Distinct labeled city/state areas among listed choices. |
| stateCodes | yes | array of string |  |
| carriers | yes | array of string |  |

[Live OpenAPI JSON](https://onboarding-qa.textverified.org/api/v1/developer/openapi.json) · [Interactive docs](https://onboarding-qa.textverified.org/api/v1/developer/docs) · [Documentation index](https://onboarding-qa.textverified.org/en/store-docs/index)
