<!--
{
  "availability" : [
    "iOS: 8.0.0 -",
    "iPadOS: 8.0.0 -",
    "macCatalyst: 13.1.0 -",
    "macOS: 11.0.0 -",
    "visionOS: 1.0.0 -",
    "watchOS: 3.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "PassKit",
  "identifier" : "/documentation/PassKit/PKPaymentRequest",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "PassKit (Apple Pay and Wallet)"
    ],
    "preciseIdentifier" : "c:objc(cs)PKPaymentRequest"
  },
  "title" : "PKPaymentRequest"
}
-->

# PKPaymentRequest

An object that represents a request for payment, including details about payment-processing capabilities, the payment amount, and shipping information.

```
class PKPaymentRequest
```

## Overview

Use a [`PKPaymentRequest`](/documentation/PassKit/PKPaymentRequest) object to represent a merchant request for payment for goods or services. Your app creates a payment request as soon as a person taps the Apple Pay button to make a purchase. Tapping the Apple Pay button in your app initiates the payment request process. If your customers need to enter a discount code, choose a shipping method, or any other task, your app needs to ask for that information *before* they tap the Apple Pay button.

A payment request object contains information that describes the purchase, including information about the merchant, available payment networks, the payment summary, billing and shipping details, coupon codes, custom data, error messages, and more.

A typical payment request is for a one-time payment. To support different types of payment requests, include one of the following options in the payment request object:

|Payment type request                                         |Property to set                                                                                        |
|-------------------------------------------------------------|-------------------------------------------------------------------------------------------------------|
|Recurring payments                                           |``doc://com.apple.passkit/documentation/PassKit/PKPaymentRequest/recurringPaymentRequest``             |
|Automatic reload payments                                    |``doc://com.apple.passkit/documentation/PassKit/PKPaymentRequest/automaticReloadPaymentRequest``       |
|Deferred payments                                            |``doc://com.apple.passkit/documentation/PassKit/PKPaymentRequest/deferredPaymentRequest``              |
|Indicating eligibility for Apple Pay Later                   |``doc://com.apple.passkit/documentation/PassKit/PKPaymentRequest/applePayLaterAvailability-3dxrt``     |
|Multiple payment tokens to support for multimerchant payments|``doc://com.apple.passkit/documentation/PassKit/PKPaymentRequest/multiTokenContexts``                  |
|Exclude an Apple Pay card from the payment sheet             |``doc://com.apple.passkit/documentation/PassKit/PKPaymentRequest/unsupportedPrimaryAccountIdentifiers``|

> Note:
> You can set only one optional payment request type on a payment request object.

### Request a recurring payment

Use the [`recurringPaymentRequest`](/documentation/PassKit/PKPaymentRequest/recurringPaymentRequest) property to set up a recurring payment request using the [`PKRecurringPaymentRequest`](/documentation/PassKit/PKRecurringPaymentRequest) and [`PKRecurringPaymentSummaryItem`](/documentation/PassKit/PKRecurringPaymentSummaryItem) classes. Recurring payments, such as subscriptions, can feature different payment intervals (for example, annually or monthly) and billing cycles, such as regular or trial.

### Request an automatic reload payment

Use the [`automaticReloadPaymentRequest`](/documentation/PassKit/PKPaymentRequest/automaticReloadPaymentRequest) property to set up an automatic reload payment request using the [`PKAutomaticReloadPaymentRequest`](/documentation/PassKit/PKAutomaticReloadPaymentRequest) and [`PKAutomaticReloadPaymentSummaryItem`](/documentation/PassKit/PKAutomaticReloadPaymentSummaryItem) classes. You can set up automatic reload payments, such as store card top-ups, that feature a balance threshold and a reload amount. The card automatically reloads with the reload amount when the account drops below the balance threshold.

### Request a deferred payment

Use the [`deferredPaymentRequest`](/documentation/PassKit/PKPaymentRequest/deferredPaymentRequest) property to set up a deferred payment request using the [`PKDeferredPaymentRequest`](/documentation/PassKit/PKDeferredPaymentRequest) class. Deferred payments include purchases, such as hotel bookings or pre-orders, where the card renders payment at a later date upon the receipt of goods or delivery of services.

