Bright: Loans & Credit Builder icon

Bright Data API: Credit Scores, Builder Draws & Payments

Bright Capital, Inc. · Lending 4.6 ★

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

  • Bright: Loans & Credit Builder screenshot 1
  • Bright: Loans & Credit Builder screenshot 2
  • Bright: Loans & Credit Builder screenshot 3
  • Bright: Loans & Credit Builder screenshot 4
  • Bright: Loans & Credit Builder screenshot 5
  • Bright: Loans & Credit Builder screenshot 6
  • Bright: Loans & Credit Builder screenshot 7
  • Bright: Loans & Credit Builder screenshot 8

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-confirmation osint

    Completes 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/profile opendata

    Hydrates 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
    • email
    • 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/checks osint

    Posts 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/exchanges openbanking

    Exchanges 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/overview openbanking

    Loads 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/details openbanking

    Opens 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/ledger openbanking

    Pages 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/refresh opendata

    Refreshes 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-accounts openfinance

    Opens 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-activation openfinance

    Activates 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/disbursements openfinance

    Draws 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/overview openfinance

    Reads 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/history openfinance

    Pages 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/instructions openfinance

    Places 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/projections opendata

    Feeds 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/payments opendata

    Lists 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

Get a quote