# Rentals, Unlimited and cancellation

Browse `GET /services?type=rent&countryCode=US`, then request `/services/{serviceId}/durations?countryCode=US&kind=rent`. Use the returned IDs, milliseconds and exact price. Available services and terms depend on stock and the account's store catalog.

**Unlimited** is a catalog service for a general rental, rather than a duration or a special API flag. Find its service ID in the rental catalog and quote it like any other service. The number can receive supported SMS during its active rental term. Service availability is not a guarantee that every external app will accept a number.

Buy with `POST /rentals`, a required `Idempotency-Key`, and `serviceId`, `countryCode`, `duration` and `maxPrice`. Optional fields are `providerId` and `description`. Do not request `alwaysOn` or `autoRenew` purchase options: these are currently rejected, although the OpenAPI DTO lists their names.

## Cancellation

`POST /rentals/{id}/cancel` cancels a rental only when the server considers it eligible. The cancellation window is **5 through 120 minutes after purchase, inclusive, provided no SMS has been received**. Read the order's `isCancelable` before offering cancellation; the server checks again when the request arrives. Pending transfers or renewals and provider restrictions can also prevent it.

A successful cancellation returns HTTP 200 with an empty body. Refund accounting follows confirmed supplier cancellation and the original payer. An ambiguous supplier outcome needs reconciliation; do not promise a refund before confirmation. After a timeout, read the order before retrying.

OTP verifications use `/verifications/{id}/cancel`; eligibility is also server-controlled through `isCancelable`. The rental's 5–120-minute rule must not be assumed to apply to OTP orders.

## Auto-renew

Eligible active rentals expose `canAutoRenew` and `isAutoRenewEnabled`. SMS.Red’s dashboard lets the customer set auto-renew; it is off by default. Eligible Quackr rentals use wallet-funded renewal for the same term, with the original purchase price as ceiling. The renewal worker checks each minute and starts renewal 15 minutes before expiry. Insufficient funds or a higher price disables renewal.

The public developer API and MCP currently have **no auto-renew toggle, renewal or reactivation operation**. Read these fields as the current state, not as a promise that renewal will succeed. Use the dashboard to change consent. Do not call undocumented supplier or dashboard endpoints through an API key.

[Documentation index](https://sms.red/docs/ai/index.md)