### Set the Apple Pay Later mode

Use the [`applePayLaterAvailability`](/documentation/PassKit/PKPaymentRequest/applePayLaterAvailability-3dxrt) property to indicate whether this payment request is eligible for Apple Pay Later. You can indicate that Apple Pay Later is unavailable for certain kinds of transactions, including subscriptions, items that require recurring payments or prohibited items, such as gift cards.

### Request multitoken or multimerchant payments

Use the [`multiTokenContexts`](/documentation/PassKit/PKPaymentRequestUpdate/multiTokenContexts) property to request payment data for multimerchant payments with the [`PKPaymentTokenContext`](/documentation/PassKit/PKPaymentTokenContext) class. You can set up multitoken transactions to process and display payment requests with multiple merchants on one payment sheet, for example, a booking site where someone pays for a hotel, flight, and car rental from different merchants.

### Exclude an Apple Pay from the payment sheet

Use the [`unsupportedPrimaryAccountIdentifiers`](/documentation/PassKit/PKPaymentRequest/unsupportedPrimaryAccountIdentifiers) property to exclude specific Apple Pay cards that you’ve issued from appearing in the payment sheet as a pay option. For example, if a person is topping up a stored value card, you can exclude the card being topped up from the payment options.

## Topics

### Selecting the payment networks

[`availableNetworks()`](/documentation/PassKit/PKPaymentRequest/availableNetworks())

Returns the list of available payment methods that Apple Pay supports.

[`supportedNetworks`](/documentation/PassKit/PKPaymentRequest/supportedNetworks)

The payment methods that you support.

[`PKPaymentNetwork`](/documentation/PassKit/PKPaymentNetwork)

A type that represents a payment method.

### Setting merchant information

[`PKPaymentRequest.MerchantCategoryCode`](/documentation/PassKit/PKPaymentRequest/MerchantCategoryCode-swift.struct)

An optional four-digit struct, in ISO 18245 format, that represents the type of goods or service the merchant provides for the transaction.

[`PKMerchantCategoryCode`](/documentation/PassKit/PKMerchantCategoryCode)

The optional four-digit type, in ISO 18245 format, that represents the type of goods or service the merchant provides for the transaction.

[`merchantCategoryCode`](/documentation/PassKit/PKPaymentRequest/merchantCategoryCode-7vg6z)

An optional four-digit property, in ISO 18245 format, that represents the type of goods or service the merchant provides for the transaction.

[`PKMerchantCategoryCodeNone`](/documentation/PassKit/PKMerchantCategoryCodeNone)

[`merchantIdentifier`](/documentation/PassKit/PKPaymentRequest/merchantIdentifier)

Your merchant identifier.

[`merchantCapabilities`](/documentation/PassKit/PKPaymentRequest/merchantCapabilities)

A bit field of the payment-processing protocols and card types that you support.

[`PKMerchantCapability`](/documentation/PassKit/PKMerchantCapability)

Capabilities for processing payment.

### Setting currency and region information

[`currencyCode`](/documentation/PassKit/PKPaymentRequest/currencyCode)

The three-letter ISO 4217 currency code that determines the currency the payment request uses.

[`supportedCountries`](/documentation/PassKit/PKPaymentRequest/supportedCountries)

A list of ISO 3166 country codes to limit payments to cards from specific countries or regions.

[`countryCode`](/documentation/PassKit/PKPaymentRequest/countryCode)

The merchant’s two-letter ISO 3166 country code.

### Setting the payment summary items

[`paymentSummaryItems`](/documentation/PassKit/PKPaymentRequest/paymentSummaryItems)

An array of payment summary item objects that summarize the amount of the payment.

[`PKPaymentSummaryItem`](/documentation/PassKit/PKPaymentSummaryItem)

An object that defines a summary item in a payment request, taxes, discounts, shipping, a grand total, and the like.

