PayPal Payment Experience API

The PayPal Payment Experience API lets merchants create web experience profiles to customize the look, feel, and flow of PayPal checkout pages.

OpenAPI Specification

paypal-payment-experience-openapi-original.yml Raw ↑
openapi: 3.0.3
info:
  title: Paypal Payment Experience Web Profiles
  description: Use the Payment Experience API to create seamless payment experience profiles. For information about how to create a PayPal payment with a web experience profile, see <a href="/docs/integration/direct/payment-experience/">Web experience profiles</a>.
  version: '1.3'
  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: Web-Profiles
    description: Use the `/payment-experience/web-profiles` resource to create, show details for, list, update, partially update, and delete web experience profiles.
externalDocs:
  url: https://developer.paypal.com/docs/api/payment-experience/v1/
paths:
  "/v1/payment-experience/web-profiles":
    post:
      summary: Paypal Create web experience profile
      description: Creates a web experience profile. In the JSON request body, specify the profile name and details.
      operationId: web-profile.create
      responses:
        '200':
          description: A successful request, with or without the optional <code>PayPal-Request-Id</code> request header, returns the HTTP <code>201 Created</code> status code and a JSON response body that shows the profile details and the ID of the profile. Any subsequent calls with the same <code>PayPal-Request-Id</code> request header value within a three-hour window returns the HTTP <code>200 OK</code> status code and a JSON response body that shows the profile details and the ID of the profile.
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/web_profile"
        '201':
          description: A successful request, with or without the optional <code>PayPal-Request-Id</code> request header, returns the HTTP <code>201 Created</code> status code and a JSON response body that shows the profile details and the ID of the profile. Any subsequent calls with the same <code>PayPal-Request-Id</code> request header value within a three-hour window returns the HTTP <code>200 OK</code> status code and a JSON response body that shows the profile details and the ID of the profile.
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/web_profile"
        '500':
          description: An internal server error occurred. The request returns the HTTP `500 Internal Server Error` status code.
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/error"
        default:
          description: The error response.
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/error"
      parameters:
        - "$ref": "#/components/parameters/paypal_request_id"
      requestBody:
        "$ref": "#/components/requestBodies/web_profile"
      security:
        - Oauth2:
            - https://uri.paypal.com/services/payments/payment
        - Oauth2:
            - https://uri.paypal.com/services/payments/realtimepayment
      tags:
        - Web-Profiles
    get:
      summary: Paypal List web experience profiles
      description: Lists the latest 20 web experience profiles for a merchant or subject. To show details for these or additional profiles, you can show web experience profile details by ID.
      operationId: web-profile.get-list
      responses:
        '200':
          description: A successful request returns the HTTP `200 OK` status code and a JSON response body that lists the latest 20 profiles that the merchant owns, with details. To show details for these or additional profiles, you can show web experience profile details by ID.
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/web_profile_list"
        '500':
          description: An internal server error occurred. The request returns the HTTP `500 Internal Server Error` status code.
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/error"
        default:
          description: The error response.
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/error"
      security:
        - Oauth2:
            - https://uri.paypal.com/services/payments/payment
        - Oauth2:
            - https://uri.paypal.com/services/payments/realtimepayment
      tags:
        - Web-Profiles
  "/v1/payment-experience/web-profiles/{id}":
    put:
      summary: Paypal Update web experience profile
      description: Updates a web experience profile, by ID. In the JSON request body, specify the profile details. If your request omits any profile parameters, any previously set values for those parameters are removed.
      operationId: web-profile.update
      responses:
        '204':
          description: A successful request returns the HTTP `204 No Content` status code with no JSON response body.
        '500':
          description: An internal server error occurred. The request returns the HTTP `500 Internal Server Error` status code.
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/error"
        default:
          description: The error response.
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/error"
      parameters:
        - "$ref": "#/components/parameters/id"
      requestBody:
        "$ref": "#/components/requestBodies/web_profile"
      security:
        - Oauth2:
            - https://uri.paypal.com/services/payments/payment
        - Oauth2:
            - https://uri.paypal.com/services/payments/realtimepayment
      tags:
        - Web-Profiles
    patch:
      summary: Paypal Partially update web experience profile
      description: Partially-updates a web experience profile, by ID. In the JSON request body, specify a patch object, the path of the profile location to update, and a new value.
      operationId: web-profile.partial-update
      responses:
        '204':
          description: A successful request returns the HTTP `204 No Content` status code with no JSON response body.
        '500':
          description: An internal server error occurred. The request returns the HTTP `500 Internal Server Error` status code.
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/error"
        default:
          description: The error response.
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/error"
      parameters:
        - "$ref": "#/components/parameters/id"
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/patch_request"
            examples:
              patch_request:
                value:
                  - op: add
                    path: "/presentation/brand_name"
                    value: new_brand_name
                  - op: remove
                    path: "/flow_config/landing_page_type"
      security:
        - Oauth2:
            - https://uri.paypal.com/services/payments/payment
        - Oauth2:
            - https://uri.paypal.com/services/payments/realtimepayment
      tags:
        - Web-Profiles
    get:
      summary: Paypal Show web experience profile details by ID
      description: Shows details for a web experience profile, by ID.
      operationId: web-profile.get
      responses:
        '200':
          description: A successful request returns the HTTP `200 OK` status code and a JSON response body that shows the profile details.
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/web_profile"
        '500':
          description: An internal server error occurred. The request returns the HTTP `500 Internal Server Error` status code.
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/error"
        default:
          description: The error response.
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/error"
      parameters:
        - "$ref": "#/components/parameters/id"
      security:
        - Oauth2:
            - https://uri.paypal.com/services/payments/payment
        - Oauth2:
            - https://uri.paypal.com/services/payments/realtimepayment
      tags:
        - Web-Profiles
    delete:
      summary: Paypal Delete web experience profile
      description: Deletes a web experience profile, by ID.
      operationId: web-profile.delete
      responses:
        '204':
          description: A successful request returns the HTTP `204 No Content` status code with no JSON response body.
        '500':
          description: An internal server error occurred. The request returns the HTTP `500 Internal Server Error` status code.
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/error"
        default:
          description: The error response.
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/error"
      parameters:
        - "$ref": "#/components/parameters/id"
      security:
        - Oauth2:
            - https://uri.paypal.com/services/payments/payment
        - Oauth2:
            - https://uri.paypal.com/services/payments/realtimepayment
      tags:
        - Web-Profiles
