Skip to main content

Profile & Account Settings

Modul ini fokus ke endpoint API v1 untuk pengaturan akun user: bind phone/2FA, preferensi language/currency, serta API key.

Daftar route

MethodPathController@methodMiddleware
POST/api/users/phone-bindUserController@bindPhoneauth.xtoken, verified:api
POST/api/users/twofa-bindUserController@bindTwoFAauth.xtoken, verified:api
POST/api/users/twofa-unbindUserController@unBindTwoFAauth.xtoken, verified:api
PATCH/api/users/languageUserController@updateLanguageauth.xtoken, verified:api
PATCH/api/users/currencyUserController@updateCurrencyauth.xtoken, verified:api
POST/api/user/api-keyUserController@addApiKeyauth.xtoken, verified:api
PUT/api/user/api-keyUserController@editApiKeyauth.xtoken, verified:api
DELETE/api/user/api-keyUserController@deleteApiKeyauth.xtoken, verified:api
GET/api/user/api-keyUserController@listApiKeyauth.xtoken, verified:api

Bind phone

Route

  • POST /api/users/phone-bind
  • Controller: UserController@bindPhone
  • Request validation: BindPhoneRequest

Payload

FieldTypeRequired
phonestringYa
countryCodestringYa
dialCodestringYa
otpCodestringYa

Behavior

  • Validasi nomor belum dipakai user lain.
  • Cek blacklist phone.
  • Verifikasi OTP via SmsUtil->verifyOtp.
  • Jika OTP gagal berulang (berbasis IP + redis), nomor bisa masuk blacklist.

Response

  • sukses: api.mobile_verified
  • gagal umum:
    • api.otp_verification_code_invalid
    • api.phone_number_blacklisted

Google 2FA bind/unbind

Bind

  • POST /api/users/twofa-bind
  • Controller: UserController@bindTwoFA
  • Request validation: BindTwoFARequest (otpCode required)

Payload:

{
"otpCode": "123456"
}

Response:

  • sukses: api.twofa_binded_successfully
  • gagal OTP: auth.otp_failed (403)

Unbind

  • POST /api/users/twofa-unbind
  • Controller: UserController@unBindTwoFA
  • Request validation: BindTwoFARequest

Behavior:

  • Verifikasi OTP.
  • Set bind2FA=false.
  • Regenerate secret2FA baru.

Response:

  • sukses: api.twofa_unbinded (dengan data user)
  • gagal OTP: auth.otp_failed (403)

User preferences

1) Update language

  • PATCH /api/users/language
  • Controller: UserController@updateLanguage
  • Request validation: UpdateLanguageRequest

Payload:

{
"language": "id"
}

Response:

  • sukses: api.language_updated_successfully

2) Update currency

  • PATCH /api/users/currency
  • Controller: UserController@updateCurrency
  • Request validation: UpdateCurrencyRequest

Payload:

{
"currency": "idr"
}

Behavior:

  • Nilai akan disimpan uppercase ke user_price_symbol.

Response:

  • sukses: api.currency_updated_successfully

API key management

Controller: UserController Request validation: ApiKeyRequest

1) Create API key

  • POST /api/user/api-key

Payload:

FieldTypeRequired
apiNamestringYa
emailOtpCodestringYa
phoneOtpCodestringOpsional
permissionsarrayYa

Behavior:

  • Verifikasi email OTP dari Redis (KEY_EMAIL_CODE_PRE + email).
  • Generate api_key (random) + secret_key (HMAC SHA-256).

Response:

  • sukses: api.generate_key_successful (+ data api key)
  • gagal OTP email: api.email_otp_error

2) Edit/regenerate API key

  • PUT /api/user/api-key

Payload:

FieldTypeRequired
apiKeyIdinteger/stringYa
apiKeystringYa
secretKeystringOpsional
permissionsarrayYa

Behavior:

  • Cari API key milik user berdasarkan apiKeyId + apiKey.
  • Jika ditemukan, regenerate key pair baru dan update permission.

Response:

  • sukses: api.edit_api_key_successful
  • gagal tidak ditemukan: api.user_api_key_not_found

3) Delete API key

  • DELETE /api/user/api-key

Payload:

{
"apiKeyId": 123,
"apiKey": "existing_api_key"
}

Response:

  • sukses: api.delete_api_key_successful
  • gagal tidak ditemukan: api.user_api_key_not_found

4) List API key

  • GET /api/user/api-key
  • Mendukung pagination dari parameter global (limit, offset, sortBy, sort).

Response:

  • sukses: api.list_api_key_successful