[`PKRecurringPaymentSummaryItem`](/documentation/PassKit/PKRecurringPaymentSummaryItem)

An object that defines a summary item for a payment that occurs repeatedly at a specified interval, such as a subscription.

[`PKDeferredPaymentSummaryItem`](/documentation/PassKit/PKDeferredPaymentSummaryItem)

An object that defines a summary item for a payment that occurs at a later date, such as a pre-order.

### Requesting recurring, automatic, and deferred payments

[`recurringPaymentRequest`](/documentation/PassKit/PKPaymentRequest/recurringPaymentRequest)

An optional request to set up a recurring payment, typically a subscription.

[`PKRecurringPaymentRequest`](/documentation/PassKit/PKRecurringPaymentRequest)

A class that represents a request to set up a recurring payment, typically a subscription.

[`automaticReloadPaymentRequest`](/documentation/PassKit/PKPaymentRequest/automaticReloadPaymentRequest)

An optional request to set up an automatic reload payment, such as a store card top-up.

[`PKAutomaticReloadPaymentRequest`](/documentation/PassKit/PKAutomaticReloadPaymentRequest)

A class that represents a request to set up an automatic reload payment, such as a store card top-up or a prepaid account.

[`deferredPaymentRequest`](/documentation/PassKit/PKPaymentRequest/deferredPaymentRequest)

A request to set up a deferred payment, such as a hotel booking or a pre-order.

[`PKDeferredPaymentRequest`](/documentation/PassKit/PKDeferredPaymentRequest)

An object that represents a request to set up a deferred payment, such as a hotel booking or a pre-order.

### Excluding cards from the payment sheet

[`unsupportedPrimaryAccountIdentifiers`](/documentation/PassKit/PKPaymentRequest/unsupportedPrimaryAccountIdentifiers)

An array of Apple Pay cards to exclude from payment.

### Requesting multitoken or multimerchant payments

[`multiTokenContexts`](/documentation/PassKit/PKPaymentRequest/multiTokenContexts)

An array of payment token contexts to request multiple payment tokens with one payment token per context.

[`PKPaymentTokenContext`](/documentation/PassKit/PKPaymentTokenContext)

A class that defines the context for a single payment token in a payment request for multimerchant payments.

### Requesting billing and shipping contact fields

[`requiredBillingContactFields`](/documentation/PassKit/PKPaymentRequest/requiredBillingContactFields)

A list of fields that you need for a billing contact to process the transaction.

[`requiredShippingContactFields`](/documentation/PassKit/PKPaymentRequest/requiredShippingContactFields)

A list of fields that you need for a shipping contact to process the transaction.

[`PKContactField`](/documentation/PassKit/PKContactField)

The fields that describe a contact.

### Providing known contact information

[`billingContact`](/documentation/PassKit/PKPaymentRequest/billingContact)

A prepopulated billing address.

[`shippingContact`](/documentation/PassKit/PKPaymentRequest/shippingContact)

A prepopulated shipping address.

[`PKContact`](/documentation/PassKit/PKContact)

An object that encapsulates contact information needed for billing and shipping.

### Setting the shipping methods and types

[Displaying a Read-Only Pickup Address](/documentation/PassKit/displaying-a-read-only-pickup-address)

Configure a payment request to display a read-only pickup address on the payment sheet.

[`shippingMethods`](/documentation/PassKit/PKPaymentRequest/shippingMethods)

An array of shipping method objects that describe the supported shipping methods.

[`PKShippingMethod`](/documentation/PassKit/PKShippingMethod)

An object that defines a shipping method for delivering physical goods.

[`shippingType`](/documentation/PassKit/PKPaymentRequest/shippingType)

The type of shipping the request uses.

[`shippingContactEditingMode`](/documentation/PassKit/PKPaymentRequest/shippingContactEditingMode)

A value that indicates whether the shipping mode prevents the user from editing the shipping address.

[`PKShippingType`](/documentation/PassKit/PKShippingType)

A complete list of valid shipping types.

