# Doom CC Loan on App API ## 1. `POST /api/v1/cc-loan-on-app/onboarding` **Erangel route:** `POST /v3-cc-loan-on-app-onboarding`
Request Body ```json { "card_token": "f104d035a92652987b8c82dd91cb13aa1f403d686dcbc3844d261cc8416de9b0" } ```
Response Body ```json { "code": "00", "description": "success", "data": { "admin_fee_note": { "description": "1% dari total pinjaman (min. Rp200.000)", "title": "Ketentuan Biaya Admin" }, "eligible": true, "eligible_note": "Pinjaman baru belum bisa diajukan karena masih ada proses yang berlangsung.", "list": [ { "account_image_name": "britama_bisnis", "account_image_path": "http://asset-host/account/britama_bisnis.png", "account_name": "BRItama Bisnis", "account_no": "029012345678901", "account_string": "0290 **** **** 112", "admin_fee_string": "Rp200.000", "amount_string": "Rp3.200.000", "card_image_name": "bri_easy_card", "card_image_path": "http://asset-host/card/bri_easy_card.png", "card_name": "Agung Harsono", "card_no": "2003 **** **** 4302", "card_product_type": "Easy Card", "interest_rate_string": "0% per bulan", "monthly_payment_string": "Rp1.015.000", "progress": [ { "status_title": "Pengajuan dalam Analisis", "status_time": "09 Feb 2026, 09:41 WIB", "order": 1, "current": true }, { "status_title": "Pengajuan Disetujui", "status_time": "", "order": 2, "current": false } ], "request_time": "09 February 2026, 09:41:02 WIB", "seq_no": 1, "sla_note": "Proses pengajuan 1x24 jam kerja. Kamu akan diberi notifikasi saat pencairan disetujui.", "status": "PROCESSING", "term_string": "3x Cicilan", "ticket_no": "TKT001" } ], "scheme": [ { "title": "3x Cicilan", "description": "0%" }, { "title": "6 Bulan", "description": "0,5%" }, ], "slider_texts": [ { "title": "Pinjaman Fleksibel", "description": "Pinjaman dana minimal 1 juta hingga 75 juta atau 50% dari sisa limit kartu kredit.", "image_path": "http://asset-host/example.png" }, { "title": "Pinjaman Fleksibel", "description": "Pinjaman dana minimal 1 juta hingga 75 juta atau 50% dari sisa limit kartu kredit.", "image_path": "http://asset-host/example.png" }, { "title": "Pinjaman Fleksibel", "description": "Pinjaman dana minimal 1 juta hingga 75 juta atau 50% dari sisa limit kartu kredit.", "image_path": "http://asset-host/example.png" } ] } } ```
### Error Codes | Code | When | |---|---| | `00` | `success` – also returned when user has no CC (CC list empty from Eredar). | | `TV` | Vikendi timeout (Eredar call) | | `NA` | Not authorized (Eredar call) | | `TB` | Static param DB read failure | | `TBR` | Brigate timeout on `GetLoaStatusFromBrigate` | --- ## 2. `POST /api/v1/cc-loan-on-app/form` **Erangel route:** `POST /v3-cc-loan-on-app-form`
Request Body ```json { "card_token": "f104d035a92652987b8c82dd91cb13aa1f403d686dcbc3844d261cc8416de9b0" } ```
Response Body ```json { "code": "00", "description": "success", "data": { "account_list": [ { "account": "123451234512345", "account_string": "1234 5123 4512 345", "alias": "Alias-supedi", "currency": "IDR", "default": 1, "image_name": "karti.png", "image_path": "http://.../karti.png", "name": "supedi", "product_type": "karti" } ], "balance_string": "Rp20.000.000,00", "cc_image_slim": "http://.../card/jcb_platinum_slim.png", "loan_multiplier": 100000, "loan_multiplier_string": "Rp100.000", "maximum_loan": 20000000, "maximum_loan_string": "Rp20.000.000", "minimum_loan": 1000000, "minimum_loan_string": "Rp1.000.000", "product_type": "Jcb Platinum", "simulation": [ { "admin_fee": 200000, "admin_fee_string": "Rp200.000", "interest_rate": 0.5, "interest_rate_amount": 50000, "interest_rate_amount_string": "Rp50.000", "interest_rate_string": "0.5%", "monthly_payment": 1700000, "monthly_payment_string": "Rp1.700.000", "simulation_code": "...", "term": 3, "term_code": "123", "term_string": "3x Cicilan" } ], "tnc_text": "text" } } ```
### Error Codes | Code | When | |---|---| | `00` | Success | | `SM` | User is in safety mode (`form.go:37`) | | `CNF` | Credit card not found (`form.go:100`) | | `TV` | Vikendi timeout (Eredar, parameter, account list) | | `TB` | Database timeout (static param) | | `TBR` | Brigate timeout (`GetProgramTermFromBrigate`) | | `EH` | Error handling (account alias/validation fan-in errors) | --- ## 3. `POST /api/v1/cc-loan-on-app/term` **Erangel route:** `POST /v3-cc-loan-on-app-term`
Response Body ```json { "card_token": "f104d035a92652987b8c82dd91cb13aa1f403d686dcbc3844d261cc8416de9b0", "amount": 5000 } ```
Response Body ```json { "code": "00", "description": "success", "data": { "simulation": [ { "admin_fee": 200000, "admin_fee_string": "Rp200.000", "interest_rate": 0.5, "interest_rate_amount": 50000, "interest_rate_amount_string": "Rp50.000", "interest_rate_string": "0.5%", "monthly_payment": 1700000, "monthly_payment_string": "Rp1.700.000", "simulation_code": "...", "term": 3, "term_code": "123", "term_string": "3x Cicilan" } ] } } ```
### Error Codes | Code | When | |---|---| | `00` | Success | | `TBR` | Brigate timeout (`GetLoaSimulationtFromBrigate`) | --- ## 4. `POST /api/v1/cc-loan-on-app/confirm` **Erangel route:** `POST /v3-cc-loan-on-app-confirm`
Request Body ```json { "card_token": "f104d035a92652987b8c82dd91cb13aa1f403d686dcbc3844d261cc8416de9b0", "amount": 5000000, "simulation_code": "...", "account_no": "123451234512345", "account_name": "BRItama Bisnis", "term": 3, "interest_rate": 0.5, "monthly_payment": 1700000, "admin_fee": 50000 } ```
Response Body ```json { "code": "00", "description": "success", "data": { "account_name": "BRItama Bisnis", "account_no": "123451234512345", "admin_fee": 50000, "admin_fee_string": "Rp50.000", "amount_string": "Rp5.000.000", "interest_rate": 0.5, "interest_rate_amount": 50000, "interest_rate_amount_string": "Rp50.000", "interest_rate_string": "0,5%", "monthly_payment": 1700000, "monthly_payment_string": "Rp1.700.000", "reference_number": "123456789154", "term": 3, "term_string": "3x Cicilan" } } ```
### Error Codes | Code | When | |---|---| | `00` | Success — loan context saved to Redis | | `NA` | `account_no` not in user's financial accounts | | `TB` | Database/Redis timeout (failed to save loan context) | | `EH` | Error handling (validation fan-in errors, e.g. invalid `simulation_code` for the chosen `card_token`) | --- ## 5. `POST /api/v1/cc-loan-on-app/send-otp` **Erangel route:** `POST /v3-cc-loan-on-app-send-otp`
Request Body ```json { "otp_type": "WA", "reference_number": "123456789154" } ```
Response Body ```json { "code": "00", "description": "success", "data": { "cellphone_number": "0812****1234", "duration_sec": 300, "server_id": "abc123" } } ```
### Error Codes | Code | When | |---|---| | `00` | Success | | `TV` | Vikendi timeout (fetching user phone number) | | `TC` | Cipher/OTP timeout | | `TR` | Redis timeout (cipher) | | `TK` | Kafka timeout — OTP SMS/WA delivery failed | | `EX` | `reference_number` not found or expired in Redis (no loan context from `/confirm`) | --- ## 6. `POST /api/v1/cc-loan-on-app/submit-otp` **Erangel route:** `POST /v3-cc-loan-on-app-submit-otp`
Request Body ```json { "server_id": "abc123", "otp": "123456", "otp_type": "WA", "reference_number": "123456789154" } ```
Response Body ```json { "code": "00", "description": "success", "data": { "reference_number": "987654321098" } } ```
### Error Codes | Code | When | |---|---| | `00` | OTP valid | | `NV` | Invalid OTP | | `TMT` | Too many wrong-OTP attempts | | `EX` | OTP not exist or expired, or `reference_number` not found in Redis | | `TC` | Cipher/OTP validation timeout | | `TR` | Redis timeout (cipher) | --- ## 7. `POST /api/v1/cc-loan-on-app/submit` **Erangel route:** `POST /v3-cc-loan-on-app-submit`
Request Body ```json { "pin": "123456", "reference_number": "987654321098" } ```
Response Body ```json { "code": "00", "description": "success", "data": { "account_image_name": "britama_bisnis", "account_image_path": "http://asset-host/account/britama_bisnis.png", "account_name": "BRItama Bisnis", "account_no": "029012345678901", "account_string": "0290 **** **** 112", "admin_fee_string": "Rp200.000", "amount_string": "Rp3.200.000", "card_image_name": "bri_easy_card", "card_image_path": "http://asset-host/card/bri_easy_card.png", "card_name": "Agung Harsono", "card_no": "2003 **** **** 4302", "card_product_type": "Easy Card", "interest_rate_string": "0% per bulan", "monthly_payment_string": "Rp1.015.000", "progress": [ { "status_title": "Pengajuan dalam Analisis", "status_time": "09 Feb 2026, 09:41 WIB", "order": 1, "current": true }, { "status_title": "Pengajuan Disetujui", "status_time": "", "order": 2, "current": false } ], "request_time": "09 February 2026, 09:41:02 WIB", "seq_no": 1, "sla_note": "Proses pengajuan 1x24 jam kerja. Kamu akan diberi notifikasi saat pencairan disetujui.", "status": "PROCESSING", "term_string": "3x Cicilan", "ticket_no": "TKT001" } } ```
### Error Codes | Code | When | |---|---| | `00` | Success | | `NA` | `account_no` not in user's financial accounts (`submit.go:44`) | | `TBR` | Brigate `LoaSubmitToBrigate` failed | | `TB` | DB insert failed (`InsertLoanOnAppToDB`) or `GetLoaStatusFromBrigate` DB error | ---