AgentaOS Payment Links API
Reusable, shareable payment products: a fixed amount and description behind one URL.
Reusable, shareable payment products: a fixed amount and description behind one URL.
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/agentaos-ai:agentaos-ai-payment-links-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: Agentaos Ai Payment Links API
version: 1.0.0
contact:
name: AgentaOS
url: https://agentaos.ai
license:
name: Proprietary
url: https://agentaos.ai
description: 'Operations tagged Payment Links across 2 of this provider''s published API definitions: agentaos-ai-openapi.json, openapi.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.agentaos.ai/api/v1
description: Production
security:
- ApiKeyAuth: []
tags:
- name: Payment Links
description: 'Reusable, shareable payment products: a fixed amount and description behind one URL.'
paths:
/gateway/payment-links:
post:
tags:
- Payment Links
operationId: createPaymentLink
summary: Create a payment link
description: Creates a reusable, shareable payment link.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentLinkCreateRequest'
example:
amount: 49.99
currency: EUR
name: Pro plan
description: Monthly access to Pro features
responses:
'201':
description: Payment link created.
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentLink'
examples:
default:
$ref: '#/components/examples/PaymentLinkExample'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
get:
tags:
- Payment Links
operationId: listPaymentLinks
summary: List payment links
description: Paginated. See the Money model / Pagination notes on this spec's top-level description.
parameters:
- $ref: '#/components/parameters/Limit100'
- $ref: '#/components/parameters/Offset'
- $ref: '#/components/parameters/NetworksFilter'
responses:
'200':
description: A page of payment links.
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentLinkListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
servers:
- url: https://api.agentaos.ai/api/v1
description: Production
/gateway/payment-links/{id}:
get:
tags:
- Payment Links
operationId: getPaymentLink
summary: Retrieve a payment link
description: 'Same fields as create, plus `transactions`: every payment (inbound or outbound) recorded against this link, newest first, same row shape as a Transaction but without the computed `money` breakdown.'
parameters:
- $ref: '#/components/parameters/PaymentLinkId'
responses:
'200':
description: The payment link, with its transaction history.
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentLinkDetail'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
patch:
tags:
- Payment Links
operationId: updatePaymentLink
summary: Update a payment link
description: 'Partial update: only send the fields you want to change.'
parameters:
- $ref: '#/components/parameters/PaymentLinkId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentLinkUpdateRequest'
example:
amount: 59.99
responses:
'200':
description: The updated payment link.
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentLink'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
delete:
tags:
- Payment Links
operationId: cancelPaymentLink
summary: Cancel a payment link
description: 'Deactivates the link. Existing checkouts already in progress are unaffected; no new checkout can be started from it afterward. This is a state change, not a delete: the link and its payment history stay readable.'
parameters:
- $ref: '#/components/parameters/PaymentLinkId'
responses:
'200':
description: The link was cancelled.
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
example:
success: true
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
servers:
- url: https://api.agentaos.ai/api/v1
description: Production
/gateway/payment-links/{id}/activate:
post:
tags:
- Payment Links
operationId: activatePaymentLink
summary: Activate a payment link
description: 'The way back from cancel: switches a deactivated link on again under the same id, so every place it was shared keeps working. New checkouts can be started from it at once. Returns `409` when the link is not deactivated.'
parameters:
- $ref: '#/components/parameters/PaymentLinkId'
responses:
'200':
description: The link is active again.
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
example:
success: true
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
servers:
- url: https://api.agentaos.ai/api/v1
description: Production
components:
parameters:
NetworksFilter:
name: networks
in: query
required: false
description: Comma-separated CAIP-2 network IDs to filter by, e.g. `eip155:8453,eip155:84532`. Ignored if your API key is network-scoped.
schema:
type: string
PaymentLinkId:
name: id
in: path
required: true
description: Payment link UUID.
schema:
type: string
format: uuid
Offset:
name: offset
in: query
required: false
description: Number of items to skip, for the next page.
schema:
type: integer
default: 0
minimum: 0
Limit100:
name: limit
in: query
required: false
description: Items per page. Capped server-side at 100.
schema:
type: integer
default: 20
minimum: 1
maximum: 100
schemas:
LinkTransactionRow:
type: object
description: 'A raw transaction row as nested under a Payment Link or Checkout detail response: same shape as a Transaction, but without the computed `money` breakdown.'
additionalProperties: true
properties:
id:
type: string
format: uuid
direction:
type: string
enum:
- inbound
- outbound
status:
type: string
amount:
type: number
payment_method:
type:
- string
- 'null'
created_at:
type: string
format: date-time
required:
- id
- direction
- status
- amount
- created_at
CheckoutField:
type: object
description: An extra field collected at checkout.
properties:
key:
type: string
maxLength: 64
label:
type: string
maxLength: 128
type:
type: string
enum:
- text
- email
- tel
- select
required:
type: boolean
placeholder:
type: string
maxLength: 256
options:
type: array
items:
type: string
description: 'For `type: select` only.'
required:
- key
- label
- type
- required
PaymentLink:
type: object
additionalProperties: true
properties:
id:
type: string
format: uuid
description: Payment link UUID.
org_id:
type: string
format: uuid
user_id:
type: string
format: uuid
secure_link_id:
type: string
description: Public ID used in the checkout URL.
amount:
type: number
description: Currency units.
currency:
type: string
description: Settlement currency or token.
description:
type:
- string
- 'null'
metadata:
type: object
description: Your custom data.
checkout_fields:
type: array
items:
$ref: '#/components/schemas/CheckoutField'
webhook_url:
type:
- string
- 'null'
success_url:
type:
- string
- 'null'
cancel_url:
type:
- string
- 'null'
tax_rate_id:
type:
- string
- 'null'
format: uuid
status:
type: string
enum:
- active
- cancelled
payment_count:
type: integer
description: Successful payments against this link so far.
supported_networks:
type: array
items:
type: string
expires_at:
type:
- string
- 'null'
format: date-time
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
name:
type:
- string
- 'null'
image_url:
type:
- string
- 'null'
max_uses:
type:
- integer
- 'null'
description: null means unlimited.
seller_mode:
type: string
enum:
- mor
- crypto
description: mor (card + bank) or crypto (on-chain). The snake_case column equivalent of the computed `sellerMode`.
type:
type: string
enum:
- one_time
- subscription
billing_interval:
type:
- string
- 'null'
enum:
- month
- year
- null
trial_period_days:
type:
- integer
- 'null'
description: Free-trial length in days, or `null` when the link has no trial.
trial_amount:
type:
- number
- 'null'
description: Price of the trial period in currency units, or `null` for a free trial (or no trial).
environment:
type: string
enum:
- test
- live
checkoutUrl:
type: string
description: Full URL to share with buyers. Computed, camelCase, no snake_case equivalent.
sellerMode:
type: string
enum:
- mor
- crypto
required:
- id
- org_id
- user_id
- secure_link_id
- amount
- currency
- description
- metadata
- checkout_fields
- webhook_url
- success_url
- cancel_url
- tax_rate_id
- status
- payment_count
- supported_networks
- expires_at
- created_at
- updated_at
- name
- image_url
- max_uses
- seller_mode
- type
- billing_interval
- environment
- checkoutUrl
- sellerMode
Error:
type: object
description: Every non-2xx response is JSON in this shape. Every response (success or error) also carries an `x-request-id` response header; send that header on your request to have your own id echoed back, otherwise the server mints one. On errors the same id is repeated in the `requestId` body field.
properties:
statusCode:
type: integer
description: Same as the HTTP status code.
code:
type: string
description: 'Present on some refusals: a stable machine-readable reason, e.g. `live_key_required`.'
message:
description: Human-readable. A validation failure (400) returns an array of per-field messages instead of one string.
anyOf:
- type: string
- type: array
items:
type: string
errors:
type: array
description: 'Present on 400 validation failures: one entry per invalid field. The flat human-readable strings stay in `message` for back-compat; this is the machine-readable, per-field view.'
items:
type: object
properties:
field:
type: string
description: Name of the invalid field, dot-notated for nested properties (e.g. `checkoutFields.0.type`).
message:
type: string
description: Validation messages for that field, joined with `, `.
required:
- field
- message
requestId:
type: string
description: Correlation id, identical to the `x-request-id` response header. Include it when contacting support. On success it is available on the header only, not the body.
timestamp:
type: string
format: date-time
required:
- statusCode
- message
- timestamp
SuccessResponse:
type: object
properties:
success:
type: boolean
const: true
required:
- success
PaymentLinkListResponse:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/PaymentLink'
total:
type: integer
hasMore:
type: boolean
required:
- items
- total
- hasMore
PaymentLinkCreateRequest:
type: object
properties:
amount:
type: number
minimum: 0.01
maximum: 1000000
description: Amount in currency units, e.g. 49.99.
currency:
type: string
enum:
- EUR
- USD
- EURC
- EURe
- USDC
description: Defaults to your org's settlement currency. A fiat code is mapped to your org's default settlement token internally; the link stores the resolved token.
description:
type: string
maxLength: 1000
name:
type: string
maxLength: 120
description: Product name, for the catalog-style link surfaces. Separate from `description`.
imageUrl:
type: string
format: uri
maxLength: 2048
description: HTTPS only.
type:
type: string
enum:
- one_time
- subscription
default: one_time
description: A `subscription` link requires `billingInterval` and settles on the card/bank rail (Merchant of Record); it can't be a crypto-settlement link.
billingInterval:
type: string
enum:
- month
- year
description: Required when `type` is `subscription`, must be omitted for `one_time`.
trialPeriodDays:
type: integer
minimum: 1
maximum: 730
description: Free-trial length in days. Subscription links only. The buyer's card is saved with nothing due today; the first charge happens when the trial ends.
trialAmount:
type:
- number
- 'null'
minimum: 0.01
maximum: 1000000
description: Price of the trial period in currency units, e.g. `1.00`. Only with `trialPeriodDays`. Omit it, or send `null`, for a free trial.
maxUses:
type: integer
minimum: 1
maximum: 100000
description: 1 for single-use, N for a limited quantity, omitted for unlimited.
taxRateId:
type: string
format: uuid
description: Must belong to your organization.
checkoutFields:
type: array
items:
$ref: '#/components/schemas/CheckoutField'
webhookUrl:
type: string
format: uri
maxLength: 2048
successUrl:
type: string
format: uri
maxLength: 2048
cancelUrl:
type: string
format: uri
maxLength: 2048
expiresAt:
type: string
format: date-time
metadata:
type: object
description: Arbitrary key-value data, returned unchanged on webhooks. Up to 8KB serialized.
supportedNetworks:
type: array
items:
type: string
description: CAIP-2 network IDs (e.g. eip155:8453), for crypto-settlement links. Ignored (and taken from your key's configuration instead) if your API key is scoped to specific networks.
required:
- amount
PaymentLinkUpdateRequest:
type: object
description: Partial update. Every field is optional; only fields present are changed.
properties:
name:
type: string
maxLength: 120
description:
type: string
maxLength: 1000
imageUrl:
type: string
format: uri
maxLength: 2048
amount:
type: number
minimum: 0.01
maximum: 1000000
type:
type: string
enum:
- one_time
- subscription
description: Checked against the resulting merged state.
billingInterval:
type: string
enum:
- month
- year
trialPeriodDays:
type: integer
minimum: 1
maximum: 730
description: Free-trial length in days; subscription links only.
trialAmount:
type:
- number
- 'null'
minimum: 0.01
maximum: 1000000
description: Price of the trial period in currency units. Only with `trialPeriodDays`; `null` makes it a free trial.
PaymentLinkDetail:
allOf:
- $ref: '#/components/schemas/PaymentLink'
- type: object
properties:
transactions:
type: array
items:
$ref: '#/components/schemas/LinkTransactionRow'
description: Every payment (inbound or outbound) recorded against this link, newest first.
required:
- transactions
responses:
Conflict:
description: The resource was modified concurrently, or the action doesn't apply to its current state.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
statusCode: 409
message: Payment link was modified concurrently
timestamp: '2026-08-06T12:00:00.000Z'
NotFound:
description: Resource not found (or not visible to your key; the two are not distinguished).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
statusCode: 404
message: Payment link not found
timestamp: '2026-08-06T12:00:00.000Z'
Forbidden:
description: The key is valid but the resource belongs to a different organization.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
statusCode: 403
message: Payment link belongs to another organization
timestamp: '2026-08-06T12:00:00.000Z'
BadRequest:
description: A required field is missing, out of range, or the wrong type. `ValidationPipe` also rejects any field not in the documented schema.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
statusCode: 400
message: amount is required when creating a session without a link
timestamp: '2026-08-06T12:00:00.000Z'
Unauthorized:
description: Missing or invalid `x-api-key`.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
statusCode: 401
message: Invalid API key
timestamp: '2026-08-06T12:00:00.000Z'
examples:
PaymentLinkExample:
value:
id: 3f1a2b4c-5d6e-7f8a-9b0c-1d2e3f4a5b6c
org_id: 9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
user_id: 1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
secure_link_id: mZrESFyR7RC9RPsJfZCVkg
amount: 49.99
currency: EUR
description: Monthly access to Pro features
metadata: {}
checkout_fields: []
webhook_url: null
success_url: null
cancel_url: null
tax_rate_id: null
status: active
payment_count: 0
supported_networks:
- eip155:8453
expires_at: null
created_at: '2026-08-06T12:00:00.000Z'
updated_at: '2026-08-06T12:00:00.000Z'
name: Pro plan
image_url: null
max_uses: null
seller_mode: mor
type: one_time
billing_interval: null
environment: live
checkoutUrl: https://app.agentaos.ai/pay/mZrESFyR7RC9RPsJfZCVkg
sellerMode: mor
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: x-api-key
description: 'Your secret key, from app.agentaos.ai -> Settings -> Developers -> API Keys. The key''s prefix is both its identity and its environment: `sk_test_...` (sandbox, free, no verification) or `sk_live_...` (real money, requires business verification). A missing or invalid key returns 401.'
x-refined-from:
- agentaos-ai-openapi.json
- openapi.json