ReDesk
NewProposals drafted by ReDesk AI in under four minutesSee what's new
Case studySunfield EPC cut feasibility turnaround from 3.4 days to 6 hoursRead the story
Pricing
Sign inSchedule a demo
Documentation

Build on the ReDesk stack

Guides, references and webhooks for every product. Pick the platform you are integrating with — the whole library follows.

Platform
ReDesk AI › Proposals

Proposals

A proposal is a versioned pricing document with the bill of materials attached. Each revision is immutable; accepting one locks the price on the project.

The proposal object

FieldTypeDescription
idstringUnique id, prefixed prp_.
projectstringThe project it prices.
versionintegerStarts at 1; every revision adds one.
statusenumdraft, sent, accepted, declined or expired.
amountintegerTotal in paise, taxes included.
currencystringISO 4217 code, e.g. inr.
valid_untiltimestampAfter this the proposal expires.
bomarrayLine items: SKU, quantity and unit price.
proposal object
{
  "id": "prp_5Tq1",
  "object": "proposal",
  "project": "prj_71Ka",
  "version": 2,
  "status": "sent",
  "amount": 214500000,
  "currency": "inr",
  "valid_until": "2026-08-31T18:29:59Z",
  "bom": [
    {
      "sku": "MOD-545-TOPCON",
      "quantity": 78,
      "unit_amount": 1420000
    },
    {
      "sku": "INV-40K-3PH",
      "quantity": 1,
      "unit_amount": 18500000
    }
  ]
}

Create a proposal

POST/v1/proposals

Prices a project. If the project already has a proposal, this creates the next version.

ParameterDescription
project
body · stringrequired
The project to price.
bom
body · arrayrequired
Line items: sku, quantity, unit_amount.
valid_days
body · integer
Days until it expires. Defaults to 30.
Request
curl -X POST https://api.redesk.ai/v1/proposals \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "project": "prj_71Ka",
    "bom": [
      {
        "sku": "MOD-545-TOPCON",
        "quantity": 78,
        "unit_amount": 1420000
      }
    ],
    "valid_days": 30
  }'
Response
{
  "id": "prp_5Tq1",
  "object": "proposal",
  "project": "prj_71Ka",
  "version": 2,
  "status": "sent",
  "amount": 214500000,
  "currency": "inr",
  "valid_until": "2026-08-31T18:29:59Z",
  "bom": [
    {
      "sku": "MOD-545-TOPCON",
      "quantity": 78,
      "unit_amount": 1420000
    },
    {
      "sku": "INV-40K-3PH",
      "quantity": 1,
      "unit_amount": 18500000
    }
  ]
}

Retrieve a proposal

GET/v1/proposals/{id}

Fetch one proposal version.

ParameterDescription
id
path · stringrequired
The proposal's id.
Request
curl https://api.redesk.ai/v1/proposals/prp_5Tq1 \
  -H "Authorization: Bearer sk_test_..."
Response
{
  "id": "prp_5Tq1",
  "object": "proposal",
  "project": "prj_71Ka",
  "version": 2,
  "status": "sent",
  "amount": 214500000,
  "currency": "inr",
  "valid_until": "2026-08-31T18:29:59Z",
  "bom": [
    {
      "sku": "MOD-545-TOPCON",
      "quantity": 78,
      "unit_amount": 1420000
    },
    {
      "sku": "INV-40K-3PH",
      "quantity": 1,
      "unit_amount": 18500000
    }
  ]
}

Accept a proposal

POST/v1/proposals/{id}/accept

Records the customer's acceptance and moves the project to approval. Returns 409 if the proposal expired or a newer version exists.

ParameterDescription
id
path · stringrequired
The proposal's id.
accepted_by
body · stringrequired
Name of the person who accepted.
Request
curl -X POST https://api.redesk.ai/v1/proposals/prp_5Tq1/accept \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "accepted_by": "Anita Kulkarni"
  }'
Response
{
  "id": "prp_5Tq1",
  "object": "proposal",
  "project": "prj_71Ka",
  "version": 2,
  "status": "accepted",
  "amount": 214500000,
  "currency": "inr",
  "valid_until": "2026-08-31T18:29:59Z",
  "bom": [
    {
      "sku": "MOD-545-TOPCON",
      "quantity": 78,
      "unit_amount": 1420000
    },
    {
      "sku": "INV-40K-3PH",
      "quantity": 1,
      "unit_amount": 18500000
    }
  ]
}