Skip to main content
POST
/
api
/
billing
/
proposals
{
  "Status": 123,
  "Message": "<string>",
  "Value": "<any>",
  "WasSuccessful": true,
  "Errors": [
    {
      "AttemptedValue": "<any>",
      "Message": "<string>",
      "PropertyName": "<string>"
    }
  ]
}
A Proposal bundles one or more contracts (ProposalContract records) that are presented to a customer for review and acceptance. Each ProposalContract carries the same properties as a CoworkerContract and becomes one when the proposal is accepted. When a Proposal is created, a ProposalContract is automatically created and associated with it. From that point on, the contract-related fields on the Proposal (TariffId, Desks, Variants, Price, StartDate, CancellationLimitDays, ContractTerm, CancellationDate, ExpirationDate, BillingDay, Quantity) become read-only — they are all createOnly. Subsequent edits to those values must be made via the associated ProposalContract. Additional ProposalContract records can also be added. Proposals support three optional attachments:
  • DocumentToSendId — a DocumentTemplate entity presented to the customer instead of the standard price-schedule table before the proposal is accepted.
  • DocumentToSignId — a DocumentTemplate entity used to generate a document for e-signature.
  • ProposalFile — a file shown as a downloadable link before the proposal is accepted.
Set DoNotIssueInvoice to control whether the first invoice is issued automatically when the proposal is accepted.

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

ValueName
1Draft
2Sent
3Accepted
4Rejected

Request Body

Required Fields

IssuedById
integer
required
Issued By Id.
ResponsibleId
integer
required
Responsible Id.
CoworkerId
integer
required
Coworker Id.
Reference
string
required
Proposal reference.
TariffId
integer
required
Tariff Id.
BillingDay
integer
required
Billing day of month for the initial contract. Becomes read-only after creation; edit via ProposalContract.
Quantity
integer
required
Quantity for the initial contract. Becomes read-only after creation; edit via ProposalContract.

Optional Fields

Notes
string
Notes.
ProposalStatus
integer
Proposal status. Defaults to eProposalStatus.Draft. See eProposalStatus enum above.
DocumentToSendId
integer
Document To Send Id.
DocumentToSignId
integer
Document To Sign Id.
DocumentToSignHtml
string
Document To Sign Html.
NewDocumentToSignBinaryDocumentUrl
string
New Document To Sign Binary Document Url.
ClearDocumentToSignBinaryDocumentFile
boolean
Clear Document To Sign Binary Document File.
DocumentToSendHtml
string
Document To Send Html.
NewDocumentToSendBinaryDocumentUrl
string
New Document To Send Binary Document Url.
ClearDocumentToSendBinaryDocumentFile
boolean
Clear Document To Send Binary Document File.
NewProposalFileUrl
string
New Proposal File Url.
ClearProposalFileFile
boolean
Clear Proposal File File.
Desks
integer[]
Desks.
Variants
integer[]
Variants.
Price
number
Price override for the initial contract. Becomes read-only after creation; edit via ProposalContract.
StartDate
string
Start date for the initial contract. Becomes read-only after creation; edit via ProposalContract.
CancellationLimitDays
integer
Cancellation limit in days for the initial contract. Becomes read-only after creation; edit via ProposalContract.
ContractTerm
string
Contract term end date for the initial contract. Becomes read-only after creation; edit via ProposalContract.
CancellationDate
string
Cancellation date for the initial contract. Becomes read-only after creation; edit via ProposalContract.
ExpirationDate
string
Proposal expiration date. Becomes read-only after creation; edit via ProposalContract.
DiscountCodeId
integer
Discount Code Id.
StartDateLocal
string
Start Date Local.
SentOnLocal
string
Sent On Local.
DoNotIssueInvoice
boolean
If true, the first invoice is not issued automatically when the proposal is accepted.

Code Examples

curl -X POST \
  "https://spaces.nexudus.com/api/billing/proposals" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "IssuedById": 0,
    "ResponsibleId": 0,
    "CoworkerId": 0,
    "Reference": "",
    "TariffId": 0,
    "BillingDay": 0,
    "Quantity": 0
}'

Response

200

Status
integer
HTTP status code. 200 on success.
Message
string
A human-readable message confirming the creation.
Value
object
Contains the Id of the newly created record.
WasSuccessful
boolean
true if the proposal was created successfully.
Errors
array
null on success.
Example Response
{
  "Status": 200,
  "Message": "Proposal was successfully created.",
  "Value": {
    "Id": 87654321
  },
  "OpenInDialog": false,
  "OpenInWindow": false,
  "RedirectURL": null,
  "JavaScript": null,
  "UpdatedOn": "2025-01-15T10:30:00Z",
  "UpdatedBy": "admin@example.com",
  "Errors": null,
  "WasSuccessful": true
}

400

Message
string
A summary of the validation error(s), in the format PropertyName: error message.
Value
any
null on validation failure.
Errors
object[]
Array of validation errors.
WasSuccessful
boolean
false when the request fails validation.
Example Response
{
  "Message": "Reference: is a required field",
  "Value": null,
  "Errors": [
    {
      "AttemptedValue": null,
      "Message": "is a required field",
      "PropertyName": "Reference"
    }
  ],
  "WasSuccessful": false
}