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/paypal-plans-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: Paypal Subscriptions Authorizations Plans 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: Plans
paths:
/v1/billing/plans:
post:
summary: Create plan
description: Creates a plan that defines pricing and billing cycle details for subscriptions.
operationId: plans.create
responses:
'200':
description: A successful request returns the HTTP `200 OK` status code and a JSON response body that shows billing plan details.
content:
application/json:
schema:
$ref: '#/components/schemas/plan'
examples:
plan:
value:
id: P-5ML4271244454362WXNWU5NQ
product_id: PROD-XXCD1234QWER65782
name: Video Streaming Service Plan
description: Video Streaming Service basic plan
status: ACTIVE
billing_cycles:
- frequency:
interval_unit: MONTH
interval_count: 1
tenure_type: TRIAL
sequence: 1
total_cycles: 2
pricing_scheme:
fixed_price:
value: '3'
currency_code: USD
version: 1
create_time: '2020-05-27T12:13:51Z'
update_time: '2020-05-27T12:13:51Z'
- frequency:
interval_unit: MONTH
interval_count: 1
tenure_type: TRIAL
sequence: 2
total_cycles: 3
pricing_scheme:
fixed_price:
currency_code: USD
value: '6'
version: 1
create_time: '2020-05-27T12:13:51Z'
update_time: '2020-05-27T12:13:51Z'
- frequency:
interval_unit: MONTH
interval_count: 1
tenure_type: REGULAR
sequence: 3
total_cycles: 12
pricing_scheme:
fixed_price:
currency_code: USD
value: '10'
version: 1
create_time: '2020-05-27T12:13:51Z'
update_time: '2020-05-27T12:13:51Z'
payment_preferences:
auto_bill_outstanding: true
setup_fee:
value: '10'
currency_code: USD
setup_fee_failure_action: CONTINUE
payment_failure_threshold: 3
taxes:
percentage: '10'
inclusive: false
create_time: '2020-05-27T12:13:51Z'
update_time: '2020-05-27T12:13:51Z'
links:
- href: https://api-m.paypal.com/v1/billing/plans/P-5ML4271244454362WXNWU5NQ
rel: self
method: GET
- href: https://api-m.paypal.com/v1/billing/plans/P-5ML4271244454362WXNWU5NQ
rel: edit
method: PATCH
- href: https://api-m.paypal.com/v1/billing/plans/P-5ML4271244454362WXNWU5NQ/deactivate
rel: deactivate
method: POST
- href: https://api-m.paypal.com/v1/billing/plans/P-5ML4271244454362WXNWU5NQ/update-pricing-schemes
rel: edit
method: POST
'201':
description: A successful request returns the HTTP `201 Created` status code and a JSON response body that shows billing plan details.
content:
application/json:
schema:
$ref: '#/components/schemas/plan'
'400':
description: Bad Request. Request is not well-formed, syntactically incorrect, or violates schema.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_400'
- $ref: '#/components/schemas/plans.create-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: 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/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/prefer'
- $ref: '#/components/parameters/paypal_request_id'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/plan_request_POST'
examples:
plan_request_post:
value:
product_id: PROD-XXCD1234QWER65782
name: Video Streaming Service Plan
description: Video Streaming Service basic plan
status: ACTIVE
billing_cycles:
- frequency:
interval_unit: MONTH
interval_count: 1
tenure_type: TRIAL
sequence: 1
total_cycles: 2
pricing_scheme:
fixed_price:
value: '3'
currency_code: USD
- frequency:
interval_unit: MONTH
interval_count: 1
tenure_type: TRIAL
sequence: 2
total_cycles: 3
pricing_scheme:
fixed_price:
value: '6'
currency_code: USD
- frequency:
interval_unit: MONTH
interval_count: 1
tenure_type: REGULAR
sequence: 3
total_cycles: 12
pricing_scheme:
fixed_price:
value: '10'
currency_code: USD
payment_preferences:
auto_bill_outstanding: true
setup_fee:
value: '10'
currency_code: USD
setup_fee_failure_action: CONTINUE
payment_failure_threshold: 3
taxes:
percentage: '10'
inclusive: false
security:
- Oauth2:
- https://uri.paypal.com/services/subscriptions
tags:
- Plans
get:
summary: List plans
description: Lists billing plans.
operationId: plans.list
responses:
'200':
description: A successful request returns the HTTP `200 OK` status code and a JSON response body that lists billing plans.
content:
application/json:
schema:
$ref: '#/components/schemas/plan_collection'
'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'
'403':
description: Authorization failed due to insufficient permissions.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_403'
- $ref: '#/components/schemas/403'
'404':
description: The specified resource does not exist.
content:
application/json:
schema:
$ref: '#/components/schemas/error_404'
'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/prefer'
- $ref: '#/components/parameters/product_id'
- $ref: '#/components/parameters/plan_ids'
- $ref: '#/components/parameters/page_size'
- $ref: '#/components/parameters/page'
- $ref: '#/components/parameters/total_required'
security:
- Oauth2:
- https://uri.paypal.com/services/subscriptions
tags:
- Plans
/v1/billing/plans/{id}:
get:
summary: Show plan details
description: Shows details for a plan, by ID.
operationId: plans.get
responses:
'200':
description: A successful request returns the HTTP `200 OK` status code and a JSON response body that shows plan details.
content:
application/json:
schema:
$ref: '#/components/schemas/plan'
'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: Authorization failed due to insufficient permissions.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_403'
- $ref: '#/components/schemas/403'
'404':
description: The specified resource does not exist.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_404'
- $ref: '#/components/schemas/404'
'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'
security:
- Oauth2:
- https://uri.paypal.com/services/subscriptions
tags:
- Plans
patch:
summary: Update plan
description: Updates a plan with the `CREATED` or `ACTIVE` status. For an `INACTIVE` plan, you can make only status updates.<br/>You can patch these attributes and objects:<table><thead><tr><th>Attribute or object</th><th>Operations</th></tr></thead><tbody><tr><td><code>description</code></td><td>replace</td></tr><tr><td><code>payment_preferences.auto_bill_outstanding</code></td><td>replace</td></tr><tr><td><code>taxes.percentage</code></td><td>replace</td></tr><tr><td><code>payment_preferences.payment_failure_threshold</code></td><td>replace</td></tr><tr><td><code>payment_preferences.setup_fee</code></td><td>replace</td></tr><tr><td><code>payment_preferences.setup_fee_failure_action</code></td><td>replace</td></tr><tr><td><code>name</code></td><td>replace</td></tr></tbody></table>
operationId: plans.patch
responses:
'204':
description: A successful request returns the HTTP `204 No Content` status code with no 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/plans.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'
'403':
description: Authorization failed due to insufficient permissions.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_403'
- $ref: '#/components/schemas/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/plans.patch-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'
requestBody:
$ref: '#/components/requestBodies/patch_request'
security:
- Oauth2:
- https://uri.paypal.com/services/subscriptions
tags:
- Plans
/v1/billing/plans/{id}/activate:
post:
summary: Activate plan
description: Activates a plan, by ID.
operationId: plans.activate
responses:
'204':
description: A successful request returns the HTTP `204 No Content` status code with no JSON response body.
'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: Authorization failed due to insufficient permissions.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_403'
- $ref: '#/components/schemas/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/plans.activate-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'
security:
- Oauth2:
- https://uri.paypal.com/services/subscriptions
tags:
- Plans
/v1/billing/plans/{id}/deactivate:
post:
summary: Deactivate plan
description: Deactivates a plan, by ID.
operationId: plans.deactivate
responses:
'204':
description: A successful request returns the HTTP `204 No Content` status code with no JSON response body.
'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: Authorization failed due to insufficient permissions.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_403'
- $ref: '#/components/schemas/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/plans.deactivate-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'
security:
- Oauth2:
- https://uri.paypal.com/services/subscriptions
tags:
- Plans
/v1/billing/plans/{id}/update-pricing-schemes:
post:
summary: Update pricing
description: Updates pricing for a plan. For example, you can update a regular billing cycle from $5 per month to $7 per month.
operationId: plans.update-pricing-schemes
responses:
'204':
description: A successful request returns the HTTP `204 No Content` status code with no JSON response body.
'400':
description: Bad Request. Request is not well-formed, syntactically incorrect, or violates schema.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_400'
- $ref: '#/components/schemas/plans.update-pricing-schemes-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: Authorization failed due to insufficient permissions.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/error_403'
- $ref: '#/components/schemas/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/plans.update-pricing-schemes-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'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/update_pricing_schemes_list_request'
examples:
update_pricing_schemes_list_request:
value:
pricing_schemes:
- billing_cycle_sequence: 1
pricing_scheme:
fixed_price:
value: '50'
currency_code: USD
- billing_cycle_sequence: 2
pricing_scheme:
fixed_price:
value: '100'
currency_code: USD
pricing_model: VOLUME
tiers:
- starting_quantity: '1'
ending_quantity: '1000'
amount:
value: '150'
currency_code: USD
- starting_quantity: '1001'
amount:
value: '250'
currency_code: USD
security:
- Oauth2:
- https://uri.paypal.com/services/subscriptions
tags:
- Plans
components:
schemas:
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
link_description:
type: object
title: Link Description
description: The request-related [HATEOAS link](/docs/api/reference/api-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
pricing_scheme:
title: Pricing Scheme
description: The pricing scheme details.
type: object
properties:
version:
type: integer
description: The version of the pricing scheme.
minimum: 0
maximum: 999
readOnly: true
fixed_price:
description: The fixed amount to charge for the subscription. The changes to fixed amount are applicable to both existing and future subscriptions. For existing subscriptions, payments within 10 days of price change are not affected.
$ref: '#/components/schemas/money'
pricing_model:
type: string
description: The pricing model for tiered plan. The `tiers` parameter is required.
minLength: 1
maxLength: 24
pattern: ^[A-Z_]+$
enum:
- VOLUME
- TIERED
tiers:
type: array
description: An array of pricing tiers which are used for billing volume/tiered plans. pricing_model field has to be specified.
minItems: 1
maxItems: 32
items:
$ref: '#/components/schemas/pricing_tier'
create_time:
description: The date and time when this pricing scheme was created, in [Internet date and time format](https://tools.ietf.org/html/rfc3339#section-5.6).
readOnly: true
$ref: '#/components/schemas/date_time'
update_time:
description: The date and time when this pricing scheme was last updated, in [Internet date and time format](https://tools.ietf.org/html/rfc3339#section-5.6).
readOnly: true
$ref: '#/components/schemas/date_time'
money:
type: object
title: Money
description: The currency and amount for a financial transaction, such as a balance or payment due.
properties:
currency_code:
$ref: '#/components/schemas/currency_code'
value:
type: string
description: The value, which might be:<ul><li>An integer for currencies like `JPY` that are not typically fractional.</li><li>A decimal fraction for currencies like `TND` that are subdivided into thousandths.</li></ul>For the required number of decimal places for a currency code, see [Currency Codes](/docs/integration/direct/rest/currency-codes/).
maxLength: 32
pattern: ^((-?[0-9]+)|(-?([0-9]+)?[.][0-9]+))$
required:
- currency_code
- value
date_time:
type: string
description: The date and time, in [Internet date and time format](https://tools.ietf.org/html/rfc3339#section-5.6). Seconds are required while fractional seconds are optional.<blockquote><strong>Note:</strong> The regular expression provides guidance but does not reject all invalid dates.</blockquote>
format: ppaas_date_time_v3
minLength: 20
maxLength: 64
pattern: ^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])[T,t]([0-1][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)([.][0-9]+)?([Zz]|[+-][0-9]{2}:[0-9]{2})$
plan:
title: Plan
description: The plan details.
type: object
properties:
id:
type: string
description: The unique PayPal-generated ID for the plan.
minLength: 3
maxLength: 50
readOnly: true
product_id:
type: string
description: The ID for the product.
minLength: 6
maxLength: 50
name:
type: string
description: The plan name.
minLength: 1
maxLength: 127
status:
type: string
description: The plan status.
minLength: 1
maxLength: 24
pattern: ^[A-Z_]+$
enum:
- CREATED
- INACTIVE
- ACTIVE
description:
type: string
description: The detailed description of the plan.
minLength: 1
maxLength: 127
billing_cycles:
type: array
description: An array of billing cycles for trial billing and regular billing. A plan can have at most two trial cycles and only one regular cycle.
minItems: 1
maxItems: 12
items:
$ref: '#/components/schemas/billing_cycle'
payment_preferences:
$ref: '#/components/schemas/payment_preferences'
taxes:
$ref: '#/components/schemas/taxes'
quantity_supported:
type: boolean
description: Indicates whether you can subscribe to this plan by providing a quantity for the goods or service.
default: false
create_time:
description: The date and time when the plan was created, in [Internet date and time format](https://tools.ietf.org/html/rfc3339#section-5.6).
readOnly: true
$ref: '#/components/schemas/date_time'
update_time:
description: The date and time when the plan was last updated, in [Internet date and time format](https://tools.ietf.org/html/rfc3339#section-5.6).
readOnly: true
$ref: '#/components/schemas/date_time'
links:
type: array
description: An array of request-related [HATEOAS links](/docs/api/reference/api-responses/#hateoas-links).
readOnly: true
minItems: 1
maxItems: 10
items:
$ref: '#/components/schemas/link_description'
readOnly: true
'404':
properties:
details:
type: array
items:
anyOf:
- title: INVALID_RESOURCE_ID
properties:
issue:
type: string
enum:
- INVALID_RESOURCE_ID
description:
type: string
enum:
- Specified resource ID does not exist. Please check the resource ID and try again.
currency_code:
description: The [three-character ISO-4217 currency code](/docs/integration/direct/rest/currency-codes/) that identifies the currency.
type: string
format: ppaas_common_currency_code_v2
minLength: 3
maxLength: 3
payment_preferences:
title: Payment Preferences
description: The payment preferences for a subscription.
type: object
properties:
auto_bill_outstanding:
type: boolean
description: Indicates whether to automatically bill the outstanding amount in the next billing cycle.
default: true
setup_fee:
description: The initial set-up fee for the service.
$ref: '#/components/schemas/money'
setup_fee_failure_action:
type: string
description: The action to take on the subscription if the initial payment for the setup fails.
minLength: 1
maxLength: 24
pattern: ^[A-Z_]+$
default: CANCE
# --- truncated at 32 KB (74 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/paypal/refs/heads/main/openapi/paypal-plans-api-openapi.yml