Progress and status
Renderprogress.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 intodos 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’scredit.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.

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.
