Member Payment V2 API Documentation

Complete API reference for Member Payment V2 endpoints

GET /v2/payment-v2 Requires: JwtAccessGuardMemberV2
Get a paginated list of all payment transactions (both deposit and withdraw) for the authenticated member. Supports filtering by date range or period.
Request

Query Parameters:

Parameter Type Required Description
page number Optional Page number (default: 1)
limit number Optional Number of items per page (default: 10)
period string Optional Date period filter: "today", "7d", "30d", "90d"
startDate string Optional Start date filter (ISO date string)
endDate string Optional End date filter (ISO date string)

Headers:

Header Type Required Description
Authorization string Yes Bearer {accessToken}

Body: Empty

Response

200 OK Success

{
  "isSuccess": true,
  "statusCode": 200,
  "data": {
    "list": [
      {
        "id": 1,
        "transactionRef": "TXN123456",
        "transactionType": "DEPOSIT",
        "status": "SUCCESS",
        "amount": 1000.00,
        "feeAmount": 0.00,
        "netAmount": 1000.00,
        "currency": "THB",
        "createdAt": "2024-01-15T10:00:00.000Z"
      }
    ],
    "meta": {
      "page": 1,
      "limit": 10,
      "total": 25,
      "totalPages": 3
    }
  }
}

429 Too Many Requests Duplicate request detected

{
  "isSuccess": false,
  "statusCode": 429,
  "message": {
    "errorCode": "DUPLICATE_REQUEST",
    "errorMessage": "Duplicate request. Please try again after a short wait."
  }
}
GET /v2/payment-v2/deposit Requires: JwtAccessGuardMemberV2
Get a paginated list of deposit transactions for the authenticated member. Supports filtering by date range or period.
Request

Query Parameters:

Parameter Type Required Description
page number Optional Page number (default: 1)
limit number Optional Number of items per page (default: 10)
period string Optional Date period filter: "today", "7d", "30d", "90d"
startDate string Optional Start date filter (ISO date string)
endDate string Optional End date filter (ISO date string)

Headers:

Header Type Required Description
Authorization string Yes Bearer {accessToken}

Body: Empty

Response

200 OK Success

{
  "isSuccess": true,
  "statusCode": 200,
  "data": {
    "list": [
      {
        "id": 1,
        "transactionRef": "TXN123456",
        "transactionType": "DEPOSIT",
        "status": "SUCCESS",
        "amount": 1000.00,
        "feeAmount": 0.00,
        "netAmount": 1000.00,
        "currency": "THB",
        "createdAt": "2024-01-15T10:00:00.000Z"
      }
    ],
    "meta": {
      "page": 1,
      "limit": 10,
      "total": 15,
      "totalPages": 2
    }
  }
}

429 Too Many Requests Duplicate request detected

{
  "isSuccess": false,
  "statusCode": 429,
  "message": {
    "errorCode": "DUPLICATE_REQUEST",
    "errorMessage": "Duplicate request. Please try again after a short wait."
  }
}
GET /v2/payment-v2/withdraw Requires: JwtAccessGuardMemberV2
Get a paginated list of withdraw transactions for the authenticated member. Supports filtering by date range or period.
Request

Query Parameters:

Parameter Type Required Description
page number Optional Page number (default: 1)
limit number Optional Number of items per page (default: 10)
period string Optional Date period filter: "today", "7d", "30d", "90d"
startDate string Optional Start date filter (ISO date string)
endDate string Optional End date filter (ISO date string)

Headers:

Header Type Required Description
Authorization string Yes Bearer {accessToken}

Body: Empty

Response

200 OK Success

{
  "isSuccess": true,
  "statusCode": 200,
  "data": {
    "list": [
      {
        "id": 2,
        "transactionRef": "TXN789012",
        "transactionType": "WITHDRAW",
        "status": "PENDING",
        "amount": 500.00,
        "feeAmount": 0.00,
        "netAmount": 500.00,
        "currency": "THB",
        "createdAt": "2024-01-15T11:00:00.000Z"
      }
    ],
    "meta": {
      "page": 1,
      "limit": 10,
      "total": 10,
      "totalPages": 1
    }
  }
}

429 Too Many Requests Duplicate request detected

{
  "isSuccess": false,
  "statusCode": 429,
  "message": {
    "errorCode": "DUPLICATE_REQUEST",
    "errorMessage": "Duplicate request. Please try again after a short wait."
  }
}
POST /v2/payment-v2/deposit/order Requires: JwtAccessGuardMemberV2
Create a new deposit order. The amount must be a whole number (no decimals). Requires member to have a registered bank account unless partner settings allow deposit order page.
Request

