Skip to main content
POST
Create Proposal
A Proposal is a priced offer of one or more contracts that a customer reviews and accepts online. Creating a proposal automatically creates one ProposalContract from the proposal’s own plan, unit, price, and date fields; those fields are create-only here, so later changes must be made on that ProposalContract, and further contracts are added as additional ProposalContract records. Extra products and deposits are held as ProposalProduct records and scheduled price changes as ProposalSchedule records. Three attachments are optional: DocumentToSendId, a document template rendered for the customer in place of the standard price-schedule table; DocumentToSignId, a document template generated for e-signature on acceptance; and ProposalFile, a marketing file the customer can download. Sending the proposal stamps SentOn and moves the status to Sent; acceptance creates the real contracts, products, and discount on the customer and sets the status to Accepted, after which no field on the proposal can be changed.

Authentication

This endpoint requires OAuth2 authentication. Include a valid bearer token in the Authorization header. The authenticated user must be a full unrestricted administrator or have the Proposal-Create role.

Enums

Request Body

Required Fields

integer
required
ID of the location that issued this proposal; it is supplied from the agent’s current location context and its currency is the one all proposal amounts are expressed in..
integer
required
ID of the staff user who owns this proposal; required, and their email address is notified when the customer completes an e-signed document..
integer
required
ID of the customer the proposal is addressed to; required, and on acceptance the contracts, products, and discount of this proposal are created against this customer..
string
required
Required human-readable reference shown to the customer and used to name the generated e-signature document; the admin UI seeds it as a random six-character code followed by the customer and plan names..
integer
required
Lifecycle state of the proposal: Draft, Sent (stamped when the proposal is emailed), Accepted (set only by the acceptance flow, after which no field on the proposal can be changed), or Rejected (set manually to withdraw the offer).. Defaults to eProposalStatus.Draft.
integer
required
ID of the plan being quoted; required, and it is copied into the ProposalContract created with the proposal, so a different plan must be set on that ProposalContract instead..
integer
required
Day of the month, from 1 to 28, on which the quoted contract is invoiced; it is copied into the ProposalContract created with the proposal, so later changes belong on that ProposalContract..
integer
required
Number of plan units quoted, at least 1; it multiplies the unit price. It is copied into the ProposalContract created with the proposal, so later changes belong on that ProposalContract..

Optional Fields

string
Free-text notes about this proposal; they are shown to the customer on the proposal page, so they are not internal-only..
integer
Optional ID of the document template rendered for the customer in place of the standard price-schedule table; when empty, the standard layout is used..
integer
Optional ID of the document template used to generate the document the customer is asked to e-sign when the proposal is accepted; when empty, no signature is requested..
string
Per-proposal HTML copy of the document to e-sign, produced from DocumentToSign and editable in the document editor; it is cleared automatically whenever DocumentToSign changes..
string
URL of a new file to upload as the document to sign binary document.
boolean
Set to true to remove the current document to sign binary document file.
string
Per-proposal HTML copy of the document presented to the customer, produced from DocumentToSend and editable in the document editor; it is cleared automatically whenever DocumentToSend changes..
string
URL of a new file to upload as the document to send binary document.
boolean
Set to true to remove the current document to send binary document file.
string
URL of a new file to upload as the proposal file.
boolean
Set to true to remove the current proposal file file.
integer[]
List of IDs of the floor-plan units quoted in this proposal; each unit must belong to a location the user can access, an empty list means no unit is attached, and the list is copied into the ProposalContract created with the proposal, so later changes belong on that ProposalContract..
integer[]
List of IDs of the floor-plan unit packages quoted in this proposal; each package must belong to one of the units listed in Desks and to a location the user can access, an empty list means none, and the list is copied into the ProposalContract created with the proposal..
number
Optional per-unit price override for the quoted contract, in the issuing location’s currency; when empty the plan’s own price is used. It is copied into the ProposalContract created with the proposal, so later price changes belong on that ProposalContract..
string
Date the quoted contract starts; when empty, acceptance starts it the day after the proposal is accepted. It is copied into the ProposalContract created with the proposal, so later changes belong on that ProposalContract..
integer
Optional minimum cancellation notice, in days before the next billing day, for the quoted contract; when empty the plan’s own notice period applies. It seeds the ProposalContract created with the proposal and cannot be changed here afterwards, so later changes belong on that ProposalContract..
string
End date of the minimum term for the quoted contract; when empty, the contract derives its own term from the plan’s default term and start date. It seeds the ProposalContract created with the proposal and cannot be changed here afterwards, so later changes belong on that ProposalContract..
string
Optional date on which the quoted contract ends; leave empty for an open-ended contract. It is copied into the ProposalContract created with the proposal, so later changes belong on that ProposalContract..
string
Last date the customer may still accept this proposal; acceptance and e-signing are refused once the current UTC time passes this date plus one day, and when empty the proposal expires 30 days after it was created. It stays editable after creation..
integer
Optional ID of a discount code quoted with this proposal; on acceptance it is both copied into the contract and added to the customer’s account..
string
Legacy location-timezone column for StartDate; Proposal is not date-localized, so it is never populated. Read StartDate instead..
string
Legacy location-timezone column for SentOn; Proposal is not date-localized, so it is never populated. Read SentOn instead..
boolean
Whether the contracts created on acceptance are left paused with no renewal date, so no invoice is issued automatically; the location’s Billing.DoNotIssueInvoice setting supplies the default. It is read from the proposal at the moment of acceptance, never copied into the ProposalContract, so it can still be changed while the proposal is not accepted..

Code Examples

Response

200

integer
HTTP status code. 200 on success.
string
A human-readable message confirming the creation.
object
Contains the Id of the newly created record.
boolean
true if the proposal was created successfully.
array
null on success.
Example Response

400

string
A summary of the validation error(s), in the format PropertyName: error message.
any
null on validation failure.
object[]
Array of validation errors.
boolean
false when the request fails validation.
Example Response