Bright Data API: Credit Scores, Builder Draws & Payments
Bright: Loans & Credit Builder is Bright Capital, Inc.'s personal-finance app for U.S. consumers who want Equifax score monitoring, a Bright Builder secured credit line and help paying down existing credit cards. Members sign in with a U.S. phone number, connect checking and card accounts through Plaid, and use a refundable security deposit to open a Bright Builder savings pot and activate the associated line. They can draw against the line, schedule card payments, compare snowball and avalanche repayment plans, and opt into rent reporting. The app also includes bill-saving and subscription-management tools, an AI money assistant, affiliate personal-loan and card offers, and Evolve-issued debit-card controls; Finicity, Akoya and Yodlee provide additional account-linking options. The listing has a 4.62 rating from 175,741 ratings. For people comparing Credit Karma, Credit Sesame, Self, Dave and Brigit, Bright combines score monitoring with a deposit-backed credit-building product and card-paydown planning rather than a bureau-branded credit lock.
Equifax score updates pair credit_score with credit_score_next_update_date and credit_score_change, while linked-account records connect institutionName, account_balance, available_credit_limit and credit_utilization_percentage. Builder records add security_deposit, accountBalance, first_draw_amount and bureaus_reporting; draw records connect draw_amount to the destination account through pay_to_account_id and carry paymentStatus.
Credit-coaching dashboards can compare utilization with the next score-update date, and servicing teams can reconcile builder draws against payment-account availableBalance. Repayment planners combine proposed_min_due, min_due_overall and extraSavingsAmount with card apr, minDueAmount and dueDate to compare snowball and avalanche scenarios and assemble payment calendars. Monthly rent records carry rentAmount and payment_status for reporting reconciliation; the documented rent fields do not identify a reporting bureau. With member authorization, openData Studio turns these credit, payment and rent records into callable open data for such integrations.
Screenshots
API surface
The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.
Sign in with phone OTP
POST
/v1/sessions/phone-confirmationosintCompletes the phone OTP sign-in screen and mints jwtToken / refreshToken used as Bearer credentials on every later member call.
Auth: Unauthenticated. Body carries phoneNumber plus otp / hashed_otp from the SMS challenge. Response jwtToken is the Bearer credential for later calls.
- phoneNumber
- otp
- hashed_otp
- userId
- jwtToken
- refreshToken
- accessToken
- auth_token
- is_kyc_data_available
- has_collected_ssn
POST /v1/sessions/phone-confirmation HTTP/1.1 Content-Type: application/json { "phoneNumber": "+14155550123", "otp": "482913", "hashed_otp": "a1b2c3d4" }{ "userId": "usr_8f21c0ab", "jwtToken": "<example-jwtToken>", "refreshToken": "<example-refreshToken>", "accessToken": "<example-accessToken>", "auth_token": "<example-session-token>", "phoneNumber": "+14155550123", "is_kyc_data_available": false, "has_collected_ssn": false }Load member profile
GET
/v1/members/profileopendataHydrates the signed-in member card: name, email, phoneNumber, dateOfBirth, postalAddress, annual_income and SSN-collection flags used across KYC and underwriting screens.
Auth: Authorization: Bearer <jwtToken>. The member session issues the JWT; refreshToken renews the session.
- userId
- firstName
- lastName
- phoneNumber
- dateOfBirth
- postalAddress
- annual_income
- is_ssn_available
- has_collected_ssn
- paycheckFrequency
GET /v1/members/profile HTTP/1.1 Authorization: Bearer <jwtToken>{ "userId": "usr_8f21c0ab", "firstName": "Alex", "lastName": "Rivera", "email": "[email protected]", "phoneNumber": "+14155550123", "dateOfBirth": "1992-04-18", "postalAddress": { "address-line1": "50 California St", "postal-address-region": "CA" }, "annual_income": 72000, "is_ssn_available": true, "has_collected_ssn": true, "paycheckFrequency": "BIWEEKLY" }Submit PII verification
POST
/v1/identity/checksosintPosts the identity form (name, dateOfBirth, ssn, postalAddress) that gates Equifax pulls and Bright Builder account opening.
Auth: Authorization: Bearer <jwtToken>. The member session issues the JWT; refreshToken renews the session.
- firstName
- lastName
- dateOfBirth
- ssn
- postalAddress
- is_kyc_data_available
- has_collected_ssn
- is_ssn_available
- kycStatus
POST /v1/identity/checks HTTP/1.1 Authorization: Bearer <jwtToken> Content-Type: application/json { "firstName": "Alex", "lastName": "Rivera", "dateOfBirth": "1992-04-18", "ssn": "***-**-4412", "postalAddress": { "address-line1": "50 California St", "postal-address-region": "CA" } }{ "userId": "usr_8f21c0ab", "is_kyc_data_available": true, "has_collected_ssn": true, "is_ssn_available": true, "kycStatus": "VERIFIED" }Submit Plaid Link token
POST
/v1/connections/plaid/exchangesopenbankingExchanges a Plaid Link public_token for the member's item_id and linkedAccounts so fusion can pull checking and card balances. Companion paths mint a public token and onboard the integration.
Auth: Authorization: Bearer <jwtToken>. The member session issues the JWT; refreshToken renews the session.
- public_token
- institutionId
- institutionName
- institutionMask
- account_id
- account_type
- accountMask
- account_holder_name
- item_id
- linkedAccounts
- accessToken
POST /v1/connections/plaid/exchanges HTTP/1.1 Authorization: Bearer <jwtToken> Content-Type: application/json { "public_token": "<example-public-token>", "institutionId": "ins_3", "institutionName": "Chase", "account_id": "acc_checking_1", "account_type": "checking" }{ "item_id": "item_9c10", "institutionId": "ins_3", "institutionName": "Chase", "institutionMask": "1234", "linkedAccounts": [ { "account_id": "acc_checking_1", "account_type": "checking", "accountMask": "1234", "account_holder_name": "Alex Rivera" } ], "accessToken": "<example-accessToken>" }Linked accounts summary
GET
/v1/linked-accounts/overviewopenbankingLoads the home-screen fusion snapshot: checking account_balance / available_balance plus each card's currentBalance, credit_limit, available_credit_limit, minDueAmount and dueDate.
Auth: Authorization: Bearer <jwtToken>. The member session issues the JWT; refreshToken renews the session.
- aggregate_account_balance
- openAccounts
- account_id
- account_type
- institutionName
- accountMask
- account_balance
- available_balance
- currentBalance
- credit_limit
- available_credit_limit
- credit_utilization_percentage
- minDueAmount
- dueDate
- apr
- debit_card_enabled
GET /v1/linked-accounts/overview HTTP/1.1 Authorization: Bearer <jwtToken>{ "aggregate_account_balance": 2144.55, "openAccounts": [ { "account_id": "acc_checking_1", "account_type": "checking", "institutionName": "Chase", "institutionId": "ins_3", "accountMask": "1234", "account_balance": 2144.55, "available_balance": 1980.10, "debit_card_enabled": true }, { "account_id": "acc_card_7", "account_type": "credit", "institutionName": "Citi", "accountMask": "4412", "currentBalance": 1860.00, "credit_limit": 5000.00, "available_credit_limit": 3140.00, "credit_utilization_percentage": 37.2, "minDueAmount": 42.00, "dueDate": "2026-11-12", "apr": 24.99 } ], "account_overall_summary": { "credit_summary": { "creditUtilization": 37.2 } } }Linked account detail
GET
/v1/linked-accounts/detailsopenbankingOpens a single linked card or bank row with holder name, APR, statement_min_due, upcoming_due_date and account_balance_history for the account-detail screen.
Auth: Authorization: Bearer <jwtToken>. The member session issues the JWT; refreshToken renews the session.
- account_id
- account_holder_name
- account_type
- provider_institution_name
- provider_account_id
- accountMask
- currentBalance
- creditLimitCurrent
- availableCreditLimit
- creditUtilization
- apr
- cc_apr
- statement_min_due
- upcoming_due_date
- account_balance_history
GET /v1/linked-accounts/details?account_id=acc_card_7 HTTP/1.1 Authorization: Bearer <jwtToken>{ "account_id": "acc_card_7", "account_holder_name": "Alex Rivera", "account_type": "credit", "provider_institution_name": "Citi", "provider_institution_id": "ins_9", "provider_account_id": "prov_4412", "accountMask": "4412", "currentBalance": 1860.00, "creditLimitCurrent": 5000.00, "availableCreditLimit": 3140.00, "creditUtilization": 37.2, "apr": 24.99, "cc_apr": 24.99, "statement_min_due": 42.00, "upcoming_due_date": "2026-11-12", "account_balance_history": [ {"date": "2026-10-01", "balance": 1720.00} ] }Linked account transactions
GET
/v1/linked-accounts/ledgeropenbankingPages fusion transactions for a linked account — payroll directDeposit credits and card-payment debits that feed cash-flow and Bright Plan inferences.
Auth: Authorization: Bearer <jwtToken>. The member session issues the JWT; refreshToken renews the session.
- account_id
- transactionId
- transactionDescription
- amount
- directDeposit
- list_of_loan_account_transactions
GET /v1/linked-accounts/ledger?account_id=acc_checking_1&page=1 HTTP/1.1 Authorization: Bearer <jwtToken>{ "account_id": "acc_checking_1", "transactions": [ { "transactionId": "txn_1001", "transactionDescription": "ACME PAYROLL", "amount": 1840.22, "account_type": "checking", "date": "2026-10-17", "directDeposit": true }, { "transactionId": "txn_1002", "transactionDescription": "CITI CARD PAYMENT", "amount": -125.00, "date": "2026-10-12" } ], "list_of_loan_account_transactions": [] }Refresh Equifax credit-score widget
POST
/v1/credit-scores/refreshopendataRefreshes the home Equifax score tile: credit_score, credit_score_range, credit_score_next_update_date and the signed credit_score_change delta.
Auth: Authorization: Bearer <jwtToken>. The member session issues the JWT; refreshToken renews the session.
- credit_score
- credit_report_cds_credit_score_score
- creditScoreData
- bureau
- credit_score_range
- credit_score_next_update_date
- credit_score_change
- credit_score_change_is_negative
- bureaus_reporting
POST /v1/credit-scores/refresh HTTP/1.1 Authorization: Bearer <jwtToken> Content-Type: application/json { "userId": "usr_8f21c0ab" }{ "credit_score": 718, "credit_report_cds_credit_score_score": 718, "creditScoreData": { "bureau": "equifax", "credit_score_range": "good", "credit_score_next_update_date": "2026-11-15", "credit_score_change": 6, "credit_score_change_is_negative": false }, "bureaus_reporting": ["equifax"] }Open Bright Builder account
POST
/v1/builder/deposit-accountsopenfinanceOpens the Bright Builder savings pot: a refundable security_deposit pulled from pay_from_account_id, returning virtual_account_id, accountNumber / routingNumber and bureaus_reporting.
Auth: Authorization: Bearer <jwtToken>. The member session issues the JWT; refreshToken renews the session.
- depositAmount
- pay_from_account_id
- bsa_account_opening_consent
- virtual_account_id
- accountNumber
- accountNumberMask
- routingNumber
- security_deposit
- accountBalance
- accountBalanceHistory
- bureaus_reporting
POST /v1/builder/deposit-accounts HTTP/1.1 Authorization: Bearer <jwtToken> Content-Type: application/json { "depositAmount": 100.00, "pay_from_account_id": "acc_checking_1", "bsa_account_opening_consent": true }{ "credit_builder_account": { "virtual_account_id": "cb_acc_4412", "accountNumber": "900012345678", "accountNumberMask": "5678", "routingNumber": "084106768", "depositAmount": 100.00, "security_deposit": 100.00, "accountBalance": 100.00, "bureaus_reporting": ["equifax"], "bsa_account_opening_consent": true }, "credit_builder_savings_account": { "accountBalance": 100.00, "accountBalanceHistory": [] } }Activate Bright Builder line
POST
/v1/builder/line-activationopenfinanceActivates the builder line after the deposit clears, exposing first_draw_amount, available_credit_limit, last4DigitsOfCard and cb_preferred_disbursement.
Auth: Authorization: Bearer <jwtToken>. The member session issues the JWT; refreshToken renews the session.
- virtual_account_id
- accountBalance
- first_draw_amount
- draw_amount
- available_credit_limit
- cb_preferred_disbursement
- bureaus_reporting
- last4DigitsOfCard
POST /v1/builder/line-activation HTTP/1.1 Authorization: Bearer <jwtToken> Content-Type: application/json { "virtual_account_id": "cb_acc_4412" }{ "virtual_account_id": "cb_acc_4412", "accountBalance": 100.00, "first_draw_amount": 100.00, "draw_amount": 100.00, "available_credit_limit": 100.00, "cb_preferred_disbursement": "ACH", "bureaus_reporting": ["equifax"], "last4DigitsOfCard": "4412" }Draw Bright Builder amount
POST
/v1/builder/disbursementsopenfinanceDraws the builder line (typically the first_draw_amount) onto a target card via pay_to_account_id so the tradeline can report a payment.
Auth: Authorization: Bearer <jwtToken>. The member session issues the JWT; refreshToken renews the session.
- virtual_account_id
- draw_amount
- drawAmount
- pay_to_account_id
- pay_to_account_type
- cb_preferred_disbursement
- paymentStatus
- accountBalance
- available_credit_limit
POST /v1/builder/disbursements HTTP/1.1 Authorization: Bearer <jwtToken> Content-Type: application/json { "virtual_account_id": "cb_acc_4412", "draw_amount": 100.00, "pay_to_account_id": "acc_card_7", "pay_to_account_type": "credit", "cb_preferred_disbursement": "ACH" }{ "virtual_account_id": "cb_acc_4412", "drawAmount": 100.00, "draw_amount": 100.00, "pay_to_account_id": "acc_card_7", "pay_to_account_type": "credit", "paymentStatus": "PROCESSING", "accountBalance": 0.00, "available_credit_limit": 0.00 }Bright payment-account details
GET
/v1/payment-accounts/overviewopenfinanceReads the Evolve-issued Bright payment account: masked accountNumber, routingNumber, availableBalance and last4DigitsOfCard shown on the card-art screen.
Auth: Authorization: Bearer <jwtToken>. The member session issues the JWT; refreshToken renews the session.
- virtual_account_id
- accountNumber
- accountNumberMask
- routingNumber
- accountBalance
- availableBalance
- last4DigitsOfCard
- debit_card_enabled
GET /v1/payment-accounts/overview HTTP/1.1 Authorization: Bearer <jwtToken>{ "virtual_account_id": "cb_acc_4412", "accountNumber": "900012345678", "accountNumberMask": "5678", "routingNumber": "084106768", "accountBalance": 100.00, "availableBalance": 100.00, "last4DigitsOfCard": "4412", "debit_card_enabled": true }Paginated scheduled payments
GET
/v1/card-payments/historyopenfinancePages scheduled and completed card payments with amount, minDueAmount, dueDate and paymentStatus for the payments calendar.
Auth: Authorization: Bearer <jwtToken>. The member session issues the JWT; refreshToken renews the session.
- transactionId
- pay_from_account_id
- pay_to_account_id
- amount
- minDueAmount
- dueDate
- upcomingPaymentAmount
- paymentStatus
- total_upcoming_min_due
GET /v1/card-payments/history?page=1 HTTP/1.1 Authorization: Bearer <jwtToken>{ "payments": [ { "transactionId": "pay_771", "pay_from_account_id": "acc_checking_1", "pay_to_account_id": "acc_card_7", "amount": 42.00, "minDueAmount": 42.00, "dueDate": "2026-11-12", "upcomingPaymentAmount": 42.00, "paymentStatus": "SCHEDULED" } ], "total_upcoming_min_due": 42.00 }Submit card payment
POST
/v1/card-payments/instructionsopenfinancePlaces a one-off or scheduled card payment from a linked checking account onto a target tradeline.
Auth: Authorization: Bearer <jwtToken>. The member session issues the JWT; refreshToken renews the session.
- pay_from_account_id
- pay_to_account_id
- amount
- minDueAmount
- transactionId
- paymentStatus
- dueDate
POST /v1/card-payments/instructions HTTP/1.1 Authorization: Bearer <jwtToken> Content-Type: application/json { "pay_from_account_id": "acc_checking_1", "pay_to_account_id": "acc_card_7", "amount": 125.00, "minDueAmount": 42.00 }{ "transactionId": "pay_772", "paymentStatus": "PROCESSING", "amount": 125.00, "pay_from_account_id": "acc_checking_1", "pay_to_account_id": "acc_card_7", "dueDate": "2026-11-12" }Debt-paydown simulator
GET
/v1/debt-plans/projectionsopendataFeeds the snowball vs avalanche planner with proposed_min_due, min_due_overall, extraSavingsAmount and per-card apr / currentBalance.
Auth: Authorization: Bearer <jwtToken>. The member session issues the JWT; refreshToken renews the session.
- strategy
- avalanche
- snowball
- proposed_min_due
- min_due_overall
- total_upcoming_min_due
- extraSavingsAmount
- credit_accounts_utilization_arr
- apr
- currentBalance
- minDueAmount
- dueDate
GET /v1/debt-plans/projections HTTP/1.1 Authorization: Bearer <jwtToken>{ "strategy": "avalanche", "proposed_min_due": 185.00, "min_due_overall": 164.00, "total_upcoming_min_due": 164.00, "extraSavingsAmount": 21.00, "credit_accounts_utilization_arr": [37.2, 61.0], "accounts": [ { "account_id": "acc_card_7", "apr": 24.99, "currentBalance": 1860.00, "minDueAmount": 42.00, "dueDate": "2026-11-12" } ] }Rent-reporting transactions
GET
/v1/rent-records/paymentsopendataLists rent payments the member opted to report, with rentAmount and payment_status for each month on the rent-reporting screen.
Auth: Authorization: Bearer <jwtToken>. The member session issues the JWT; refreshToken renews the session.
- rent_reporting
- rentAmount
- transactionId
- amount
- payment_status
- dueDate
GET /v1/rent-records/payments HTTP/1.1 Authorization: Bearer <jwtToken>{ "rent_reporting": true, "rentAmount": 1850.00, "transactions": [ { "transactionId": "rent_202610", "amount": 1850.00, "payment_status": "REPORTED", "dueDate": "2026-10-01" } ] }
Data categories
- credit scores
- linked accounts
- transactions
- credit builder
- payments
- debt paydown
- rent reporting
- identity
Where teams use this data
Equifax score and tradeline monitoring
Pull credit_score with credit_score_next_update_date and per-card currentBalance / credit_utilization_percentage so a coaching dashboard can flag utilization spikes before the next bureau refresh.
Bright Builder draw reconciliation
Match first_draw_amount and draw_amount against pay_to_account_id and the Evolve availableBalance so servicing ops can confirm the builder line actually posted as a card payment.
Snowball vs avalanche planner
Feed proposed_min_due, min_due_overall and extraSavingsAmount plus each card's apr and dueDate into a paydown calendar that schedules card-payment amounts.
Rent-reporting bureau tape
Collect monthly rentAmount rows with payment_status from the rent-reporting screen and attach them to the same Equifax file the builder line already reports.
Frequently asked questions
How does Bright Money authenticate members?
Phone verification uses phoneNumber with otp or hashed_otp and returns jwtToken, refreshToken and accessToken. Subsequent member calls use Authorization: Bearer with the JWT, while refreshToken renews the session. The path-only examples on this page illustrate the flow; they are not production connection details.
Which bureau supplies the in-app credit score?
The score widget uses Equifax. Its records include credit_score, credit_score_range, credit_score_next_update_date and credit_score_change. Identity verification and member consent precede the credit inquiry.
Which Bright Builder account and draw fields are available?
Bright Builder is a secured line funded by a refundable security_deposit. Account-opening records include virtual_account_id, accountNumber and routingNumber. Activation records expose first_draw_amount and bureaus_reporting, including Equifax; draw records link the payment to a target card through pay_to_account_id.
Can linked bank and card balances be included in an integration?
With member authorization, linked-account records provide aggregate_account_balance and per-account account_balance, available_credit_limit, minDueAmount and dueDate. Transaction records include transactionId, transactionDescription and directDeposit indicators for payroll credits. Plaid linking uses public_token, item_id and linkedAccounts to associate the accounts.
Apps similar to Bright: Loans & Credit Builder
- Intuit Credit Karma — Intuit Credit Karma shows credit-score change alerts, personalized credit-card and loan offers, and Credit Spark so members can build history from bills they already pay.
- Credit Sesame — Credit Sesame refreshes a free daily credit score with monitoring alerts and offers a Credit Builder that reports everyday debit purchases and rent, with no credit check or security deposit.
- Self — Self Financial's Credit Builder Account builds savings while reporting a credit-builder loan, with optional rent-and-bills reporting to all three bureaus and a Self Visa credit card.
- Dave — Dave ExtraCash advances $25–$500 with no credit check, interest, or late fees, and members can open an FDIC-insured checking account that can receive pay up to two days early.
- Brigit — Brigit offers Instant Cash advances of $25–$500 with no credit check, interest, or late fees, plus a no-deposit credit-builder account that reports to Experian, Equifax and TransUnion.
- Experian — Experian's consumer app provides a free Experian FICO Score and credit report, Experian Boost for eligible bills and rent, and alerts when new accounts or inquiries appear on the Experian file.
- Kikoff — Kikoff issues a credit-builder tradeline that reports to Equifax, Experian and TransUnion, and can also report on-time rent to Equifax and TransUnion plus utility bills for extra history.
- MoneyLion — MoneyLion combines Instacash advances of up to $500 with no interest or credit check, a Credit Builder Plus product, and marketplace personal-loan offers.
Topics
- Bright Money API
- Bright credit builder
- Equifax credit_score
- Plaid linked accounts
- draw_amount
- account_balance
- debt paydown
- rent reporting
Need this app's data API integrated?
We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.
- NDA + SOW on every engagement
- Delivery in 3–7 days
- Payment only after acceptance
- Work scoped to authorized use