Coinbase Commerce Charges API
Create and retrieve crypto payment charges
Create and retrieve crypto payment charges
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/commerce-coinbase-charges-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: Coinbase Commerce Charges API
description: 'Legacy REST API for creating and managing crypto payment charges. Merchants generate a charge object representing a payment request; customers pay to the charge address and the API tracks status through the full lifecycle from created → pending → confirmed or failed. Authentication uses the X-CC-Api-Key header and the API-Version header.
'
version: '2018-03-22'
termsOfService: https://commerce.coinbase.com/legal/user-agreement
contact:
name: Coinbase Commerce Support
url: https://help.coinbase.com/en/commerce
license:
name: Proprietary
servers:
- url: https://api.commerce.coinbase.com
description: Coinbase Commerce production server
security:
- ApiKeyAuth: []
tags:
- name: Charges
description: Create and retrieve crypto payment charges
paths:
/charges:
post:
operationId: createCharge
summary: Create a charge
description: 'Creates a new crypto payment charge object. Returns a hosted payment URL and a charge code that the customer uses to complete payment.
'
tags:
- Charges
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateChargeRequest'
example:
name: Widget Order
description: Order for 2 widgets
local_price:
amount: '49.99'
currency: USD
pricing_type: fixed_price
redirect_url: https://yourstore.com/success
cancel_url: https://yourstore.com/cancel
metadata:
customer_id: cust_42
order_id: ord_99
responses:
'201':
description: Charge created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/ChargeResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimitExceeded'
'500':
$ref: '#/components/responses/InternalServerError'
get:
operationId: listCharges
summary: List all charges
description: Returns a paginated list of all charges for the merchant account.
tags:
- Charges
parameters:
- name: limit
in: query
description: Number of results per page (1–100, default 25)
schema:
type: integer
minimum: 1
maximum: 100
default: 25
- name: starting_after
in: query
description: Cursor for forward pagination (charge ID)
schema:
type: string
- name: ending_before
in: query
description: Cursor for backward pagination (charge ID)
schema:
type: string
responses:
'200':
description: List of charges
content:
application/json:
schema:
$ref: '#/components/schemas/ChargeListResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'500':
$ref: '#/components/responses/InternalServerError'
/charges/{charge_code_or_id}:
get:
operationId: getCharge
summary: Retrieve a charge
description: Returns the details of a specific charge by its ID or code.
tags:
- Charges
parameters:
- $ref: '#/components/parameters/ChargeCodeOrId'
responses:
'200':
description: Charge details
content:
application/json:
schema:
$ref: '#/components/schemas/ChargeResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
/charges/{charge_code_or_id}/cancel:
post:
operationId: cancelCharge
summary: Cancel a charge
description: 'Cancels a charge that has not yet been confirmed. Only NEW charges can be cancelled; charges in PENDING or later states cannot be cancelled.
'
tags:
- Charges
parameters:
- $ref: '#/components/parameters/ChargeCodeOrId'
responses:
'200':
description: Cancelled charge
content:
application/json:
schema:
$ref: '#/components/schemas/ChargeResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
/charges/{charge_code_or_id}/resolve:
post:
operationId: resolveCharge
summary: Resolve a charge
description: 'Resolves a charge that has been overpaid or underpaid, marking it as resolved. Only applicable to UNRESOLVED charges.
'
tags:
- Charges
parameters:
- $ref: '#/components/parameters/ChargeCodeOrId'
responses:
'200':
description: Resolved charge
content:
application/json:
schema:
$ref: '#/components/schemas/ChargeResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
components:
responses:
BadRequest:
description: Invalid request parameters
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
NotFound:
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
Unauthorized:
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
InternalServerError:
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
RateLimitExceeded:
description: Rate limit exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
schemas:
TimelineEntry:
type: object
properties:
time:
type: string
format: date-time
status:
$ref: '#/components/schemas/ChargeStatus'
context:
type: string
description: Additional context for UNRESOLVED statuses (e.g. UNDERPAID, OVERPAID)
Payment:
type: object
properties:
network:
type: string
description: Blockchain network (e.g. ethereum, bitcoin)
transaction_id:
type: string
description: Blockchain transaction hash
status:
type: string
enum:
- PENDING
- CONFIRMED
value:
type: object
properties:
local:
$ref: '#/components/schemas/Money'
crypto:
$ref: '#/components/schemas/Money'
block:
type: object
properties:
height:
type: integer
hash:
type: string
confirmations_accumulated:
type: integer
confirmations_required:
type: integer
ErrorResponse:
type: object
properties:
error:
type: object
properties:
type:
type: string
description: Error type identifier
message:
type: string
description: Human-readable error description
ChargeListResponse:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Charge'
cursor_range:
type: array
items:
type: string
description: Pagination cursors [start, end]
CreateChargeRequest:
type: object
required:
- name
- description
- pricing_type
properties:
name:
type: string
description: Charge name shown to the customer
maxLength: 200
description:
type: string
description: Short description of what is being purchased
maxLength: 500
local_price:
$ref: '#/components/schemas/Money'
description: Required when pricing_type is fixed_price
pricing_type:
$ref: '#/components/schemas/PricingType'
redirect_url:
type: string
format: uri
description: URL to redirect the customer after a successful payment
cancel_url:
type: string
format: uri
description: URL to redirect the customer if they cancel the payment
metadata:
type: object
description: Arbitrary key-value metadata (max 20 keys, 100 chars per value)
additionalProperties:
type: string
Charge:
type: object
properties:
id:
type: string
format: uuid
description: Unique charge identifier
code:
type: string
description: Short 8-character alphanumeric charge code
example: WZNDTFQK
name:
type: string
description:
type: string
local_price:
$ref: '#/components/schemas/Money'
pricing_type:
$ref: '#/components/schemas/PricingType'
pricing:
type: object
description: Crypto pricing in supported currencies (populated after creation)
additionalProperties:
$ref: '#/components/schemas/Money'
addresses:
type: object
description: Blockchain payment addresses keyed by crypto currency
additionalProperties:
type: string
status:
$ref: '#/components/schemas/ChargeStatus'
redirect_url:
type: string
format: uri
cancel_url:
type: string
format: uri
metadata:
type: object
additionalProperties:
type: string
hosted_url:
type: string
format: uri
description: URL to the hosted payment page
timeline:
type: array
description: Status history events for the charge
items:
$ref: '#/components/schemas/TimelineEntry'
payments:
type: array
description: Payment attempts associated with the charge
items:
$ref: '#/components/schemas/Payment'
expires_at:
type: string
format: date-time
description: When the charge expires (UTC, RFC 3339)
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
Money:
type: object
description: A monetary amount with currency
required:
- amount
- currency
properties:
amount:
type: string
description: Decimal amount string (e.g. "49.99")
example: '49.99'
currency:
type: string
description: ISO 4217 currency code (fiat) or crypto ticker
example: USD
PricingType:
type: string
enum:
- fixed_price
- no_price
description: '`fixed_price` charges the customer a specific fiat amount converted to crypto. `no_price` lets the customer pay any amount.
'
ChargeResponse:
type: object
properties:
data:
$ref: '#/components/schemas/Charge'
ChargeStatus:
type: string
description: The current lifecycle status of the charge
enum:
- NEW
- PENDING
- COMPLETED
- EXPIRED
- UNRESOLVED
- RESOLVED
- CANCELED
- CANCELATION_COMPLETE
parameters:
ChargeCodeOrId:
name: charge_code_or_id
in: path
required: true
description: The charge ID (UUID) or charge code (8-character alphanumeric)
schema:
type: string
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: X-CC-Api-Key