Finfra API Reference
The Finfra API is a RESTful interface for managing borrower KYC, loan origination, disbursement, and repayment. It accepts JSON and form-encoded requests and returns JSON responses. All actions are performed per object - bulk operations are not supported. The API key type used determines whether requests hit the production environment or are restricted to test mode.
Base URLs
Endpoints at a glance
Authentication
Finfra uses three authentication schemes. Which one to use depends on the endpoint. Keep your API keys confidential - never expose them in public repositories or client-side code. All API interactions must be over HTTPS.
| Scheme | Header | Used for |
|---|---|---|
| BasicAuth | Authorization: Basic … | Generating access tokens |
| BearerAuth | Authorization: Bearer JWT | Borrower, document, and loan endpoints |
| ApiKeyAuth | finfra-auth-key: … | Callback / webhook endpoints |
Generate access token
/api/auth/token (v1) is deprecated. Use /api/auth/token/v2 for all new integrations.Request
curl -X POST https://sandbox-partner-service.elp.finfra.io/api/auth/token/v2 \ -H "Authorization: Basic $(echo -n 'clientId:clientSecret' | base64)"
Response
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600
}
POST /api/auth/refresh with headers x-access-token and x-refresh-token to refresh your session without re-authenticating with Basic credentials.Error Handling & Healthcheck
All errors return a consistent JSON body. Use the healthcheck endpoints to verify service availability before integration testing.
Error response format
{
"status": 400,
"error": "Bad Request",
"message": "Validation failed: email is required"
}
HTTP status codes
| Code | Meaning |
|---|---|
| 200 | Success |
| 201 | Resource created |
| 400 | Validation error - check request body or params |
| 401 | Unauthorized - invalid or missing token |
| 403 | Forbidden - insufficient permissions |
| 409 | Conflict - resource already exists |
| 415 | Unsupported media type |
| 429 | Rate limited - slow down and retry |
| 500 | Internal server error |
Healthcheck
Create Borrower
Finfra supports two borrower types: PERSONAL (individual) and BUSINESS (entity). The type provided drives a different KYC procedural workflow, so ensure the correct value is supplied.
Headers
| Header | Type | Required | Description |
|---|---|---|---|
| Authorization | string | required | Bearer JWT from /api/auth/token/v2 |
| kyc-id | string | optional | KYC session token for linking existing KYC context |
Request body (JSON)
Top-level fields
| Field | Type | Required | Description |
|---|---|---|---|
| type | string | required | PERSONAL or BUSINESS. Determines the KYC workflow applied to this borrower. |
| entity | object | optional | Business entity details. Required when type is BUSINESS. |
| authorised_signatory | object | required | Individual person details. For PERSONAL borrowers this is the borrower themselves. For BUSINESS borrowers this is the authorised signatory of the entity. |
entity object
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | required | Registered company name |
| address | object | required | Company registered address. See address object below. |
| phone_number | string | required | Company phone number in international format, e.g. +6287711998822 |
| fax | string | optional | Company fax number in international format |
| string | required | Company email address | |
| business_type | string | required | Type of business. e.g. OTHER |
| industry | string | required | Industry classification. e.g. PRIVATE_PERSON_NAME |
| nationality | string | required | ISO 3166-1 alpha-2 country code of company nationality, e.g. ID |
| residence | string | required | ISO 3166-1 alpha-2 country code of company residence, e.g. ID |
| npwp | string | required | Company tax identification number (NPWP) |
| phone_ext | string | optional | Additional phone number or extension |
| legal_entity | string | required | Legal entity type, e.g. PT, CV |
| establishment_date | string | required | Date of establishment in YYYY-MM-DD format |
| establishment_place | string | required | City or place of establishment |
| deed_date | string | required | Date of the establishment deed in YYYY-MM-DD format |
| deed_number | string | required | Establishment deed reference number |
| managements | array | required | List of company management personnel. See management object below. |
entity.managements[] object
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | required | Full name of the management person |
| position | string | required | Role in the company, e.g. OWNER_MANAGEMENT |
| email_address | string | required | Email address |
| mobile_number | string | required | Mobile number in international format |
| address | string | required | Residential address |
| gender | string | required | MALE or FEMALE |
| identity_number | string | required | NIK (national identity number), 16 digits |
authorised_signatory object
| Field | Type | Required | Description |
|---|---|---|---|
| first_name | string | required | First name |
| last_name | string | required | Last name |
| birth_date | string | required | Date of birth in YYYY-MM-DD format |
| birth_place | string | required | City or place of birth |
| string | required | Email address | |
| mother_maiden_name | string | required | Mother's maiden name |
| marital_status | string | required | MARRIED, SINGLE, DIVORCED, or WIDOWED |
| gender | string | required | MALE or FEMALE |
| title | string | required | Salutation, e.g. BPK (Bapak), IBU |
| domicile | string | required | ISO 3166-1 alpha-2 country code of domicile |
| religion | string | required | Religion, e.g. ISLAM, CHRISTIAN, CATHOLIC, HINDU, BUDDHIST, CONFUCIAN |
| job | string | required | Occupation type, e.g. PRIVATE_SECTOR_EMPLOYEE |
| education | string | required | Highest education level, e.g. ELEMENTARY_SCHOOL |
| address | object | required | Residential address. See address object below. Also accepts country field (ISO 3166-1 alpha-2). |
| mobile_number | string | required | Mobile number in international format |
| bank_account | array | optional | List of bank accounts. See bank_account object below. |
| documents | object | required | KYC documents. See documents object below. |
| business_type | string | optional | Type of business (if self-employed), e.g. OTHER |
| monthly_income_range | string | required | Monthly income bracket, e.g. LESS_THAN_3_MILLION |
| emergency_contact_name | string | required | Emergency contact full name |
| emergency_contact_number | string | required | Emergency contact phone number |
| housing_status | string | required | Housing ownership status, e.g. OWN_HOME |
| source_of_fund | string | required | Primary source of income, e.g. SALARY |
| place_of_work | string | required | Employer or company name |
| work_address | string | required | Workplace address |
| work_phone_number | string | required | Workplace phone number |
| number_of_dependents | integer | optional | Number of financial dependents |
| spouse_identification_number | string | optional | Spouse NIK. Applicable when marital_status is MARRIED. |
| spouse_name | string | optional | Spouse full name |
| spouse_date_of_birth | string | optional | Spouse date of birth in YYYY-MM-DD format |
| prenuptial_agreement | string | optional | true or false. Whether a prenuptial agreement exists. |
address object
| Field | Type | Required | Description |
|---|---|---|---|
| street_address | string | required | Full street address |
| rt | string | required | RT (neighbourhood unit) number |
| rw | string | required | RW (community unit) number |
| province | string | required | Province code, e.g. JAWA_BARAT, DKI_JAKARTA |
| city | string | required | City or regency name |
| district | string | required | District (kecamatan) name |
| village | string | required | Village (kelurahan) name |
| postal_code | string | required | Postal code |
| country | string | optional | ISO 3166-1 alpha-2 country code. Used in authorised_signatory.address. |
bank_account[] object
| Field | Type | Required | Description |
|---|---|---|---|
| holder_name | string | required | Account holder full name |
| number | string | required | Bank account number |
| swift_code | string | required | Bank SWIFT/BIC code |
documents object
| Field | Type | Required | Description |
|---|---|---|---|
| ktp | object | required | Indonesian national ID card (KTP). Contains number (16-digit NIK), file (base64 or URL), issuing_city, and expiry_date (YYYY-MM-DD). |
| selfie | object | required | Selfie photo. Contains file (base64 or URL). |
| npwp | object | optional | Tax ID document. Contains number (NPWP number) and file (base64 or URL). |
| selfie_with_ktp | object | optional | Selfie holding KTP. Contains file (base64 or URL). |
| stock_images | object | optional | Business stock/inventory images. Contains file (base64 or URL). |
| finance_report | object | optional | Financial report document. Contains file (base64 or URL). |
Example request body
{
"type": "PERSONAL",
"authorised_signatory": {
"first_name": "Budi",
"last_name": "Santoso",
"birth_date": "1995-11-01",
"birth_place": "Jakarta",
"email": "budi@example.com",
"mother_maiden_name": "Sari",
"marital_status": "MARRIED",
"gender": "MALE",
"title": "BPK",
"domicile": "ID",
"religion": "ISLAM",
"job": "PRIVATE_SECTOR_EMPLOYEE",
"education": "ELEMENTARY_SCHOOL",
"address": {
"street_address": "Jl. Sudirman No. 1",
"rt": "01",
"rw": "01",
"province": "JAWA_BARAT",
"city": "Bandung",
"district": "Coblong",
"village": "Dago",
"postal_code": "40135",
"country": "ID"
},
"mobile_number": "+6281234567890",
"bank_account": [
{
"holder_name": "Budi Santoso",
"number": "123123123213",
"swift_code": "BNINIDJA"
}
],
"documents": {
"ktp": {
"number": "3275062009921981",
"file": "base64_or_url",
"issuing_city": "Jakarta",
"expiry_date": "2099-11-01"
},
"selfie": { "file": "base64_or_url" }
},
"monthly_income_range": "LESS_THAN_3_MILLION",
"emergency_contact_name": "Humairah",
"emergency_contact_number": "08123456789",
"housing_status": "OWN_HOME",
"source_of_fund": "SALARY",
"place_of_work": "Finfra",
"work_address": "Mega Kuningan",
"number_of_dependents": 3,
"spouse_name": "Mia",
"spouse_identification_number": "3275062309984412",
"spouse_date_of_birth": "1999-03-01",
"prenuptial_agreement": "true"
}
}
Response
{
"status": "success",
"message": "Borrower creation request accepted"
}
Create Borrower (KYC Path)
POST /api/core/users.Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| kycIdPath | string | required | JWT-formatted KYC session ID e.g. eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 |
Get Borrower
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| userId | string | required | Borrower user ID |
| nik | string | required | Borrower's NIK (national identity number). Can be used as an alternative to userId. |
Response fields
| Field | Type | Description |
|---|---|---|
| id | string | Unique borrower identifier |
| partner_id | string | Partner identifier (UUID) the borrower belongs to |
| status | string | Current borrower status, e.g. PENDING, APPROVED_BY_PARTNER, BLOCKED |
| type | string | PERSONAL or BUSINESS |
| authorised_signatory | object | Individual person details. Same structure as the Create Borrower request. Includes all personal info, address, bank accounts, documents, employment, and spouse details. |
| created_at | string | ISO 8601 timestamp of when the borrower was created |
Response
{
"id": "6a41ff87dda4eefd0b7b0300",
"partner_id": "1507b694-e78e-4fc9-ac28-68d72fba45e9",
"status": "APPROVED_BY_PARTNER",
"type": "PERSONAL",
"authorised_signatory": {
"first_name": "FERDIAN",
"last_name": "HENDRI SISWORO",
"birth_date": "1987-11-23T00:00:00.000Z",
"birth_place": "MALANG",
"email": "sarengmalang@gmail.com",
"mother_maiden_name": "Lilik Ariani",
"documents": {
"ktp": {
"number": "3573032311870003",
"file": "6a41fddddda4eefd0b7b0274"
},
"selfie": {},
"npwp": {},
"selfie_with_ktp": {}
},
"marital_status": "MARRIED",
"domicile": "ID",
"religion": "CHRISTIAN",
"gender": "MALE",
"job": "BUSINESS_OWNER",
"education": "BACHELORS_DEGREE",
"address": {
"street_address": "JL. DANDELION D2 PERUM DE GREEN PAVILLION",
"city": "MALANG",
"district": "LOWOKWARU",
"postal_code": "65142",
"province": "JAWA_TIMUR",
"rt": "002",
"rw": "003",
"village": "TUNGGULWULUNG"
},
"mobile_number": "+6281339933711",
"bank_account": [
{
"holder_name": "FERDIAN HENDRI SISWORO",
"number": "7353740141",
"swift_code": "BBIJIDJA"
}
],
"business_type": "RESTAURANT",
"monthly_income_range": "GTE_20_AND_LT_50_MILLION",
"emergency_contact_name": "Doni",
"emergency_contact_number": "+6287854595905",
"housing_status": "OWN_HOME",
"source_of_fund": "SALARY",
"place_of_work": "Sareng Indonesian Culinary & Coffee Space",
"work_address": "",
"number_of_dependents": 2,
"spouse_identification_number": "3573012208890003",
"spouse_name": "Yessi Puspitasari",
"spouse_date_of_birth": "1989-08-22T00:00:00.000Z",
"prenuptial_agreement": false
},
"created_at": "2026-06-29T05:15:51.591Z"
}
Error Responses
| Status | Error Code | Description |
|---|---|---|
| 404 | USER_ID_NOT_FOUND | The provided userId or NIK does not match any borrower |
| 400 | INVALID_USER_ID | The provided userId or NIK has an incorrect format |
{
"error_code": "USER_ID_NOT_FOUND",
"message": "Provided userId is not found"
}
{
"error_code": "INVALID_USER_ID",
"message": "Invalid user id format"
}
Update Borrower
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| userId | string | required | Borrower user ID to update |
Approve Borrower
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| userId | string | required | Borrower user ID to approve |
APPROVED status before a loan can be created for them.Block Borrower
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| userId | string | required | Borrower user ID to block |
Borrower Consent
GET /api/core/kyc/consent-list to retrieve the consent items to present to the borrower.OCR Documents
Headers
| Header | Type | Required | Description |
|---|---|---|---|
| data-source | string | optional | izidata | VERIHUBS | ASLIRI | VIDA |
| kyc-id | string | optional | KYC session token |
Biometric KYC
Headers
| Header | Type | Required | Description |
|---|---|---|---|
| kyc-id | string | optional | KYC session token |
CLIK Credit Report
Headers
| Header | Type | Required | Description |
|---|---|---|---|
| Accept | string | required | application/json |
| Content-Type | string | required | application/json |
| borrower-type | string | required | Borrower type |
| x-access-token | string | required | Access token for authentication |
| x-refresh-token | string | required | Refresh token for authentication |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| full_name | string | required | Full name of the borrower |
| birth_date | string | required | Date of birth in YYYY-MM-DD format |
| gender | string | required | Gender: l (male) or p (female) |
| address_data | object | required | Borrower address details |
| address_data.street_address | string | required | Street address |
| address_data.rt | string | required | RT number |
| address_data.rw | string | required | RW number |
| address_data.province | string | required | Province code |
| address_data.city | string | required | City code |
| address_data.district | string | required | District name |
| address_data.village | string | required | Village name |
| address_data.postal_code | string | required | Postal code |
| address_data.country | string | required | Country code (e.g. ID) |
| ktp_number | string | required | KTP (NIK) number |
| phone_number | string | required | Phone number with country code |
cURL Example
curl --request POST \
--url https://sandbox-partner-service.elp.finfra.io/api/core/users/clik/credit-report \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'borrower-type: ' \
--header 'x-access-token: ' \
--header 'x-refresh-token: ' \
--data '{
"full_name": "NISA RANI",
"birth_date": "1992-09-02",
"gender": "l",
"address_data": {
"street_address": "JL. PASAR ANYAR",
"rt": "01",
"rw": "01",
"province": "JAWA_BARAT",
"city": "0394",
"district": "BOGOR",
"village": "CIBOGOR",
"postal_code": "12573",
"country": "ID"
},
"ktp_number": "3275062309980012",
"phone_number": "+6281111555777"
}'
Response
The response contains the full CLIK credit report. Arrays with multiple items are truncated below for brevity — only the first item is shown.
{
"name": "MGUNAWAN",
"error": null,
"gender": "Female",
"id_code": "3173084900000001",
"id_type": "ID CARD",
"currency": "Indonesian Rupiah",
"birthdate": "1985-07-09",
"birthplace": "JAKARTA",
"mother_name": "SRI MADIATI SYUKUR",
"bond_overdue": "0",
"flag_matched": "1",
"subject_code": "201648833",
"currency_code": "IDR",
"enquired_data": {
"subject": {
"individual": {
"individual_name": {
"name_as_id": "MGUNAWAN",
"full_name": "MGUNAWAN"
},
"birthdata": {
"date": "1985-07-09",
"place": "JAKARTA"
},
"address": {
"address": {
"address": "UNDEFINED",
"sub_district": "UNDEFINED",
"district": "KEMBANGAN",
"city": "0394",
"postal_code": "11620",
"country": "ID"
},
"address_desc": {
"city_desc": "Wil. Kota Jakarta Selatan",
"country_desc": "INDONESIA"
}
},
"identification_code": {
"identity_type": "1",
"identity_number": "3173084907850001"
},
"identification_code_desc": {
"identity_type_desc": "ID CARD"
},
"contact": {
"cell_phone_number": "+628179975831",
"email_address": null
},
"resident": null,
"resident_desc": null,
"gender": "P",
"gender_desc": "Female"
},
"application": {
"credit": {
"application_amount": null
},
"contract_type_code": null,
"contract_phase": null,
"contract_request_date": null,
"currency": null
},
"application_desc": {
"contract_type_desc": null,
"contract_phase_desc": null,
"currency_desc": null
},
"link": {
"role": null
},
"link_desc": {
"role": null
},
"subject_ref_date": null
}
},
"import_status": "success",
"total_overdue": "672916583",
"credit_overdue": "672916583",
"marital_status": "SINGLE",
"address_history": [
{
"address": {
"address": "TMN MERUYA ILIR G9 NO 8",
"sub_district": "MERUYA UTARA (ILIR)",
"district": "KEMBANGAN",
"city": "0393",
"postal_code": "11620",
"country": "ID"
},
"address_desc": {
"city_desc": "Wil. Kota Jakarta Barat",
"country_desc": "INDONESIA"
},
"flag_current": "1",
"last_update_date": "2026-03-16"
}
// ... 13 more items
],
"bg_credit_limit": "0",
"cb_subject_code": "201648833",
"contact_history": [
{
"contact": {
"phone_number": "08179975831",
"cell_phone_number": "+628179975831",
"email_address": "MARLENE.GUNAWAN@YAHOO.COM"
},
"flag_current": "1",
"last_update_date": "2026-03-16"
}
// ... 9 more items
],
"bg_debit_balance": "0",
"last_update_date": "2026-03-16",
"subject_ref_date": null,
"iloc_credit_limit": "0",
"bond_debit_balance": "0",
"educational_status": "Masters Degree",
"employment_history": [
{
"flag_current": "1",
"employment_data": {
"workplace": "BANK ARTHA GRAHA",
"employer_sector": "730000",
"occupation_code": "008",
"workplace_address": "NA"
},
"last_update_date": "2026-01-31",
"employment_data_desc": {
"occupation_desc": "Marketing",
"employer_sector_desc": "ADVERTISING AND MARKET RESEARCH"
}
}
// ... 7 more items
],
"iloc_debit_balance": "0",
"risk_level_partner": "Very High Risk",
"credit_credit_limit": "2420870078",
"identification_code": {
"last_update_data": "2026-03-16",
"identification_code": {
"identity_type": "1",
"identity_number": "3173084907850001"
},
"identification_code_desc": {
"identity_type_desc": "ID CARD"
}
},
"bg_contracts_counter": "0",
"credit_debit_balance": "2058272172",
"latest_hundred_loans": [
{
"maximum": {
"max_days_past_due": "0",
"worst_status_code": "1",
"worst_status_date": "2026-02-28",
"worst_status_desc": "Current",
"max_days_past_due_date": null,
"max_overdue_payments_amount": "0",
"max_overdue_payments_number": "4",
"max_overdue_payments_number_date": "2026-02-28"
},
"common_data": {
"reference_no": "1",
"cb_contract_code": "I66308707",
"provider_type_code": "0801",
"provider_type_code_desc": "Fintech",
"provider_code": "016392",
"provider_code_desc": "PT Kredit Pintar Indonesia",
"reference_date": "2026-02-28",
"contract_phase": "AC",
"contract_phase_desc": "Active",
"role": "B",
"role_desc": "Borrower",
"contract_type_code": "Q99",
"contract_type_code_desc": "Others - Fintech",
"start_date": "2025-12-17",
"due_date": "2026-03-17",
"currency_code": "IDR",
"currency_code_desc": "Indonesian Rupiah",
"past_due_staus_code": "1",
"past_due_staus_desc": "Current",
"contract_status_code": "00",
"contract_status_desc": "Active Facilities"
},
"guarantors": {
"guarantors_summary": {
"guarantors_counter": "0"
}
},
"collaterals": {
"collaterals_summary": {
"collaterals_counter": "0",
"total_collateral_value": "0"
}
},
"credit_profile": [
{
"reference_year": "2026",
"reference_month": "2",
"days_past_due": "2026",
"overdue": "0",
"overdue_payments_number": "4",
"quality_code": "1",
"quality_code_desc": "Current",
"debit_balance": "1580266",
"current_month_realization": "0",
"contract_status_code": "00",
"contract_status_desc": "Active Facilities"
},
{
"reference_year": "2026",
"reference_month": "1",
"days_past_due": "2026",
"overdue": "0",
"overdue_payments_number": "4",
"quality_code": "1",
"quality_code_desc": "Current",
"debit_balance": "3078859",
"current_month_realization": "0",
"contract_status_code": "00",
"contract_status_desc": "Active Facilities"
},
{
"reference_year": "2025",
"reference_month": "12",
"days_past_due": "2025",
"overdue": "0",
"overdue_payments_number": "4",
"quality_code": "1",
"quality_code_desc": "Current",
"debit_balance": "4500000",
"current_month_realization": "4500000",
"contract_status_code": "00",
"contract_status_desc": "Active Facilities"
}
],
"granted_credit": {
"code_characteristic_credit": "9",
"code_characteristic_credit_desc": "Others",
"code_agreement_credit": "000",
"code_agreement_credit_desc": "Conventional",
"original_agreement_number": "A17659433742165883",
"original_agreement_date": "2025-12-17",
"final_agreement_number": "A17659433742165883",
"final_agreement_date": "2025-12-17",
"frequency_of_credit": "0",
"start_date_of_credit": "2025-12-17",
"debtor_category_code": "NU",
"debtor_category_code_desc": "Not a Debtor of Micro, Small and Medium Enterprises",
"usage_type_code": "3",
"usage_type_code_desc": "Consumption",
"usage_orientation_code": "3",
"usage_orientation_code_desc": "Other",
"economic_sector_code": "004190",
"economic_sector_code_desc": "HOUSEHOLD FOR MULTIPURPOSES",
"city_code": "0393",
"city_code_desc": "Wil. Kota Jakarta Barat",
"project_value": "0",
"interest_rate": "5.32",
"type_of_interest_rate": "1",
"type_of_interest_rate_desc": "Fixed Interest Rates",
"financig_program": "10",
"financig_program_desc": "Non Government Program Loans",
"initial_credit_limit": "4500000",
"credit_limit": "1580266",
"current_month_realization": "0",
"penalty": "0",
"debit_balance": "1580266",
"value_in_original_currency": "0",
"principal_overdue_amount": "0",
"interest_overdue_amount": "0",
"days_past_due": "0",
"overdue_payments_number": "4",
"frequency_of_restructuring": "0",
"initial_restructuring_date": null,
"final_restructuring_date": null,
"code_of_restructuring": null,
"code_of_restructuring_desc": null
},
"join_account_number": {
"subject_sequence_member": null
}
}
// ... 76 more items
],
"iloc_active_contracts": "0",
"of_aggregated_details": {
"requested": "0",
"active": "0",
"refused": "0",
"renounced": "0",
"closed": "0"
},
"bond_contracts_counter": "0",
"loc_aggregated_details": {
"requested": "0",
"active": "0",
"refused": "0",
"renounced": "0",
"closed": "0"
},
"active_credit_financing": "28",
"bond_aggregated_details": {
"requested": "0",
"active": "0",
"refused": "0",
"renounced": "0",
"closed": "0"
},
"provider_application_no": "GG0001",
"total_potential_exposure": "2075085809",
"clik_credit_score_partner": "288",
"credit_aggregated_details": {
"requested": "6",
"active": "28",
"refused": "0",
"renounced": "0",
"closed": "49"
},
"outstanding_limit_partner": [
"1580266"
// ... 76 more items
],
"guarantee_aggregated_details": {
"requested": "0",
"active": "0",
"refused": "0",
"renounced": "0",
"closed": "0"
},
"footprints_count1month_partner": "1",
"footprints_count3month_partner": "3",
"footprints_count6month_partner": "5",
"footprints_count12month_partner": "15",
"contractshistory_credit_numberssummary_active_partner": "28",
"contractshistory_credit_numberssummary_closed_partner": "49",
"contractshistory_aggregateddata_contractsnumber_partner": "83",
"contractshistory_aggregateddata_totalcreditlimit_partner": "2952172111",
"contractshistory_credit_numberssummary_renounced_partner": "0",
"contractshistory_credit_numberssummary_requested_partner": "6",
"contractshistory_aggregateddata_totaldebitbalance_partner": "2069085809",
"contractshistory_aggregateddata_reportingprovidersnumber_partner": "26"
}
AFPI Credit History
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| identityNumber | number | required | Borrower NIK |
| reffid | string | required | Reference ID from AFPI |
Headers
| Header | Type | Required | Description |
|---|---|---|---|
| Accept | string | required | application/json |
| borrower-type | string | required | Borrower type |
| x-access-token | string | required | Access token for authentication |
| x-refresh-token | string | required | Refresh token for authentication |
cURL Example
curl --request GET \
--url https://sandbox-partner-service.elp.finfra.io/api/core/users/{identityNumber}/{reffid}/afpi/credit-report \
--header 'Accept: application/json' \
--header 'borrower-type: ' \
--header 'x-access-token: ' \
--header 'x-refresh-token: '
Response
{
"data_source": "AFPI",
"borrower_type": "personal",
"data_result": {
"no_identitas": "5103050101660002",
"no_hp": "",
"mail": "",
"user_id": "m@danabijak.com",
"user_name": "DANABIJAK",
"inquiry_reason": "1 - Applying loan via Platform",
"member_id": "820056",
"member_name": "DANABIJAK",
"refference_id": "checking",
"inquiry_date": "2026-03-31",
"status": "SUCCESS",
"pinjaman": [
{
"id_penyelenggara": "AFDC111",
"jenis_pengguna": 1,
"nama_borrower": "FIRA DIYANKA",
"no_identitas": "5103050101660002",
"no_npwp": "000000000000000",
"no_hp": "6208******1841",
"email": "off****ika@gmail.com",
"tgl_perjanjian_borrower": "2025-04-03",
"tgl_penyaluran_dana": "2025-04-03",
"nilai_pendanaan": 82125,
"tgl_pelaporan_data": "2025-04-04",
"sisa_pinjaman_berjalan": 0,
"tgl_jatuh_tempo_pinjaman": "2025-04-30",
"kualitas_pinjaman": "1",
"dpd_terakhir": 0,
"dpd_max": 0,
"status_pinjaman": "L",
"jenis_pengguna_ket": "Individual",
"kualitas_pinjaman_ket": "Lancar",
"status_pinjaman_ket": "Fully Paid",
"penyelesaian_w_oleh": "Default",
"pendanaan_syariah": false,
"tipe_pinjaman": "Multiguna",
"sub_tipe_pinjaman": "Paylater/ Line Of Credit",
"reference": "",
"id": "352d9fc3e624e9fd46d3b7847fd0be58",
"agunan": "Tidak Memiliki Agunan",
"tgl_agunan": null,
"nama_penjamin": "",
"no_agunan": "",
"pendapatan": 0
},
{
"id_penyelenggara": "AFDC111",
"jenis_pengguna": 1,
"nama_borrower": "FIRA DIYANKA",
"no_identitas": "5103050101660002",
"no_npwp": "000000000000000",
"no_hp": "6208******1841",
"email": "off****ika@gmail.com",
"tgl_perjanjian_borrower": "2025-04-01",
"tgl_penyaluran_dana": "2025-04-01",
"nilai_pendanaan": 51800,
"tgl_pelaporan_data": "2025-04-04",
"sisa_pinjaman_berjalan": 0,
"tgl_jatuh_tempo_pinjaman": "2025-04-30",
"kualitas_pinjaman": "1",
"dpd_terakhir": 0,
"dpd_max": 0,
"status_pinjaman": "L",
"jenis_pengguna_ket": "Individual",
"kualitas_pinjaman_ket": "Lancar",
"status_pinjaman_ket": "Fully Paid",
"penyelesaian_w_oleh": "Default",
"pendanaan_syariah": false,
"tipe_pinjaman": "Multiguna",
"sub_tipe_pinjaman": "Paylater/ Line Of Credit",
"reference": "",
"id": "f0a6c1e466208e8e7739b70a172d6234",
"agunan": "Tidak Memiliki Agunan",
"tgl_agunan": null,
"nama_penjamin": "",
"no_agunan": "",
"pendapatan": 0
},
{
"id_penyelenggara": "AFDC111",
"jenis_pengguna": 1,
"nama_borrower": "FIRA DIYANKA",
"no_identitas": "5103050101660002",
"no_npwp": "000000000000000",
"no_hp": "6208******1841",
"email": "off****ika@gmail.com",
"tgl_perjanjian_borrower": "2025-03-31",
"tgl_penyaluran_dana": "2025-03-31",
"nilai_pendanaan": 72250,
"tgl_pelaporan_data": "2025-04-04",
"sisa_pinjaman_berjalan": 0,
"tgl_jatuh_tempo_pinjaman": "2025-04-30",
"kualitas_pinjaman": "1",
"dpd_terakhir": 0,
"dpd_max": 0,
"status_pinjaman": "L",
"jenis_pengguna_ket": "Individual",
"kualitas_pinjaman_ket": "Lancar",
"status_pinjaman_ket": "Fully Paid",
"penyelesaian_w_oleh": "Default",
"pendanaan_syariah": false,
"tipe_pinjaman": "Multiguna",
"sub_tipe_pinjaman": "Paylater/ Line Of Credit",
"reference": "",
"id": "71b49d03f7cc298e286f91dcf46d1595",
"agunan": "Tidak Memiliki Agunan",
"tgl_agunan": null,
"nama_penjamin": "",
"no_agunan": "",
"pendapatan": 0
}
],
"history_inquiry": {
"statistic": {
"3_hari": 0,
"7_hari": 0,
"30_hari": 0,
"90_hari": 0,
"180_hari": 0,
"360_hari": 0,
">360_hari": 1
},
"last_3_days_inquiry": []
},
"platform_aktif": {
"jumlah_platform_aktif": 0,
"platform": []
}
}
}
KYC Consent List
Get KYC Submission
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| kycIdPath | string | required | KYC session JWT token |
Submit KYC
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| kycIdPath | string | required | KYC session JWT token |
Create Document
The KYC document flow is two steps: (1) create a document object to receive a presigned upload URL, then (2) upload the file content to that URL. These steps must be executed in sequence.
Request body: multipart/form-data with document metadata and the file.
presigned_url. The document is not usable until the file upload is complete.Response
{
"id": "doc_01j4abc",
"type": "KTP",
"presigned_url": "https://storage.finfra.io/upload?token=...",
"expires_at": "2025-06-29T09:00:00Z"
}
Get Document
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| documentId | string | required | Document ID (min 6 chars) |
Get Document File
application/octet-stream.Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| documentId | string | required | Document ID (min 6 chars) |
Update Documents
List Loans
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| userId | string | optional | Filter by borrower user ID |
| uniqueId | string | optional | Filter by loan unique ID (min 6 chars) |
| pageNumber | integer | optional | Page number (default: 1) |
| pageSize | integer | optional | Results per page |
| startDate | string | optional | Filter from date |
| endDate | string | optional | Filter to date |
| startRangeAmount | string | optional | Minimum loan amount filter |
| endRangeAmount | string | optional | Maximum loan amount filter |
Create Single Payment Loan
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| userId | string | required | Approved borrower user ID |
APPROVED status before a loan can be created. Call POST /api/core/users/{userId}/approve first if needed.Create BNPL (Installment Loan)
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| userId | string | required | Approved borrower user ID |
Loan Detail
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| uniqueId | string | required | Loan unique ID (min 6 chars) |
Initiate Loan Signing
Disburse Loan
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| loanUniqueId | string | required | Loan unique ID |
POST /api/core/loans/signing/initiate before proceeding.Reject Loan
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| loanUniqueId | string | required | Loan unique ID |
Create Payment Link
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| loanUniqueId | string | required | Loan unique ID |
Create Virtual Account
Borrower Status Callback
Finfra sends callbacks to your registered endpoint when borrower status, credit score, loan, or BNPL status changes. Secure these endpoints with the finfra-auth-key header.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| callbackTitle | string | required | Event type identifier (e.g. user_created, loan_disbursed) |
Headers
| Header | Type | Required | Description |
|---|---|---|---|
| finfra-auth-key | string | required | API key for callback authentication (from dashboard) |