Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Paypal Subscriptions Authorizations Orders API
description: You can use billing plans and subscriptions to create subscriptions that process recurring PayPal payments for physical or digital goods, or services. A plan includes pricing and billing cycle information that defines the amount and frequency of charge for a subscription. You can also define a fixed plan, such as a $5 basic plan or a volume- or graduated-based plan with pricing tiers based on the quantity purchased. For more information, see <a href="/docs/subscriptions/">Subscriptions Overview</a>.
version: '1.6'
contact: {}
servers:
- url: https://api-m.sandbox.paypal.com
description: PayPal Sandbox Environment
- url: https://api-m.paypal.com
description: PayPal Live Environment
tags:
- name: Orders
description: Use the `/orders` resource to create, update, retrieve, authorize, capture and track orders.
paths:
/v2/checkout/orders:
post:
summary: Paypal Create order
description: Creates an order. Merchants and partners can add Level 2 and 3 data to payments to reduce risk and payment processing costs. For more information about processing payments, see <a href="https://developer.paypal.com/docs/checkout/advanced/processing/">checkout</a> or <a href="https://developer.paypal.com/docs/multiparty/checkout/advanced/processing/">multiparty checkout</a>.<blockquote><strong>Note:</strong> For error handling and troubleshooting, see <a href="/api/rest/reference/orders/v2/errors/#create-order">Orders v2 errors</a>.</blockquote>
operationId: orders.create
responses:
'200':
description: A successful response to an idempotent request returns the HTTP `200 OK` status code with a JSON response body that shows order details.
content:
application/json:
schema:
$ref: '#/components/schemas/order'
'201':
description: 'A successful request returns the HTTP `201 Created` status code and a JSON response body that includes by default a minimal response with the ID, status, and HATEOAS links. If you require the complete order resource representation, you must pass the <a href="/docs/api/orders/v2/#orders-create-header-parameters"><code>Prefer: return=representation</code> request header</a>. This header value is not the default.'
content:
application/json:
schema:
$ref: '#/components/schemas/order'
examples:
orders_request_create:
value:
intent: CAPTURE
purchase_units:
- reference_id: d9f80740-38f0-11e8-b467-0ed5f89f718b
amount:
currency_code: USD
value: '100.00'
'400':
description: Request is not well-formed, syntactically incorrect, or violates schema.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_400'
- $ref: '#/components/schemas/400'
'401':
description: Authentication failed due to missing authorization header, or invalid authentication credentials.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_401'
- $ref: '#/components/schemas/401'
'422':
description: The requested action could not be performed, semantically incorrect, or failed business validation.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_422'
- $ref: '#/components/schemas/422'
default:
$ref: '#/components/responses/default'
parameters:
- $ref: '#/components/parameters/paypal_request_id'
- $ref: '#/components/parameters/paypal_partner_attribution_id'
- $ref: '#/components/parameters/paypal_client_metadata_id'
- $ref: '#/components/parameters/prefer'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/order_request'
examples:
order_request:
value:
intent: CAPTURE
purchase_units:
- reference_id: d9f80740-38f0-11e8-b467-0ed5f89f718b
amount:
currency_code: USD
value: '100.00'
payment_source:
paypal:
experience_context:
payment_method_preference: IMMEDIATE_PAYMENT_REQUIRED
payment_method_selected: PAYPAL
brand_name: EXAMPLE INC
locale: en-US
landing_page: LOGIN
user_action: PAY_NOW
return_url: https://example.com/returnUrl
cancel_url: https://example.com/cancelUrl
required: true
security:
- Oauth2:
- https://uri.paypal.com/services/payments/payment
- https://uri.paypal.com/services/payments/orders/client-side-integration
tags:
- Orders
/v2/checkout/orders/{id}:
get:
summary: Paypal Show order details
description: Shows details for an order, by ID.<blockquote><strong>Note:</strong> For error handling and troubleshooting, see <a href="/api/rest/reference/orders/v2/errors/#get-order">Orders v2 errors</a>.</blockquote>
operationId: orders.get
responses:
'200':
description: A successful request returns the HTTP `200 OK` status code and a JSON response body that shows order details.
content:
application/json:
schema:
$ref: '#/components/schemas/order'
'401':
description: Authentication failed due to missing authorization header, or invalid authentication credentials.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_401'
- $ref: '#/components/schemas/401'
'404':
description: The specified resource does not exist.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_404'
- $ref: '#/components/schemas/404'
default:
$ref: '#/components/responses/default'
parameters:
- $ref: '#/components/parameters/id'
- $ref: '#/components/parameters/fields'
security:
- Oauth2:
- https://uri.paypal.com/services/payments/payment
- https://uri.paypal.com/services/payments/orders/client-side-integration
tags:
- Orders
patch:
summary: Paypal Update order
description: 'Updates an order with a `CREATED` or `APPROVED` status. You cannot update an order with the `COMPLETED` status.<br/><br/>To make an update, you must provide a `reference_id`. If you omit this value with an order that contains only one purchase unit, PayPal sets the value to `default` which enables you to use the path: <code>\"/purchase_units/@reference_id==''default''/{attribute-or-object}\"</code>. Merchants and partners can add Level 2 and 3 data to payments to reduce risk and payment processing costs. For more information about processing payments, see <a href="https://developer.paypal.com/docs/checkout/advanced/processing/">checkout</a> or <a href="https://developer.paypal.com/docs/multiparty/checkout/advanced/processing/">multiparty checkout</a>.<blockquote><strong>Note:</strong> For error handling and troubleshooting, see <a href=\"/api/rest/reference/orders/v2/errors/#patch-order\">Orders v2 errors</a>.</blockquote>Patchable attributes or objects:<br/><br/><table><thead><th>Attribute</th><th>Op</th><th>Notes</th></thead><tbody><tr><td><code>intent</code></td><td>replace</td><td></td></tr><tr><td><code>payer</code></td><td>replace, add</td><td>Using replace op for <code>payer</code> will replace the whole <code>payer</code> object with the value sent in request.</td></tr><tr><td><code>purchase_units</code></td><td>replace, add</td><td></td></tr><tr><td><code>purchase_units[].custom_id</code></td><td>replace, add, remove</td><td></td></tr><tr><td><code>purchase_units[].description</code></td><td>replace, add, remove</td><td></td></tr><tr><td><code>purchase_units[].payee.email</code></td><td>replace</td><td></td></tr><tr><td><code>purchase_units[].shipping.name</code></td><td>replace, add</td><td></td></tr><tr><td><code>purchase_units[].shipping.address</code></td><td>replace, add</td><td></td></tr><tr><td><code>purchase_units[].shipping.type</code></td><td>replace, add</td><td></td></tr><tr><td><code>purchase_units[].soft_descriptor</code></td><td>replace, remove</td><td></td></tr><tr><td><code>purchase_units[].amount</code></td><td>replace</td><td></td></tr><tr><td><code>purchase_units[].items</code></td><td>replace, add, remove</td><td></td></tr><tr><td><code>purchase_units[].invoice_id</code></td><td>replace, add, remove</td><td></td></tr><tr><td><code>purchase_units[].payment_instruction</code></td><td>replace</td><td></td></tr><tr><td><code>purchase_units[].payment_instruction.disbursement_mode</code></td><td>replace</td><td>By default, <code>disbursement_mode</code> is <code>INSTANT</code>.</td></tr><tr><td><code>purchase_units[].payment_instruction.platform_fees</code></td><td>replace, add, remove</td><td></td></tr><tr><td><code>purchase_units[].supplementary_data.airline</code></td><td>replace, add, remove</td><td></td></tr><tr><td><code>purchase_units[].supplementary_data.card</code></td><td>replace, add, remove</td><td></td></tr><tr><td><code>application_context.client_configuration</code></td><td>replace, add</td><td></td></tr></tbody></table>'
operationId: orders.patch
responses:
'204':
description: A successful request returns the HTTP `204 No Content` status code with an empty object in the JSON response body.
'400':
description: Request is not well-formed, syntactically incorrect, or violates schema.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_400'
- $ref: '#/components/schemas/orders.patch-400'
'401':
description: Authentication failed due to missing authorization header, or invalid authentication credentials.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_401'
- $ref: '#/components/schemas/401'
'404':
description: The specified resource does not exist.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_404'
- $ref: '#/components/schemas/404'
'422':
description: The requested action could not be performed, semantically incorrect, or failed business validation.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_422'
- $ref: '#/components/schemas/orders.patch-422'
default:
$ref: '#/components/responses/default'
parameters:
- $ref: '#/components/parameters/id'
requestBody:
$ref: '#/components/requestBodies/patch_request'
security:
- Oauth2:
- https://uri.paypal.com/services/payments/payment
- https://uri.paypal.com/services/payments/orders/client-side-integration
tags:
- Orders
/v2/checkout/orders/{id}/confirm-payment-source:
post:
summary: Paypal Confirm the Order
description: Payer confirms their intent to pay for the the Order with the given payment source.
operationId: orders.confirm
responses:
'200':
description: A successful request indicates that the payment source was added to the Order. A successful request returns the HTTP `200 OK` status code with a JSON response body that shows order details.
content:
application/json:
schema:
$ref: '#/components/schemas/order'
'400':
description: Request is not well-formed, syntactically incorrect, or violates schema.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_400'
- $ref: '#/components/schemas/orders.confirm-400'
'403':
description: Authorization failed due to insufficient permissions.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_403'
- $ref: '#/components/schemas/403'
'422':
description: The requested action could not be performed, semantically incorrect, or failed business validation.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_422'
- $ref: '#/components/schemas/orders.confirm-422'
'500':
description: An internal server error has occurred.
content:
application/json:
schema:
$ref: '#/components/schemas/error_500'
default:
$ref: '#/components/responses/default'
parameters:
- $ref: '#/components/parameters/paypal_client_metadata_id'
- $ref: '#/components/parameters/id'
- $ref: '#/components/parameters/prefer'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/confirm_order_request'
examples:
confirm_order_request:
value:
payment_source:
paypal:
name:
given_name: John
surname: Doe
email_address: customer@example.com
experience_context:
payment_method_preference: IMMEDIATE_PAYMENT_REQUIRED
payment_method_selected: PAYPAL
brand_name: EXAMPLE INC
locale: en-US
landing_page: LOGIN
shipping_preference: SET_PROVIDED_ADDRESS
user_action: PAY_NOW
return_url: https://example.com/returnUrl
cancel_url: https://example.com/cancelUrl
security:
- Oauth2:
- https://uri.paypal.com/services/payments/payment
- https://uri.paypal.com/services/payments/initiatepayment
tags:
- Orders
/v2/checkout/orders/{id}/authorize:
post:
summary: Paypal Authorize payment for order
description: Authorizes payment for an order. To successfully authorize payment for an order, the buyer must first approve the order or a valid payment_source must be provided in the request. A buyer can approve the order upon being redirected to the rel:approve URL that was returned in the HATEOAS links in the create order response.<blockquote><strong>Note:</strong> For error handling and troubleshooting, see <a href="/api/rest/reference/orders/v2/errors/#authorize-order">Orders v2 errors</a>.</blockquote>
operationId: orders.authorize
responses:
'200':
description: A successful response to an idempotent request returns the HTTP `200 OK` status code with a JSON response body that shows authorized payment details.
content:
application/json:
schema:
$ref: '#/components/schemas/order_authorize_response'
'201':
description: 'A successful response to a non-idempotent request returns the HTTP `201 Created` status code with a JSON response body that shows authorized payment details. If a duplicate response is retried, returns the HTTP `200 OK` status code. By default, the response is minimal. If you need the complete resource representation, you must pass the <a href="/docs/api/orders/v2/#orders-authorize-header-parameters"><code>Prefer: return=representation</code> request header</a>.'
content:
application/json:
schema:
$ref: '#/components/schemas/order_authorize_response'
'400':
description: Request is not well-formed, syntactically incorrect, or violates schema.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_400'
- $ref: '#/components/schemas/orders.authorize-400'
'401':
description: Authentication failed due to missing authorization header, or invalid authentication credentials.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_401'
- $ref: '#/components/schemas/401'
'403':
description: The authorized payment failed due to insufficient permissions.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_403'
- $ref: '#/components/schemas/orders.authorize-403'
'404':
description: The specified resource does not exist.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_404'
- $ref: '#/components/schemas/404'
'422':
description: The requested action could not be performed, semantically incorrect, or failed business validation.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_422'
- $ref: '#/components/schemas/orders.authorize-422'
'500':
description: An internal server error has occurred.
content:
application/json:
schema:
$ref: '#/components/schemas/error_500'
default:
$ref: '#/components/responses/default'
parameters:
- $ref: '#/components/parameters/paypal_request_id'
- $ref: '#/components/parameters/prefer'
- $ref: '#/components/parameters/paypal_client_metadata_id'
- $ref: '#/components/parameters/id'
- $ref: '#/components/parameters/paypal_auth_assertion'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/order_authorize_request'
security:
- Oauth2:
- https://uri.paypal.com/services/payments/payment
- https://uri.paypal.com/services/payments/orders/client-side-integration
tags:
- Orders
/v2/checkout/orders/{id}/capture:
post:
summary: Paypal Capture payment for order
description: Captures payment for an order. To successfully capture payment for an order, the buyer must first approve the order or a valid payment_source must be provided in the request. A buyer can approve the order upon being redirected to the rel:approve URL that was returned in the HATEOAS links in the create order response.<blockquote><strong>Note:</strong> For error handling and troubleshooting, see <a href="/api/rest/reference/orders/v2/errors/#capture-order">Orders v2 errors</a>.</blockquote>
operationId: orders.capture
responses:
'200':
description: A successful response to an idempotent request returns the HTTP `200 OK` status code with a JSON response body that shows captured payment details.
content:
application/json:
schema:
$ref: '#/components/schemas/order'
'201':
description: 'A successful response to a non-idempotent request returns the HTTP `201 Created` status code with a JSON response body that shows captured payment details. If a duplicate response is retried, returns the HTTP `200 OK` status code. By default, the response is minimal. If you need the complete resource representation, pass the <a href="/docs/api/orders/v2/#orders-authorize-header-parameters"><code>Prefer: return=representation</code> request header</a>.'
content:
application/json:
schema:
$ref: '#/components/schemas/order'
'400':
description: Request is not well-formed, syntactically incorrect, or violates schema.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_400'
- $ref: '#/components/schemas/orders.capture-400'
'401':
description: Authentication failed due to missing authorization header, or invalid authentication credentials.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_401'
- $ref: '#/components/schemas/401'
'403':
description: The authorized payment failed due to insufficient permissions.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_403'
- $ref: '#/components/schemas/orders.capture-403'
'404':
description: The specified resource does not exist.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_404'
- $ref: '#/components/schemas/404'
'422':
description: The requested action could not be performed, semantically incorrect, or failed business validation.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_422'
- $ref: '#/components/schemas/orders.capture-422'
'500':
description: An internal server error has occurred.
content:
application/json:
schema:
$ref: '#/components/schemas/error_500'
default:
$ref: '#/components/responses/default'
parameters:
- $ref: '#/components/parameters/paypal_request_id'
- $ref: '#/components/parameters/prefer'
- $ref: '#/components/parameters/paypal_client_metadata_id'
- $ref: '#/components/parameters/id'
- $ref: '#/components/parameters/paypal_auth_assertion'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/order_capture_request'
security:
- Oauth2:
- https://uri.paypal.com/services/payments/payment
- https://uri.paypal.com/services/payments/orders/client-side-integration
tags:
- Orders
/v2/checkout/orders/{id}/track:
post:
summary: Paypal Add tracking information for an Order.
description: Adds tracking information for an Order.
operationId: orders.track.create
responses:
'200':
description: A successful response to an idempotent request returns the HTTP `200 OK` status code with a JSON response body that shows tracker details.
content:
application/json:
schema:
$ref: '#/components/schemas/order'
'201':
description: A successful response to a non-idempotent request returns the HTTP `201 Created` status code with a JSON response body that shows tracker details. If a duplicate response is retried, returns the HTTP `200 OK` status code.
content:
application/json:
schema:
$ref: '#/components/schemas/order'
'400':
description: Request is not well-formed, syntactically incorrect, or violates schema.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_400'
- $ref: '#/components/schemas/orders.track.create-400'
'403':
description: Authorization failed due to insufficient permissions.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_403'
- $ref: '#/components/schemas/orders.track.create-403'
'404':
description: The specified resource does not exist.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_404'
- $ref: '#/components/schemas/404'
'422':
description: The requested action could not be performed, semantically incorrect, or failed business validation.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_422'
- $ref: '#/components/schemas/orders.track.create-422'
'500':
description: An internal server error has occurred.
content:
application/json:
schema:
$ref: '#/components/schemas/error_500'
default:
$ref: '#/components/responses/default'
parameters:
- $ref: '#/components/parameters/id'
- $ref: '#/components/parameters/paypal_auth_assertion'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/order_tracker_request'
required: true
security:
- Oauth2:
- https://uri.paypal.com/services/payments/payment
tags:
- Orders
components:
schemas:
enrolled:
type: string
minLength: 1
maxLength: 255
pattern: ^[0-9A-Z_]+$
description: Status of Authentication eligibility.
enum:
- Y
- N
- U
- B
link_description:
type: object
title: Link Description
description: The request-related [HATEOAS link](/api/rest/responses/#hateoas-links) information.
required:
- href
- rel
properties:
href:
type: string
description: The complete target URL. To make the related call, combine the method with this [URI Template-formatted](https://tools.ietf.org/html/rfc6570) link. For pre-processing, include the `$`, `(`, and `)` characters. The `href` is the key HATEOAS component that links a completed call with a subsequent call.
rel:
type: string
description: The [link relation type](https://tools.ietf.org/html/rfc5988#section-4), which serves as an ID for a link that unambiguously describes the semantics of the link. See [Link Relations](https://www.iana.org/assignments/link-relations/link-relations.xhtml).
method:
type: string
description: The HTTP method required to make the related call.
enum:
- GET
- POST
- PUT
- DELETE
- HEAD
- CONNECT
- OPTIONS
- PATCH
error_500:
type: object
title: Internal Server Error
description: This is either a system or application error, and generally indicates that although the client appeared to provide a correct request, something unexpected has gone wrong on the server.
properties:
name:
type: string
enum:
- INTERNAL_SERVER_ERROR
message:
type: string
enum:
- An internal server error occurred.
debug_id:
type: string
description: The PayPal internal ID. Used for correlation purposes.
links:
description: An array of request-related [HATEOAS links](https://en.wikipedia.org/wiki/HATEOAS).
type: array
minItems: 0
maxItems: 10000
items:
$ref: '#/components/schemas/error_link_description'
example:
name: INTERNAL_SERVER_ERROR
message: An internal server error occurred.
debug_id: 90957fca61718
links:
- href: https://developer.paypal.com/api/orders/v2/#error-INTERNAL_SERVER_ERROR
rel: information_link
orders.capture-422:
properties:
details:
type: array
items:
anyOf:
- title: AGREEMENT_ALREADY_CANCELLED
properties:
issue:
type: string
enum:
- AGREEMENT_ALREADY_CANCELLED
description:
type: string
enum:
- The requested agreement is already canceled.
- title: BILLING_AGREEMENT_NOT_FOUND
properties:
issue:
type: string
enum:
- BILLING_AGREEMENT_NOT_FOUND
description:
type: string
enum:
- The requested Billing Agreement token was not found.
- title: DECLINED_DUE_TO_RELATED_TXN
properties:
issue:
type: string
enum:
- DECLINED_DUE_TO_RELATED_TXN
description:
type: string
enum:
- One or more transactions in this Order did not succeed. Since this Order is being processed as an All or None Order, if one or more transactions in this Order do not succeed, then all purchase units are marked declined and will not be processed.
- title: MISSING_PREVIOUS_REFERENCE
properties:
issue:
type: string
enum:
- MISSING_PREVIOUS_REFERENCE
description:
type: string
enum:
- For Merchant initiated network token transactions, either the payment_source.card.stored_credential.previous_network_transaction_reference or payment_source.card.stored_credential.previous_transaction_reference must be included in the request.
- title: MISSING_CRYPTOGRAM
properties:
issue:
type: string
enum:
- MISSING_CRYPTOGRAM
description:
type: string
enum:
- Cryptogram is mandatory for any customer initiated network token transactions.
- title: CARD_BRAND_NOT_SUPPORTED
properties:
issue:
type: string
enum:
- CARD_BRAND_NOT_SUPPORTED
description:
type: string
enum:
- Processing of this card brand is not supported. Please use another card to continue with this transaction.
- title: COMPLIANCE_VIOLATION
properties:
issue:
type: string
enum:
- COMPLIANCE_VIOLATION
description:
type: string
enum:
- Transaction is declined due to compliance violation.
- title: DOMESTIC_TRANSACTION_REQUIRED
properties:
issue:
type: string
enum:
- DOMESTIC_TRANSACTION_REQUIRED
description:
type: string
enum:
- This transaction requires the payee and payer to be resident in the same country, a domestic transaction is required to create this payment.
- title: DUPLICATE_INVOICE_ID
properties:
issue:
type: string
enum:
- DUPLICATE_INVOICE_ID
description:
type: string
enum:
- Duplicate Invoice ID detected. To avoid a potential duplicate transaction you
# --- truncated at 32 KB (395 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/paypal/refs/heads/main/openapi/paypal-orders-api-openapi.yml