components:
  requestBodies:
    web_profile:
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/web_profile"
  securitySchemes:
    Oauth2:
      type: oauth2
      description: Oauth 2.0 authentication
      flows:
        clientCredentials:
          tokenUrl: "/v1/oauth2/token"
          scopes:
            https://uri.paypal.com/services/payments/payment: New special privileged scope available for payment and manage payment experience profiles. Available to internal clients only.
            https://uri.paypal.com/services/payments/realtimepayment: Permission to do any real-time payment and manage-payment experience profiles with support for sale, authorize, and order intents.
  schemas:
    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_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
    error_details-2:
      type: object
      title: Error Details
      description: The error details. Required for client-side `4XX` errors.
      properties:
        field:
          type: string
          description: The name of the field that caused the error.
        issue:
          type: string
          description: The reason for the error.
      required:
        - field
        - issue
    error:
      type: object
      title: Error
      description: The error information.
      properties:
        name:
          type: string
          description: The human-readable, unique name of the error.
          readOnly: true
        debug_id:
          type: string
          description: The PayPal internal ID. Used for correlation purposes.
          readOnly: true
        message:
          type: string
          description: The message that describes the error.
          readOnly: true
        information_link:
          type: string
          description: The URI to detailed information related to this error for the developer.
          readOnly: true
        details:
          type: array
          description: An array of additional details for the error.
          readOnly: true
          items:
            "$ref": "#/components/schemas/error_details-2"
      required:
        - name
        - message
        - information_link
    web_profile:
      type: object
      description: A payment web experience profile.
      title: Web Profile
      required:
        - name
      properties:
        id:
          type: string
          readOnly: true
          minLength: 22
          maxLength: 22
          description: The ID of the web experience profile.
        name:
          type: string
          minLength: 1
          maxLength: 50
          description: The web experience profile name. Must be unique for a set of profiles for a merchant.
        temporary:
          type: boolean
          description: Indicates whether the profile persists for three hours or permanently. To persist the profile permanently, set to `false`. To persist the profile for three hours, set to `true`.
        flow_config:
          type: object
          title: Flow Configuration
          description: The flow configuration parameters.
          properties:
            landing_page_type:
              type: string
              minLength: 1
              maxLength: 255
              description: The type of landing page to display on the PayPal site for user checkout. To use the non-PayPal account landing page, set to `Billing`. To use the PayPal account login landing page, set to `Login`.
              enum:
                - login
                - billing
            bank_txn_pending_url:
              type: string
              format: uri
              minLength: 1
              maxLength: 127
              description: The merchant site URL to display after a bank transfer payment. In Germany, valid only for the Giropay payment method or bank transfer payment method.
            user_action:
              type: string
              description: Presents either the **Continue** or **Pay Now** checkout flow to the customer.<br/><br/>Default is **Continue**, or `user_action=continue`. When you do not know the final payment amount, accept this default flow, which redirects the customer to the PayPal payment page with the **Continue** button. When the customer clicks **Continue**, the customer can change the payment amount.<br/><br/> When you know the final payment amount, set `user_action=commit` to choose the **Pay Now** flow, which redirects the customer to the PayPal payment page with the **Pay Now** button. When the customer clicks **Pay Now**, the payment is processed immediately.
              minLength: 1
              maxLength: 255
              enum:
                - COMMIT
            return_uri_http_method:
              type: string
              description: The HTTP method to use to redirect the customer to a return URL. Value is `GET` or `POST`.
              minLength: 1
              maxLength: 255
              enum:
                - GET
                - POST
        input_fields:
          type: object
          title: Input Field Customization
          description: The input field customization parameters.
          properties:
            no_shipping:
              type: integer
              minimum: 0
              maximum: 2
              description: Indicates whether PayPal displays shipping address fields on the experience pages. Value is:<ul><li><code>0</code>. Displays the shipping address on the PayPal pages.</li><li><code>1</code>. Redacts shipping address fields from the PayPal pages. For digital goods, this field is required and must be <code>1</code>.</li><li><code>2</code>. Gets the shipping address from the customer's account profile.</li></ul>
            address_override:
              type: integer
              minimum: 0
              maximum: 1
              description: Indicates whether to display the shipping address that is passed to this call rather than the one on file for this buyer on the PayPal experience pages. Value is:<ul><li><code>0</code>. Displays the shipping address on file.</li><li><code>1</code>. Displays the shipping address specified in this call. the customer cannot edit this shipping address.</li></ul>
        presentation:
          type: object
          title: Style and Presentation
          description: The style and presentation parameters.
          properties:
            brand_name:
              type: string
              minLength: 1
              maxLength: 127
              description: 'A label that overrides the business name in the PayPal account on the PayPal pages. Character length and limitations: 127 single-byte alphanumeric characters.'
            logo_image:
              type: string
              minLength: 1
              maxLength: 127
              description: 'A URL to the logo image. A valid media type is `.gif`, `.jpg`, or `.png`. The image''s maximum width is 190 pixels and maximum height is 60 pixels. PayPal crops images that are larger. PayPal places your logo image at the top of the cart review area. PayPal recommends that you store the image on a secure (HTTPS) server. Otherwise, web browsers display a message that checkout pages contain non-secure items. Character length and limitations: 127 single-byte alphanumeric characters.'
            locale_code:
              type: string
              minLength: 2
              maxLength: 5
              description: 'The locale of pages that the PayPal payment experience displays. A valid value is `AU`, `AT`, `BE`, `BR`, `CA`, `CH`, `CN`, `DE`, `ES`, `GB`, `FR`, `IT`, `NL`, `PL`, `PT`, `RU`, or `US`. A 5-character code is also valid for languages in these countries: `da_DK`, `he_IL`, `id_ID`, `ja_JP`, `no_NO`, `pt_BR`, `ru_RU`, `sv_SE`, `th_TH`, `zh_CN`, `zh_HK`, or `zh_TW`.'
    web_profile_list:
      type: array
      title: Web Profile List
      description: An array of web profiles.
      minItems: 1
      maxItems: 20
      items:
        "$ref": "#/components/schemas/web_profile"
    patch:
      type: object
      title: Patch
      description: The JSON patch object to apply partial updates to resources.
      properties:
        op:
          type: string
          description: The operation.
          enum:
            - add
            - remove
            - replace
            - move
            - copy
            - test
        path:
          type: string
          description: The <a href="https://tools.ietf.org/html/rfc6901">JSON Pointer</a> to the target document location at which to complete the operation.
        value:
          title: Patch Value
          description: The value to apply. The <code>remove</code> operation does not require a value.
        from:
          type: string
          description: The <a href="https://tools.ietf.org/html/rfc6901">JSON Pointer</a> to the target document location from which to move the value. Required for the <code>move</code> operation.
      required:
        - op
    patch_request:
      type: array
      title: Patch Request
      description: An array of JSON patch objects to apply partial updates to resources.
      items:
        "$ref": "#/components/schemas/patch"
  parameters:
    paypal_request_id:
      name: PayPal-Request-Id
      in: header
      description: The server stores keys for three hours.
      required: true
      schema:
        type: string
    id:
      name: id
      in: path
      description: The ID of the profile to delete.
      required: true
      schema:
        type: string