Body:

Field Type Required Description
amount number Yes Deposit amount (must be a whole number, no decimals)
depositAccountNumber string Yes Destination account number
depositAccountBank string Yes Destination bank code (e.g., "KBANK", "SCB")

Headers:

Header Type Required Description
Authorization string Yes Bearer {accessToken}
Response

200 OK Success

{
  "isSuccess": true,
  "statusCode": 200,
  "data": {
    "transactionRef": "TXN123456",
    "amount": 1000,
    "accounts": {
      "from": {
        "code": "KBANK",
        "number": "1234567890",
        "name": "John Doe"
      },
      "to": {
        "code": "KBANK",
        "number": "0987654321",
        "name": "Account Name"
      }
    },
    "message": "Deposit order created successfully"
  }
}

400 Bad Request Invalid amount (decimals not allowed)

{
  "isSuccess": false,
  "statusCode": 400,
  "message": {
    "errorCode": "INVALID_AMOUNT",
    "errorMessage": "Amount must be a whole number"
  }
}

400 Bad Request Bank account required

{
  "isSuccess": false,
  "statusCode": 400,
  "message": {
    "errorCode": "BANK_ACCOUNT_REQUIRED",
    "errorMessage": "Please register your bank account before making a deposit"
  }
}

400 Bad Request Payment account not found

{
  "isSuccess": false,
  "statusCode": 400,
  "message": {
    "errorCode": "PAYMENT_ACCOUNT_NOT_FOUND",
    "errorMessage": "Deposit account not found"
  }
}

404 Not Found Member not found

{
  "isSuccess": false,
  "statusCode": 404,
  "message": {
    "errorCode": "MEMBER_NOT_FOUND",
    "errorMessage": "Member not found"
  }
}

429 Too Many Requests Duplicate request detected

{
  "isSuccess": false,
  "statusCode": 429,
  "message": {
    "errorCode": "DUPLICATE_REQUEST",
    "errorMessage": "Duplicate request. Please try again after a short wait."
  }
}
GET /v2/payment-v2/deposit/order/:uid Requires: JwtAccessGuardMemberV2
Get deposit order details by transaction reference (UID). Returns transaction information including status, amounts, payment account details, and status logs.
Request

Path Parameters:

Parameter Type Required Description
uid string Yes Transaction reference (transactionRef)

Headers:

Header Type Required Description
Authorization string Yes Bearer {accessToken}

Body: Empty

Response

200 OK Success

{
  "isSuccess": true,
  "statusCode": 200,
  "data": {
    "transactionRef": "TXN123456",
    "amount": 1000.00,
    "feeAmount": 0.00,
    "netAmount": 1000.00,
    "status": "PENDING",
    "currency": "THB",
    "requestedAt": "2024-01-15T10:00:00.000Z",
    "processedAt": null,
    "completedAt": null,
    "cancelledAt": null,
    "failedAt": null,
    "failureReason": null,
    "metadata": {},
    "paymentAccountV2": {
      "paymentCodeName": "KBANK",
      "accountNumber": "0987654321",
      "accountName": "Account Name"
    },
    "statusLogs": [
      {
        "status": "PENDING",
        "event": "CREATED",
        "note": "SLIP123",
        "createdAt": "2024-01-15T10:00:00.000Z"
      }
    ]
  }
}

404 Not Found Deposit order not found

{
  "isSuccess": false,
  "statusCode": 404,
  "message": {
    "errorCode": "DEPOSIT_ORDER_NOT_FOUND",
    "errorMessage": "Deposit order not found"
  }
}

429 Too Many Requests Duplicate request detected

{
  "isSuccess": false,
  "statusCode": 429,
  "message": {
    "errorCode": "DUPLICATE_REQUEST",
    "errorMessage": "Duplicate request. Please try again after a short wait."
  }
}
POST /v2/payment-v2/withdraw Requires: JwtAccessGuardMemberV2
Create a withdraw request. Validates balance, withdraw limits, bank account, and various business rules. If partner has force full withdraw enabled, withdraws all available balance. Includes 3-minute cooldown after deposit and prevents duplicate requests.
Request

Body:

Field Type Required Description
amount number Yes Withdraw amount (ignored if partner has force full withdraw enabled)

Headers:

Header Type Required Description
Authorization string Yes Bearer {accessToken}
Response

200 OK Success

