Initiate the process of collecting payments from your customer. We recommend creating a new Session from your server and redirect the customer to the Session Hosted Checkout page. Once payment has succeeded, Session will contain a reference Payment ID or the Payment Token ID. You get the outcome asynchronously in a Session webhook.
The XenPlatform subaccount user id that will perform this transaction.
{
"reference_id": "order_12345_PAY",
"session_type": "PAY",
"mode": "PAYMENT_LINK",
"amount": 10000,
"currency": "PHP",
"country": "PH",
"customer": {
"reference_id": "cust_Lorem_Ipsum",
"type": "INDIVIDUAL",
"email": "test@yourdomain.com",
"mobile_number": "+6212345678",
"individual_detail": {
"given_names": "Lorem",
"surname": "Ipsum"
}
},
"items": [
{
"reference_id": "item_001",
"name": "Clothes",
"description": "Red clothes",
"type": "PHYSICAL_PRODUCT",
"category": "CLOTHES",
"net_unit_amount": 5000,
"quantity": 1,
"currency": "PHP",
"url": "https://example.com/item"
},
{
"reference_id": "item_002",
"name": "Pants",
"description": "Black pants",
"type": "PHYSICAL_PRODUCT",
"category": "CLOTHES",
"net_unit_amount": 5000,
"quantity": 1,
"currency": "PHP",
"url": "https://example.com/item"
}
],
"capture_method": "AUTOMATIC",
"locale": "en",
"description": "Sample one-time payment using Payment Session",
"success_return_url": "https://yourcompany.com/success/example_item=my_item",
"cancel_return_url": "https://yourcompany.com/cancel/example_item=my_item"
}{
"reference_id": "order_123456_SAVE",
"customer": {
"reference_id": "cust_Lorem_Ipsum",
"type": "INDIVIDUAL",
"email": "test@yourdomain.com",
"mobile_number": "+6212345678",
"individual_detail": {
"given_names": "Lorem",
"surname": "Ipsum"
}
},
"session_type": "PAY",
"currency": "IDR",
"amount": 10000,
"mode": "PAYMENT_LINK",
"allow_save_payment_method": "OPTIONAL",
"country": "ID",
"locale": "en",
"description": "Insurance Plan Registration",
"success_return_url": "https://yourcompany.com/success/example_item=my_item",
"cancel_return_url": "https://yourcompany.com/cancel/example_item=my_item"
}{
"reference_id": "order_123456_SAVE",
"customer": {
"reference_id": "cust_Lorem_Ipsum",
"type": "INDIVIDUAL",
"email": "test@yourdomain.com",
"mobile_number": "+6212345678",
"individual_detail": {
"given_names": "Lorem",
"surname": "Ipsum"
}
},
"session_type": "SAVE",
"currency": "IDR",
"amount": 0,
"mode": "PAYMENT_LINK",
"country": "ID",
"locale": "en",
"description": "Insurance Plan Registration",
"success_return_url": "https://yourcompany.com/success/example_item=my_item",
"cancel_return_url": "https://yourcompany.com/cancel/example_item=my_item"
}Your reference to uniquely identify the Payment Session. This is commonly used to identify your order or transaction.
A unique identifier automatically generated by Xendit to represent an end customer. This ID can be used as a consistent reference across multiple transactions or payment activities for the same user. You can create a customer object in advance through the Create Customer API here: https://xendit-docs.document360.io/apidocs/create-customer-request
Type of customer
Merchant provided identifier for the customer. Must be unique. Alphanumeric no special characters allowed
E-mail address of customer. Maximum length 50 characters
Mobile number of customer in E.164 format +(country code)(subscriber number)
Primary or first name/s of customer. Alphanumeric. No special characters is allowed.
Last or family name of customer. Alphanumeric. No special characters is allowed.
Country code for customer nationality. ISO 3166-1 alpha-2 Country Code
City or other relevant location for the customer birth place. Alphanumeric. No special characters is allowed.
Date of birth of the customer. Format: YYYY-MM-DD
Gender of customer
The use case for Payment Session. SAVE: save the payment details from a customer for future payments. PAY: collects a one-time payment from a customer.
The option to save the payment details from a customer for the PAY session_type. Saved payment details can be used for future payments. DISABLED: does not save the payment details. OPTIONAL: allows the customer to opt-in to save the payment details. FORCED: always save the payment details.
ISO 4217 three-letter currency code for the payment.
The payment amount to be collected from the customer. For SAVE session_type, the amount must be 0.
The frontend integration mode for Payment Session. PAYMENT_LINK: redirect the customer to the Xendit Hosted Checkout page. COMPONENTS: collect payment details from customer with Xendit Component SDK.
The method to capture the payment. AUTOMATIC: capture the payment automatically. MANUAL: capture the payment manually using Payment Capture API
ISO 3166-1 alpha-2 two-letter country code for the country of transaction.
Optional channel specific properties to be sent to specific payment channel provider.
Specify the list of payment channels for your customer to select from the Xendit Hosted Checkout page. By default all payment channels will be available if you leave this field empty.
ISO 8601 date-time format. By default the Session will expire 30 minutes after creation. We recommend you to keep Sessions short-lived and create a new Session again only when the customer is ready to make payment.
ISO 639-1 two-letter language code for Hosted Checkout page.
Key-value entries for your custom data/information. You can specify up to 50 keys, with key names up to 40 characters and values up to 500 characters. This is commonly used for your internal reference or reconciliation purposes. Xendit will not use this data for any processing.
A custom description for the Session. This text will be displayed on the Xendit Hosted Checkout page.
Array of objects describing the item/s attached to the session.
Merchant provided identifier for the item
Type of item
Name of item
Net amount to be charged per unit
Number of units of this item in the basket
URL of the item. Must be HTTPS or HTTP
URL of the image of the item. Must be HTTPS or HTTP
Category for item
Sub-category for item
Description of item
Key-value entries for your custom data/information. You can specify up to 50 keys, with key names up to 40 characters and values up to 500 characters. This is commonly used for your internal reference or reconciliation purposes. Xendit will not use this data for any processing.
Specify the URL to redirect the customer after the session is completed or expired, or if the customer decide to stop the payment process. Must be HTTPS. For example: "https://yourcompany.com/example_item=my_example_item"
Specify the URL to redirect the customer after the session is completed or expired, or if the customer decide to stop the payment process. Must be HTTPS. For example: "https://yourcompany.com/example_item=my_example_item"
Session Created
{
"payment_session_id": "ps-661f87c614802d6c402cd82d",
"created": "2021-12-31T23:59:59Z",
"updated": "2021-12-31T23:59:59Z",
"reference_id": "Alice",
"customer_id": "cust-e2878b4c-d57e-4a2c-922d-c0313c2800a3",
"session_type": "SAVE",
"currency": "IDR",
"amount": 0,
"country": "ID",
"mode": "PAYMENT_LINK",
"channel_properties": {},
"allowed_payment_channels": [
"OVO",
"DANA"
],
"expires_at": "2021-12-31T23:59:59Z",
"locale": "en",
"description": "Insurance Plan Registration",
"success_return_url": "https://yourcompany.com/success/example_item=my_item",
"cancel_return_url": "https://yourcompany.com/cancel/example_item=my_item",
"items": null,
"metadata": null,
"status": "ACTIVE",
"payment_link_url": "https://xen.to/kGxPCi60",
"payment_token_id": null,
"payment_request_id": null,
"business_id": "661f87c614802d6c402cd82d"
}A unique identifier for the Payment Session
Your reference to uniquely identify the Payment Session. This is commonly used to identify your order or transaction.
A unique identifier automatically generated by Xendit to represent an end customer. This ID can be used as a consistent reference across multiple transactions or payment activities for the same user. You can create a customer object in advance through the Create Customer API here: https://xendit-docs.document360.io/apidocs/create-customer-request
The use case for Payment Session. SAVE: save the payment details from a customer for future payments. PAY: collects a one-time payment from a customer.
The option to save the payment details from a customer for the PAY session_type. Saved payment details can be used for future payments. DISABLED: does not save the payment details. OPTIONAL: allows the customer to opt-in to save the payment details. FORCED: always save the payment details.
ISO 4217 three-letter currency code for the payment.
The payment amount to be collected from the customer. For SAVE session_type, the amount must be 0.
ISO 3166-1 alpha-2 two-letter country code for the country of transaction.
The frontend integration mode for Payment Session. PAYMENT_LINK: redirect the customer to the Xendit Hosted Checkout page. COMPONENTS: collect payment details from customer with Xendit Component SDK.
The method to capture the payment. AUTOMATIC: capture the payment automatically. MANUAL: capture the payment manually using Payment Capture API
Optional channel specific properties to be sent to specific payment channel provider.
Specify the list of payment channels for your customer to select from the Xendit Hosted Checkout page. By default all payment channels will be available if you leave this field empty.
ISO 8601 date-time format. By default the Session will expire 30 minutes after creation. We recommend you to keep Sessions short-lived and create a new Session again only when the customer is ready to make payment.
ISO 639-1 two-letter language code for Hosted Checkout page.
Key-value entries for your custom data/information. You can specify up to 50 keys, with key names up to 40 characters and values up to 500 characters. This is commonly used for your internal reference or reconciliation purposes. Xendit will not use this data for any processing.
A custom description for the Session. This text will be displayed on the Xendit Hosted Checkout page.
Array of objects describing the item/s attached to the session.
Merchant provided identifier for the item
Type of item
Name of item
Net amount to be charged per unit
Number of units of this item in the basket
URL of the item. Must be HTTPS or HTTP
URL of the image of the item. Must be HTTPS or HTTP
Category for item
Sub-category for item
Description of item
Key-value entries for your custom data/information. You can specify up to 50 keys, with key names up to 40 characters and values up to 500 characters. This is commonly used for your internal reference or reconciliation purposes. Xendit will not use this data for any processing.
Specify the URL to redirect the customer after the session is completed or expired, or if the customer decide to stop the payment process. Must be HTTPS. For example: "https://yourcompany.com/example_item=my_example_item"
Specify the URL to redirect the customer after the session is completed or expired, or if the customer decide to stop the payment process. Must be HTTPS. For example: "https://yourcompany.com/example_item=my_example_item"
The status of the Payment Session.
The URL for Xendit Hosted Checkout page. Redirect your customer to this URL to complete the payment.
Xendit Payment Token ID used to reference the saved payment details from the customer.
Xendit Payment ID used to reference the captured payment details from the customer.
Xendit Payment Request ID used to reference the payment made during this Session.
Error response for POST /sessions. Possible HTTP status codes: 400, 401, 404, 409.
400 - Missing required field
{
"error_code": "API_VALIDATION_ERROR",
"message": "request/body must have required property 'session_type'",
"errors": [
{
"message": "must have required property 'session_type'",
"path": "/body/session_type"
}
]
}400 - Amount must be greater than zero
{
"error_code": "INVALID_AMOUNT",
"message": "Amount must be greater than zero"
}400 - Payment channel not available
{
"error_code": "INVALID_PAYMENT_CHANNEL",
"message": "Channel(s) INVALID_CHANNEL are not available. Please ensure that you have activated the necessary channels"
}400 - Primary channel not in allowed channels
{
"error_code": "INVALID_PRIMARY_PAYMENT_CHANNEL",
"message": "Primary channel BPI_DIRECT_DEBIT is not included in the requested channels"
}400 - Metadata value exceeds limit
{
"error_code": "INVALID_METADATA",
"message": "Metadata value must have at most 80 characters"
}400 - Item metadata value exceeds limit
{
"error_code": "INVALID_ITEM_METADATA",
"message": "Metadata value must have at most 80 characters"
}400 - Customer ID format invalid
{
"error_code": "INVALID_CUSTOMER_ID",
"message": "Customer ID must start with \"cust-\""
}400 - Invalid URL format
{
"error_code": "INVALID_URL",
"message": "Please provide a valid HTTPS URL"
}400 - Customer required but not provided
{
"error_code": "MISSING_CUSTOMER",
"message": "Customer object or customer_id is required"
}400 - Capture method not allowed for session type
{
"error_code": "DISALLOWED_CAPTURE_METHOD",
"message": "Capture method is not supported for session type SAVE"
}400 - Expiry date is invalid
{
"error_code": "INVALID_EXPIRY_DATE",
"message": "expires_at must be at least 10 minutes in the future"
}400 - Items not allowed for session type
{
"error_code": "ITEMS_NOT_SUPPORTED",
"message": "Items are allowed for session type PAY only"
}400 - Session type not supported
{
"error_code": "SESSION_TYPE_NOT_SUPPORTED",
"message": "session_type AUTHORIZATION is not supported for now"
}400 - Mode not supported
{
"error_code": "MODE_NOT_SUPPORTED",
"message": "mode INVALID_MODE is not supported for now"
}401 - Invalid API key
{
"error_code": "INVALID_API_KEY",
"message": "API key is not authorized for this API"
}404 - Customer ID does not exist
{
"error_code": "DATA_NOT_FOUND",
"message": "The customer ID provided in the request does not exist"
}409 - Duplicate customer reference_id
{
"error_code": "DUPLICATE_ERROR",
"message": "customer: The reference_id entered has been used before. Please enter a unique reference_id"
}400 error codes:
API_VALIDATION_ERROR- Generic request validation failure such as missing required fields, invalid enum values, invalid field formats, or constraint violations (e.g. missingsession_type, invalidallow_save_payment_methodvalue, missingcards_session_jsproperties, invalidcomponents_configuration.origins, missingsubscription.schedulefields,card_detailsnot allowed onchannel_properties.cards,recurring_configurationrequired whencard_on_file_typeis RECURRING or MERCHANT_UNSCHEDULED,internal_metadatanot allowed).INVALID_AMOUNT- Amount validation failed. For PAY/SUBSCRIPTION session types, amount must be greater than zero. For SAVE session type, amount must be zero. Amount must also respect the decimal places allowed for the given currency.INVALID_PAYMENT_CHANNEL- One or more requested payment channels are not recognized, not activated for your account, not supported for the requested session configuration, or no channels are available for the givencapture_method,allow_save_payment_method, or country/currency combination.INVALID_PRIMARY_PAYMENT_CHANNEL- A channel specified inpayment_link_configuration.primary_payment_channelsis not included inallowed_payment_channels.INVALID_METADATA- Session-level metadata validation failed. Metadata supports a maximum of 20 keys, each key up to 40 characters, each value must be a string of up to 80 characters.INVALID_ITEM_METADATA- Item-level metadata validation failed. Same constraints as session-level metadata.INVALID_COUNTRY- The providedcountryis not supported.INVALID_CURRENCY- The providedcurrencyis not supported.`INVALID_CUSTOMER_ID- The providedcustomer_iddoes not start with the requiredcust-prefix.INVALID_URL- A URL field (e.g.success_return_url,cancel_return_url) is not a valid HTTPS URL.MISSING_CUSTOMER- Acustomerobject orcustomer_idis required but was not provided. Required whensession_typeis SAVE, whenmodeis CARDS_SESSION_JS, or whenallow_save_payment_methodis FORCED or OPTIONAL.DISALLOWED_CAPTURE_METHOD-capture_methodwas provided for a session type that does not support it (e.g. SAVE or SUBSCRIPTION).INVALID_EXPIRY_DATE- The providedexpires_atvalue is invalid. It must be at least 10 minutes in the future and must not exceed the maximum allowed expiry duration.ITEMS_NOT_SUPPORTED-itemswere provided for a session type other than PAY.SESSION_TYPE_NOT_SUPPORTED- The providedsession_typeis not supported (e.g. AUTHORIZATION).MODE_NOT_SUPPORTED- The providedmodeis not supported.
401 error codes:
INVALID_API_KEY- The API key provided is invalid or missing.
404 error codes:
DATA_NOT_FOUND- Thecustomer_idprovided in the request does not exist.
409 error codes:
DUPLICATE_ERROR- A customer with the samereference_idalready exists for a different business.
Human-readable description of the error.
Internal Server Error
500 - Internal server error
{
"error_code": "SERVER_ERROR",
"message": "Something unexpected happened. We are investigating this issue. Please try again later."
}SERVER_ERROR- Something unexpected happened. Please try again later.
Human-readable description of the error.