Skip to main content
POST
Create new version of proposal
Use this endpoint to create a new draft version of a proposal that has already been sent. The new draft is a fresh copy of the source proposal in the same proposal series, with a new UUID, and the request body lets you override fields on the new draft. For partial in-place updates of a draft you have not sent yet, use Patch proposal (draft). For an entirely new proposal series, use Create proposal.

When to use this endpoint

Pick the right v3 endpoint based on the current state of the proposal on Proposales’ side:
  • Proposal does not exist yetPOST /v3/proposals.
  • Proposal exists and is still draft or templatePATCH /v3/proposals/{uuid} (in-place update, same UUID).
  • Proposal exists and has already been sent (active, accepted, replaced, expired, or rejected) → this endpoint (POST /v3/proposals/{uuid}) — it creates a new draft version in the same proposal series.
Calling this endpoint while the source proposal is still a draft is allowed, but it creates a separate draft alongside the existing one rather than a true new version. For changes to a proposal you have not yet sent, prefer PATCH /v3/proposals/{uuid}.

Eligibility

  • The source proposal must exist.
  • The caller must have access to the source proposal’s company.
  • body.company_id must match the source proposal’s company.
  • The source proposal must not be withdrawn. Any other status is accepted (draft, template, active, accepted, replaced, expired, rejected).

Idempotency

Calling this endpoint repeatedly for the same source UUID returns the same draft UUID until that draft is sent or archived. Each call applies your latest body to that draft, so callers should treat this endpoint as “create-or-replace the next-version draft” rather than “always create a new draft”. Once the draft is sent (or archived), a subsequent call mints a fresh new-version draft.

What carries over from the source

The new draft inherits the following from the source proposal, unless overridden in the request body:
  • Blocks, including any title, description, and image customisations made in the editor
  • Attachments
  • Recipient
  • Language
  • Title and description
  • Tax options
  • Background image and background video
  • Payment configuration
  • Proposal metadata (data)
  • Creator and contact person
The new draft belongs to the same proposal series as the source. When the series contains a previously accepted proposal, the new draft is automatically linked to it so version history is preserved in the editor.

Path

uuid
required
The UUID of the source proposal to create a new version from.

Request body

The body shape mirrors Create proposal; most fields are optional and override the value carried over from the source, but company_id is required (see Eligibility). The body is strict — extra keys return 400 with error.issues describing each problem.
  • creator_email is ignored on this route. The creator is preserved from the previous version.
number
required
Must equal the source proposal’s company_id.
string
ISO-style language code (e.g. en, sv). Required when adding blocks with content_id if the proposal has no stored language.
string
Proposal title as Markdown. Overrides the carried-over title.
string
Proposal description as Markdown. Overrides the carried-over description.
object
Same shape as Create proposal.
string
Email of the internal contact person. Same rules as Create proposal.
object
Proposal metadata. Replaces the carried-over data.
array
Same block shape as Create proposal. When provided, the array replaces the carried-over block list on the new draft.
array
Same attachment shapes as Create proposal. When provided, replaces the carried-over attachments.
object
object
boolean
object
object
Same shape as Create proposal.

Response

object

Status codes