Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
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.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/asap-cool:asap-cool-partners-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API 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: ASAP Platform Partners API
description: 'Public HTTP API for ASAP Platform (api.asap.cool).
All `/v1` responses are wrapped in a standard envelope. Success responses are `{ "data": , "meta": { "request_id", "next_cursor"?, "has_more"? } }` — the schema documented for each operation describes the inner `data` value. Errors are `{ "error": { "code", "message", "field"?, "request_id" } }`. Every response also carries an `X-Request-Id` header matching `meta.request_id` / `error.request_id`.'
license:
name: BUSL-1.1
version: 0.0.0
servers:
- url: https://api.asap.cool
description: Production
tags:
- name: Partners
description: 'Affiliation program: partner administration, the commission ledger, and monthly statements (read plus settle only — the ledger is fed exclusively by the accrual worker).'
paths:
/v1/partners:
get:
tags:
- Partners
summary: GET /v1/partners
operationId: listPartners
parameters:
- name: limit
in: query
description: Page size, 1..=100 (defaults to 50).
required: false
schema:
type:
- integer
- 'null'
format: int32
minimum: 0
responses:
'200':
description: Partners of the org, most recent first.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/PartnerView'
'401':
description: No active org.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
'403':
description: Missing partners:read scope.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
'422':
description: Invalid limit.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
security:
- api_key:
- partners:read
- session: []
post:
tags:
- Partners
summary: POST /v1/partners
operationId: createPartner
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreatePartnerRequest'
required: true
responses:
'200':
description: Partner created.
content:
application/json:
schema:
$ref: '#/components/schemas/CreatePartnerResponse'
'401':
description: No active org.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
'403':
description: Missing partners:write scope.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
'409':
description: Slug already taken (`conflict`).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
'422':
description: Invalid payout_method, slug, rate, threshold or duration.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
security:
- api_key:
- partners:write
- session: []
/v1/partners/{id}:
get:
tags:
- Partners
summary: GET /v1/partners/{id}
operationId: getPartner
parameters:
- name: id
in: path
description: Partner identifier.
required: true
schema:
type: string
format: uuid
responses:
'200':
description: The partner.
content:
application/json:
schema:
$ref: '#/components/schemas/PartnerView'
'401':
description: No active org.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
'403':
description: Missing partners:read scope.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
'404':
description: Not found or cross-org.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
security:
- api_key:
- partners:read
- session: []
patch:
tags:
- Partners
summary: PATCH /v1/partners/{id}
operationId: updatePartner
parameters:
- name: id
in: path
description: Partner identifier.
required: true
schema:
type: string
format: uuid
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdatePartnerRequest'
required: true
responses:
'200':
description: The updated partner.
content:
application/json:
schema:
$ref: '#/components/schemas/PartnerView'
'401':
description: No active org.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
'403':
description: Missing partners:write scope.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
'404':
description: Not found or cross-org.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
'409':
description: Slug already taken (`conflict`).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
'422':
description: Invalid payout_method, status, slug, rate, or `active` without contract_signed_at.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
security:
- api_key:
- partners:write
- session: []
/v1/partners/{id}/commissions:
get:
tags:
- Partners
summary: GET /v1/partners/{id}/commissions
operationId: listPartnerCommissions
parameters:
- name: id
in: path
description: Partner identifier.
required: true
schema:
type: string
format: uuid
- name: limit
in: query
description: Page size, 1..=100 (defaults to 50).
required: false
schema:
type:
- integer
- 'null'
format: int32
minimum: 0
responses:
'200':
description: The partner's full commission ledger, most recent collection first. Reversals carry a negative amount_cents.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/CommissionView'
'401':
description: No active org.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
'403':
description: Missing partners:read scope.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
'404':
description: Partner not found or cross-org.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
'422':
description: Invalid limit.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
security:
- api_key:
- partners:read
- session: []
/v1/partners/{id}/statements:
get:
tags:
- Partners
summary: GET /v1/partners/{id}/statements
operationId: listPartnerStatements
parameters:
- name: id
in: path
description: Partner identifier.
required: true
schema:
type: string
format: uuid
- name: limit
in: query
description: Page size, 1..=100 (defaults to 50).
required: false
schema:
type:
- integer
- 'null'
format: int32
minimum: 0
responses:
'200':
description: The partner's statements, most recent period first.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/StatementView'
'401':
description: No active org.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
'403':
description: Missing partners:read scope.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
'404':
description: Partner not found or cross-org.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
'422':
description: Invalid limit.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
security:
- api_key:
- partners:read
- session: []
/v1/partners/{id}/statements/{sid}/settle:
post:
tags:
- Partners
summary: POST /v1/partners/{id}/statements/{sid}/settle
description: 'Marks a *statement* settled. Never touches a commission row — the
ledger stays append-only, fed only by the worker.'
operationId: settlePartnerStatement
parameters:
- name: id
in: path
description: Partner identifier.
required: true
schema:
type: string
format: uuid
- name: sid
in: path
description: Statement identifier.
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Statement settled (or already was — idempotent).
content:
application/json:
schema:
$ref: '#/components/schemas/SettleResult'
'401':
description: No active org.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
'403':
description: Missing partners:write scope.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
'404':
description: Partner or statement not found, cross-org, or the statement does not belong to this partner.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBody'
security:
- api_key:
- partners:write
- session: []
components:
schemas:
SettleResult:
type: object
description: Body of a successful `POST .../settle`.
required:
- settled_now
- settled_at
properties:
settled_at:
type: string
description: The statement's own `settled_at`, present in both cases above.
settled_now:
type: boolean
description: '`true` when this call settled the statement; `false` when it was
already settled (idempotent — still a success).'
StatementView:
type: object
description: Public projection of a [`asap_module_partners::Statement`].
required:
- id
- partner_id
- period_start
- period_end
- total_cents
properties:
id:
type: string
format: uuid
description: Identifier.
partner_id:
type: string
format: uuid
description: Recipient partner.
period_end:
type: string
description: Period end, exclusive (RFC 3339).
period_start:
type: string
description: Period start, inclusive (RFC 3339).
sent_at:
type:
- string
- 'null'
description: Email dispatch instant (RFC 3339), when sent.
settled_at:
type:
- string
- 'null'
description: Settlement instant (RFC 3339), when settled.
total_cents:
type: integer
format: int64
description: Net balance of the period, in centimes.
PartnerView:
type: object
description: Public projection of a [`asap_module_partners::Partner`].
required:
- id
- name
- email
- slug
- commission_rate_bps
- tier_rate_bps
- tier_threshold_customers
- commission_duration_months
- status
- payout_method
- created_at
properties:
commission_duration_months:
type: integer
format: int32
description: Recurring commission payout duration, in months.
commission_rate_bps:
type: integer
format: int32
description: Base rate, in basis points.
contract_reference:
type:
- string
- 'null'
description: Signed contract reference.
contract_signed_at:
type:
- string
- 'null'
description: Contract signature date (RFC 3339), if traced.
created_at:
type: string
description: Creation timestamp (RFC 3339).
email:
type: string
description: Statement recipient address.
id:
type: string
format: uuid
description: Identifier.
name:
type: string
description: Displayed name.
payout_method:
type: string
description: Payout method (`manual_transfer`/`stripe_connect`).
slug:
type: string
description: Public identifier for `?ref=<slug>`.
status:
type: string
description: Lifecycle (`draft`/`active`/`suspended`/`terminated`).
stripe_account_id:
type:
- string
- 'null'
description: Stripe Connect account, when `payout_method` is `stripe_connect`.
stripe_promotion_code_id:
type:
- string
- 'null'
description: Stripe promotion code carrying the referred customer's discount.
tier_rate_bps:
type: integer
format: int32
description: Rate reached at the tier threshold, in basis points.
tier_threshold_customers:
type: integer
format: int64
description: Active referred customers triggering `tier_rate_bps`.
UpdatePartnerRequest:
type: object
description: Body of `PATCH /v1/partners/{id}`. Every field optional (partial patch).
properties:
commission_duration_months:
type:
- integer
- 'null'
format: int32
description: Recurring commission payout duration, in months.
commission_rate_bps:
type:
- integer
- 'null'
format: int32
description: Base rate, in basis points.
contract_reference:
type:
- string
- 'null'
description: Signed contract reference.
contract_signed_at:
type:
- string
- 'null'
format: date-time
description: Contract signature date (RFC 3339).
email:
type:
- string
- 'null'
description: Email address.
name:
type:
- string
- 'null'
description: Displayed name.
payout_method:
type:
- string
- 'null'
description: Payout method (`manual_transfer`/`stripe_connect`).
slug:
type:
- string
- 'null'
description: Public identifier for `?ref=<slug>`.
status:
type:
- string
- 'null'
description: Lifecycle (`draft`/`active`/`suspended`/`terminated`).
stripe_account_id:
type:
- string
- 'null'
description: Stripe Connect account.
stripe_promotion_code_id:
type:
- string
- 'null'
description: Stripe promotion code.
tier_rate_bps:
type:
- integer
- 'null'
format: int32
description: Rate reached at the tier threshold, in basis points.
tier_threshold_customers:
type:
- integer
- 'null'
format: int64
description: Active referred customers triggering `tier_rate_bps`.
ErrorBody:
type: object
description: 'Generic error body returned by API handlers when they fail. `code` is a
stable machine-readable token; `message` is human-friendly and meant for
surfacing to end users.'
required:
- code
- message
properties:
code:
type: string
description: Stable machine token (e.g. `invalid_credentials`).
field:
type:
- string
- 'null'
description: Offending request field for validation errors, when known.
message:
type: string
description: Human-readable message.
CreatePartnerResponse:
allOf:
- $ref: '#/components/schemas/PartnerView'
description: The created partner.
- type: object
required:
- referral_url
properties:
referral_url:
type: string
description: URL to hand the partner (`<frontend_base_url>/?ref=<slug>`).
description: 'Body of a successful `POST /v1/partners`: the created partner, plus the
derived affiliation URL.'
CommissionView:
type: object
description: Public projection of a [`asap_module_partners::Commission`] ledger line.
required:
- id
- referral_id
- stripe_invoice_id
- base_amount_cents
- rate_bps
- amount_cents
- currency
- status
- payable_at
- collected_at
properties:
amount_cents:
type: integer
format: int64
description: Amount due, in centimes. Negative on a reversal.
base_amount_cents:
type: integer
format: int64
description: Net HT actually collected, in centimes.
collected_at:
type: string
description: Collection date (RFC 3339).
currency:
type: string
description: ISO 4217 currency.
id:
type: string
format: uuid
description: Identifier.
payable_at:
type: string
description: Date the line becomes payable (RFC 3339).
rate_bps:
type: integer
format: int32
description: Rate applied, frozen on the line, in basis points.
referral_id:
type: string
format: uuid
description: Attribution this line derives from.
reverses_id:
type:
- string
- 'null'
format: uuid
description: Line this one reverses, present exactly on a reversal.
statement_id:
type:
- string
- 'null'
format: uuid
description: Statement this line is attached to, once paid.
status:
type: string
description: Settlement state (`accrued`/`payable`/`paid`/`reversed`).
stripe_invoice_id:
type: string
description: Stripe invoice collected.
CreatePartnerRequest:
type: object
description: 'Body of `POST /v1/partners`.
Mirrors [`NewPartner`]''s flat shape (no nested `Schedule`), as a local
DTO rather than the domain type itself: `modules/partners` does not
depend on `utoipa`, so `NewPartner` carries no `ToSchema`, and the
orphan rule blocks implementing a foreign trait for a foreign type from
this crate.'
required:
- name
- email
- slug
- commission_rate_bps
- tier_rate_bps
- tier_threshold_customers
- commission_duration_months
- payout_method
properties:
commission_duration_months:
type: integer
format: int32
description: Recurring commission payout duration, in months.
commission_rate_bps:
type: integer
format: int32
description: Base rate, in basis points.
email:
type: string
description: Email address.
name:
type: string
description: Displayed name.
payout_method:
type: string
description: Payout method (`manual_transfer`/`stripe_connect`).
slug:
type: string
description: Public identifier for `?ref=<slug>`.
stripe_account_id:
type:
- string
- 'null'
description: Stripe Connect account (optional).
stripe_promotion_code_id:
type:
- string
- 'null'
description: Stripe promotion code (optional).
tier_rate_bps:
type: integer
format: int32
description: Rate reached at the tier threshold, in basis points.
tier_threshold_customers:
type: integer
format: int64
description: Active referred customers triggering `tier_rate_bps`.
securitySchemes:
api_key:
type: http
scheme: bearer
session:
type: apiKey
in: cookie
name: asap_session