Operations 3
1 of 3 operations are conformant: apis.io called them with no credentials and the responses matched this contract. Checked 2026-11-12. how this works · status file
1 of 3 operations are conformant: apis.io called them with no credentials and the responses matched this contract. Checked 2026-11-12. how this works · status file
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/curlship-com:curlship-com-billing-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Curlship Com Billing API
version: 1.0.0
contact:
name: CurlShip Support
email: support@curlship.com
url: https://curlship.com
license:
name: Proprietary
description: 'Operations tagged Billing across 2 of this provider''s published API definitions: curlship-com-openapi.json, curlship-com-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://curlship.com
description: Production
tags:
- name: Billing
description: Paid-tier upgrades.
paths:
/api/upgrade:
post:
tags:
- Billing
summary: Upgrade a listing to a paid tier
description: 'Returns a hosted checkout URL for the chosen tier. The listing must already exist. Rate limit: 30 upgrade requests/hour per IP.'
operationId: upgradeListing
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- url
- tier
properties:
url:
type: string
format: uri
example: https://yourapp.com
tier:
type: string
enum:
- bronze
- bronze_lifetime
- silver
- gold
- platinum
description: bronze_lifetime is a one-time $30 purchase; the listing stays on bronze and never expires.
example:
url: https://yourapp.com
tier: gold
responses:
'200':
description: Checkout URL created
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
example: true
checkout_url:
type: string
format: uri
'409':
description: Listing already has Bronze Lifetime
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'400':
description: Invalid tier
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Listing not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: '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.'
headers:
Retry-After:
description: Seconds to wait before retrying.
schema:
type: integer
minimum: 1
RateLimit-Policy:
description: 'The window that was hit. Example: "submit";q=10;w=3600.'
schema:
type: string
RateLimit:
description: 'Remaining quota. Example: "submit";r=0;t=120.'
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Payments not configured for this tier
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
servers:
- url: https://curlship.com
description: Production
/api/featured:
get:
tags:
- Billing
summary: The Featured auction spot
description: 'One listing sits above Platinum: the Featured spot, held by whoever paid the most (one-time payment). Returns the current holder (or `null`) and what taking the spot costs right now — the holder''s price plus $1, or $50 when nobody holds it.'
operationId: getFeatured
responses:
'200':
description: Current holder and next bid
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
example: true
featured:
oneOf:
- $ref: '#/components/schemas/Listing'
- type: 'null'
description: The holding listing plus `amount_usd` (what they paid), or null.
next_bid_usd:
type: number
example: 50
next_bid_cents:
type: integer
example: 5000
currency:
type: string
example: USD
example:
ok: true
featured: null
next_bid_usd: 50
next_bid_cents: 5000
currency: USD
servers:
- url: https://curlship.com
description: Production
/api/feature:
post:
tags:
- Billing
summary: Bid on the Featured spot
description: 'Returns a hosted checkout URL for a Featured bid. The listing must already exist; its registered email gets billed. `amount_usd` is optional and defaults to the current minimum (holder''s price + $1, or $50 with no holder); a lower bid is refused with 409. Pay and the spot is yours — always dofollow, no subscription — until someone outbids you. **No refund when outbid**: that is the game. Rate limit: 30 checkout requests/hour per IP.'
operationId: bidFeatured
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- url
properties:
url:
type: string
format: uri
example: https://yourapp.com
amount_usd:
type: number
example: 51
description: 'Your bid in USD, whole cents at most. Omit to bid the current minimum. Ceiling: $100,000.'
example:
url: https://yourapp.com
amount_usd: 51
responses:
'200':
description: Checkout URL created
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
example: true
checkout_url:
type: string
format: uri
amount_usd:
type: number
example: 51
amount_cents:
type: integer
example: 5100
message:
type: string
'400':
description: Unreadable URL, non-numeric amount, or a bid above the $100,000 ceiling
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Listing not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: Bid below the current minimum (the response carries required_usd and current_usd), or the listing is not active
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Error'
- type: object
properties:
required_usd:
type: number
example: 51
current_usd:
type: number
example: 50
'429':
description: '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.'
headers:
Retry-After:
description: Seconds to wait before retrying.
schema:
type: integer
minimum: 1
RateLimit-Policy:
description: 'The window that was hit. Example: "submit";q=10;w=3600.'
schema:
type: string
RateLimit:
description: 'Remaining quota. Example: "submit";r=0;t=120.'
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Featured product not configured
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
servers:
- url: https://curlship.com
description: Production
components:
schemas:
Listing:
type: object
properties:
id:
type: integer
example: 2076
url:
type: string
format: uri
example: https://yourapp.com/
link:
type: string
format: uri
example: https://yourapp.com/?ref=curlship
description: The URL a visitor is actually sent to — url plus tracking params. Free listings carry ?ref=curlship; paid ones carry the owner's utm_*/ref params (set via POST /api/edit-request tracking).
tier:
type: string
enum:
- free
- bronze
- silver
- gold
- platinum
title:
type:
- string
- 'null'
example: YourApp — ship faster
description:
type:
- string
- 'null'
image:
type:
- string
- 'null'
format: uri
has_badge:
type: boolean
description: True if a dofollow link back to curlship.com was found on the site.
created_at:
type:
- string
- 'null'
format: date-time
example: '2026-10-12T09:04:05Z'
description: When the listing was created, UTC.
category:
oneOf:
- type: object
properties:
slug:
type: string
example: developer-tools
description: The leaf slug when classified that deep, else the group.
name:
type: string
example: Developer tools
group:
type: string
example: developer-tools
description: The top-level group this listing belongs to.
- type: 'null'
description: The listing's category, or null while it is unclassified. Set by the off-server classifier — submitters cannot choose one.
Error:
type: object
properties:
ok:
type: boolean
example: false
error:
type: string
example: url is required and must start with http
required:
- ok
- error
externalDocs:
description: Badge guide & instant verify
url: https://curlship.com/badge
x-refined-from:
- curlship-com-openapi.json
- curlship-com-openapi.yml