[`PKShippingContactEditingMode`](/documentation/PassKit/PKShippingContactEditingMode)

Constants that indicate whether the shipping mode prevents the user from editing fields of the shipping address.

### Working with coupon codes

[`couponCode`](/documentation/PassKit/PKPaymentRequest/couponCode)

The initial coupon code for the payment request.

[`supportsCouponCode`](/documentation/PassKit/PKPaymentRequest/supportsCouponCode)

A Boolean value that determines whether the payment sheet displays the coupon code field.

### Adding custom data

[`applicationData`](/documentation/PassKit/PKPaymentRequest/applicationData)

Application-specific data or state.

### Providing error information

Create common payment errors using these simple convenience functions.

[`paymentBillingAddressInvalidError(withKey:localizedDescription:)`](/documentation/PassKit/PKPaymentRequest/paymentBillingAddressInvalidError(withKey:localizedDescription:))

Creates a billing address error with the supplied key and user-facing error message.

[`paymentContactInvalidError(withContactField:localizedDescription:)`](/documentation/PassKit/PKPaymentRequest/paymentContactInvalidError(withContactField:localizedDescription:))

Creates a contact error with the supplied field and user-facing error message.

[`paymentShippingAddressInvalidError(withKey:localizedDescription:)`](/documentation/PassKit/PKPaymentRequest/paymentShippingAddressInvalidError(withKey:localizedDescription:))

Creates a shipping address error with the supplied key and user-facing error message.

[`paymentShippingAddressUnserviceableError(withLocalizedDescription:)`](/documentation/PassKit/PKPaymentRequest/paymentShippingAddressUnserviceableError(withLocalizedDescription:))

Creates an error for an unserviceable address, with the supplied user-facing error message.

[`paymentCouponCodeInvalidError(localizedDescription:)`](/documentation/PassKit/PKPaymentRequest/paymentCouponCodeInvalidError(localizedDescription:))

Returns an error object that indicates an invalid coupon.

[`paymentCouponCodeExpiredError(localizedDescription:)`](/documentation/PassKit/PKPaymentRequest/paymentCouponCodeExpiredError(localizedDescription:))

Returns an error object that indicates an expired coupon.

[`paymentCouponCodeInvalidErrorWithLocalizedDescription:`](/documentation/PassKit/PKPaymentRequest/paymentCouponCodeInvalidErrorWithLocalizedDescription:)

Returns an error object that indicates an invalid coupon.

[`paymentCouponCodeExpiredErrorWithLocalizedDescription:`](/documentation/PassKit/PKPaymentRequest/paymentCouponCodeExpiredErrorWithLocalizedDescription:)

Returns an error object that indicates an expired coupon.

### Deprecated

[`applePayLaterAvailability`](/documentation/PassKit/PKPaymentRequest/applePayLaterAvailability-3dxrt)

A value that indicates whether Apple Pay Later is available for a transaction.

[`enabled`](/documentation/PassKit/PKShippingContactEditingMode/enabled)

All fields of the shipping contact on the payment sheet are editable by the user.

[`requiredBillingAddressFields`](/documentation/PassKit/PKPaymentRequest/requiredBillingAddressFields)

A bit field of billing address fields that you need in order to process the transaction.

[`requiredShippingAddressFields`](/documentation/PassKit/PKPaymentRequest/requiredShippingAddressFields)

A bit field of shipping address fields that you need in order to process the transaction.

[`PKAddressField`](/documentation/PassKit/PKAddressField)

Billing or shipping address fields.

[`billingAddress`](/documentation/PassKit/PKPaymentRequest/billingAddress)

A prepopulated billing address.

[`shippingAddress`](/documentation/PassKit/PKPaymentRequest/shippingAddress)

A prepopulated shipping address.

### Enumerations

[`PKPaymentRequest.ApplePayLaterAvailability`](/documentation/PassKit/PKPaymentRequest/ApplePayLaterAvailability-swift.enum)

Values you use to enable or disable Apple Pay Later for a specific transaction.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)