Better Proposals
BUSINESS · CRM & SUPPORT
Proposals, quotes, templates, and their sent, signed and paid states.
Connecting Better Proposals in practice
Better Proposals switches the API off when a trial converts to the wrong plan: API use requires Premium or Enterprise, and the documented error is "It isn’t possible to use the Better Proposals API on your current plan", so an integration built during the free trial starts failing at conversion rather than at signup. Errors are carried in the JSON body under a status key of success or error, and the documented status codes stop at 2XX, 4XX and 5XX.
Scopes that draw scrutiny
BptokenA single account-level token in a custom header, with no scopes, reaching every documented endpoint including the writes — proposal, cover, document type, quote and company creation. Regenerating the key is the only documented revocation.
Worth knowing
- Two different payloads describe the same billing condition — "Your trial has expired." and "It isn’t possible to use the Better Proposals API on your current plan." — so plan detection has to match on message strings rather than on a code.
- "Invalid token" is documented with no TTL, refresh or rotation semantics, so there is no way to tell an expired credential from a revoked one.
- No pagination is documented on any list endpoint. There is a GET /proposal/count, but no page or per_page parameter appears anywhere in the reference.
- The whole reference is a single page with visible gaps: two sections are both numbered "Section 05", and the Quotes section body still reads "Some text for quotes here."
Checked against Better Proposals API (2026-09-29)
What an agent can do
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
Often connected alongside
Put Better Proposals behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.