{
"openapi": "3.1.0",
"info": {
"title": "acquiring-order",
"description": "接口文档",
"termsOfService": "https://www.waffo.com",
"version": "1.0.0"
},
"servers": [
{
"url": "http://localhost:8080",
"description": "Generated server url"
}
],
"tags": [
{
"name": "Chargeback file upload",
"description": "Chargeback file upload api description"
},
{
"name": "Order create",
"description": " Order create api description"
},
{
"name": "Chargeback inquiry",
"description": "Chargeback inquiry api description"
},
{
"name": "Subscription create",
"description": "Subscription create api description"
},
{
"name": "Subscription inquiry",
"description": "Subscription inquiry api description"
},
{
"name": "Chargeback list",
"description": "Chargeback list api description"
},
{
"name": "Chargeback file download",
"description": "Chargeback file download api description"
},
{
"name": "Order inquiry",
"description": "Order inquiry api description"
},
{
"name": "Chargeback update",
"description": "Chargeback update api description"
},
{
"name": "Subscription cancel",
"description": "Cancel an active subscription when the merchant no longer wishes to continue the recurring billing cycle. This endpoint can only be invoked when the subscription status is active\n"
},
{
"name": "Order cancel",
"description": "Order cancel api description"
},
{
"name": "Subscription manage",
"description": "This API allows the merchant to request a subscription management URL from Waffo\nWaffo will generate a subscription management URL which merchant can redirect user to this URL for managing subscription details (e.g. view subscription detail and cancel subscription). This management URL has a fixed expiration time (e.g., 1 day).\n"
},
{
"name": "Chargeback accept",
"description": "Chargeback accept api description"
},
{
"name": "Order refund",
"description": "Order refund api description"
},
{
"name": "Subscription change",
"description": "This API allows merchants to upgrade or downgrade a user's subscription plan. The change request will create a new subscription based on the original subscription, applying any remaining amount from the original subscription.\n\n此接口允许商户升级或降级用户的订阅计划。升降级请求将基于原订阅创建新订阅，并将原订阅的剩余金额应用到新订阅中。\n"
},
{
"name": "Refund inquiry",
"description": "Refund inquiry api description"
},
{
"name": "Subscription change inquiry",
"description": "This API allows merchants to query the status of a subscription change (upgrade/downgrade) request.\n此接口允许商户查询订阅升降级请求的状态。\n"
},
{
"name": "Merchant config inquiry",
"description": "Merchant config inquiry api description"
},
{
"name": "Pay Method Config Inquiry",
"description": "Pay Method Config Inquiry api description"
}
],
"paths": {
"/api/v1/subscription/manage": {
"post": {
"tags": [
"Subscription manage"
],
"summary": "Subscription manage",
"operationId": "subscriptionManage",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SubscriptionManageRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ResponseSubscriptionManageResponse"
}
}
}
}
},
"x-order": "4"
}
},
"/api/v1/subscription/inquiry": {
"post": {
"tags": [
"Subscription inquiry"
],
"summary": "Subscription Inquiry",
"operationId": "subscriptionInquiry",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SubscriptionInquiryRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ResponseSubscriptionInquiryResponse"
}
}
}
}
},
"x-order": "2"
}
},
"/api/v1/subscription/create": {
"post": {
"tags": [
"Subscription create"
],
"summary": "Create Subscription",
"description": "Note: For certain Pay Methods, some optional fields are required. Kindly refer to Section Specific Pay Method Requirement",
"operationId": "createSubscription",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AcqSubscriptionCreateRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ResponseAcqSubscriptionCreateResponse"
}
}
}
}
},
"x-order": "1"
}
},
"/api/v1/subscription/change": {
"post": {
"tags": [
"Subscription change"
],
"summary": "Subscription change",
"operationId": "changeSubscription",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SubscriptionChangeRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ResponseSubscriptionChangeResponse"
}
}
}
}
},
"x-order": "5"
}
},
"/api/v1/subscription/change/inquiry": {
"post": {
"tags": [
"Subscription change inquiry"
],
"summary": "Subscription change inquiry",
"operationId": "subscriptionChangeInquiry",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SubscriptionChangeInquiryRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ResponseSubscriptionChangeInquiryResponse"
}
}
}
}
},
"x-order": "6"
}
},
"/api/v1/subscription/cancel": {
"post": {
"tags": [
"Subscription cancel"
],
"summary": "Subscription cancel",
"operationId": "merchantCancel",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SubscriptionCancelRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ResponseSubscriptionCancelResponse"
}
}
}
}
},
"x-order": "3"
}
},
"/api/v1/refund/inquiry": {
"post": {
"tags": [
"Refund inquiry"
],
"summary": "Refund inquiry",
"operationId": "refundInquiry",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AcqOrderRefundInquiryRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ResponseAcqOrderRefundInquiry"
}
}
}
}
},
"x-order": "5"
}
},
"/api/v1/paymethodconfig/inquiry": {
"post": {
"tags": [
"Pay Method Config Inquiry"
],
"summary": "Pay Method Config Inquiry",
"operationId": "payMethodConfigInquiry",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PayMethodConfigInquiryRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ResponsePayMethodConfigInquiryResponse"
}
}
}
}
},
"x-order": "7"
}
},
"/api/v1/order/refund": {
"post": {
"tags": [
"Order refund"
],
"summary": "Order refund",
"operationId": "orderRefund",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AcqOrderRefundRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ResponseAcqOrderRefundResponse"
}
}
}
}
},
"x-order": "4"
}
},
"/api/v1/order/inquiry": {
"post": {
"tags": [
"Order inquiry"
],
"summary": "Order inquiry",
"operationId": "orderInquiry",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AcqOrderInquiryRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ResponseAcqOrderInquiry"
}
}
}
}
},
"x-order": "2"
}
},
"/api/v1/order/create": {
"post": {
"tags": [
"Order create"
],
"summary": "Create new order",
"description": "Note: For certain Pay Methods, some optional fields are required. Kindly refer to Section Specific Pay Method Requirement",
"operationId": "orderCreate",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AcqOrderCreateRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ResponseAcqOrderCreatedResponse"
}
}
}
}
},
"x-order": "1"
}
},
"/api/v1/order/cancel": {
"post": {
"tags": [
"Order cancel"
],
"summary": "Order cancel",
"operationId": "orderCancel",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AcqOrderCancelRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ResponseAcqOrderCancelResponse"
}
}
}
}
},
"x-order": "3"
}
},
"/api/v1/merchantconfig/inquiry": {
"post": {
"tags": [
"Merchant config inquiry"
],
"summary": "Merchant Config inquiry",
"operationId": "merchantConfigInquiry",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AcqMerchantConfigRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ResponseAcqMerchantConfigInquiryResponse"
}
}
}
}
},
"x-order": "6"
}
},
"/api/v1/chargeback/update": {
"post": {
"tags": [
"Chargeback update"
],
"summary": "Chargeback update",
"operationId": "chargebackUpdate",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ChargebackUpdateEvidenceRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ResponseChargebackDetailResponse"
}
}
}
}
},
"x-order": "3"
}
},
"/api/v1/chargeback/list": {
"post": {
"tags": [
"Chargeback list"
],
"summary": "Chargeback list",
"operationId": "chargebackList",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ChargebackListRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ResponsePageChargebackQueryResponse"
}
}
}
}
},
"x-order": "2"
}
},
"/api/v1/chargeback/inquiry": {
"post": {
"tags": [
"Chargeback inquiry"
],
"summary": "Chargeback inquiry",
"operationId": "chargebackInquiry",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ChargebackInquiryRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ResponseChargebackDetailResponse"
}
}
}
}
},
"x-order": "1"
}
},
"/api/v1/chargeback/file/upload": {
"post": {
"tags": [
"Chargeback file upload"
],
"summary": "Chargeback file upload",
"operationId": "chargebackFileUpload",
"parameters": [
{
"name": "X-API-KEY",
"in": "header",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "merchantId",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"file": {
"type": "string",
"format": "binary"
}
},
"required": [
"file"
]
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ResponseChargebackFileUploadResponse"
}
}
}
}
},
"x-order": "1"
}
},
"/api/v1/chargeback/accept": {
"post": {
"tags": [
"Chargeback accept"
],
"summary": "Chargeback accept",
"operationId": "chargebackAccept",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ChargebackAcceptRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ResponseChargebackDetailResponse"
}
}
}
}
},
"x-order": "4"
}
},
"/api/v1/chargeback/file/download": {
"get": {
"tags": [
"Chargeback file download"
],
"summary": "Chargeback file download",
"operationId": "chargebackFileDownload",
"parameters": [
{
"name": "X-API-KEY",
"in": "header",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "merchantId",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "fileId",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK"
}
},
"x-order": "2"
}
}
},
"components": {
"schemas": {
"SubscriptionManageRequest": {
"type": "object",
"properties": {
"subscriptionId": {
"type": "string",
"description": "Waffo subscription Id ",
"maxLength": 64,
"minLength": 0
},
"subscriptionRequest": {
"type": "string",
"description": "Subscription request id sent from Merchant. It will also be used for idempotent check.  ",
"maxLength": 64,
"minLength": 0
}
}
},
"ResponseSubscriptionManageResponse": {
"type": "object",
"description": "response data",
"properties": {
"code": {
"type": "string"
},
"msg": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/SubscriptionManageResponse"
}
}
},
"SubscriptionManageResponse": {
"type": "object",
"properties": {
"subscriptionRequest": {
"type": "string",
"description": "Subscription request id sent from Merchant. It will also be used for idempotent check. "
},
"merchantSubscriptionId": {
"type": "string",
"description": "Merchant subscription plan ID assigned to this user"
},
"subscriptionId": {
"type": "string",
"description": "The subscription ID assigned by Waffo"
},
"managementUrl": {
"type": "string",
"description": "The generated management url for this subscription"
},
"expiredAt": {
"type": "string",
"description": "The expiration time of the management url (ISO 8601 format,UTC+0 timezone)"
},
"subscriptionStatus": {
"type": "string",
"description": "Subscription status\n- AUTHORIZATION_REQUIRED (pay method requires user authorization, merchant needs to bring user to the authorization page by retrieving the information from orderAction)\n- IN_PROGRESS (user is in progress to confirm the subscription)\n- ACTIVE \n- CLOSE (due to timeout or failed)\n- MERCHANT_CANCELLED\n- USER_CANCELLED\n- CHANNEL_CANCELLED\n- EXPIRED\n"
}
}
},
"SubscriptionInquiryRequest": {
"type": "object",
"description": "Provide subscriptionRequest or subscriptionId",
"properties": {
"subscriptionRequest": {
"type": "string",
"description": "Merchant subscription plan ID assigned to this user (provide subscriptionRequest or subscriptionId)",
"example": "<subscriptionRequest>",
"maxLength": 32,
"minLength": 0
},
"subscriptionId": {
"type": "string",
"description": "Waffo subscription Id (provide subscriptionRequest or subscriptionId)",
"example": "<subscriptionId>",
"maxLength": 64,
"minLength": 0
},
"paymentDetails": {
"type": "integer",
"format": "int32",
"description": "Indicate if merchant wants to inquiry all the payment details associated with the subscription. Default is 0\n- 0 (meaning payment details are not required)\n- 1 (meaning payment details are required)\n",
"example": 1
}
}
},
"AddressInfo": {
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "Shipping address"
},
"city": {
"type": "string",
"description": "Shipping city"
},
"region": {
"type": "string",
"description": "Shipping region / state / province"
},
"postcode": {
"type": "string",
"description": "Shipping postcode"
},
"addressCountryCode": {
"type": "string",
"description": "Shipping country code"
}
}
},
"GoodsInfo": {
"type": "object",
"properties": {
"goodsId": {
"type": "string",
"description": "Goods item id"
},
"goodsName": {
"type": "string",
"description": "Goods item name"
},
"goodsCategory": {
"type": "string",
"description": "Goods category"
},
"goodsUrl": {
"type": "string",
"description": "Goods URL from merchant website, for example https://www.merchant123.com/goods123\n(for compliance and risk management purpose)\n"
},
"appName": {
"type": "string",
"description": "app package name, for example com.example.app123\n(for compliance and risk management purpose)\n"
},
"skuName": {
"type": "string",
"description": "Goods sku name"
},
"goodsUniquePrice": {
"type": "string",
"description": "Goods price"
},
"goodsQuantity": {
"type": "integer",
"format": "int32",
"description": "Goods quantity"
}
}
},
"MerchantInfo": {
"type": "object",
"properties": {
"merchantId": {
"type": "string",
"description": "Merchant Id assigned by Waffo",
"maxLength": 64,
"minLength": 0
},
"subMerchantId": {
"type": "string",
"description": "Sub merchant id assigned by Waffo",
"maxLength": 64,
"minLength": 0
}
},
"required": [
"merchantId"
]
},
"PaymentDetail": {
"type": "object",
"properties": {
"acquiringOrderId": {
"type": "string",
"description": "Waffo acquiring order Id"
},
"orderCurrency": {
"type": "string",
"description": "Subscription Payment order currency"
},
"orderAmount": {
"type": "string",
"description": "Subscription Payment amount"
},
"orderStatus": {
"type": "string",
"description": "Subscription Payment status\n- PAY_SUCCESS \n- ORDER_CLOSE (payment failed)\n"
},
"orderUpdatedAt": {
"type": "string",
"description": "Subscription Payment update time"
},
"period": {
"type": "string",
"description": "Which period the subscription payment belong to. For example 2"
}
}
},
"PaymentInfo": {
"type": "object",
"properties": {
"productName": {
"type": "string",
"description": "Payment product: \n- SUBSCRIPTION\n- MINI_PROGRAM_SUBSCRIPTION\nMerchant can view the signed contract product via Waffo Merchant portal\n",
"maxLength": 32,
"minLength": 0
},
"payMethodType": {
"type": "string",
"description": "Payment method type. e.g. \n- EWALLET\n- CREDITCARD\n- DEBITCARD\nMerchant can provide a list of pay methods type as the filtering logic, e.g. CREDITCARD, DEBITCARD indicate user can pay use either credit card or debit card\nIf not provided, Waffo will choose all eligible payment methods based on merchant contract and display them on Waffo's cashier page for user to select\n",
"maxLength": 16,
"minLength": 0
},
"payMethodName": {
"type": "string",
"description": "The actual payment method. e.g. DANA\nIf payMethodName is provided, the payment request will be processed using this pay method directly.\nIf merchant intends to limit the card payment scheme, e.g. Restrict user to use only VISA card, merchant can specify payMethodName as CC_VISA, DC_VISA\n",
"maxLength": 24,
"minLength": 0
},
"payMethodProperties": {
"type": "string",
"description": "For certain payment methods, there could be certain specific info needed. Json format e.g. {\"key1\":\"value1\", \"key2\":\"value2\"} ",
"maxLength": 256,
"minLength": 0
},
"payMethodResponse": {
"type": "string",
"description": "The specific information returned by pay Method",
"maxLength": 256,
"minLength": 0
},
"payMethodUserAccountType": {
"type": "string",
"description": "User account type at the designated pay method\nEMAIL\nPHONE_NO\nACCOUNT_ID\n",
"maxLength": 24,
"minLength": 0
},
"payMethodUserAccountNo": {
"type": "string",
"description": "User account number at the designated pay method",
"maxLength": 64,
"minLength": 0
},
"payMethodPublicUid": {
"type": "string",
"description": "Public user id at the designated pay method",
"maxLength": 128,
"minLength": 0
},
"payMethodUserAccessToken": {
"type": "string",
"description": "User access token is required when using MINI_PROGRAM_SUBSCRIPTION product\nThe user access token can be obtained from mini program API\n",
"maxLength": 128,
"minLength": 0
}
},
"required": [
"payMethodName",
"productName"
]
},
"ProductInfo": {
"type": "object",
"properties": {
"description": {
"type": "string",
"description": "Subscription product description, often appearing to user when asking user's confirmation",
"maxLength": 128,
"minLength": 0
},
"periodType": {
"type": "string",
"description": "Subscription product period type:\n- DAILY\n- WEEKLY\n- MONTHLY\n",
"maxLength": 12,
"minLength": 0
},
"periodInterval": {
"type": "string",
"description": "Period interval. For example 1\nIf the period type is DAILY, the period interval is between 1-365\nIf the period type is WEEKLY, the period interval is between 1-4\nIf the period type is MONTHLY, the period interval is between 1-12\nFor example if the period type is weekly, the period interval is 2, it means every 2 weeks time user will pay for the subscription amount\n",
"maxLength": 12,
"minLength": 0
},
"numberOfPeriod": {
"type": "string",
"description": "Specify after how many deduction period, the subscription will end. For example 3\nIf the value is empty, it means the subscription has no defined end period\nThe subscription periods shall not exceed 3 years in total\n",
"maxLength": 24,
"minLength": 0
},
"trialPeriodAmount": {
"type": "string",
"description": "The subscription amount that user pay during the trial period, for example 8000\nThe amount shall >= 0\n",
"maxLength": 24,
"minLength": 0
},
"numberOfTrialPeriod": {
"type": "string",
"description": "Specify after how many periods, the trial will end. For example 1\n",
"maxLength": 12,
"minLength": 0
},
"trialPeriodType": {
"type": "string",
"description": "Subscription product period type:\n- DAILY\n- WEEKLY\n- MONTHLY\nThis field is optional when a trial period is configured. If omitted, the system will use periodType value by default.\n",
"maxLength": 12,
"minLength": 0
},
"trialPeriodInterval": {
"type": "string",
"description": "Represents the interval unit of the trial period. Same definition and behavior as periodInterval.\nIf the period type is DAILY, the period interval is between 1-365\nThis field is optional when a trial period is configured. If omitted, the system will use periodInterval value by default..\n",
"maxLength": 12,
"minLength": 0
},
"startDateTime": {
"type": "string",
"description": "When the subscription starts",
"maxLength": 24,
"minLength": 0
},
"endDateTime": {
"type": "string",
"description": "When the subscription ends",
"maxLength": 24,
"minLength": 0
},
"nextPaymentDateTime": {
"type": "string",
"description": "When the next payment is on due",
"maxLength": 24,
"minLength": 0
},
"currentPeriod": {
"type": "string",
"description": "Indicate the number of current period. For example, 4",
"maxLength": 24,
"minLength": 0
}
},
"required": [
"description",
"periodInterval",
"periodType"
]
},
"ResponseSubscriptionInquiryResponse": {
"type": "object",
"description": "response data",
"properties": {
"code": {
"type": "string"
},
"msg": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/SubscriptionInquiryResponse"
}
}
},
"SubscriptionInquiryResponse": {
"type": "object",
"properties": {
"subscriptionRequest": {
"type": "string",
"description": "Subscription request id sent from Merchant. It will also be used for idempotent check. "
},
"merchantSubscriptionId": {
"type": "string",
"description": "Merchant subscription plan ID assigned to this user"
},
"subscriptionId": {
"type": "string",
"description": "Waffo subscription Id"
},
"payMethodSubscriptionId": {
"type": "string",
"description": "Payment method's subscription id"
},
"subscriptionStatus": {
"type": "string",
"description": "Subscription status\n- AUTHORIZATION_REQUIRED (pay method requires user authorization, merchant needs to bring user to the authorization page by retrieving the information from orderAction)\n- IN_PROGRESS (user is in progress to confirm the subscription)\n- ACTIVE \n- CLOSE (due to timeout or failed)\n- MERCHANT_CANCELLED\n- USER_CANCELLED\n- CHANNEL_CANCELLED\n- EXPIRED\n"
},
"subscriptionAction": {
"type": "string",
"description": "When subscriptionStatus = AUTHORIZATION_REQUIRED, merchant follow the following:  \n“webUrl”: redirect user to this URL"
},
"currency": {
"type": "string",
"description": "Merchant subscription currency, for example IDR",
"example": "IDR"
},
"userCurrency": {
"type": "string",
"description": "User payment currency. This is needed when merchant order currency is NOT the same as user payment currency"
},
"amount": {
"type": "string",
"description": "Merchant subscription amount, for example 10000"
},
"productInfo": {
"$ref": "#/components/schemas/ProductInfo",
"description": "Subscription product info details"
},
"merchantInfo": {
"$ref": "#/components/schemas/MerchantInfo",
"description": "Merchant info"
},
"userInfo": {
"$ref": "#/components/schemas/UserInfo",
"description": "User info"
},
"paymentInfo": {
"$ref": "#/components/schemas/PaymentInfo",
"description": "Payment information"
},
"requestedAt": {
"type": "string",
"description": "Merchant-side request time"
},
"updatedAt": {
"type": "string",
"description": "Subscription last update time"
},
"failedReason": {
"type": "string",
"description": "Json format {\n\"orderFailedCode\": \"XXX\",\n\"orderFailedDescription\"\" \"XXX\"\n}\n"
},
"subscriptionManagementUrl": {
"type": "string",
"description": "It refers to the subscription management page for users on the merchant side.\n"
},
"extendInfo": {
"type": "string",
"description": "Reserved. Json format e.g. {\"key1\":\"value1\", \"key2\":\"value2\"} \n"
},
"paymentDetails": {
"type": "array",
"description": "The array object of the payment details associated to this subscription",
"items": {
"$ref": "#/components/schemas/PaymentDetail"
}
},
"goodsInfo": {
"$ref": "#/components/schemas/GoodsInfo",
"description": "Merchant goods information"
},
"addressInfo": {
"$ref": "#/components/schemas/AddressInfo",
"description": "Address Information"
}
}
},
"UserInfo": {
"type": "object",
"properties": {
"userId": {
"type": "string",
"description": "Merchant User id",
"maxLength": 64,
"minLength": 0
},
"userEmail": {
"type": "string",
"description": "Merchant user email",
"maxLength": 64,
"minLength": 0
},
"userPhone": {
"type": "string",
"description": "Merchant user mobile phone number",
"maxLength": 16,
"minLength": 0
},
"userFirstName": {
"type": "string",
"description": "Merchant user's first name",
"maxLength": 64,
"minLength": 0
},
"userLastName": {
"type": "string",
"description": "Merchant user's last name",
"maxLength": 64,
"minLength": 0
},
"userCreatedAt": {
"type": "string",
"description": "Merchant user creation time",
"maxLength": 24,
"minLength": 0
}
},
"required": [
"userEmail",
"userId"
]
},
"AcqProductBasicInfoEntity": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int64"
},
"productId": {
"type": "string"
},
"productName": {
"type": "string"
},
"status": {
"type": "integer",
"format": "int32"
},
"productCategory": {
"type": "string"
},
"createTime": {
"type": "string",
"format": "date-time"
},
"updateTime": {
"type": "string",
"format": "date-time"
},
"createBy": {
"type": "string"
},
"updateBy": {
"type": "string"
}
}
},
"AcqSubscriptionCreateRequest": {
"type": "object",
"properties": {
"subscriptionRequest": {
"type": "string",
"description": "Subscription request id sent from Merchant. It will also be used for idempotent check.",
"x-gen": "NANOID",
"maxLength": 32,
"minLength": 0
},
"merchantSubscriptionId": {
"type": "string",
"description": "Merchant subscription plan ID assigned to this user",
"example": "PLAN_001",
"maxLength": 64,
"minLength": 0
},
"currency": {
"type": "string",
"description": "Merchant subscription currency, for example USD",
"example": "USD",
"maxLength": 12,
"minLength": 0
},
"amount": {
"type": "string",
"description": "Merchant subscription amount, for example 100",
"example": 100,
"maxLength": 24,
"minLength": 0
},
"productInfo": {
"$ref": "#/components/schemas/AcqSubscriptionCreateRequest.ProductInfo",
"description": "Subscription product info"
},
"userCurrency": {
"type": "string",
"description": "User payment currency. This is needed when merchant order currency is NOT the same as user payment currency",
"maxLength": 12,
"minLength": 0
},
"merchantInfo": {
"$ref": "#/components/schemas/AcqSubscriptionCreateRequest.MerchantInfo",
"description": "Merchant info\n"
},
"userInfo": {
"$ref": "#/components/schemas/AcqSubscriptionCreateRequest.UserInfo",
"description": "User info\n"
},
"goodsInfo": {
"$ref": "#/components/schemas/AcqSubscriptionCreateRequest.GoodsInfo",
"description": "Merchant goods information\n"
},
"addressInfo": {
"$ref": "#/components/schemas/AcqSubscriptionCreateRequest.AddressInfo",
"description": "Address Information\n"
},
"brandInfo": {
"$ref": "#/components/schemas/BrandInfo",
"description": "Brand display information for cashier"
},
"paymentInfo": {
"$ref": "#/components/schemas/AcqSubscriptionCreateRequest.PaymentInfo",
"description": "Payment information\n"
},
"requestedAt": {
"type": "string",
"format": "date-time",
"description": "Merchant-side request time",
"x-gen": "DATETIME_ISO"
},
"successRedirectUrl": {
"type": "string",
"description": "The address of the merchant page to redirect to after successful subscription payment. \nIf no value is provided, it will stay on the cashier page after successful payment. \n",
"example": "https://merchant-success-redirecturl.com",
"maxLength": 512,
"minLength": 0
},
"failedRedirectUrl": {
"type": "string",
"description": "The address of the merchant page to which the payment pre-verification fails, or the redirection after the payment fails. If no value is provided, it will stay on the cashier page after the payment fails\n",
"example": "https://merchant-failed-redirecturl.com",
"maxLength": 512,
"minLength": 0
},
"notifyUrl": {
"type": "string",
"description": "The callback address to notify the merchant after the subscription is completed / failed\n",
"example": "https://merchant-notify-url.com",
"maxLength": 256,
"minLength": 0
},
"cancelRedirectUrl": {
"type": "string",
"description": "User will be redirected to this page if user choose to cancel and not continue the payment\n",
"example": "https://merchant-cancel-url.com",
"maxLength": 512,
"minLength": 0
},
"riskData": {
"$ref": "#/components/schemas/AcqSubscriptionCreateRequest.RiskData"
},
"subscriptionManagementUrl": {
"type": "string",
"description": "It refers to the subscription management page for users on the merchant side.\n",
"example": "https://merchant.com/subscription/manage",
"maxLength": 256,
"minLength": 0
},
"extendInfo": {
"type": "string",
"description": "Reserved. Json format e.g. {\"key1\":\"value1\", \"key2\":\"value2\"} \n",
"maxLength": 256,
"minLength": 0
},
"orderExpiredAt": {
"type": "string",
"format": "date-time",
"description": "The order expiry time set by merchant. User is required to input payment data on Waffo cashier page prior to merchant's order expiry time. \nIf not provided, the default is 4 hours\n"
},
"subscriptionMode": {
"type": "string"
},
"acqMerchant": {
"$ref": "#/components/schemas/MerchantInfo"
},
"acqProduct": {
"$ref": "#/components/schemas/AcqProductBasicInfoEntity"
},
"acqAgreements": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MerchantAcqProductAgreementEntity"
}
}
},
"required": [
"amount",
"currency",
"merchantInfo",
"merchantSubscriptionId",
"notifyUrl",
"productInfo",
"requestedAt",
"subscriptionRequest",
"userInfo"
]
},
"AcqSubscriptionCreateRequest.AddressInfo": {
"type": "object",
"description": "Address information",
"properties": {
"address": {
"type": "string",
"description": "Shipping address\n",
"maxLength": 256,
"minLength": 0
},
"city": {
"type": "string",
"description": "Shipping city\n",
"maxLength": 32,
"minLength": 0
},
"region": {
"type": "string",
"description": "Shipping region / state / province\n",
"maxLength": 32,
"minLength": 0
},
"postcode": {
"type": "string",
"description": "Shipping postcode\n",
"maxLength": 16,
"minLength": 0
},
"addressCountryCode": {
"type": "string",
"description": "Shipping country code\n",
"maxLength": 16,
"minLength": 0
}
}
},
"AcqSubscriptionCreateRequest.GoodsInfo": {
"type": "object",
"description": "Goods information",
"properties": {
"goodsId": {
"type": "string",
"description": "Goods item id\n",
"example": "GOODS001",
"maxLength": 32,
"minLength": 0
},
"goodsName": {
"type": "string",
"description": "Goods item name\n",
"example": "Premium Subscription Plan",
"maxLength": 64,
"minLength": 0
},
"goodsCategory": {
"type": "string",
"description": "Goods category\n",
"maxLength": 32,
"minLength": 0
},
"goodsUrl": {
"type": "string",
"description": "Goods URL from merchant website, for example https://www.merchant123.com/goods123\n                          (for compliance and risk management purpose)\n",
"maxLength": 128,
"minLength": 0
},
"appName": {
"type": "string",
"description": "app package name, for example com.example.app123\n                          (for compliance and risk management purpose)\n",
"maxLength": 32,
"minLength": 0
},
"skuName": {
"type": "string",
"description": "Goods sku name\n",
"maxLength": 32,
"minLength": 0
},
"goodsUniquePrice": {
"type": "string",
"description": "Goods price\n",
"maxLength": 16,
"minLength": 0
},
"goodsQuantity": {
"type": "integer",
"format": "int32",
"description": "Goods quantity\n"
}
},
"required": [
"goodsId",
"goodsName"
]
},
"AcqSubscriptionCreateRequest.MerchantInfo": {
"type": "object",
"description": "Merchant information",
"properties": {
"merchantId": {
"type": "string",
"description": "Merchant id assigned by Waffo\n",
"example": 1000000201,
"maxLength": 64,
"minLength": 0
},
"subMerchantId": {
"type": "string",
"description": "Sub merchant id assigned by Waffo\n",
"maxLength": 64,
"minLength": 0
}
},
"required": [
"merchantId"
]
},
"AcqSubscriptionCreateRequest.PaymentInfo": {
"type": "object",
"description": "Payment information",
"properties": {
"productName": {
"type": "string",
"description": "Payment product: \n                   - SUBSCRIPTION\n                   - MINI_PROGRAM_SUBSCRIPTION\n                   Merchant can view the signed contract product via Waffo Merchant portal \n",
"example": "SUBSCRIPTION",
"maxLength": 32,
"minLength": 0
},
"payMethodType": {
"type": "string",
"description": "Payment method type. e.g. \n                   - EWALLET\n                   - CREDITCARD\n                   - DEBITCARD\n                   Merchant can provide a list of pay methods type as the filtering logic, e.g. CREDITCARD, DEBITCARD indicate user can pay use either credit card or debit card\n                   If not provided, Waffo will choose all eligible payment methods based on merchant contract and display them on Waffo's cashier page for user to select\n                   Conditional (must be provided for card payments)\n",
"example": "CREDITCARD,DEBITCARD,APPLEPAY,GOOGLEPAY",
"maxLength": 256,
"minLength": 0
},
"payMethodName": {
"type": "string",
"description": "The actual payment method. e.g. DANA\n                   If payMethodName is provided, the payment request will be processed using this pay method directly.\n                   If merchant intends to limit the card payment scheme, e.g. Restrict user to use only VISA card, merchant can specify payMethodName as CC_VISA, DC_VISA\n                   Conditional (required for non-card payment methods)\n",
"maxLength": 24,
"minLength": 0
},
"payMethodProperties": {
"type": "string",
"description": "For certain pay methods, there could be certain specific info needed. Json format e.g. {\"key1\":\"value1\", \"key2\":\"value2\"} \n",
"maxLength": 256,
"minLength": 0
},
"payMethodUserAccountType": {
"type": "string",
"description": "User account type at the designated pay method\n                   EMAIL\n                   PHONE_NO\n                   ACCOUNT_ID\n",
"maxLength": 24,
"minLength": 0
},
"payMethodUserAccountNo": {
"type": "string",
"description": "User account number at the designated pay method\n",
"maxLength": 64,
"minLength": 0
},
"payMethodUserAccessToken": {
"type": "string",
"description": "User access token is required when using MINI_PROGRAM_SUBSCRIPTION product\n                   The user access token can be obtained from mini program API\n",
"maxLength": 128,
"minLength": 0
},
"cashierLanguage": {
"type": "string",
"description": "Merchant specify the cashier language. It follows IETF BCP 47 language tag\nThe format is Language (two-letter language code from ISO 639-1), follow by an optional script subtag, based on a four-letter script code from ISO 15924, and follow by an optional region subtag based on a two-letter country code from ISO 3166-1 alpha-2\nFor example:\n- en-HK: English in Hong Kong\n- zh-Hant-HK: Traditional Chinese in Hong Kong\n- zh-Hans-HK: Simplified Chinese in Hong Kong\n",
"maxLength": 24,
"minLength": 0
},
"cashierAppearance": {
"type": "string",
"description": "Defines the overall appearance configuration of the UI, including colors, background, and typography settings.\n                   A JSON-formatted string containing theme variables.\n                   These variables are injected into the UI rendering layer and override the default theme settings.\n                   This field must be a valid JSON string, not a plain object.\n                   Example:  {\"variables\":{\"colorPrimary\":\"#0570de\",\"colorBackground\":\"#ffffff\",\"colorText\":\"#30313d\"}}\n"
}
},
"required": [
"productName"
]
},
"AcqSubscriptionCreateRequest.ProductInfo": {
"type": "object",
"description": "Subscription product information",
"properties": {
"description": {
"type": "string",
"description": "Subscription product description, often appearing to user when asking user's confirmation",
"example": "Premium Monthly Subscription",
"maxLength": 128,
"minLength": 0
},
"periodType": {
"type": "string",
"description": "Subscription product period type:\n         - DAILY\n         - WEEKLY\n         - MONTHLY\n",
"example": "MONTHLY",
"maxLength": 12,
"minLength": 0
},
"periodInterval": {
"type": "string",
"description": "Period interval. \nIf the period type is DAILY, the period interval is between 1-365\nIf the period type is WEEKLY, the period interval is between 1-4\nIf the period type is MONTHLY, the period interval is between 1-12\nFor example if the period type is weekly, the period interval is 2, it means every 2 weeks time user will pay for the subscription amount\n",
"example": 1,
"maxLength": 12,
"minLength": 0
},
"numberOfPeriod": {
"type": "string",
"description": "Specify after how many deduction period, the subscription will end.\nThe value needs to be greater than 1. For example 3\nIf the value is empty, it means the subscription has no defined end period\nNote: The Dana subscription period shall not exceed three years in total.\n",
"example": 12,
"maxLength": 24,
"minLength": 0
},
"trialPeriodAmount": {
"type": "string",
"description": "The subscription amount that user pay during the trial period, for example 8000\nThe amount shall >= 0\nIf the value is empty, there is no trial period\n",
"example": 0,
"maxLength": 24,
"minLength": 0
},
"numberOfTrialPeriod": {
"type": "string",
"description": "Specify after how many periods, the trial will end. For example 1894\n",
"example": 1,
"maxLength": 12,
"minLength": 0
},
"trialPeriodType": {
"type": "string",
"description": "Subscription product period type:\n- DAILY\n- WEEKLY\n- MONTHLY\nThis field is optional when a trial period is configured. If omitted, the system will use periodType value by default.\n",
"example": "MONTHLY",
"maxLength": 12,
"minLength": 0
},
"trialPeriodInterval": {
"type": "string",
"description": "Represents the interval unit of the trial period. Same definition and behavior as periodInterval.\nIf the period type is DAILY, the period interval is between 1-365\nThis field is optional when a trial period is configured. If omitted, the system will use periodInterval value by default..\n",
"example": 1,
"maxLength": 12,
"minLength": 0
}
},
"required": [
"description",
"periodInterval",
"periodType"
]
},
"AcqSubscriptionCreateRequest.RiskData": {
"type": "object",
"description": "Risk data for compliance",
"properties": {
"userType": {
"type": "string",
"description": "Merchant user: Individual / Agent / Institution / Internal\n",
"example": "Individual",
"maxLength": 24,
"minLength": 0
},
"userCategory": {
"type": "string",
"description": "Merchant user: Member / Non-Member\n",
"example": "Member",
"maxLength": 24,
"minLength": 0
},
"userLegalName": {
"type": "string",
"description": "Merchant user legal name (or first name + last name)\n",
"example": "John Doe",
"maxLength": 128,
"minLength": 0
},
"userDisplayName": {
"type": "string",
"description": "Merchant user display name\n",
"example": "John",
"maxLength": 128,
"minLength": 0
},
"userRegistrationIp": {
"type": "string",
"description": "Merchant user registration IP address\n",
"example": "192.168.1.1",
"maxLength": 24,
"minLength": 0
},
"userLastSeenIp": {
"type": "string",
"description": "Merchant user last login IP address\n",
"example": "192.168.1.1",
"maxLength": 24,
"minLength": 0
},
"userIsNew": {
"type": "string",
"description": "Merchant user if he/she is a new user: Yes / No\n",
"example": "No",
"maxLength": 8,
"minLength": 0
},
"userIsFirstPurchase": {
"type": "string",
"description": "Merchant user if this is his/her first purchase: Yes / No\n",
"example": "No",
"maxLength": 8,
"minLength": 0
}
}
},
"AcqSubscriptionCreateRequest.UserInfo": {
"type": "object",
"description": "User information",
"properties": {
"userId": {
"type": "string",
"description": "Merchant User id. ",
"example": "USER001",
"maxLength": 64,
"minLength": 0
},
"userEmail": {
"type": "string",
"description": "Merchant user email",
"example": "user@example.com",
"maxLength": 64,
"minLength": 0
},
"userTerminal": {
"type": "string",
"description": "Merchant user terminal type: \n- WEB  (user is using a PC)\n- APP (user is using a Mobile Phone)\n",
"maxLength": 32,
"minLength": 0
},
"userPhone": {
"type": "string",
"description": "Merchant user mobile phone number: +Country code-Mobile Number, for example +62-08990013157\n",
"example": "+62-08990013157",
"maxLength": 32,
"minLength": 0
},
"userFirstName": {
"type": "string",
"description": "Merchant user's first name",
"maxLength": 64,
"minLength": 0
},
"userLastName": {
"type": "string",
"description": "Merchant user's last name",
"maxLength": 64,
"minLength": 0
},
"userCreatedAt": {
"type": "string",
"format": "date-time",
"description": "Merchant user creation time"
}
},
"required": [
"userEmail",
"userId"
]
},
"BrandInfo": {
"type": "object",
"description": "Brand display information for cashier",
"properties": {
"cashierLogoUrl": {
"type": "string",
"description": "   Merchant logo for cashier display.\n   - It supports external URL from merchant, and the format starts with https://, and the recommended size is 40x40 px\n   - It also supports the pre-created logo ID via https://dashboard.waffo.com/checkout/cashier-customization and the format starts with logo_\n",
"maxLength": 512,
"minLength": 0
},
"cashierDisplayName": {
"type": "string",
"description": "Merchant display name for cashier",
"maxLength": 128,
"minLength": 0
},
"cashierProductImageUrl": {
"type": "string",
"description": "Product image URL for cashier display. Starts with  https://. Recommended size: 1200x630 px",
"maxLength": 512,
"minLength": 0
}
}
},
"MerchantAcqProductAgreementEntity": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int64"
},
"agreementId": {
"type": "string"
},
"mid": {
"type": "string"
},
"productId": {
"type": "string"
},
"country": {
"type": "string"
},
"payMethodId": {
"type": "string"
},
"payMethodName": {
"type": "string"
},
"payMethodType": {
"type": "string"
},
"payOption": {
"type": "string"
},
"status": {
"type": "integer",
"format": "int32"
},
"currency": {
"type": "string"
},
"orderAmountMin": {
"type": "number"
},
"orderAmountMax": {
"type": "number"
},
"orderExpiryTime": {
"type": "integer",
"format": "int32"
},
"refundAllowed": {
"type": "integer",
"format": "int32"
},
"refundExpiryDate": {
"type": "integer",
"format": "int32"
},
"agreementStartTime": {
"type": "string",
"format": "date-time"
},
"agreementEndTime": {
"type": "string",
"format": "date-time"
},
"createTime": {
"type": "string",
"format": "date-time"
},
"updateTime": {
"type": "string",
"format": "date-time"
},
"createBy": {
"type": "string"
},
"updateBy": {
"type": "string"
},
"entityCode": {
"type": "string"
},
"crossCurrencyFlag": {
"type": "integer",
"format": "int32"
},
"userCurrency": {
"type": "string"
},
"extInfo": {
"type": "string"
},
"subscriptionMode": {
"type": "string"
},
"contractModel": {
"type": "string"
},
"vatMode": {
"type": "integer",
"format": "int32"
},
"rollingReserveFlag": {
"type": "integer",
"format": "int32"
},
"subscriptionExtInfo": {
"type": "string"
},
"agreementEndTimeOrDefault": {
"type": "string",
"format": "date-time"
},
"subscriptionExtInfoObj": {
"$ref": "#/components/schemas/SubscriptionExtInfo"
}
}
},
"RetryStrategy": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"retryInterval": {
"type": "integer",
"format": "int32"
},
"retryIntervalUnit": {
"type": "string"
},
"retryMaxCount": {
"type": "integer",
"format": "int32"
}
}
},
"SubscriptionExtInfo": {
"type": "object",
"properties": {
"retryMaxCount": {
"type": "integer",
"format": "int32",
"deprecated": true
},
"retryInterval": {
"type": "integer",
"format": "int32",
"deprecated": true
},
"retryIntervalUnit": {
"type": "string",
"deprecated": true
},
"periodMaxDurationYears": {
"type": "integer",
"format": "int32"
},
"closeRetryOrderOnCancel": {
"type": "integer",
"format": "int32"
},
"resetBillingTimeAfterPayment": {
"type": "integer",
"format": "int32"
},
"triggerNextAfterInterrupted": {
"type": "integer",
"format": "int32"
},
"retryStrategies": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RetryStrategy"
}
},
"serviceMode": {
"type": "string"
},
"blockedSubCardTypes": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"AcqSubscriptionCreateResponse": {
"type": "object",
"properties": {
"subscriptionRequest": {
"type": "string",
"description": "Subscription request id sent from Merchant. It will also be used for idempotent check. "
},
"merchantSubscriptionId": {
"type": "string",
"description": "Merchant subscription plan ID assigned to this user"
},
"subscriptionId": {
"type": "string",
"description": "Waffo subscription Id"
},
"payMethodSubscriptionId": {
"type": "string",
"description": "Payment method's subscription id\n"
},
"subscriptionStatus": {
"type": "string",
"description": "Subscription status\n- AUTHORIZATION_REQUIRED (pay method requires user authorization, merchant needs to bring user to the authorization page by retrieving the information from orderAction)\n- IN_PROGRESS (user is in progress to confirm the subscription)\n- ACTIVE \n- CLOSE (due to timeout or failed)\n- MERCHANT_CANCELLED\n- USER_CANCELLED\n- CHANNEL_CANCELLED\n- EXPIRED\n"
},
"subscriptionAction": {
"type": "string",
"description": "When subscriptionStatus = AUTHORIZATION_REQUIRED, merchant follow the following:  \n“webUrl”: redirect user to this URL\n"
}
}
},
"ResponseAcqSubscriptionCreateResponse": {
"type": "object",
"description": "response data",
"properties": {
"code": {
"type": "string"
},
"msg": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/AcqSubscriptionCreateResponse"
}
}
},
"SubscriptionChangeRequest": {
"type": "object",
"description": "Subscription change request",
"properties": {
"subscriptionRequest": {
"type": "string",
"description": "New subscription request id sent from Merchant. It will also be used for idempotent check.",
"x-gen": "NANOID",
"maxLength": 32,
"minLength": 0
},
"merchantSubscriptionId": {
"type": "string",
"description": "New merchant subscription plan ID assigned to this user",
"maxLength": 64,
"minLength": 0
},
"originSubscriptionRequest": {
"type": "string",
"description": "Original subscription request id that needs to be changed",
"example": "ORG_SUB_REQ_001",
"maxLength": 32,
"minLength": 0
},
"remainingAmount": {
"type": "string",
"description": "Remaining amount from the original subscription to be applied to the new subscription",
"example": 50000,
"maxLength": 24,
"minLength": 0
},
"currency": {
"type": "string",
"description": "Subscription currency, for example USD",
"example": "USD",
"maxLength": 12,
"minLength": 0
},
"userCurrency": {
"type": "string",
"description": "User payment currency. This is needed when merchant order currency is NOT the same as user payment currency",
"maxLength": 12,
"minLength": 0
},
"requestedAt": {
"type": "string",
"format": "date-time",
"description": "Merchant-side request time",
"x-gen": "DATETIME_ISO"
},
"successRedirectUrl": {
"type": "string",
"description": "The address of the merchant page to redirect to after successful subscription change. If no value is provided, it will stay on the cashier page after successful payment.",
"maxLength": 256,
"minLength": 0
},
"failedRedirectUrl": {
"type": "string",
"description": "The address of the merchant page to which the payment pre-verification fails, or the redirection after the payment fails. If no value is provided, it will stay on the cashier page after the payment fails",
"maxLength": 256,
"minLength": 0
},
"notifyUrl": {
"type": "string",
"description": "The callback address to notify the merchant after the subscription change is completed / failed",
"example": "https://merchant.com/notify",
"maxLength": 256,
"minLength": 0
},
"cancelRedirectUrl": {
"type": "string",
"description": "User will be redirected to this page if user choose to cancel and not continue the payment",
"maxLength": 512,
"minLength": 0
},
"subscriptionManagementUrl": {
"type": "string",
"description": "It refers to the subscription management page for users on the merchant side.",
"maxLength": 256,
"minLength": 0
},
"extendInfo": {
"type": "string",
"description": "Reserved. Json format e.g. {\"key1\":\"value1\", \"key2\":\"value2\"}",
"maxLength": 256,
"minLength": 0
},
"orderExpiredAt": {
"type": "string",
"format": "date-time",
"description": "The order expiry time set by merchant. User is required to input payment data on Waffo cashier page prior to merchant's order expiry time. If not provided, the default is 4 hours"
},
"productInfoList": {
"type": "array",
"description": "New subscription product information list",
"items": {
"$ref": "#/components/schemas/SubscriptionChangeRequest.ProductInfo"
},
"minItems": 1
},
"merchantInfo": {
"$ref": "#/components/schemas/SubscriptionChangeRequest.MerchantInfo",
"description": "Merchant info"
},
"userInfo": {
"$ref": "#/components/schemas/SubscriptionChangeRequest.UserInfo",
"description": "User info"
},
"goodsInfo": {
"$ref": "#/components/schemas/SubscriptionChangeRequest.GoodsInfo",
"description": "Merchant goods information"
},
"addressInfo": {
"$ref": "#/components/schemas/SubscriptionChangeRequest.AddressInfo",
"description": "Address Information"
},
"brandInfo": {
"$ref": "#/components/schemas/BrandInfo",
"description": "Brand display information for cashier"
},
"paymentInfo": {
"$ref": "#/components/schemas/SubscriptionChangeRequest.PaymentInfo",
"description": "Payment information"
},
"riskData": {
"$ref": "#/components/schemas/SubscriptionChangeRequest.RiskData",
"description": "Risk data for compliance and risk management"
}
},
"required": [
"currency",
"goodsInfo",
"merchantInfo",
"notifyUrl",
"originSubscriptionRequest",
"paymentInfo",
"productInfoList",
"remainingAmount",
"requestedAt",
"subscriptionRequest",
"userInfo"
]
},
"SubscriptionChangeRequest.AddressInfo": {
"type": "object",
"description": "Address information",
"properties": {
"address": {
"type": "string",
"description": "Shipping address",
"maxLength": 256,
"minLength": 0
},
"city": {
"type": "string",
"description": "Shipping city",
"maxLength": 32,
"minLength": 0
},
"region": {
"type": "string",
"description": "Shipping region / state / province",
"maxLength": 32,
"minLength": 0
},
"postcode": {
"type": "string",
"description": "Shipping postcode",
"maxLength": 16,
"minLength": 0
},
"addressCountryCode": {
"type": "string",
"description": "Shipping country code",
"maxLength": 16,
"minLength": 0
}
}
},
"SubscriptionChangeRequest.GoodsInfo": {
"type": "object",
"description": "Goods information",
"properties": {
"goodsId": {
"type": "string",
"description": "Goods item id",
"example": "GOODS001",
"maxLength": 32,
"minLength": 0
},
"goodsName": {
"type": "string",
"description": "Goods item name",
"example": "Premium Subscription Plan",
"maxLength": 64,
"minLength": 0
},
"goodsCategory": {
"type": "string",
"description": "Goods category",
"maxLength": 32,
"minLength": 0
},
"goodsUrl": {
"type": "string",
"description": "Goods URL from merchant website, for example https://www.merchant123.com/goods123 (for compliance and risk management purpose)",
"maxLength": 128,
"minLength": 0
},
"appName": {
"type": "string",
"description": "App package name, for example com.example.app123 (for compliance and risk management purpose)",
"maxLength": 32,
"minLength": 0
},
"skuName": {
"type": "string",
"description": "Goods sku name",
"maxLength": 32,
"minLength": 0
},
"goodsUniquePrice": {
"type": "string",
"description": "Goods price",
"maxLength": 16,
"minLength": 0
},
"goodsQuantity": {
"type": "integer",
"format": "int32",
"description": "Goods quantity"
}
},
"required": [
"goodsId",
"goodsName"
]
},
"SubscriptionChangeRequest.MerchantInfo": {
"type": "object",
"description": "Merchant information",
"properties": {
"merchantId": {
"type": "string",
"description": "Merchant id assigned by Waffo",
"example": "M0001",
"maxLength": 64,
"minLength": 0
},
"subMerchantId": {
"type": "string",
"description": "Sub merchant id assigned by Waffo",
"maxLength": 64,
"minLength": 0
}
},
"required": [
"merchantId"
]
},
"SubscriptionChangeRequest.PaymentInfo": {
"type": "object",
"description": "Payment information",
"properties": {
"productName": {
"type": "string",
"description": "Payment product:\n- SUBSCRIPTION\nMerchant can view the signed contract product via Waffo Merchant portal\n",
"example": "SUBSCRIPTION",
"maxLength": 32,
"minLength": 0
},
"payMethodType": {
"type": "string",
"description": "Payment method type. e.g.\n- EWALLET\n- CREDITCARD\n- DEBITCARD\nMerchant can provide a list of pay methods type as the filtering logic. If not provided, Waffo will choose all eligible payment methods based on merchant contract\n\nConditional\n(must be provided for card payments)\n",
"maxLength": 256,
"minLength": 0
},
"payMethodName": {
"type": "string",
"description": "The actual payment method. e.g. DANA\nIf payMethodName is provided, the payment request will be processed using this pay method directly\nConditional\n(required for non-card payment methods)\n",
"maxLength": 24,
"minLength": 0
},
"payMethodProperties": {
"type": "string",
"description": "For certain pay methods, there could be certain specific info needed. Json format e.g. {\"key1\":\"value1\", \"key2\":\"value2\"}",
"maxLength": 256,
"minLength": 0
},
"payMethodUserAccountType": {
"type": "string",
"description": "User account type at the designated pay method: EMAIL, PHONE_NO, ACCOUNT_ID",
"maxLength": 24,
"minLength": 0
},
"payMethodUserAccountNo": {
"type": "string",
"description": "User account number at the designated pay method",
"maxLength": 64,
"minLength": 0
},
"payMethodUserAccessToken": {
"type": "string",
"description": "User access token is required when using MINI_PROGRAM_SUBSCRIPTION product. The user access token can be obtained from mini program API",
"maxLength": 128,
"minLength": 0
},
"cashierAppearance": {
"type": "string",
"description": "Defines the overall appearance configuration of the UI, including colors, background, and typography settings. A JSON-formatted string containing theme variables."
}
},
"required": [
"productName"
]
},
"SubscriptionChangeRequest.ProductInfo": {
"type": "object",
"description": "Subscription product information",
"properties": {
"description": {
"type": "string",
"description": "Subscription product description, often appearing to user when asking user's confirmation",
"example": "Premium Monthly Subscription",
"maxLength": 128,
"minLength": 0
},
"periodType": {
"type": "string",
"description": "Subscription product period type: - DAILY - WEEKLY - MONTHLY",
"example": "MONTHLY",
"maxLength": 12,
"minLength": 0
},
"amount": {
"type": "string",
"description": "Subscription amount for this product",
"example": 100000,
"maxLength": 12,
"minLength": 0
},
"periodInterval": {
"type": "string",
"description": "Period interval. If the period type is WEEKLY, the period interval is between 1-4. If the period type is MONTHLY, the period interval is between 1-12. For example if the period type is weekly, the period interval is 2, it means every 2 weeks time user will pay for the subscription amount",
"example": 1,
"maxLength": 12,
"minLength": 0
},
"numberOfPeriod": {
"type": "string",
"description": "Specify after how many deduction period, the subscription will end. The value needs to be greater than 1. For example 3. If the value is empty, it means the subscription has no defined end period. Note: The Dana subscription period shall not exceed three years in total.",
"example": 12,
"maxLength": 24,
"minLength": 0
},
"trialPeriodAmount": {
"type": "string",
"description": "The subscription amount that user pay during the trial period, for example 8000. The amount shall >= 0. If the value is empty, there is no trial period",
"example": 0,
"maxLength": 24,
"minLength": 0
},
"numberOfTrialPeriod": {
"type": "string",
"description": "Specify after how many periods, the trial will end. For example 1894",
"example": 1,
"maxLength": 12,
"minLength": 0
},
"trialPeriodType": {
"type": "string",
"description": "Subscription product period type: - DAILY - WEEKLY - MONTHLY. This field is optional when a trial period is configured. If omitted, the system will use periodType value by default.",
"example": "MONTHLY",
"maxLength": 12,
"minLength": 0
},
"trialPeriodInterval": {
"type": "string",
"description": "Represents the interval unit of the trial period. Same definition and behavior as periodInterval. If the period type is DAILY, the period interval is between 1-365. This field is optional when a trial period is configured. If omitted, the system will use periodInterval value by default.",
"example": 1,
"maxLength": 12,
"minLength": 0
}
},
"required": [
"amount",
"description",
"periodInterval",
"periodType"
]
},
"SubscriptionChangeRequest.RiskData": {
"type": "object",
"description": "Risk data for compliance and risk management",
"properties": {
"userType": {
"type": "string",
"description": "Merchant user: Individual / Agent / Institution / Internal",
"maxLength": 24,
"minLength": 0
},
"userCategory": {
"type": "string",
"description": "Merchant user: Member / Non-Member",
"maxLength": 24,
"minLength": 0
},
"userLegalName": {
"type": "string",
"description": "Merchant user legal name (or first name + last name)",
"maxLength": 128,
"minLength": 0
},
"userDisplayName": {
"type": "string",
"description": "Merchant user display name",
"maxLength": 128,
"minLength": 0
},
"userRegistrationIp": {
"type": "string",
"description": "Merchant user registration IP address",
"maxLength": 24,
"minLength": 0
},
"userLastSeenIp": {
"type": "string",
"description": "Merchant user last login IP address",
"maxLength": 24,
"minLength": 0
},
"userIsNew": {
"type": "string",
"description": "Merchant user if he/she is a new user: Yes / No",
"maxLength": 8,
"minLength": 0
},
"userIsFirstPurchase": {
"type": "string",
"description": "Merchant user if this is his/her first purchase: Yes / No",
"maxLength": 8,
"minLength": 0
}
}
},
"SubscriptionChangeRequest.UserInfo": {
"type": "object",
"description": "User information",
"properties": {
"userId": {
"type": "string",
"description": "Merchant User id",
"example": "USER001",
"maxLength": 64,
"minLength": 0
},
"userEmail": {
"type": "string",
"description": "Merchant user email",
"example": "user@example.com",
"maxLength": 64,
"minLength": 0
},
"userTerminal": {
"type": "string",
"description": "Merchant user terminal type: \n- WEB  (user is using a PC)\n- APP (user is using a Mobile Phone)\n",
"maxLength": 32,
"minLength": 0
},
"userPhone": {
"type": "string",
"description": "Merchant user mobile phone number: +Country code-Mobile Number, for example +62-08990013157",
"example": "+62-08990013157",
"maxLength": 16,
"minLength": 0
},
"userFirstName": {
"type": "string",
"description": "Merchant user's first name",
"maxLength": 64,
"minLength": 0
},
"userLastName": {
"type": "string",
"description": "Merchant user's last name",
"maxLength": 64,
"minLength": 0
},
"userCreatedAt": {
"type": "string",
"format": "date-time",
"description": "Merchant user creation time"
}
},
"required": [
"userEmail",
"userId"
]
},
"ResponseSubscriptionChangeResponse": {
"type": "object",
"description": "response data",
"properties": {
"code": {
"type": "string"
},
"msg": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/SubscriptionChangeResponse"
}
}
},
"SubscriptionChangeResponse": {
"type": "object",
"description": "Subscription change response",
"properties": {
"originSubscriptionRequest": {
"type": "string",
"description": "Original subscription request id that was changed"
},
"subscriptionRequest": {
"type": "string",
"description": "New subscription request id after the change"
},
"merchantSubscriptionId": {
"type": "string",
"description": "Merchant's new subscription plan ID assigned to this user"
},
"subscriptionChangeStatus": {
"type": "string",
"description": "Subscription change status: - IN_PROGRESS (payment request initiated) - AUTHORIZATION_REQUIRED (user needs to authorize payment) - SUCCESS (subscription change completed) - CLOSED (subscription change failed or timeout)"
},
"subscriptionAction": {
"type": "string",
"description": "When subscriptionChangeStatus = AUTHORIZATION_REQUIRED, merchant follow the following: \"webUrl\": redirect user to this URL"
},
"subscriptionId": {
"type": "string",
"description": "New Waffo subscription Id"
}
},
"required": [
"subscriptionId"
]
},
"SubscriptionChangeInquiryRequest": {
"type": "object",
"description": "Subscription change inquiry request",
"properties": {
"originSubscriptionRequest": {
"type": "string",
"description": "Original subscription request id that was changed",
"maxLength": 32,
"minLength": 0
},
"subscriptionRequest": {
"type": "string",
"description": "New subscription request id after the change",
"maxLength": 32,
"minLength": 0
}
},
"required": [
"originSubscriptionRequest",
"subscriptionRequest"
]
},
"ResponseSubscriptionChangeInquiryResponse": {
"type": "object",
"description": "response data",
"properties": {
"code": {
"type": "string"
},
"msg": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/SubscriptionChangeInquiryResponse"
}
}
},
"SubscriptionChangeInquiryResponse": {
"type": "object",
"description": "Subscription change inquiry response",
"properties": {
"subscriptionRequest": {
"type": "string",
"description": "New subscription request id after the change",
"maxLength": 32,
"minLength": 0
},
"originSubscriptionRequest": {
"type": "string",
"description": "Original subscription request id that was changed",
"maxLength": 32,
"minLength": 0
},
"merchantSubscriptionId": {
"type": "string",
"description": "Merchant's new subscription plan ID assigned to this user",
"maxLength": 64,
"minLength": 0
},
"subscriptionId": {
"type": "string",
"description": "New Waffo subscription Id"
},
"subscriptionChangeStatus": {
"type": "string",
"description": "Subscription change status:\n- IN_PROGRESS (payment request initiated)\n- AUTHORIZATION_REQUIRED (user needs to authorize payment)\n- SUCCESS (subscription change completed)\n- CLOSED (subscription change failed or timeout)\n"
},
"subscriptionAction": {
"type": "string",
"description": "When subscriptionChangeStatus = AUTHORIZATION_REQUIRED, merchant follow the following: \n\"webUrl\": redirect user to this URL\n"
},
"remainingAmount": {
"type": "string",
"description": "Remaining amount from the original subscription applied to the new subscription",
"maxLength": 24,
"minLength": 0
},
"currency": {
"type": "string",
"description": "Merchant subscription currency, for example IDR",
"maxLength": 12,
"minLength": 0
},
"userCurrency": {
"type": "string",
"description": "User payment currency. This is needed when merchant order currency is NOT the same as user payment currency",
"maxLength": 12,
"minLength": 0
},
"requestedAt": {
"type": "string",
"description": "Merchant-side request time"
},
"subscriptionManagementUrl": {
"type": "string",
"description": "It refers to the subscription management page for users on the merchant side",
"maxLength": 256,
"minLength": 0
},
"extendInfo": {
"type": "string",
"description": "Reserved. Json format e.g. {\"key1\":\"value1\", \"key2\":\"value2\"}",
"maxLength": 256,
"minLength": 0
},
"orderExpiredAt": {
"type": "string",
"description": "The order expiry time set by merchant"
},
"productInfoList": {
"type": "array",
"description": "New subscription product information list",
"items": {
"$ref": "#/components/schemas/SubscriptionChangeInquiryResponse.ProductInfo"
},
"minItems": 1
},
"merchantInfo": {
"$ref": "#/components/schemas/SubscriptionChangeInquiryResponse.MerchantInfo",
"description": "Merchant info"
},
"userInfo": {
"$ref": "#/components/schemas/SubscriptionChangeInquiryResponse.UserInfo",
"description": "User info"
},
"goodsInfo": {
"$ref": "#/components/schemas/SubscriptionChangeInquiryResponse.GoodsInfo",
"description": "Merchant goods information"
},
"addressInfo": {
"$ref": "#/components/schemas/SubscriptionChangeInquiryResponse.AddressInfo",
"description": "Address Information"
},
"paymentInfo": {
"$ref": "#/components/schemas/SubscriptionChangeInquiryResponse.PaymentInfo",
"description": "Payment information"
}
},
"required": [
"currency",
"goodsInfo",
"merchantInfo",
"merchantSubscriptionId",
"originSubscriptionRequest",
"paymentInfo",
"productInfoList",
"remainingAmount",
"requestedAt",
"subscriptionId",
"subscriptionRequest",
"userInfo"
]
},
"SubscriptionChangeInquiryResponse.AddressInfo": {
"type": "object",
"description": "Address information",
"properties": {
"address": {
"type": "string",
"description": "Shipping address",
"maxLength": 256,
"minLength": 0
},
"city": {
"type": "string",
"description": "Shipping city",
"maxLength": 32,
"minLength": 0
},
"region": {
"type": "string",
"description": "Shipping region / state / province",
"maxLength": 32,
"minLength": 0
},
"postcode": {
"type": "string",
"description": "Shipping postcode",
"maxLength": 16,
"minLength": 0
},
"addressCountryCode": {
"type": "string",
"description": "Shipping country code",
"maxLength": 16,
"minLength": 0
}
}
},
"SubscriptionChangeInquiryResponse.GoodsInfo": {
"type": "object",
"description": "Goods information",
"properties": {
"goodsId": {
"type": "string",
"description": "Goods item id",
"maxLength": 32,
"minLength": 0
},
"goodsName": {
"type": "string",
"description": "Goods item name",
"maxLength": 64,
"minLength": 0
},
"goodsCategory": {
"type": "string",
"description": "Goods category",
"maxLength": 32,
"minLength": 0
},
"goodsUrl": {
"type": "string",
"description": "Goods URL from merchant website, for example https://www.merchant123.com/goods123 (for compliance and risk management purpose)",
"maxLength": 128,
"minLength": 0
},
"appName": {
"type": "string",
"description": "app package name, for example com.example.app123 (for compliance and risk management purpose)",
"maxLength": 32,
"minLength": 0
},
"skuName": {
"type": "string",
"description": "Goods sku name",
"maxLength": 32,
"minLength": 0
},
"goodsUniquePrice": {
"type": "string",
"description": "Goods price",
"maxLength": 16,
"minLength": 0
},
"goodsQuantity": {
"type": "integer",
"format": "int32",
"description": "Goods quantity"
}
},
"required": [
"goodsId",
"goodsName"
]
},
"SubscriptionChangeInquiryResponse.MerchantInfo": {
"type": "object",
"description": "Merchant information",
"properties": {
"merchantId": {
"type": "string",
"description": "Merchant id assigned by Waffo",
"maxLength": 64,
"minLength": 0
},
"subMerchantId": {
"type": "string",
"description": "Sub merchant id assigned by Waffo",
"maxLength": 64,
"minLength": 0
}
},
"required": [
"merchantId"
]
},
"SubscriptionChangeInquiryResponse.PaymentInfo": {
"type": "object",
"description": "Payment information",
"properties": {
"productName": {
"type": "string",
"description": "Payment product:\n- SUBSCRIPTION\nMerchant can view the signed contract product via Waffo Merchant portal\n",
"maxLength": 32,
"minLength": 0
},
"payMethodType": {
"type": "string",
"description": "Payment method type. e.g.\n- EWALLET\n- CREDITCARD\n- DEBITCARD\nMerchant can provide a list of pay methods type as the filtering logic. If not provided, Waffo will choose all eligible payment methods based on merchant contract\n\nConditional\n(must be provided for card payments)\n",
"maxLength": 256,
"minLength": 0
},
"payMethodName": {
"type": "string",
"description": "The actual payment method. e.g. DANA\nIf payMethodName is provided, the payment request will be processed using this pay method directly\nConditional\n(required for non-card payment methods)\n",
"maxLength": 24,
"minLength": 0
},
"payMethodProperties": {
"type": "string",
"description": "For certain pay methods, there could be certain specific info needed. Json format e.g. {\"key1\":\"value1\", \"key2\":\"value2\"}",
"maxLength": 256,
"minLength": 0
},
"payMethodUserAccountType": {
"type": "string",
"description": "User account type at the designated pay method: EMAIL, PHONE_NO, ACCOUNT_ID",
"maxLength": 24,
"minLength": 0
},
"payMethodUserAccountNo": {
"type": "string",
"description": "User account number at the designated pay method",
"maxLength": 64,
"minLength": 0
},
"payMethodUserAccessToken": {
"type": "string",
"description": "User access token is required when using MINI_PROGRAM_SUBSCRIPTION product. The user access token can be obtained from mini program API",
"maxLength": 128,
"minLength": 0
},
"cashierAppearance": {
"type": "string",
"description": "Defines the overall appearance configuration of the UI, including colors, background, and typography settings. A JSON-formatted string containing theme variables. These variables are injected into the UI rendering layer and override the default theme settings. This field must be a valid JSON string, not a plain object. Example: {\"variables\":{\"colorPrimary\":\"#0570de\",\"colorBackground\":\"#ffffff\",\"colorText\":\"#30313d\"}}"
},
"cashierLogoId": {
"type": "string",
"description": "Cashier Logo Id"
}
},
"required": [
"productName"
]
},
"SubscriptionChangeInquiryResponse.ProductInfo": {
"type": "object",
"description": "Subscription product information",
"properties": {
"description": {
"type": "string",
"description": "Subscription product description, often appearing to user when asking user's confirmation",
"maxLength": 128,
"minLength": 0
},
"periodType": {
"type": "string",
"description": "Subscription product period type: - DAILY - WEEKLY - MONTHLY",
"maxLength": 12,
"minLength": 0
},
"amount": {
"type": "string",
"description": "Subscription amount for this product",
"maxLength": 12,
"minLength": 0
},
"periodInterval": {
"type": "string",
"description": "Period interval. If the period type is WEEKLY, the period interval is between 1-4. If the period type is MONTHLY, the period interval is between 1-12. For example if the period type is weekly, the period interval is 2, it means every 2 weeks time user will pay for the subscription amount",
"maxLength": 12,
"minLength": 0
},
"numberOfPeriod": {
"type": "string",
"description": "Specify after how many deduction period, the subscription will end. The value needs to be greater than 1. For example 3. If the value is empty, it means the subscription has no defined end period. Note: The Dana subscription period shall not exceed three years in total.",
"maxLength": 24,
"minLength": 0
},
"trialPeriodAmount": {
"type": "string",
"description": "The subscription amount that user pay during the trial period, for example 8000. The amount shall >= 0. If the value is empty, there is no trial period",
"maxLength": 24,
"minLength": 0
},
"numberOfTrialPeriod": {
"type": "string",
"description": "Specify after how many periods, the trial will end. For example 1894",
"maxLength": 12,
"minLength": 0
},
"trialPeriodType": {
"type": "string",
"description": "Subscription product period type: - DAILY - WEEKLY - MONTHLY. This field is optional when a trial period is configured. If omitted, the system will use periodType value by default.",
"maxLength": 12,
"minLength": 0
},
"trialPeriodInterval": {
"type": "string",
"description": "Represents the interval unit of the trial period. Same definition and behavior as periodInterval. If the period type is DAILY, the period interval is between 1-365. This field is optional when a trial period is configured. If omitted, the system will use periodInterval value by default.",
"maxLength": 12,
"minLength": 0
}
},
"required": [
"amount",
"description",
"periodInterval",
"periodType"
]
},
"SubscriptionChangeInquiryResponse.UserInfo": {
"type": "object",
"description": "User information",
"properties": {
"userId": {
"type": "string",
"description": "Merchant User id",
"maxLength": 64,
"minLength": 0
},
"userEmail": {
"type": "string",
"description": "Merchant user email",
"maxLength": 64,
"minLength": 0
},
"userTerminal": {
"type": "string",
"description": "Merchant user terminal type: \n- WEB  (user is using a PC)\n- APP (user is using a Mobile Phone)\n",
"maxLength": 32,
"minLength": 0
},
"userPhone": {
"type": "string",
"description": "Merchant user mobile phone number: +Country code-Mobile Number, for example +62-08990013157",
"maxLength": 16,
"minLength": 0
},
"userFirstName": {
"type": "string",
"description": "Merchant user's first name",
"maxLength": 64,
"minLength": 0
},
"userLastName": {
"type": "string",
"description": "Merchant user's last name",
"maxLength": 64,
"minLength": 0
},
"userCreatedAt": {
"type": "string",
"description": "Merchant user creation time"
}
},
"required": [
"userEmail",
"userId"
]
},
"SubscriptionCancelRequest": {
"type": "object",
"description": "Subscription cancel request",
"properties": {
"subscriptionId": {
"type": "string",
"description": "Waffo subscription Id",
"example": "<subscriptionId>",
"maxLength": 64,
"minLength": 0
},
"merchantId": {
"type": "string",
"description": "Merchant Id assigned by Waffo",
"example": 1000000201,
"maxLength": 64,
"minLength": 0
},
"requestedAt": {
"type": "string",
"format": "date-time",
"description": "Merchant-side cancel request time",
"x-gen": "DATETIME_ISO"
}
},
"required": [
"merchantId",
"requestedAt",
"subscriptionId"
]
},
"ResponseSubscriptionCancelResponse": {
"type": "object",
"description": "response data",
"properties": {
"code": {
"type": "string"
},
"msg": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/SubscriptionCancelResponse"
}
}
},
"SubscriptionCancelResponse": {
"type": "object",
"properties": {
"merchantSubscriptionId": {
"type": "string",
"description": "Merchant subscription plan ID assigned to this user "
},
"subscriptionRequest": {
"type": "string",
"description": "Subscription request id sent from Merchant. It will also be used for idempotent check.  "
},
"subscriptionId": {
"type": "string",
"description": "Waffo subscription Id "
},
"orderStatus": {
"type": "string",
"description": "- CLOSE (due to timeout or failed)\n- MERCHANT_CANCELLED\n- CHANNEL_CANCELLED\n- EXPIRED \n"
}
}
},
"AcqOrderRefundInquiryRequest": {
"type": "object",
"description": "provide refundRequestId or acquiringRefundOrderId",
"properties": {
"refundRequestId": {
"type": "string",
"description": "Refund request id sent from Merchant. It will also be used for idempotent check. \n(provide refundRequestId or acquiringRefundOrderId) \n"
},
"acquiringRefundOrderId": {
"type": "string",
"description": "Waffo refund order Id  \n(provide refundRequestId or acquiringRefundOrderId) \n",
"example": "<acquiringRefundOrderId>"
}
}
},
"AcqOrderRefundInquiry": {
"type": "object",
"description": "A RefundOrder object will be returned",
"properties": {
"refundRequestId": {
"type": "string",
"description": "Refund request id sent from Merchant. It will also be used for idempotent check. "
},
"merchantRefundOrderId": {
"type": "string",
"description": "merchant refund order id"
},
"acquiringOrderId": {
"type": "string",
"description": "acquiring order id"
},
"acquiringRefundOrderId": {
"type": "string",
"description": "acquiring refund order id"
},
"origPaymentRequestId": {
"type": "string",
"description": "Original Payment request id sent from Merchant."
},
"refundAmount": {
"type": "string",
"description": "refund amount"
},
"refundStatus": {
"type": "string",
"description": "**REFUND_IN_PROGRESS** - refund request has been accepted and result will be sent back to merchant \n**ORDER_PARTIALLY_REFUNDED** \n**ORDER_FULLY_REFUNDED** \n**ORDER_REFUND_FAILED**"
},
"refundReason": {
"type": "string",
"description": "merchant refund reason"
},
"refundRequestedAt": {
"type": "string",
"description": "merchant side request time"
},
"refundUpdatedAt": {
"type": "string",
"description": "order last update time"
},
"refundFailedReason": {
"type": "string",
"description": "Json format \n { \n    \"orderFailedCode\":\"XXX\", \n    \"orderFailedDescription\":\"XXX\" \n}"
},
"extendInfo": {
"type": "string",
"description": "Reserved. Json format e.g. {\"key1\":\"value1\", \"key2\":\"value2\"}"
},
"userCurrency": {
"type": "string",
"description": "User payment currency. This is needed when merchant order currency is NOT the same as user payment currency."
},
"finalDealAmount": {
"type": "string",
"description": "The final refunded amount that the user receives.\nIf merchant order currency is not the same as user payment currency, the finalDealAmount will not be the same as orderAmount.\nThe refunded amount may not include the service/tax fee that user has paid, hence the finalDealAmount may not the same as orderAmount. "
},
"merchantUserId": {
"type": "string",
"description": "Merchant user id"
},
"subscriptionInfo": {
"$ref": "#/components/schemas/SubscriptionInfo",
"description": "The associated subscription info. Present when the refund is linked to a subscription payment order."
},
"remainingRefundAmount": {
"type": "string",
"description": "Remaining Refund Amount that Merchant can still refund"
},
"userInfo": {
"$ref": "#/components/schemas/RefundOrderUserInfo",
"description": "For certain pay method type (e.g. ONLINE_BANKING) the refund requires Merchant to provide user information to execute"
},
"refundCompletedAt": {
"type": "string",
"description": "Refund order completion time"
},
"refundSource": {
"type": "string",
"description": "Refund Source\n**MERCHANT**: Indicates the refund is triggered by the Merchant.\n**RDR**: Indicates the refund is triggered by the chargeback alert service via vendor RDR.\n**ETHOCA**: Indicates the refund is triggered by the chargeback alert service via vendor Ethoca.\n"
}
},
"required": [
"acquiringOrderId",
"acquiringRefundOrderId",
"finalDealAmount",
"origPaymentRequestId",
"refundAmount",
"refundReason",
"refundRequestId",
"refundRequestedAt",
"refundStatus",
"refundUpdatedAt",
"remainingRefundAmount"
]
},
"RefundOrderUserBankInfo": {
"type": "object",
"properties": {
"bankAccountNo": {
"type": "string",
"maxLength": 64,
"minLength": 0
},
"bankCode": {
"type": "string",
"maxLength": 64,
"minLength": 0
},
"bankName": {
"type": "string",
"maxLength": 64,
"minLength": 0
},
"bankCity": {
"type": "string",
"maxLength": 64,
"minLength": 0
},
"bankBranch": {
"type": "string",
"maxLength": 64,
"minLength": 0
}
}
},
"RefundOrderUserInfo": {
"type": "object",
"description": "For certain pay method type (e.g. ONLINE_BANKING) the refund requires Merchant to provide user information to execute",
"properties": {
"userType": {
"type": "string",
"default": "INDIVIDUAL",
"description": "User Type: \n- **INDIVIDUAL** \n- **BUSINESS**",
"example": "INDIVIDUAL",
"maxLength": 12,
"minLength": 0
},
"userFirstName": {
"type": "string",
"description": "User's first name",
"maxLength": 64,
"minLength": 0
},
"userMiddleName": {
"type": "string",
"maxLength": 64,
"minLength": 0
},
"userLastName": {
"type": "string",
"description": "User's last name",
"maxLength": 64,
"minLength": 0
},
"nationality": {
"type": "string",
"maxLength": 3,
"minLength": 0
},
"userEmail": {
"type": "string",
"description": "User's email address for refund communication",
"example": "test@email.com",
"maxLength": 64,
"minLength": 0
},
"userBankInfo": {
"$ref": "#/components/schemas/RefundOrderUserBankInfo",
"description": "it will include the following info in a json format: \n{ \n\"bankAccountNo\": \"XXX\", \n\"bankCode\": \"XXX\", \n\"bankCity\": \"XXX\", \n\"bankBranch\": \"XXX\" \n}"
},
"userPhone": {
"type": "string",
"description": "Merchant user mobile phone number: +Country code-Mobile Number, for example +62-08990013157",
"maxLength": 16,
"minLength": 0
},
"userBirthDay": {
"type": "string",
"maxLength": 12,
"minLength": 0
},
"userIDType": {
"type": "string",
"description": "User's Identification Type",
"maxLength": 24,
"minLength": 0
},
"userIDNumber": {
"type": "string",
"description": "User's Identification Number",
"maxLength": 64,
"minLength": 0
},
"userIDIssueDate": {
"type": "string",
"description": "The date of issue of User's ID. Format is dd/mm/yyyy",
"maxLength": 12,
"minLength": 0
},
"userIDExpiryDate": {
"type": "string",
"description": "The date of expiry of User's ID. Format is dd/mm/yyyy",
"maxLength": 12,
"minLength": 0
}
},
"required": [
"userType"
]
},
"ResponseAcqOrderRefundInquiry": {
"type": "object",
"description": "response data",
"properties": {
"code": {
"type": "string"
},
"msg": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/AcqOrderRefundInquiry"
}
}
},
"SubscriptionInfo": {
"type": "object",
"description": "The associated subscription info",
"properties": {
"subscriptionId": {
"type": "string",
"description": "The associated subscription ID"
},
"period": {
"type": "string",
"description": "Which period the subscription payment belong to. For example 2"
},
"subscriptionRequest": {
"type": "string",
"description": "Subscription request id sent from Merchant. It will also be used for idempotent check. "
}
},
"required": [
"period",
"subscriptionId",
"subscriptionRequest"
]
},
"PayMethodConfigInquiryRequest": {
"type": "object",
"properties": {
"merchantId": {
"type": "string",
"default": "1000000201",
"description": "Merchant id assigned by Waffo",
"example": 1000000201,
"maxLength": 64,
"minLength": 0
}
},
"required": [
"merchantId"
]
},
"FixedMaintenanceRule": {
"type": "object",
"description": "The fixed maintenance timezone. e.g UTC+08:00, UTC+05:30",
"properties": {
"startRule": {
"type": "string",
"description": "The start time of fixed maintenance. written in cron expression format e.g. \n**00 00 00 ? * THU**"
},
"endRule": {
"type": "string",
"description": "The end time of fixed maintenance. written in cron expression format e.g. \n**00 00 00 ? * THU**"
}
},
"required": [
"endRule",
"startRule"
]
},
"PayMethodConfigInquiryResponse": {
"type": "object",
"properties": {
"merchantId": {
"type": "string",
"default": "1000000201",
"description": "Merchant id assigned by Waffo",
"example": 1000000201
},
"payMethodDetails": {
"type": "array",
"description": "The array object of the pay methods details that merchant has signed a contract with",
"items": {
"$ref": "#/components/schemas/PayMethodDetail"
}
}
},
"required": [
"merchantId",
"payMethodDetails"
]
},
"PayMethodDetail": {
"type": "object",
"description": "The pay methods details that merchant has signed a contract with",
"properties": {
"productName": {
"type": "string",
"description": "Payment product: \n- **ONE_TIME_PAYMENT** \n- **DIRECT_PAYMENT**"
},
"payMethodName": {
"type": "string",
"description": "The name of the pay method. e.g. GCash, DANA"
},
"country": {
"type": "string",
"description": "The country of the pay method e.g. PHL, IDN"
},
"currentStatus": {
"type": "string",
"description": "The current availability of the pay method\n- **1** - Available\n- **0** - Not available"
},
"fixedMaintenanceRules": {
"type": "array",
"description": "The fixed maintenance period, written in cron expression format. e.g.\n- **0 30 1 * * ?   -  0 30 2 * * ?** -  Not available daily from 1:30-2:30am\n- **0 00 23 ? * 1,2,3,4,5  -  0 59 23 ? * 1,2,3,4,5** - Not available From Mon-Fri 11:00pm-11:59pm\n- **0 00 0 1,15 * ?  -  0 59 23 1,15 * ?** - Not available on Day 1, Day 15 of the month",
"items": {
"$ref": "#/components/schemas/FixedMaintenanceRule"
}
},
"fixedMaintenanceTimezone": {
"type": "string",
"description": "The fixed maintenance timezone. e.g UTC+08:00, UTC+05:30"
}
},
"required": [
"country",
"currentStatus",
"fixedMaintenanceRules",
"fixedMaintenanceTimezone",
"payMethodName",
"productName"
]
},
"ResponsePayMethodConfigInquiryResponse": {
"type": "object",
"description": "response data",
"properties": {
"code": {
"type": "string"
},
"msg": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/PayMethodConfigInquiryResponse"
}
}
},
"AcqOrderRefundRequest": {
"type": "object",
"properties": {
"refundRequestId": {
"type": "string",
"description": "Refund request id sent from Merchant. It will also be used for idempotent check.",
"x-gen": "NANOID",
"maxLength": 32,
"minLength": 0
},
"acquiringOrderId": {
"type": "string",
"description": "Waffo acquiring order Id",
"example": "<acquiringOrderId>",
"maxLength": 32,
"minLength": 0
},
"merchantRefundOrderId": {
"type": "string",
"description": "Merchant side refund order id",
"maxLength": 64,
"minLength": 0
},
"merchantId": {
"type": "string",
"default": "1000000201",
"description": "Merchant Id assigned by Waffo",
"example": 1000000201,
"maxLength": 64,
"minLength": 0
},
"requestedAt": {
"type": "string",
"format": "date-time",
"description": "Merchant-side request time",
"x-gen": "DATETIME_ISO"
},
"refundAmount": {
"type": "string",
"description": "Refund amount",
"example": 10,
"minLength": 1
},
"refundReason": {
"type": "string",
"description": "Refund reason",
"example": "replace your reason....",
"maxLength": 256,
"minLength": 0
},
"refundNotifyUrl": {
"type": "string",
"description": "The callback address to notify the merchant after the refund is completed / failed. \nIf not provided, Merchant can use inquiry refund API to get the final refund status.",
"maxLength": 256,
"minLength": 0
},
"extendInfo": {
"type": "string",
"description": "Reserved. Json format e.g. {\"key1\":\"value1\", \"key2\":\"value2\"} ",
"maxLength": 128,
"minLength": 0
},
"refundSource": {
"type": "string"
},
"userInfo": {
"$ref": "#/components/schemas/RefundOrderUserInfo",
"description": "For certain pay method type (e.g. ONLINE_BANKING) the refund requires Merchant to provide user information to execute"
}
},
"required": [
"acquiringOrderId",
"merchantId",
"refundAmount",
"refundReason",
"refundRequestId",
"requestedAt"
]
},
"AcqOrderRefundResponse": {
"type": "object",
"properties": {
"refundRequestId": {
"type": "string",
"description": "Refund request id sent from Merchant. It will also be used for idempotent check."
},
"merchantRefundOrderId": {
"type": "string",
"description": "Merchant order id"
},
"acquiringOrderId": {
"type": "string",
"description": "Waffo acquiring order Id"
},
"acquiringRefundOrderId": {
"type": "string",
"description": "Waffo refund order Id"
},
"refundAmount": {
"type": "string",
"description": "Refund amount"
},
"refundStatus": {
"type": "string",
"description": "**REFUND_IN_PROGRESS** - refund request has been accepted and result will be sent back to merchant via refundNotifyUrl \n**ORDER_PARTIALLY_REFUNDED** \n**ORDER_FULLY_REFUNDED** \n**ORDER_REFUND_FAILED**"
},
"remainingRefundAmount": {
"type": "string",
"description": "Remaining Refund Amount that Merchant can still refund"
},
"refundSource": {
"type": "string",
"description": "Refund Source \n**MERCHANT** \n**RDR** \n**ETHOCA**"
}
},
"required": [
"acquiringOrderId",
"acquiringRefundOrderId",
"refundAmount",
"refundRequestId",
"refundSource",
"refundStatus",
"remainingRefundAmount"
]
},
"ResponseAcqOrderRefundResponse": {
"type": "object",
"description": "response data",
"properties": {
"code": {
"type": "string"
},
"msg": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/AcqOrderRefundResponse"
}
}
},
"AcqOrderInquiryRequest": {
"type": "object",
"description": "provide paymentRequestId or acquirerOrderId",
"properties": {
"paymentRequestId": {
"type": "string",
"description": "Payment request id sent from Merchant. It will also be used for idempotent check. \n (provide paymentRequestId or acquirerOrderId) "
},
"acquiringOrderId": {
"type": "string",
"description": "waffo acquiring order Id \n(provide paymentRequestId or acquirerOrderId)",
"example": "<acquiringOrderId>"
}
}
},
"AcqOrderAddressInfo": {
"type": "object",
"description": "addressInfo",
"properties": {
"address": {
"type": "string",
"description": "Shipping address",
"example": "street 123 ...",
"maxLength": 256,
"minLength": 0
},
"city": {
"type": "string",
"description": "Shipping city",
"example": "city123",
"maxLength": 32,
"minLength": 0
},
"region": {
"type": "string",
"description": "Shipping region / state / province",
"example": "region or state or province 123",
"maxLength": 32,
"minLength": 0
},
"postcode": {
"type": "string",
"description": "Shipping postcode",
"example": 112233,
"maxLength": 16,
"minLength": 0
},
"addressCountryCode": {
"type": "string",
"description": "Shipping country code",
"example": "IDN",
"maxLength": 16,
"minLength": 0
}
}
},
"AcqOrderGoodsInfo": {
"type": "object",
"description": "GoodsInfo",
"properties": {
"goodsId": {
"type": "string",
"description": "Goods item id",
"example": 10001,
"maxLength": 128,
"minLength": 0
},
"goodsName": {
"type": "string",
"description": "Goods item name",
"example": "GameXXX-001",
"maxLength": 64,
"minLength": 0
},
"skuName": {
"type": "string",
"description": "Goods sku categories",
"example": "GameXXX",
"maxLength": 32,
"minLength": 0
},
"goodsUniquePrice": {
"type": "string",
"description": "Goods price",
"example": 100,
"maxLength": 16,
"minLength": 0
},
"goodsQuantity": {
"type": "integer",
"format": "int32",
"description": "Goods quantity",
"example": 1
},
"goodsCategory": {
"type": "string",
"description": "Goods category",
"maxLength": 32,
"minLength": 0
},
"goodsUrl": {
"type": "string",
"description": "Goods URL from merchant website , for example \n https://www.merchant123.com/goods123 \n (for compliance and risk management purpose) \n provide either goodsUrl or appName",
"example": "https://www.merchant123.com/goods123",
"maxLength": 128,
"minLength": 0
},
"appName": {
"type": "string",
"description": "app package name, for example com.example.app123\n(for compliance and risk management purpose) \n provide either goodsUrl or appName",
"maxLength": 32,
"minLength": 0
}
},
"required": [
"appName",
"goodsName",
"goodsUrl"
]
},
"AcqOrderInquiry": {
"type": "object",
"description": "A PaymentOrder object will be returned.",
"properties": {
"paymentRequestId": {
"type": "string",
"description": "Payment request id sent from Merchant. It will also be used for idempotent check. "
},
"merchantOrderId": {
"type": "string",
"description": "Merchant order id"
},
"acquiringOrderId": {
"type": "string",
"description": "Waffo acquiring order Id"
},
"orderStatus": {
"type": "string",
"description": "**PAY_IN_PROGRESS** - (merchant order is accepted, and user is in the process of payment)  \n**AUTHORIZATION_REQUIRED** (pay method requires user authorization, usually for an OTP authentication or a redirection to a page for authentication)  \n**AUTHED_WAITING_CAPTURE** (Order needs to be captured by merchant, applicable for CARD payment)  \n**PAY_SUCCESS**  \n**ORDER_CLOSE** (due to order cancel or timeout)",
"example": "PAY_IN_PROGRESS"
},
"orderAction": {
"type": "string",
"description": "When orderStatus = AUTHORIZATION_REQUIRED, merchant follow the following:  \n\"actionType\": value could be \"WEB\" / \"DEEPLINK\". If the actionType is WEB, merchant choose webUrl to redirect user. If the actionType is DEEPLINK, merchant choose deeplinkUrl to redirect user.\n\"webUrl\": redirect user to webURL\n\"deeplinkUrl\": redirect user to deeplink url\n\"actionData\": {\n  \"paymentExpiryTime\":\"2023-04-01T03:00:00.000Z\", (Follow ISO 8601 standard)\n  \"paymentQr\":\"xxx\", (QR String Value)\n  \"paymentCode\":\"xxx\",\n  \"paymentBarCode\":\"xxx\",\n  \"paymentCurrency\": \"xxx\",\n  \"paymentAmount\": \"xxx\",\n  \"userFeeAmount\": \"xxx\",\n  \"userFeeCurrency\":\"xxx\",\n  \"exchangeRate\": \"xxx\" (it is paymentAmount/orderAmount when orderCurrency is not the same as paymentCurrency)\n}\nActionData is for those Merchants who want to build their own Cashier Page for their users, without using Waffo's cashier page\n"
},
"orderCurrency": {
"type": "string",
"description": "Merchant order currency"
},
"orderAmount": {
"type": "string",
"description": "Merchant order amount"
},
"finalDealAmount": {
"type": "string",
"description": "The final amount that the user paid.\nIf merchant order currency is not the same as user payment currency, the finalDealAmount will not be the same as orderAmount. \nIf there are additional service fees that the user paid, the finalDealAmount will also not be the same as orderAmount. "
},
"orderDescription": {
"type": "string",
"description": "Order description information"
},
"merchantInfo": {
"$ref": "#/components/schemas/MerchantInfo",
"description": "merchant Info"
},
"userInfo": {
"$ref": "#/components/schemas/AcqOrderMerchantUserInfo",
"description": "user info"
},
"goodsInfo": {
"$ref": "#/components/schemas/AcqOrderGoodsInfo",
"description": "goods info"
},
"paymentInfo": {
"$ref": "#/components/schemas/AcqOrderPaymentInfo",
"description": "payment info"
},
"addressInfo": {
"$ref": "#/components/schemas/AcqOrderAddressInfo",
"description": "address info"
},
"orderRequestedAt": {
"type": "string",
"description": "Merchant-side request time"
},
"orderExpiredAt": {
"type": "string",
"description": "The order expiry time set by merchant. If not set, the default merchant contract expiry time will be used"
},
"orderUpdatedAt": {
"type": "string",
"description": "Order last update time"
},
"orderCompletedAt": {
"type": "string",
"description": "Order completion time"
},
"refundExpiryAt": {
"type": "string",
"description": "Refund expiry time. After this time, refunds are no longer allowed. Format follows ISO 8601 standard (e.g., 2023-07-01T23:59:59.999Z)\nNote: \nIf refunds are not allowed or the order is not successful, this value is null.\n"
},
"cancelRedirectUrl": {
"type": "string",
"description": "The address of the merchant page to redirect to when user cancels the payment"
},
"orderFailedReason": {
"type": "string",
"description": "Json format \n { \n    \"orderFailedCode\":\"XXX\", \n    \"orderFailedDescription\":\"XXX\" \n}"
},
"extendInfo": {
"type": "string",
"description": "Reserved. Json format e.g. {\"key1\":\"value1\", \"key2\":\"value2\"} "
},
"userCurrency": {
"type": "string",
"description": "User payment currency. This is needed when merchant order currency is NOT the same as user payment currency"
},
"subscriptionInfo": {
"$ref": "#/components/schemas/SubscriptionInfo"
}
},
"required": [
"acquiringOrderId",
"finalDealAmount",
"merchantOrderId",
"orderAmount",
"orderCurrency",
"orderDescription",
"orderStatus",
"paymentRequestId"
]
},
"AcqOrderMerchantUserInfo": {
"type": "object",
"description": "User info",
"properties": {
"userId": {
"type": "string",
"description": "Merchant User id",
"example": "0001",
"maxLength": 64,
"minLength": 0
},
"userCreatedAt": {
"type": "string",
"description": "Merchant user creation time",
"example": "2021-05-16T08:00:00.000Z"
},
"userEmail": {
"type": "string",
"description": "Merchant user email",
"example": "test@email.com",
"maxLength": 64,
"minLength": 0
},
"userPhone": {
"type": "string",
"description": "Merchant user mobile phone number",
"maxLength": 30,
"minLength": 0
},
"userCountryCode": {
"type": "string",
"description": "The country code of the source of the user request",
"maxLength": 3,
"minLength": 0
},
"userTerminal": {
"type": "string",
"default": "WEB",
"description": "user terminal type: \n- **WEB** (user is using a PC) \n- **APP** (user is using a Mobile Phone) \n- **IN_WALLET_APP** (user is inside a pay method's wallet app (e.g. Wechat app)) \n- **IN_MINI_PROGRAM** (user is inside a pay method's mini program (e.g. Wechat mini program)) \nNot all pay methods support the above user terminals, hence such info is used for checking if a user can use a particular pay method for his/her payment",
"example": "WEB",
"maxLength": 32,
"minLength": 0
},
"userFirstName": {
"type": "string",
"description": "Merchant user's first name",
"maxLength": 64,
"minLength": 0
},
"userLastName": {
"type": "string",
"description": "Merchant user's last name",
"maxLength": 64,
"minLength": 0
},
"userBrowserIp": {
"type": "string",
"description": "Merchant user browser IP address. This is field is only required when merchant pass in card/applepay/googlepay data directly in API",
"maxLength": 128,
"minLength": 0
},
"userAgent": {
"type": "string",
"description": "Merchant user browser agent. This is field is only required when merchant pass in card/applepay/googlepay data directly in API",
"maxLength": 256,
"minLength": 0
},
"userReceiptUrl": {
"type": "string",
"description": "User receipt Url which merchant can trigger again to download the user receipt"
}
},
"required": [
"userEmail",
"userId",
"userTerminal"
]
},
"AcqOrderPaymentInfo": {
"type": "object",
"description": "Payment information",
"properties": {
"productName": {
"type": "string",
"description": "Payment product: \n- **ONE_TIME_PAYMENT** \n- **DIRECT_PAYMENT** ",
"example": "ONE_TIME_PAYMENT",
"maxLength": 32,
"minLength": 0
},
"payMethodType": {
"type": "string",
"description": "Payment method type. e.g. \n- **EWALLET** \n- **ONLINE_BANKING** \n- **DIGITAL_BANKING** \n- **OTC** \n- **CREDITCARD** \n- **DEBITCARD**",
"example": "EWALLET",
"maxLength": 256,
"minLength": 0
},
"payMethodName": {
"type": "string",
"description": "The actual payment method. e.g. DANA, GCASH\nIf payMethodName is provided, the payment request will be processed using this pay method directly. \nIf payMethodName is not provided, user will be redirected to Waffo's cashier page to choose the final pay method. \nIf merchant intends to limit the card payment scheme, e.g. Restrict user to use only VISA card, merchant can specify payMethodName as CC_VISA, DC_VISA\n",
"example": "DANA",
"maxLength": 256,
"minLength": 0
},
"payMethodProperties": {
"type": "string",
"description": "For certain pay methods, there could be certain specific info needed. Json format e.g. {\"key1\":\"value1\", \"key2\":\"value2\"}. Currently support the following key: \n- cpf \n- cardPrefix \ncpf: specify the user's cpf number used in this payment\ncardPrefix: restrict user card payment by a prefix card bin number, from 4-9 digits. Multiple card bins can be separated by commas, with a maximum of 80 allowed.\ncardPrefixPurpose: input restriction purpose. Merchant can set as restriction or promotion. Waffo will display the respective error message to the user\n",
"maxLength": 1024,
"minLength": 0
},
"payMethodResponse": {
"type": "string",
"description": "The specific information returned by Pay Method \nJson format \n{ \n\"payMethodRefId\": \"xxx\",  \n\"exchangeRate\": \"xxx\",  \n\"userOpenId\": \"xxx\" \n} \n- payMethodRefId: This is the payment ref ID that user often sees in its transaction history from Pay Method's app/portal \n- exchangeRate: this is the exchange rate used by Pay Method during user payment\n- userOpenId: this is the unique user open ID assigned by the pay method\n",
"readOnly": true
},
"userPaymentAccessToken": {
"type": "string",
"description": "Applicable for ONE_CLICK_PAYMENT product",
"maxLength": 256,
"minLength": 0
},
"payMethodUserAccountNo": {
"type": "string",
"description": "User account number at the designated pay method",
"maxLength": 64,
"minLength": 0
},
"payMethodUserAccountType": {
"type": "string",
"description": "User account type at the designated pay method \nEMAIL \nPHONE_NO \nACCOUNT_ID",
"maxLength": 24,
"minLength": 0
},
"payOption": {
"type": "string",
"description": "The pay option user has selected, for example\n- **BALANCE** \n- **DEBIT_CARD** \n- **CREDIT_CARD** \nIf the pay method does not support users to select the pay option, the field will be empty",
"readOnly": true
},
"cashierLanguage": {
"type": "string",
"description": "Merchant specify the cashier language. It follows IETF BCP 47 language tag\nThe format is Language (two-letter language code from ISO 639-1), follow by an optional script subtag, based on a four-letter script code from ISO 15924, and follow by an optional region subtag based on a two-letter country code from ISO 3166-1 alpha-2\nFor example: \n- en-HK: English in Hong Kong\n- zh-Hant-HK: Traditional Chinese in Hong Kong\n- zh-Hans-HK: Simplified Chinese in Hong Kong\n",
"maxLength": 24,
"minLength": 0
},
"cashierAppearance": {
"type": "string",
"description": "Merchant specify the cashier appearance\nFor example: \n- \"variables\": \"{\"colorPrimary\":\"#0570de\",\"colorBackground\":\"#ffffff\",\"colorText\":\"#30313d\"}\"\n"
},
"payMethodCountry": {
"type": "string",
"description": "Some pay methods are available in multiple countries (e.g. GrabPay, ShoppeePay), the merchant shall specify the pay method country when necessarily\n",
"maxLength": 3,
"minLength": 0
},
"captureMode": {
"type": "string",
"maxLength": 24,
"minLength": 0
},
"merchantInitiatedMode": {
"type": "string",
"description": "Specify when it is a merchant initiated transaction (mit) without customer involvement. userPaymentAccessToken is also required for mit transaction\n- scheduled\n- unscheduled\n",
"maxLength": 24,
"minLength": 0
}
},
"required": [
"productName"
]
},
"ResponseAcqOrderInquiry": {
"type": "object",
"description": "response data",
"properties": {
"code": {
"type": "string"
},
"msg": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/AcqOrderInquiry"
}
}
},
"AcqCardInfo": {
"type": "object",
"description": "card info",
"properties": {
"cardNumber": {
"type": "string",
"description": "User's card number ",
"maxLength": 24,
"minLength": 14
},
"cardExpiryYear": {
"type": "integer",
"format": "int32",
"description": "User's card expiry year, the format is four digits. For example 2025 ",
"minimum": 2024
},
"cardExpiryMonth": {
"type": "integer",
"format": "int32",
"description": "User's card expiry year, the format is two digits. For example 10 (October)  ",
"maximum": 12,
"minimum": 1
},
"cardCvv": {
"type": "string",
"description": "User's card cvv number  ",
"maxLength": 4,
"minLength": 3
},
"cardHolderName": {
"type": "string",
"description": "User's card holder name  ",
"maxLength": 128,
"minLength": 0
},
"threeDsDecision": {
"type": "string",
"description": "Merchant's 3DS decision. Merchant can provide its own 3DS decision. The following 3DS Decision are supported: +\n            - 3DS_FORCE\n            - 3DS_ATTEMPT\n            - NO_3DS\n            However, the eventual 3DS decision is also subject to Waffo's risk decision.\n",
"maxLength": 12,
"minLength": 0
}
},
"required": [
"cardCvv",
"cardExpiryMonth",
"cardExpiryYear",
"cardHolderName",
"cardNumber"
]
},
"AcqOrderCreateRequest": {
"type": "object",
"properties": {
"paymentRequestId": {
"type": "string",
"description": "Payment request id sent from Merchant. It will also be used for idempotent check. ",
"x-gen": "NANOID",
"maxLength": 32,
"minLength": 0
},
"merchantOrderId": {
"type": "string",
"description": "Merchant order id",
"x-gen": "NANOID",
"maxLength": 64,
"minLength": 0
},
"orderCurrency": {
"type": "string",
"description": "Merchant order currency",
"example": "IDR",
"maxLength": 12,
"minLength": 0
},
"orderAmount": {
"type": "string",
"description": "Merchant order amount",
"example": 10,
"maxLength": 24,
"minLength": 0
},
"userCurrency": {
"type": "string",
"description": "User payment currency. This is needed when merchant order currency is NOT the same as user payment currency",
"example": "IDR",
"maxLength": 12,
"minLength": 0
},
"orderDescription": {
"type": "string",
"description": "Order description information",
"example": "replace order desc...,",
"maxLength": 128,
"minLength": 0
},
"orderRequestedAt": {
"type": "string",
"format": "date-time",
"description": "Merchant-side request time",
"x-gen": "DATETIME_ISO"
},
"orderExpiredAt": {
"type": "string",
"format": "date-time",
"description": "The order expiry time set by merchant. If not set, the default merchant contract expiry time will be used"
},
"successRedirectUrl": {
"type": "string",
"description": "The address of the merchant page to redirect to after successful payment. \nIf no value is provided, it will stay on the cashier page after successful payment.",
"example": "https://merchant-success-redirecturl.com",
"maxLength": 512,
"minLength": 0
},
"failedRedirectUrl": {
"type": "string",
"description": "The address of the merchant page to which the payment pre-verification fails, or the redirection after the payment fails. If no value is provided, it will stay on the cashier page after the payment fails",
"example": "https://merchant-failed-redirecturl.com",
"maxLength": 512,
"minLength": 0
},
"cancelRedirectUrl": {
"type": "string",
"description": "The address of the merchant page to redirect to when user cancels the payment",
"example": "https://merchant-cancel-url.com",
"maxLength": 512,
"minLength": 0
},
"notifyUrl": {
"type": "string",
"description": "The callback address to notify the merchant after the payment is completed / failed",
"example": "https://merchant-notify-url.com",
"maxLength": 256,
"minLength": 0
},
"extendInfo": {
"type": "string",
"description": "Reserved. Json format e.g. {\"key1\":\"value1\", \"key2\":\"value2\"} ",
"maxLength": 128,
"minLength": 0
},
"merchantInfo": {
"$ref": "#/components/schemas/create.MerchantInfo",
"description": "Merchant info"
},
"userInfo": {
"$ref": "#/components/schemas/AcqOrderMerchantUserInfo",
"description": "User info"
},
"goodsInfo": {
"$ref": "#/components/schemas/AcqOrderGoodsInfo",
"description": "Merchant goods information"
},
"paymentInfo": {
"$ref": "#/components/schemas/AcqOrderPaymentInfo",
"description": "Payment information"
},
"brandInfo": {
"$ref": "#/components/schemas/BrandInfo",
"description": "Brand display information for cashier"
},
"cardInfo": {
"$ref": "#/components/schemas/AcqCardInfo",
"description": "Card data info. It is only required when Merchant wants to pass in card data directly in API (note: Merchant needs to have PCI DSS certification)",
"example": null
},
"paymentTokenData": {
"type": "string",
"description": "User's ApplePay / GooglePay payment token. It is only required when Merchant choose to integrate with ApplePay / GooglePay frontend directly and pass in the encrypted payment token for Waffo to process the payment",
"maxLength": 8192,
"minLength": 0
},
"riskData": {
"$ref": "#/components/schemas/AcqOrderRiskData"
},
"addressInfo": {
"$ref": "#/components/schemas/AcqOrderAddressInfo",
"description": "Address Information"
},
"acqOrderExtSubscriptionInfo": {
"$ref": "#/components/schemas/AcqOrderExtSubscriptionInfo"
},
"channelId": {
"type": "string"
},
"innerCardData": {
"$ref": "#/components/schemas/WaffoTokenCardData"
},
"productDetail": {
"$ref": "#/components/schemas/ProductDetail"
}
},
"required": [
"merchantInfo",
"merchantOrderId",
"notifyUrl",
"orderAmount",
"orderCurrency",
"orderDescription",
"orderRequestedAt",
"paymentInfo",
"paymentRequestId",
"userInfo"
]
},
"AcqOrderExtSubscriptionInfo": {
"type": "object",
"properties": {
"subscriptionId": {
"type": "string"
},
"periodNo": {
"type": "integer",
"format": "int32"
},
"merchantRequest": {
"type": "string"
}
}
},
"AcqOrderRiskData": {
"type": "object",
"description": "riskData",
"properties": {
"userType": {
"type": "string",
"description": "Merchant user: Individual / Agent / Institution / Internal",
"example": "Individual",
"maxLength": 24,
"minLength": 0
},
"userCategory": {
"type": "string",
"description": "Merchant user: Member / Non-Member",
"example": "Member",
"maxLength": 24,
"minLength": 0
},
"userLegalName": {
"type": "string",
"description": "Merchant user legal name (or first name + last name)",
"maxLength": 128,
"minLength": 0
},
"userDisplayName": {
"type": "string",
"description": "Merchant user display name",
"maxLength": 128,
"minLength": 0
},
"userRegistrationIp": {
"type": "string",
"description": "Merchant user registration IP address",
"example": "252.13.13.26",
"maxLength": 24,
"minLength": 0
},
"userLastSeenIp": {
"type": "string",
"description": "Merchant user last login IP address",
"example": "252.10.10.20",
"maxLength": 24,
"minLength": 0
},
"userIsNew": {
"type": "string",
"description": "Merchant user if he/she is a new user: Yes / No",
"example": "No",
"maxLength": 8,
"minLength": 0
},
"userIsFirstPurchase": {
"type": "string",
"description": "Merchant user if this is his/her first time purchase: Yes / No",
"example": "No",
"maxLength": 8,
"minLength": 0
}
}
},
"CardBinData": {
"type": "object",
"properties": {
"cardBin": {
"type": "string",
"description": "卡BIN 卡号前6或前8位"
},
"cardScheme": {
"type": "string",
"description": "VISA / MASTERCARD / JCB etc"
},
"cardBrand": {
"type": "string",
"description": "卡品牌 MASTERO etc"
},
"cardType": {
"type": "string",
"description": "CREDIT_CARD / DEBIT_CARD / PREPAID_CARD / COMBO_CARD"
},
"cardTypeList": {
"type": "array",
"description": "CREDIT_CARD / DEBIT_CARD / PREPAID_CARD，当cardType = COMBO_CARD时，卡类型列表会给出2种类型（CREDIT_CARD + DEBIT_CARD）",
"items": {
"type": "string"
}
},
"subCardType": {
"type": "string",
"description": "卡子类型，标准化后的子卡类型 CLASSIC/GOLD/PLATINUM/SIGNATURE/INFINITE/BUSINESS/CORPORATE 等"
},
"cardIssuerName": {
"type": "string",
"description": "发卡行"
},
"cardIssuerCode": {
"type": "string",
"description": "发卡行编号"
},
"cardIssueCountryCode": {
"type": "string",
"description": "发卡行国家编号 Follow ISO_3166-1_alpha-3 Standard https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3"
},
"cardIssueCountryCodeList": {
"type": "array",
"description": "发卡行国家列表，同一个卡BIN可能在多个国家发行",
"items": {
"type": "string"
}
},
"status": {
"type": "string",
"description": "VALID - 有效卡BIN INVALID - 无效卡BIN"
},
"extendedInfo": {
"type": "string",
"description": "扩展信息，json格式字符串"
}
}
},
"ProductDetail": {
"type": "object",
"properties": {
"subscriptionInfo": {
"$ref": "#/components/schemas/SubscriptionInfo"
}
}
},
"WaffoTokenCardData": {
"type": "object",
"properties": {
"cardBinDataList": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CardBinData"
}
},
"maskedCardInfo": {
"type": "string"
},
"cardBin": {
"type": "string"
},
"cardExpiry": {
"type": "string"
}
}
},
"create.MerchantInfo": {
"type": "object",
"description": "Merchant info",
"properties": {
"merchantId": {
"type": "string",
"default": "1000000201",
"description": "Merchant Id assigned by Waffo",
"example": 1000000201,
"maxLength": 64,
"minLength": 0
},
"subMerchantId": {
"type": "string",
"description": "Sub merchant id assigned by Waffo",
"maxLength": 64,
"minLength": 0
}
},
"required": [
"merchantId"
]
},
"AcqOrderCreatedResponse": {
"type": "object",
"properties": {
"paymentRequestId": {
"type": "string",
"description": "Payment request id sent from Merchant."
},
"merchantOrderId": {
"type": "string",
"description": "Merchant order id"
},
"acquiringOrderId": {
"type": "string",
"description": "Waffo acquiring order Id"
},
"orderStatus": {
"type": "string",
"description": "Order status \n**PAY_IN_PROGRESS** -(merchant order is accepted, and user is in the process of payment) \n**AUTHORIZATION_REQUIRED** (pay method requires user authorization, merchant needs to bring user to the authorization page by retrieving the information from orderAction) \n**AUTHED_WAITING_CAPTURE** (Order needs to be captured by merchant, applicable for CARD payment) \n **PAY_SUCCESS** \n**ORDER_CLOSE** (due to order cancel, failed or timeout)"
},
"orderAction": {
"type": "string",
"description": "When orderStatus = AUTHORIZATION_REQUIRED, merchant follow the following:  \n\"**actionType**\": value could be \"WEB\" / \"DEEPLINK\". If the actionType is WEB, merchant choose webUrl to redirect user. If the actionType is DEEPLINK, merchant choose deeplinkUrl to redirect user.\n\"**webUrl**\": redirect user to webURL\n\"**deeplinkUrl**\": redirect user to deeplink url\n\"actionData\": {\n  \"paymentExpiryTime\":\"2023-04-01T03:00:00.000Z\", (Follow ISO 8601 standard)\n  \"paymentQr\":\"xxx\", (QR String Value)\n  \"paymentCode\":\"xxx\",\n  \"paymentBarCode\":\"xxx\",\n  \"paymentCurrency\": \"xxx\",\n  \"paymentAmount\": \"xxx\",\n  \"userFeeAmount\": \"xxx\",\n  \"userFeeCurrency\":\"xxx\",\n  \"exchangeRate\": \"xxx\" (it is paymentAmount/orderAmount when orderCurrency is not the same as paymentCurrency)\n}\nActionData is for those Merchants who want to build their own Cashier Page for their users, without using Waffo's cashier page\n"
}
},
"required": [
"acquiringOrderId",
"merchantOrderId",
"orderStatus",
"paymentRequestId"
]
},
"ResponseAcqOrderCreatedResponse": {
"type": "object",
"description": "response data",
"properties": {
"code": {
"type": "string"
},
"msg": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/AcqOrderCreatedResponse"
}
}
},
"AcqOrderCancelRequest": {
"type": "object",
"properties": {
"paymentRequestId": {
"type": "string",
"description": "Payment request id sent from Merchant. It will also be used for idempotent check. \n(provide paymentRequestId or acquirerOrderId)",
"maxLength": 32,
"minLength": 0
},
"acquiringOrderId": {
"type": "string",
"description": "Waffo acquiring order Id  \n(provide paymentRequestId or acquirerOrderId)",
"example": "<acquiringOrderId>",
"maxLength": 32,
"minLength": 0
},
"merchantId": {
"type": "string",
"default": "1000000201",
"description": "Merchant Id assigned by Waffo",
"example": 1000000201,
"maxLength": 64,
"minLength": 0
},
"orderRequestedAt": {
"type": "string",
"format": "date-time",
"description": "Merchant-side cancel request time",
"x-gen": "DATETIME_ISO"
}
},
"required": [
"merchantId",
"orderRequestedAt"
]
},
"AcqOrderCancelResponse": {
"type": "object",
"properties": {
"paymentRequestId": {
"type": "string",
"description": "Payment request id sent from Merchant."
},
"merchantOrderId": {
"type": "string",
"description": "Merchant order id"
},
"acquiringOrderId": {
"type": "string",
"description": "Waffo acquiring order Id"
},
"orderStatus": {
"type": "string",
"description": "**ORDER_CLOSE** (due to order cancel, failed or timeout)",
"example": "ORDER_CLOSE"
}
},
"required": [
"acquiringOrderId",
"merchantOrderId",
"orderStatus",
"paymentRequestId"
]
},
"ResponseAcqOrderCancelResponse": {
"type": "object",
"description": "response data",
"properties": {
"code": {
"type": "string"
},
"msg": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/AcqOrderCancelResponse"
}
}
},
"AcqMerchantConfigRequest": {
"type": "object",
"properties": {
"merchantId": {
"type": "string",
"default": "1000000201",
"description": "Merchant id assigned by Waffo",
"example": 1000000201,
"maxLength": 64,
"minLength": 0
}
},
"required": [
"merchantId"
]
},
"AcqMerchantConfigInquiryResponse": {
"type": "object",
"properties": {
"merchantId": {
"type": "string",
"description": "Merchant id assigned by Waffo"
},
"totalDailyLimit": {
"type": "string",
"description": "Daily transaction limit setting. \n If there is a daily limit, it will be returned as json format as `{\"currencyCode1\":\"value1\", \"currencyCode2\":\"value2\"}`\n For example, \n`{\"PHP\":\"100000\", \"IDR\":\"2000000\"}`\nIf there is no limit setting, it will be empty "
},
"remainingDailyLimit": {
"type": "string",
"description": "Remaining Daily transaction limit \nIf there is a remaining daily limit, it will be returned as json format as \n`{\"currencyCode1\":\"value1\", \"currencyCode2\":\"value2\"}` \nFor example, \n`{\"PHP\":\"10000\", \"IDR\":\"1000000\"}`\nIf there is no limit setting, it will be empty "
},
"transactionLimit": {
"type": "string",
"description": "Single transaction limit setting. \nIf there is a limit setting, it will be returned as json format as \n`{\"currencyCode1\":\"value1\", \"currencyCode2\":\"value2\"}` \nFor example, \n`{\"PHP\":\"5000\", \"IDR\":\"100000\"}`\nIf there is no limit set, it will be empty "
}
},
"required": [
"merchantId"
]
},
"ResponseAcqMerchantConfigInquiryResponse": {
"type": "object",
"description": "response data",
"properties": {
"code": {
"type": "string"
},
"msg": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/AcqMerchantConfigInquiryResponse"
}
}
},
"ChargebackUpdateEvidenceRequest": {
"type": "object",
"description": "Chargeback update evidence evidence",
"properties": {
"merchantId": {
"type": "string",
"default": "1000000201",
"description": "Merchant Id assigned by Waffo",
"example": 1000000201,
"maxLength": 64,
"minLength": 0
},
"chargebackId": {
"type": "string",
"description": "Chargeback id",
"maxLength": 32,
"minLength": 0
},
"message": {
"$ref": "#/components/schemas/MessageDto",
"description": "Message body"
},
"evidence": {
"$ref": "#/components/schemas/EvidenceField",
"description": "Evidence field"
}
},
"required": [
"chargebackId",
"merchantId"
]
},
"EvidenceField": {
"type": "object",
"description": "Evidence info",
"properties": {
"othersText": {
"type": "string",
"description": "others text",
"maxLength": 2048,
"minLength": 0
},
"othersFile": {
"type": "string",
"description": "others file",
"maxLength": 1024,
"minLength": 0
},
"evidenceFields": {
"type": "array",
"description": "evidence fields（as：othersText, othersFile）",
"items": {
"type": "string"
}
}
}
},
"MessageDto": {
"type": "object",
"description": "消息对象",
"properties": {
"messageId": {
"type": "string",
"description": "messageId",
"maxLength": 64,
"minLength": 0
},
"notes": {
"type": "string",
"description": "notes",
"maxLength": 2048,
"minLength": 0
},
"documents": {
"type": "string",
"description": "documents",
"maxLength": 1024,
"minLength": 0
}
}
},
"ChargebackDetailResponse": {
"type": "object",
"description": "Chargeback detail response",
"properties": {
"chargebackId": {
"type": "string",
"description": "chargebackId"
},
"originalOrderId": {
"type": "string",
"description": "Original order id"
},
"merchantId": {
"type": "string",
"description": "merchantId"
},
"chargebackStatus": {
"type": "string",
"description": "Chargeback status"
},
"amount": {
"type": "string",
"description": "Chargeback amount"
},
"currency": {
"type": "string",
"description": "Chargeback currency"
},
"feeAmount": {
"type": "string",
"description": "Chargeback fee amount"
},
"feeCurrency": {
"type": "string",
"description": "Chargeback fee currency"
},
"reasonCode": {
"type": "string",
"description": "Chargeback reason code"
},
"reason": {
"type": "string",
"description": "Chargeback reason"
},
"description": {
"type": "string",
"description": "Chargeback description"
},
"chargebackDateTime": {
"type": "string",
"description": "chargeback dateTime"
},
"expiryDateTime": {
"type": "string",
"description": "chargeback expiry dateTime"
},
"merchantUserId": {
"type": "string",
"description": "Merchant user id"
},
"subscriptionInfo": {
"$ref": "#/components/schemas/SubscriptionInfo",
"description": "The associated subscription info. Present when the chargeback is linked to a subscription payment order."
},
"message": {
"$ref": "#/components/schemas/MessageDto",
"description": "Message body"
},
"evidence": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "Evidence info. Key-value pairs of evidence field names and their contents"
}
}
},
"ResponseChargebackDetailResponse": {
"type": "object",
"description": "response data",
"properties": {
"code": {
"type": "string"
},
"msg": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/ChargebackDetailResponse"
}
}
},
"ChargebackListRequest": {
"type": "object",
"description": "Chargeback list request",
"properties": {
"merchantId": {
"type": "string",
"default": "1000000201",
"description": "Merchant Id assigned by Waffo",
"example": 1000000201,
"maxLength": 64,
"minLength": 0
},
"chargebackStatus": {
"type": "array",
"description": "Chargeback status",
"items": {
"type": "string"
}
},
"startTime": {
"type": "string",
"format": "date-time",
"description": "Start time",
"x-gen": "DATETIME_ISO"
},
"endTime": {
"type": "string",
"format": "date-time",
"description": "End time",
"x-gen": "DATETIME_ISO"
},
"pageNum": {
"type": "integer",
"format": "int32",
"description": "pageNum"
},
"pageSize": {
"type": "integer",
"format": "int32",
"description": "pageSize"
}
},
"required": [
"endTime",
"merchantId",
"pageNum",
"pageSize",
"startTime"
]
},
"ChargebackQueryResponse": {
"type": "object",
"description": "ChargebackQueryResponse",
"properties": {
"chargebackId": {
"type": "string",
"description": "chargebackId"
},
"originalOrderId": {
"type": "string",
"description": "Original order id"
},
"merchantId": {
"type": "string",
"description": "merchantId"
},
"chargebackStatus": {
"type": "string",
"description": "Chargeback status"
},
"amount": {
"type": "string",
"description": "Chargeback amount"
},
"currency": {
"type": "string",
"description": "Chargeback currency"
},
"feeAmount": {
"type": "string",
"description": "Chargeback fee amount"
},
"feeCurrency": {
"type": "string",
"description": "Chargeback fee currency"
},
"reasonCode": {
"type": "string",
"description": "Chargeback reason code"
},
"reason": {
"type": "string",
"description": "Chargeback reason"
},
"description": {
"type": "string",
"description": "Chargeback description"
},
"chargebackDateTime": {
"type": "string",
"description": "chargeback dateTime"
},
"expiryDateTime": {
"type": "string",
"description": "chargeback expiry dateTime"
},
"merchantUserId": {
"type": "string",
"description": "Merchant user id"
},
"subscriptionInfo": {
"$ref": "#/components/schemas/SubscriptionInfo",
"description": "The associated subscription info. Present when the chargeback is linked to a subscription payment order."
}
}
},
"OrderItem": {
"type": "object",
"properties": {
"column": {
"type": "string"
},
"asc": {
"type": "boolean"
}
}
},
"PageChargebackQueryResponse": {
"type": "object",
"properties": {
"records": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ChargebackQueryResponse"
}
},
"total": {
"type": "integer",
"format": "int64"
},
"size": {
"type": "integer",
"format": "int64"
},
"current": {
"type": "integer",
"format": "int64"
},
"orders": {
"type": "array",
"items": {
"$ref": "#/components/schemas/OrderItem"
},
"writeOnly": true
},
"optimizeCountSql": {
"writeOnly": true
},
"searchCount": {
"writeOnly": true
},
"optimizeJoinOfCountSql": {
"type": "boolean",
"writeOnly": true
},
"maxLimit": {
"type": "integer",
"format": "int64",
"writeOnly": true
},
"countId": {
"type": "string",
"writeOnly": true
},
"pages": {
"type": "integer",
"format": "int64"
}
}
},
"ResponsePageChargebackQueryResponse": {
"type": "object",
"description": "response data",
"properties": {
"code": {
"type": "string"
},
"msg": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/PageChargebackQueryResponse"
}
}
},
"ChargebackInquiryRequest": {
"type": "object",
"description": " Chargeback inquiry request",
"properties": {
"merchantId": {
"type": "string",
"default": "1000000201",
"description": "Merchant Id assigned by Waffo",
"example": 1000000201,
"maxLength": 64,
"minLength": 0
},
"chargebackId": {
"type": "string",
"description": "Chargeback id",
"maxLength": 32,
"minLength": 0
},
"originalOrderId": {
"type": "string",
"description": "Original order id",
"maxLength": 32,
"minLength": 0
}
},
"required": [
"chargebackId",
"merchantId",
"originalOrderId"
]
},
"ChargebackFileUploadResponse": {
"type": "object",
"description": "Chargeback file upload response",
"properties": {
"fileId": {
"type": "string",
"description": "fileId",
"minLength": 1
}
},
"required": [
"fileId"
]
},
"ResponseChargebackFileUploadResponse": {
"type": "object",
"description": "response data",
"properties": {
"code": {
"type": "string"
},
"msg": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/ChargebackFileUploadResponse"
}
}
},
"ChargebackAcceptRequest": {
"type": "object",
"description": "Chargeback accept request",
"properties": {
"merchantId": {
"type": "string",
"default": "1000000201",
"description": "Merchant Id assigned by Waffo",
"example": 1000000201,
"maxLength": 64,
"minLength": 0
},
"chargebackId": {
"type": "string",
"description": "Chargeback id",
"maxLength": 32,
"minLength": 0
}
},
"required": [
"chargebackId",
"merchantId"
]
}
}
},
"x-openapi": {
"x-markdownFiles": []
},
"x-tagGroups": [
{
"name": "One-time Payment",
"tags": [
"Order create",
"Order inquiry",
"Order cancel",
"Order refund",
"Refund inquiry"
]
},
{
"name": "Subscription",
"tags": [
"Subscription create",
"Subscription inquiry",
"Subscription cancel",
"Subscription manage",
"Subscription change",
"Subscription change inquiry"
]
},
{
"name": "Configuration",
"tags": [
"Chargeback file upload",
"Chargeback inquiry",
"Chargeback list",
"Chargeback file download",
"Chargeback update",
"Chargeback accept",
"Merchant config inquiry",
"Pay Method Config Inquiry"
]
}
]
}