---
title: "Upgrade a listing to a paid tier"
method: POST
path: "/api/upgrade"
tags: ["Billing"]
---

# Upgrade a listing to a paid tier

`POST /api/upgrade`

## Request

- Base URL: `https://curlship.com`
- URL: `https://curlship.com/api/upgrade`
- Auth: none declared

Returns a hosted checkout URL for the chosen tier. The listing must already exist. Rate limit: 30 upgrade requests/hour per IP.

## Request body

- object
  - `url` string, uri, required
  - `tier` 'bronze' | 'bronze_lifetime' | 'silver' | 'gold' | 'platinum', required: bronze_lifetime is a one-time $30 purchase; the listing stays on bronze and never expires.

## Response `200`

Checkout URL created

- object
  - `ok` boolean
  - `checkout_url` string, uri

## Other responses

- `400`: Invalid tier
- `404`: Listing not found
- `409`: Listing already has Bronze Lifetime
- `429`: Rate limit exceeded. Retry-After is the wait in seconds. RateLimit-Policy names the window that was hit. RateLimit repeats that name with r=0 and t equal to Retry-After. Windows: submit 10 per 3600s, verify 30 per 3600s, checkout 30 per 3600s, edit 5 per 3600s per IP, edit-listing 3 per 86400s per listing.
- `503`: Payments not configured for this tier

---

[API](https://skmtc.dev/curlship/apis/curlship-api.md) · [All operations](https://skmtc.dev/curlship/apis/curlship-api/llms.txt) · [OpenAPI document](https://skmtc.dev/curlship/apis/curlship-api/revisions/96fedc05adda?raw)
