Complete API reference for Member Registration endpoints
Path Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
partnerKey |
string | Yes | Agent/Partner prefix key |
Body: Empty
200 OK Success
{
"isSuccess": true,
"statusCode": 200,
"data": {
"agentId": 123,
"agentName": "Agent Name",
"agentPrefix": "AGENT01",
"agentRegisterUrl": "https://example.com/register",
"isEnable": true,
"isEnableOtp": true,
"otpDigit": 4,
"isRegisterWithoutBank": false,
"isDisableRegisterMember": false,
"lineId": "@line_id",
"peerAgents": ["AGENT02", "AGENT03"]
}
}
404 Not Found Agent not found
{
"isSuccess": false,
"statusCode": 404,
"message": {
"errorCode": "AGENT_NOT_FOUND",
"errorMessage": "Agent 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."
}
}
Headers:
| Header | Type | Required | Description |
|---|---|---|---|
Content-Type |
string | Yes | application/json |
Body:
| Field | Type | Required | Description |
|---|---|---|---|
mobileNumber |
string | Yes | Mobile phone number |
partnerKey |
string | Optional | Agent/Partner prefix key |
mobileNumberCountryCode |
string | Optional | Country code for mobile number (e.g., "95" for Myanmar) |
{
"mobileNumber": "0912345678",
"partnerKey": "AGENT01",
"mobileNumberCountryCode": "66"
}
200 OK Success
Note: The otp field is only returned in development/staging
environments. In production, the OTP is sent via SMS and not included in the response.
Development/Staging Response:
{
"isSuccess": true,
"statusCode": 200,
"data": {
"otp": "1234",
"referCode": "7fp25p",
"createAt": 1762073725580,
"expireAt": 1762074025580
}
}
Production Response:
{
"isSuccess": true,
"statusCode": 200,
"data": {
"referCode": "7fp25p",
"createAt": 1762073725580,
"expireAt": 1762074025580
}
}
400 Bad Request Registration disabled
{
"isSuccess": false,
"statusCode": 400,
"message": {
"errorCode": "REGISTRATION_DISABLED",
"errorMessage": "Registration is disabled"
}
}
404 Not Found Agent not found
{
"isSuccess": false,
"statusCode": 404,
"message": {
"errorCode": "AGENT_NOT_FOUND",
"errorMessage": "Agent 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."
}
}
500 Internal Server Error Unable to send OTP
{
"isSuccess": false,
"statusCode": 500,
"message": {
"errorCode": "UNABLE_TO_SEND_OTP",
"errorMessage": "Unable to send OTP message"
}
}
Headers:
| Header | Type | Required | Description |
|---|---|---|---|
Content-Type |
string | Yes | application/json |
Body:
| Field | Type | Required | Description |
|---|---|---|---|
partnerKey |
string | Yes | Agent/Partner prefix key |
mobileNumber |
string | Yes | Mobile phone number |
otp |
string | Optional | OTP code received via SMS (required if OTP is enabled) |
otpLineRegisterToken |
string | Optional | Line register token (for Line registration flow) |
{
"partnerKey": "AGENT01",
"mobileNumber": "0912345678",
"otp": "1234"
}
200 OK Success - New User (OTP Enabled)
{
"isSuccess": true,
"statusCode": 200,
"data": {
"registerToken": "uuid-token-string"
}
}
200 OK Success - OTP Disabled
{
"isSuccess": true,
"statusCode": 200,
"data": {
"skipOtp": true,
"registerToken": "uuid-token-string"
}
}
200 OK Success - User Already Exists
{
"isSuccess": true,
"statusCode": 200,
"data": {
"registerToken": null,
"isAlreadyMember": true,
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
}
400 Bad Request Registration disabled
{
"isSuccess": false,
"statusCode": 400,
"message": {
"errorCode": "REGISTRATION_DISABLED",
"errorMessage": "Registration is disabled"
}
}
400 Bad Request Register token not expired
{
"isSuccess": false,
"statusCode": 400,
"message": {
"errorCode": "REGISTER_TOKEN_NOT_EXPIRED",
"errorMessage": "Cannot register because RegisterToken has not expired"
}
}
400 Bad Request Invalid OTP
{
"isSuccess": false,
"statusCode": 400,
"message": {
"errorCode": "OTP_INVALID",
"errorMessage": "Invalid OTP"
}
}
404 Not Found Agent not found
{
"isSuccess": false,
"statusCode": 404,
"message": {
"errorCode": "AGENT_NOT_FOUND",
"errorMessage": "Agent not found"
}
}
406 Not Acceptable Agent cannot have members
{
"isSuccess": false,
"statusCode": 406,
"message": {
"errorCode": "AGENT_CANNOT_HAVE_MEMBERS",
"errorMessage": "This agent cannot have members"
}
}
409 Conflict Registration conflict
{
"isSuccess": false,
"statusCode": 409,
"message": {
"errorCode": "REGISTRATION_CONFLICT",
"errorMessage": "Cannot register repeatedly"
}
}
409 Conflict Registration limit reached
{
"isSuccess": false,
"statusCode": 409,
"message": {
"errorCode": "MEMBER_REGISTRATION_LIMIT_REACHED",
"errorMessage": "You have reached the registration limit, please login"
}
}
410 Gone OTP expired
{
"isSuccess": false,
"statusCode": 410,
"message": {
"errorCode": "OTP_EXPIRED",
"errorMessage": "OTP expired"
}
}
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."
}
}
Headers:
| Header | Type | Required | Description |
|---|---|---|---|
Content-Type |
string | Yes | application/json |
Body:
| Field | Type | Required | Description |
|---|---|---|---|
registerToken |
string | Optional | Registration token from OTP verification (required if OTP is enabled for the agent) |
partnerKey |
string | Yes | Agent/Partner prefix key |
mobileNumber |
string | Yes | Mobile phone number |
password |
string | Yes | User password |
via |
string | Yes | Registration source (e.g., "WEB", "MOBILE", "LINE", "TELEGRAM") |
username |
string | Optional | Desired username (if alternate username is enabled) |
alternateUsername |
string | Optional | Alternate username (if alternate username feature is enabled) |
paymentMethodCodeName |
string | Optional | Bank code name (e.g., "KBANK", "SCB") - required if bank registration is enabled |
paymentAccountName |
string | Optional | Bank account holder name - required if bank registration is enabled |
paymentAccountNumber |
string | Optional | Bank account number - required if bank registration is enabled |
affiliateByMemberCode |
string | Optional | Affiliate member code (for referral system) |
lineAccessToken |
string | Optional | Line access token (for Line registration) |
lineUserId |
string | Optional | Line user ID (for Line registration) |
telegramUserId |
string | Optional | Telegram user ID (for Telegram registration) |
telegramAccessToken |
string | Optional | Telegram access token (for Telegram registration) |
mobileNumberCountryCode |
string | Optional | Country code for mobile number |
{
"registerToken": "uuid-token-string",
"partnerKey": "AGENT01",
"mobileNumber": "0912345678",
"password": "password123",
"via": "WEB",
"paymentMethodCodeName": "KBANK",
"paymentAccountName": "John Doe",
"paymentAccountNumber": "1234567890"
}
200 OK Success
{
"isSuccess": true,
"statusCode": 200,
"data": {
"registerUserResponseDto": {
"mobileNumber": "0912345678",
"userUid": "user-uid-123",
"username": "XAGENT000000001",
"agentName": "Agent Name",
"alternateUsername": "john_doe"
},
"message": "Registration successful"
}
}
Note: The alternateUsername field
is
only included in the response if the agent has alternate username feature enabled.
400 Bad Request Invalid token
{
"isSuccess": false,
"statusCode": 400,
"message": {
"errorCode": "INVALID_TOKEN",
"errorMessage": "Invalid token"
}
}
400 Bad Request Register token mismatch
{
"isSuccess": false,
"statusCode": 400,
"message": {
"errorCode": "REGISTER_TOKEN_MISMATCH",
"errorMessage": "RegisterToken mismatch"
}
}
400 Bad Request Registration disabled
{
"isSuccess": false,
"statusCode": 400,
"message": {
"errorCode": "REGISTRATION_DISABLED",
"errorMessage": "Registration is disabled"
}
}
404 Not Found Agent not found
{
"isSuccess": false,
"statusCode": 404,
"message": {
"errorCode": "AGENT_NOT_FOUND",
"errorMessage": "Agent not found"
}
}
406 Not Acceptable Agent cannot have members
{
"isSuccess": false,
"statusCode": 406,
"message": {
"errorCode": "AGENT_CANNOT_HAVE_MEMBERS",
"errorMessage": "This agent cannot have members"
}
}
409 Conflict User already exists
{
"isSuccess": false,
"statusCode": 409,
"message": {
"errorCode": "USER_DUPLICATE_IN_AGENT",
"errorMessage": "User already exists in this agent"
}
}
409 Conflict Username duplicate
{
"isSuccess": false,
"statusCode": 409,
"message": {
"errorCode": "USERNAME_DUPLICATE",
"errorMessage": "Duplicate username"
}
}
409 Conflict Mobile number duplicate
{
"isSuccess": false,
"statusCode": 409,
"message": {
"errorCode": "MOBILE_NUMBER_DUPLICATE",
"errorMessage": "Cannot create user with this mobile number again"
}
}
422 Unprocessable Entity Bank account required
{
"isSuccess": false,
"statusCode": 422,
"message": {
"errorCode": "BANK_ACCOUNT_REQUIRED",
"errorMessage": "Please provide bank information"
}
}
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."
}
}
500 Internal Server Error Registration failed
{
"isSuccess": false,
"statusCode": 500,
"message": {
"errorCode": "REGISTRATION_FAILED",
"errorMessage": "Registration failed"
}
}
Query Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
country |
string | Optional | Filter by country code |
Body: Empty
200 OK Success
{
"isSuccess": true,
"statusCode": 200,
"data": [
{
"codeName": "kbank",
"code": "KBANK",
"fullNameEng": "Kasikorn Bank",
"fullNameThai": "ธนาคารกสิกรไทย",
"paymentType": "BANK"
},
{
"codeName": "scb",
"code": "SCB",
"fullNameEng": "Siam Commercial Bank",
"fullNameThai": "ธนาคารไทยพาณิชย์",
"paymentType": "BANK"
}
]
}