{
  "isSuccess": true,
  "statusCode": 200,
  "data": {
    "id": 1,
    "transactionRef": "TXN789012",
    "transactionType": "WITHDRAW",
    "status": "PENDING",
    "amount": 500.00,
    "feeAmount": 0.00,
    "netAmount": 500.00,
    "currency": "THB",
    "createdAt": "2024-01-15T11:00:00.000Z"
  }
}

400 Bad Request Withdraw disabled

{
  "isSuccess": false,
  "statusCode": 400,
  "message": {
    "errorCode": "WITHDRAW_DISABLED",
    "errorMessage": "Withdraw is not allowed"
  }
}

400 Bad Request Invalid amount

{
  "isSuccess": false,
  "statusCode": 400,
  "message": {
    "errorCode": "WITHDRAW_INVALID_AMOUNT",
    "errorMessage": "Invalid withdraw amount"
  }
}

400 Bad Request Too frequent requests

{
  "isSuccess": false,
  "statusCode": 400,
  "message": {
    "errorCode": "WITHDRAW_REQUEST_TOO_FREQUENT",
    "errorMessage": "Please wait before making another withdraw request"
  }
}

400 Bad Request Duplicate request

{
  "isSuccess": false,
  "statusCode": 400,
  "message": {
    "errorCode": "DUPLICATE_REQUEST",
    "errorMessage": "Duplicate request detected"
  }
}

404 Not Found Member not found

{
  "isSuccess": false,
  "statusCode": 404,
  "message": {
    "errorCode": "MEMBER_NOT_FOUND",
    "errorMessage": "Member not found"
  }
}

406 Not Acceptable Insufficient balance

{
  "isSuccess": false,
  "statusCode": 406,
  "message": {
    "errorCode": "WITHDRAW_INSUFFICIENT_BALANCE",
    "errorMessage": "Insufficient balance"
  }
}

406 Not Acceptable Payment service unavailable

{
  "isSuccess": false,
  "statusCode": 406,
  "message": {
    "errorCode": "PAYMENT_SERVICE_UNAVAILABLE",
    "errorMessage": "Cannot transfer to bank at this time"
  }
}
POST /v2/payment-v2/deposit/upload-slip Requires: JwtAccessGuardMemberV2
Upload a payment slip QR code for a deposit order. Validates QR code, verifies bank account numbers, amounts, and timestamps. Transaction must be in PENDING or AWAITING_CONFIRMATION status and not expired (30 minutes from creation).
Request

Body:

Field Type Required Description
uid string Yes Transaction reference (transactionRef)
bracketUid string Yes Bracket transaction reference
qrcode string Yes QR code data from payment slip

Headers:

Header Type Required Description
Authorization string Yes Bearer {accessToken}
Response

200 OK Success

{
  "isSuccess": true,
  "statusCode": 200,
  "data": {
    "message": "Slip uploaded successfully"
  }
}

400 Bad Request Incomplete information

{
  "isSuccess": false,
  "statusCode": 400,
  "message": {
    "errorCode": "INVALID_REQUEST",
    "errorMessage": "Incomplete information"
  }
}

400 Bad Request Invalid QR code

{
  "isSuccess": false,
  "statusCode": 400,
  "message": {
    "errorCode": "QR_CODE_INVALID",
    "errorMessage": "Invalid QR code"
  }
}

400 Bad Request Transaction already processed

{
  "isSuccess": false,
  "statusCode": 400,
  "message": {
    "errorCode": "DEPOSIT_ORDER_ALREADY_PROCESSED",
    "errorMessage": "This deposit transaction has already been processed"
  }
}

400 Bad Request Transaction expired

{
  "isSuccess": false,
  "statusCode": 400,
  "message": {
    "errorCode": "DEPOSIT_ORDER_EXPIRED",
    "errorMessage": "This deposit transaction has expired"
  }
}

400 Bad Request QR code verification failed

{
  "isSuccess": false,
  "statusCode": 400,
  "message": {
    "errorCode": "QR_CODE_VERIFICATION_FAILED",
    "errorMessage": "Sender bank code does not match deposit bank code"
  }
}

404 Not Found Deposit transaction not found

{
  "isSuccess": false,
  "statusCode": 404,
  "message": {
    "errorCode": "DEPOSIT_ORDER_NOT_FOUND",
    "errorMessage": "Deposit transaction not found"
  }
}

404 Not Found Payment account not found

{
  "isSuccess": false,
  "statusCode": 404,
  "message": {
    "errorCode": "PAYMENT_ACCOUNT_NOT_FOUND",
    "errorMessage": "Deposit account not found or disabled"
  }
}

Member Payment V2 API Documentation © 2024