hosted_url: a page made for your client, usually opened on a phone. It shows every option you can offer on one grid, and lets them choose one and tell your broker in one tap.
You don’t have to build a comparison screen, explain APR or chase a reply. You send a link; your broker hears back.
What your client sees
- Your agency first. Your agency’s name and brand color lead the page, with “Prepared by” and the broker’s name, and a quiet “Financing by Bridgeline Premium Finance” credit. The broker’s email and phone are never shown.
- The whole grid, priced. Every down payment and term, with the monthly payment in each cell. The recommended option is selected when the page opens, and the lowest monthly payment and lowest total cost are marked.
- The numbers for their choice. Monthly payment, down payment, APR, amount financed and total cost, in plain language, with a short “What this means” explainer.
- One action. I’m interested, with an optional note to the broker (up to 500 characters), such as the best time to call.
- The terms of the offer. A footer says the quote is indicative, when it was priced and when it expires.
Send the link
hosted_url is in the 201 response to POST /v1/quotes, and only there. Store it with the quote.
When your client says yes
When your client taps I’m interested:- The quote’s
statusbecomesinterestedandselected_option_idis set to the option they chose. The choice is final: the page shows “Sent to” your broker, and to change it the client replies to the broker directly. - We email the quote’s broker with the choice and the note, usually within a minute. If that broker is no longer active, we email your agency’s admins instead.
GET /v1/quotes/{id}shows everything ininterest.
200 OK (abridged)
Did the broker get the email?
interest.broker_notification records what happened to the email:
recipient is broker or agency_admins. With a broker key, recipients is empty when the email went to the admins, because a broker key can’t see their addresses.
Checking for a response
Webhooks are on the roadmap. Until then, pollGET /v1/quotes/{id}:
- Poll only quotes you’ve actually sent, every few minutes at most. The per-key limit is 60 requests a minute across every endpoint.
- Stop when
statusisinterestedorexpired. - Treat a
statusyou don’t recognize as “not usable”. More statuses will be added.
POST /v1/test_helpers/quotes/{id}/interest. The quote then reads back as if your client had responded.
Replace a link
POST /v1/quotes/{id}/hosted-link revokes the current link and returns a new one. Use it when a link went to the wrong person, or when you need the link again (GET always returns hosted_url: null). There’s no request body.
200 OK
- The old link stops working at once, for everyone. It now opens a neutral “This link isn’t active” page that names no agency.
- Expiry never moves. The new link expires with the quote. To give your client more time, create a new quote.
- An expired quote can’t get a new link:
409 QUOTE_EXPIRED. - An interested quote can. The new link shows your client’s choice, not the options again.
- Retries are safe. The same
Idempotency-Keyreturns the same link without revoking it again. A new key, or no key, mints another link and revokes the last one. - A broker key can replace links only for its own broker’s quotes. Anything else is
404, as withGET.