PayPal Catalog Products API
The PayPal Catalog Products API lets merchants create and manage product definitions used across orders, subscriptions, and invoicing.
The PayPal Catalog Products API lets merchants create and manage product definitions used across orders, subscriptions, and invoicing.
openapi: 3.0.3
info:
title: Paypal Catalog Products
description: Merchants can use the Catalog Products API to create products, which are goods and services.
version: '1.0'
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: Products
description: Use `/products` resource to create and manage products.
externalDocs:
url: https://developer.paypal.com/docs/api/catalog-products/v1/
paths:
"/v1/catalogs/products":
post:
summary: Paypal Create product
description: Creates a product.
operationId: products.create
responses:
'200':
description: A successful request returns the HTTP `200 OK` status code and a JSON response body that shows product details.
content:
application/json:
schema:
"$ref": "#/components/schemas/product"
'201':
description: A successful request returns the HTTP `201 Created` status code and a JSON response body that shows product details.
content:
application/json:
schema:
"$ref": "#/components/schemas/product"
'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/products.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/product_request_POST"
examples:
product_request_POST:
value:
name: Video Streaming Service
description: Video streaming service
type: SERVICE
category: SOFTWARE
image_url: https://example.com/streaming.jpg
home_url: https://example.com/home
security:
- Oauth2:
- https://uri.paypal.com/services/subscriptions
tags:
- Products
get:
summary: Paypal List products
description: Lists products.
operationId: products.list
responses:
'200':
description: A successful request returns the HTTP `200 OK` status code and a JSON response body that lists products with details.
content:
application/json:
schema:
"$ref": "#/components/schemas/product_collection"
'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/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"
'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/page_size"
- "$ref": "#/components/parameters/page"
- "$ref": "#/components/parameters/total_required"
security:
- Oauth2:
- https://uri.paypal.com/services/subscriptions
tags:
- Products
"/v1/catalogs/products/{product_id}":
get:
summary: Paypal Show product details
description: Shows details for a product, by ID.
operationId: products.get
responses:
'200':
description: A successful request returns the HTTP `200 OK` status code and a JSON response body that shows product details.
content:
application/json:
schema:
"$ref": "#/components/schemas/product"
'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/product_id"
security:
- Oauth2:
- https://uri.paypal.com/services/subscriptions
tags:
- Products
patch:
summary: Paypal Update product
description: Updates a product, by ID. 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>add, replace, remove</td></tr><tr><td><code>category</code></td><td>add, replace, remove</td></tr><tr><td><code>image_url</code></td><td>add, replace, remove</td></tr><tr><td><code>home_url</code></td><td>add, replace, remove</td></tr></tbody></table>
operationId: products.patch
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/products.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/products.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/product_id"
requestBody:
content:
application/json:
schema:
"$ref": "#/components/schemas/patch_request"
examples:
patch_request:
value:
- op: replace
path: "/description"
value: Premium video streaming service
security:
- Oauth2:
- https://uri.paypal.com/services/subscriptions
tags:
- Products
components:
securitySchemes:
Oauth2:
type: oauth2
description: Oauth 2.0 authentication
flows:
clientCredentials:
tokenUrl: "/v1/oauth2/token"
scopes:
https://uri.paypal.com/services/subscriptions: Create and manage products
responses:
default:
description: The default response.
content:
application/json:
schema:
"$ref": "#/components/schemas/error_default"
schemas:
'400':
properties:
details:
type: array
items:
anyOf:
- title: INVALID_PARAMETER_VALUE
properties:
issue:
type: string
enum:
- INVALID_PARAMETER_VALUE
description:
type: string
enum:
- The value of a field is invalid.
'401':
properties:
details:
type: array
items:
anyOf:
- title: INVALID_ACCOUNT_STATUS
properties:
issue:
type: string
enum:
- INVALID_ACCOUNT_STATUS
description:
type: string
enum:
- Account validations failed for the user.
'403':
properties:
details:
type: array
items:
anyOf:
- title: PERMISSION_DENIED
properties:
issue:
type: string
enum:
- PERMISSION_DENIED
description:
type: string
enum:
- You do not have permission to access or perform operations on this resource.
'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.
'422':
properties:
details:
type: array
items:
anyOf:
- title: USER_ACCOUNT_CLOSED
properties:
issue:
type: string
enum:
- USER_ACCOUNT_CLOSED
description:
type: string
enum:
- User account locked or closed.
- title: DUPLICATE_RESOURCE_IDENTIFIER
properties:
issue:
type: string
enum:
- DUPLICATE_RESOURCE_IDENTIFIER
description:
type: string
enum:
- Identifier must be unique.
- title: COUNTRY_NOT_SUPPORTED
properties:
issue:
type: string
enum:
- COUNTRY_NOT_SUPPORTED
description:
type: string
enum:
- This merchant country is not currently supported.
error_details:
title: Error Details
type: object
description: The error details. Required for client-side `4XX` errors.
properties:
field:
type: string
description: The field that caused the error. If this field is in the body, set this value to the field's JSON pointer value. Required for client-side errors.
value:
type: string
description: The value of the field that caused the error.
location:
"$ref": "#/components/schemas/error_location"
issue:
type: string
description: The unique, fine-grained application-level error code.
description:
type: string
description: The human-readable description for an issue. The description can change over the lifetime of an API, so clients must not depend on this value.
required:
- issue
error_location:
type: string
description: The location of the field that caused the error. Value is `body`, `path`, or `query`.
enum:
- body
- path
- query
default: body
error_default:
description: The default error response.
oneOf:
- "$ref": "#/components/schemas/error_400"
- "$ref": "#/components/schemas/error_401"
- "$ref": "#/components/schemas/error_403"
- "$ref": "#/components/schemas/error_404"
- "$ref": "#/components/schemas/error_409"
- "$ref": "#/components/schemas/error_415"
- "$ref": "#/components/schemas/error_422"
- "$ref": "#/components/schemas/error_500"
- "$ref": "#/components/schemas/error_503"
error_link_description:
title: Link Description
description: The request-related [HATEOAS link](/api/rest/responses/#hateoas-links) information.
type: object
required:
- href
- rel
properties:
href:
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.
type: string
minLength: 0
maxLength: 20000
pattern: "^.*$"
rel:
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).
type: string
minLength: 0
maxLength: 100
pattern: "^.*$"
method:
description: The HTTP method required to make the related call.
type: string
minLength: 3
maxLength: 6
pattern: "^[A-Z]*$"
enum:
- GET
- POST
- PUT
- DELETE
- PATCH
error_400:
type: object
title: Bad Request Error
description: Request is not well-formed, syntactically incorrect, or violates schema.
properties:
name:
type: string
enum:
- INVALID_REQUEST
message:
type: string
enum:
- Request is not well-formed, syntactically incorrect, or violates schema.
details:
type: array
items:
"$ref": "#/components/schemas/error_details"
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"
error_401:
type: object
title: Unauthorized Error
description: Authentication failed due to missing Authorization header, or invalid authentication credentials.
properties:
name:
type: string
enum:
- AUTHENTICATION_FAILURE
message:
type: string
enum:
- Authentication failed due to missing authorization header, or invalid authentication credentials.
details:
type: array
items:
"$ref": "#/components/schemas/error_details"
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"
error_403:
type: object
title: Not Authorized Error
description: 'The client is not authorized to access this resource, although it may have valid credentials. '
properties:
name:
type: string
enum:
- NOT_AUTHORIZED
message:
type: string
enum:
- Authorization failed due to insufficient permissions.
details:
type: array
items:
"$ref": "#/components/schemas/error_details"
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"
error_404:
type: object
title: Not found Error
description: The server has not found anything matching the request URI. This either means that the URI is incorrect or the resource is not available.
properties:
name:
type: string
enum:
- RESOURCE_NOT_FOUND
message:
type: string
enum:
- The specified resource does not exist.
details:
type: array
items:
"$ref": "#/components/schemas/error_details"
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"
error_409:
type: object
title: Resource Conflict Error
description: The server has detected a conflict while processing this request.
properties:
name:
type: string
enum:
- RESOURCE_CONFLICT
message:
type: string
enum:
- The server has detected a conflict while processing this request.
details:
type: array
items:
"$ref": "#/components/schemas/error_details"
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"
error_415:
type: object
title: Unsupported Media Type Error
description: The server does not support the request payload's media type.
properties:
name:
type: string
enum:
- UNSUPPORTED_MEDIA_TYPE
message:
type: string
enum:
- The server does not support the request payload's media type.
details:
type: array
items:
"$ref": "#/components/schemas/error_details"
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"
error_422:
type: object
title: Unprocessable Entity Error
description: The requested action cannot be performed and may require interaction with APIs or processes outside of the current request. This is distinct from a 500 response in that there are no systemic problems limiting the API from performing the request.
properties:
name:
type: string
enum:
- UNPROCESSABLE_ENTITY
message:
type: string
enum:
- The requested action could not be performed, semantically incorrect, or failed business validation.
details:
type: array
items:
"$ref": "#/components/schemas/error_details"
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"
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
error_503:
type: object
title: Service Unavailable Error
description: The server is temporarily unable to handle the request, for example, because of planned maintenance or downtime.
properties:
name:
type: string
enum:
- SERVICE_UNAVAILABLE
message:
type: string
enum:
- Service Unavailable.
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: SERVICE_UNAVAILABLE
message: Service Unavailable.
debug_id: 90957fca61718
information_link: https://developer.paypal.com/docs/api/orders/v2/#error-SERVICE_UNAVAILABLE
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})$"
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
product_collection_element:
title: Product Element
description: The details for a product in the collection response.
type: object
properties:
id:
type: string
description: The ID of the product.
minLength: 6
maxLength: 50
readOnly: true
name:
type: string
description: The product name.
minLength: 1
maxLength: 127
description:
type: string
description: The product description.
minLength: 1
maxLength: 256
create_time:
description: The date and time when the product was created, 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/overview/#hateoas-links).
readOnly: true
items:
"$ref": "#/components/schemas/link_description"
readOnly: true
product_collection:
title: Product Collection
description: The list of products, with details.
type: object
properties:
products:
type: array
description: An array of products.
minItems: 1
maxItems: 32767
items:
"$ref": "#/components/schemas/product_collection_element"
total_items:
type: integer
description: The total number of items.
minimum: 0
maximum: 500000000
total_pages:
type: integer
description: The total number of pages.
minimum: 0
maximum: 100000000
links:
type: array
description: An array of request-related [HATEOAS links](/docs/api/overview/#hateoas-links).
readOnly: true
items:
"$ref": "#/components/schemas/link_description"
readOnly: true
product_category:
type: string
description: The product category.
title: Product Category
minLength: 4
maxLength: 256
pattern: "^[A-Z_]+$"
enum:
- AC_REFRIGERATION_REPAIR
- ACADEMIC_SOFTWARE
- ACCESSORIES
- ACCOUNTING
- ADULT
- ADVERTISING
- AFFILIATED_AUTO_RENTAL
- AGENCIES
- AGGREGATORS
- AGRICULTURAL_COOPERATIVE_FOR_MAIL_ORDER
- AIR_CARRIERS_AIRLINES
- AIRLINES
- AIRPORTS_FLYING_FIELDS
- ALCOHOLIC_BEVERAGES
- AMUSEMENT_PARKS_CARNIVALS
- ANIMATION
- ANTIQUES
- APPLIANCES
- AQUARIAMS_SEAQUARIUMS_DOLPHINARIUMS
- ARCHITECTURAL_ENGINEERING_AND_SURVEYING_SERVICES
- ART_AND_CRAFT_SUPPLIES
- ART_DEALERS_AND_GALLERIES
- ARTIFACTS_GRAVE_RELATED_AND_NATIVE_AMERICAN_CRAFTS
- ARTS_AND_CRAFTS
- ARTS_CRAFTS_AND_COLLECTIBLES
- AUDIO_BOOKS
- AUTO_ASSOCIATIONS_CLUBS
- AUTO_DEALER_USED_ONLY
- AUTO_RENTALS
- AUTO_SERVICE
- AUTOMATED_FUEL_DISPENSERS
- AUTOMOBILE_ASSOCIATIONS
- AUTOMOTIVE
- AUTOMOTIVE_REPAIR_SHOPS_NON_DEALER
- AUTOMOTIVE_TOP_AND_BODY_SHOPS
- AVIATION
- BABIES_CLOTHING_AND_SUPPLIES
- BABY
- BANDS_ORCHESTRAS_ENTERTAINERS
- BARBIES
- BATH_AND_BODY
- BATTERIES
- BEAN_BABIES
- BEAUTY
- BEAUTY_AND_FRAGRANCES
- BED_AND_BATH
- BICYCLE_SHOPS_SALES_AND_SERVICE
- BICYCLES_AND_ACCESSORIES
- BILLIARD_POOL_ESTABLISHMENTS
- BOAT_DEALERS
- BOAT_RENTALS_AND_LEASING
- BOATING_SAILING_AND_ACCESSORIES
- BOOKS
- BOOKS_AND_MAGAZINES
- BOOKS_MANUSCRIPTS
- BOOKS_PERIODICALS_AND_NEWSPAPERS
- BOWLING_ALLEYS
- BULLETIN_BOARD
- BUS_LINE
- BUS_LINES_CHARTERS_TOUR_BUSES
- BUSINESS
- BUSINESS_AND_SECRETARIAL_SCHOOLS
- BUYING_AND_SHOPPING_SERVICES_AND_CLUBS
- CABLE_SATELLITE_AND_OTHER_PAY_TELEVISION_AND_RADIO_SERVICES
- CABLE_SATELLITE_AND_OTHER_PAY_TV_AND_RADIO
- CAMERA_AND_PHOTOGRAPHIC_SUPPLIES
- CAMERAS
- CAMERAS_AND_PHOTOGRAPHY
- CAMPER_RECREATIONAL_AND_UTILITY_TRAILER_DEALERS
- CAMPING_AND_OUTDOORS
- CAMPING_AND_SURVIVAL
- CAR_AND_TRUCK_DEALERS
- CAR_AND_TRUCK_DEALERS_USED_ONLY
- CAR_AUDIO_AND_ELECTRONICS
- CAR_RENTAL_AGENCY
- CATALOG_MERCHANT
- CATALOG_RETAIL_MERCHANT
- CATERING_SERVICES
- CHARITY
- CHECK_CASHIER
- CHILD_CARE_SERVICES
- CHILDREN_BOOKS
- CHIROPODISTS_PODIATRISTS
- CHIROPRACTO
# --- truncated at 32 KB (55 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/paypal/refs/heads/main/openapi/paypal-catalog-products-openapi-original.yml