Subscription

Merchant Workflow

To accept the payment in this scenario, the merchant needs to complete the following steps:

  1. Completed account linking request and store returned access token
  2. Initiate a payment request for Subscription when payment is due

  1. Merchant calls Create Payment Order: Subscription endpoint to charge from the customer’s ShopeePay account.
  2. ShopeePay will conduct a sequential attempt with each of the customer’s linked payment methods with ShopeePay, until the transaction is successful.
  3. ShopeePay will sends an asynchronous message via Notify Transaction Status endpoint to inform merchants on the payment result.
  4. Merchant can also call the Check Transaction Status endpoint to query the status of the transaction.
    • If the response code = "Success", the merchant can mark this transaction as successful.
    • If the response code = "Failed", the merchant can mark this transaction as failed.
    • If the transaction is in a “Processing” status, please retry the request at an incremental time range of every 5 seconds (e.g., 5 seconds, 10 seconds, 15 seconds, and so on) up to a maximum of 100 seconds. If there is no response after 100 seconds, please retry the request at an incremental time range of every 5 minutes up to 24 hours.
    • If the transaction has no response, please retry the request at an incremental time range of every 5 seconds (e.g., 5 seconds, 10 seconds, 15 seconds, and so on) up to a maximum of 100 seconds. If there is no response after 100 seconds, please retry the request at an incremental time range of every 5 minutes up to 24 hours.
    • If customer can show evidence of payment success on their payment app, merchant may choose to consider payment as successful and wait for reconciliation process on T+1 to settle discrepancies with ShopeePay, if any.

Create Payment Order: Subscription

Use this endpoint to create a direct payment with an access token.

  • URL: "/v3/merchant-host/transaction/payment/direct"

Request Parameters

FieldTypeMandatoryDescription
request_idstringYUnique identifier for each request, accepts up to 64 characters.
payment_reference_idstringYUnique identifier of payment transaction generated by merchant.
merchant_ext_idstringYUnique identifier of merchant in merchant's system.
store_ext_idstringYUnique identifier of store in merchant's system.
access_tokenstringYThe access token obtained from ShopeePay via the Get Access Token when the customer linked their account.
amountstringYAmount used for the payment, inflated by a factor of 100. A positive integer in the smallest currency unit, with no decimal point.
currencyint64YCurrency that is associated with the payment amount.
use_coinbooleanNUse this field to indicate whether the customer prefers to use or not to use coins to offset their payment on the merchant’s platform. The default value is set to false.
promo_idsstringNComma separated eligible promo_ids of 100 characters or less (up to 20), if any.
additional_infostringNAdditional information will be in json format.

Sample API Request

REQUEST

{
"request_id": "input-unique-request-id-here",
"payment_reference_id": "ref-must-be-unique",
"merchant_ext_id": "external-merchant",
"store_ext_id":"external-store",
"access_token": "uXjWuhPGepSOtntoC8kTK5er6DlbUiGeSJDt53",
"amount": 100,
"currency": "IDR",
"use_coin": true
}
arrow-svg

Copy

Response Parameters

FieldTypeDescription
request_idstringThe same value as the request_id in the request.
errcodeint32Error code to specify the error returned.
debug_msgstringDebug message to provide more information.
transactionobjectWill not be returned if the transaction fails.
* reference_idstringUnique identifier of payment transaction generated by merchant.Same value as the payment_reference_id in the request.
* amountint64Amount used for the payment, inflated by a factor of 100. A positive integer in the smallest currency unit, with no decimal point.Example:Smallest amount will be 1, which represents 0.01.For currencies that do not have denomination in cents, the smallest amount will be 100, which represents 1 IDR (Rp 1) or 1 VND (₫ 1).
* statusuint32Refer to Transaction Status for specific transaction statuses.
* transaction_typeuint3213, referring to subscription transaction type.Refer to Transaction Types for specific transaction types.
* transaction_snstringTransaction identifier in ShopeePay's system.
* create_timeuint32Create time of the transaction.
* update_timeuint32Update time of the transaction.
* user_id_hashstringIdentifier for the customer that made the payment.
* merchant_ext_idstringUnique identifier of merchant in merchant's system.
* store_ext_idstringUnique identifier of store in merchant's system.
* promo_id_appliedstringpromo_ids applied to the payment transaction.
* payment_channeluint32Indicates the source of funds used. Refer to Payment Channels for the respective source of fund.

Sample API Response

RESPONSE

{
"request_id": "input-unique-request-id-here",
"errcode": 0,
"debug_msg": "success",
"transaction": {
"reference_id": "input-payment-ref-id",
"amount": 1000000,
"create_time": 1716193693,
"update_time": 1716193693,
"transaction_sn": "4737856404311306",
"status": 3,
"transaction_type": 13,
"merchant_ext_id": "external-merchant",
"store_ext_id": "external-store",
"user_id_hash": "697863f9295aeddcb3db598ecbc74c59a13335abf4d8c41b40e33b28a9d7d63c",
"payment_channel": 1
}
}
arrow-svg

Copy

Response Code

ValueDescription
-2A server dropped the connection
-1A server error occurredPlease use Check Transaction Status endpoint to query the updated status of the payment
0Success
1The request parameters is invalid or a mandatory parameter is empty
2Permission denied, often due to invalid status
4Not found, often due to merchant/store/user/transaction not found
5Transaction is in processing status, use Check Transaction Status endpoint to query the updated status of the payment
9Customer’s account is banned
11Duplicated request
14Customer’s account is deleted
24Customer's account is frozen
27Customer's account is not activated
42Insufficient balance
43Insufficient balance
50The request parameters is invalid due to payload sent is not a valid JSON
105Invalid auth code
140Customer’s wallet limit is reached
1001Customer is not allowed to make the transaction
1100ShopeePay internal payment module error
1101ShopeePay internal payment module error
1102Customer’s SPL credit limit is reached
1103Customer is required to link their bank account
1104Ineligible payment channel
1105Transaction failed due to unsuccessful authentication
1106Duplicated payment
1200ShopeePay internal payment module error
1201ShopeePay internal payment module error
1500ShopeePay internal payment module error
1800ShopeePay internal payment module error
1801ShopeePay internal payment module error
1906Unable to process refund due to transaction has been failed
1907Ineligible payment channel
1908Service is temporarily down for scheduled maintenance