Skip to main content

KYC

Dokumen ini menjelaskan endpoint terkait KYC submission dan master data KYC (employment, industry, annual income, trade sum, dll.).

Semua response memakai envelope di docs/bitwewe/api-conventions.

API v1 — Submit KYC

Route

  • Method: POST
  • Path: /api/user/kyc-bind
  • Route file: routes/api.php
  • Controller: App\Http\Controllers\Api\KycController@bindKyc
  • Request validation: App\Http\Requests\Api\BindKycRequest
  • Middleware: auth.xtoken, verified:api (grup protected)

Content-Type

BindKycRequest membutuhkan upload file image, imageFront, imageBehind, sehingga request harus dikirim sebagai multipart/form-data.

Payload

Field penting (ringkas dari BindKycRequest::rules()):

FieldTipeWajibCatatan validasi
idCardstringYaIndonesia: digits_between:15,16; non-ID: alpha_num, max 30
countryIdstring/numberYa
countrystringYaDipakai untuk menentukan aturan Indonesia/non-Indonesia
imagefileYaimage, mimes:jpeg,png,jpg
imageFrontfileYaselfie close mouth
imageBehindfileYaselfie open mouth
addressstringYa
birthDatestringYaformat mengikuti input klien (disimpan ke birth_date)
fullNamestringYa
occupationIdstring/numberYa
annualIncomeIdstring/numberYa
tradeVolIdstring/numberYa
industryIdstring/numberTidaknullable
companyNamestringTidaknullable
nationalitystring/numberYa
birthPlacestringYa
genderstringYadipakai untuk Dukcapil mapping (male/female)
periodstringYa
provincestringYa
citystringYa
postalCodestringYa
relativeNamestringYa
relationshipstringYa
relativePhonestringYa
incomenumberYaexists:App\\Models\\UserIncome,id
reasonnumberYaexists:App\\Models\\UserReason,id
npwpstringTidakIndonesia: digit 15–20; non-ID: alnum max 30

Proses server (ringkas)

  • Menolak jika ada AuthenticationInfo approved dengan id_card yang sama (api.id_card_existed).
  • Menolak jika KYC user sudah approved (api.kyc_already_approved) atau masih pending review (api.kyc_waiting_for_review).
  • Menghitung risk score dari RiskMultiplier (country, occupation, annual income, trade sum).
  • Upload gambar ke OSS (jika gagal: api.oss_upload_fail).
  • Menyimpan/menimpa AuthenticationInfo status PENDING1.
  • Mengisi sebagian data ke model User (country_id, full_name, id_card, kyc_status).
  • Menjalankan proses verifikasi Dukcapil dalam try-catch (error tidak menggagalkan response ke user).

Response sukses (200)

data berasal dari $authenticationInfo->data():

{
"code": 200,
"title": "OK",
"message": "api.kyc_submitted",
"result": true,
"data": {
"...": "..."
}
}

Response gagal (umum)

KondisiHTTPmessage
Validasi payload gagal400pesan validasi pertama
idCard sudah dipakai KYC approved400api.id_card_existed
KYC sudah approved400api.kyc_already_approved
KYC sedang direview400api.kyc_waiting_for_review
Upload OSS gagal400api.oss_upload_fail

API v1 — Master data KYC (protected)

Semua endpoint di bawah berada dalam grup auth.xtoken, verified:api.

MethodPathController@methodCatatan
GET/api/kyc/employmentsKycController@getAllEmploymentcache Redis KEY_EMPLOYMENTS_ALL
GET/api/kyc/annual-incomesKycController@getAnnualIncomeListcache Redis KEY_ANNUAL_INCOME_ALL
GET/api/kyc/trade-sumsKycController@getTradeSumListcache Redis KEY_TRADE_SUM_ALL
GET/api/kyc/industryKycController@getAllIndustrycache Redis KEY_INDUSTRY_ALL
GET/api/kyc/reasonKycController@getAllReasoncache Redis KEY_REASON_ALL
GET/api/kyc/incomeKycController@getAllIncomecache Redis KEY_INCOME_ALL

Response sukses umumnya sendResponse(<list>, null) sehingga field message bisa null.

Untuk detail bentuk item list, lihat method data() pada model terkait (mis. Employment, Industry, AnnualIncome, TradeSum).