Partially update an existing draft or template proposal in place (same UUID).
Use this endpoint when you want to change blocks, title, recipient, attachments, or other draft fields without creating a new version. For a new version (duplicate + apply body), useDocumentation Index
Fetch the complete documentation index at: https://docs.proposales.com/llms.txt
Use this file to discover all available pages before exploring further.
POST /v3/proposals/{uuid}. To update only the JSON data metadata blob with a shallow merge, use Patch proposal data.
404 if the UUID is unknown).401 if not).company_id in the body must match the proposal’s company (400 if not).draft or template. Other statuses return 409 (e.g. active, accepted).withdrawn proposals return 400.400 with error.issues describing each problem (field path and message).
company_id (number, required on every request) — must match the proposal’s company.company_id (empty patches are rejected).creator_email — use Create proposal only.status — not used for publishing; see warning above.language
blocks with content_id, you must supply language in the body or the proposal must already have a language stored.company_id, subject to the rules above.
company_id.en, sv). Required when adding/updating blocks with content_id if the proposal has no stored language.data without touching other fields, prefer PATCH /v3/proposals/{uuid}/data.blocks, the array replaces the proposal’s entire block list for this update (same as create semantics). Omit blocks to leave the current layout unchanged. To change one block, send the full ordered list with that block updated. For blocks tied to the content library (content_id), the server merges your fields into the stored snapshot for each block you send; it does not accept a sparse “only these block UUIDs” delta.Per-block title, description, and image_uuids are not honored on PATCH — they are owned by the content library and the editor. If sent on a block, they are silently ignored. Update them in the Proposales editor instead.Block identity for editor-edits preservation: matching is strictly by uuid. The editor’s manual edits to a block’s title, description, or images are preserved only when the PATCH block carries the same uuid as the existing block. PATCH blocks without uuid are always treated as brand-new blocks (catalog title/description, server-generated uuid); the order in the resulting proposal mirrors the order in your request body. To update existing blocks, fetch current uuids via GET /v3/proposals/{uuid} and echo them on PATCH. Position in the array is never used to match.| Code | Meaning |
|---|---|
200 | Draft updated |
400 | Validation failed (strict body, withdrawn, or company_id mismatch). Response may include error.issues with per-field details. |
401 | Missing/invalid token, or user cannot edit this proposal |
404 | Unknown uuid |
409 | Proposal is not draft or template |