Skip to main content
The borrower applies inside your product. O.J. runs the application and the lender process. The API returns everything the borrower should see, in the words they should see it. Embed renders exactly those fields; if you build your own screens, render the same ones.

Progress and status

Render progress.steps as a track and status_reason as the sentence under it. status_label is the current step’s name. Use status for logic.

To-dos

Render each item in todos as a row with a button that opens its url. The borrower completes it on an O.J. page, or in place if you use Embed. next_action is the first item, for integrations that show one button.

Credit check

O.J. runs a soft pull on the primary owner to match on credit. The owner authorizes it and enters their SSN on O.J.’s screen, so neither passes through your servers. It doesn’t affect their score. Lenders run their own check only if the borrower accepts an offer. The referral’s credit.status says where the check stands. O.J. never shares the score, or anything derived from it, with partners.

Bank connection

Borrowers can connect their bank through Plaid instead of uploading statements. After they accept an offer, they verify the account the lender pays into. If they already connected a bank, they choose an account from it without logging in again. A voided check is the fallback.

Messages

With the borrower’s consent, O.J. keeps them posted by text while lenders review the file, and answers questions like “Any word?”. Every message lands on the referral’s conversation (GET /referrals/{id}/conversation), so what O.J. texted and what your product shows always agree. Your policy decides which channels O.J. may use, or routes messages through your own channel instead.
Text thread: O.J. tells Daniel his file is with three lenders, answers 'Any word?', then sends an $80,000 offer from Example Capital

O.J. texting the borrower while lenders review, then sending the offer.

When a referral ends without funding

O.J. doesn’t approve or decline credit. outcome carries the reason code and the sentence to show.

Payouts

estimated → pending → received → held → scheduled → paid, or reversed if a lender claws back the commission. GET /payouts is your statement. Payout destinations are set during onboarding and cannot be changed through the API.