# Approving a quote via API

**URL:** <https://community.hubspot.com/t/approving-a-quote-via-api/133506>\
**Category:** APIs & Integrations\
**Tags:** timeline-and-extensions-apis\
**Created:** [May 28, 2025, 12:54pm UTC](https://community.hubspot.com/t/approving-a-quote-via-api/133506 "2025-05-28T12:54:20Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![aalonso88](https://avatars.discourse-cdn.com/v4/letter/a/3ec8ea/32.png) [@aalonso88](https://community.hubspot.com/u/aalonso88)\
**Post date:** [May 28, 2025, 12:54pm UTC](https://community.hubspot.com/t/approving-a-quote-via-api/133506/1 "2025-05-28T12:54:20Z")

</div>

Hi,

I’m working with the HubSpot API to programmatically create quotes. I’m able to successfully create a quote in DRAFT status, including all relevant details: line items, template, contact, company, sender, and comments.

Once created, the quote remains in DRAFT status and needs to be approved manually through the HubSpot web interface.

I would like to automate this final step via the API. To that end, I’ve tried updating the quote’s status using the following payload:

const payload = { properties: { hs\_status: “APPROVAL\_NOT\_NEEDED”, // also tried “APPROVED” hs\_template: “MODERN” // included as requested by the request } };

And the PATCH request:

UrlFetchApp.fetch(`[https://api.hubapi.com/crm/v3/objects/quotes/${quoteId}\`](https://api.hubapi.com/crm/v3/objects/quotes/$%7BquoteId%7D%5C%60), { method: “patch”, contentType: “application/json”, headers: { Authorization: `Bearer ${token}` }, payload: JSON.stringify(payload), muteHttpExceptions: true });

After this call, the quote status changes to **“Publishing Quote”** , which displays as yellow in the UI. However:

- The quote remains locked and uneditable.
- No public link is generated, even after waiting more than 8 hours.
- The quote cannot be accessed—only deleted.
- The UI mentions a public link will be generated within 15 minutes, but it never appears.

My goal is to move the quote beyond DRAFT and obtain a **public quote URL** and **PDF download link** via the API.

**Question:**  
How can I programmatically move a quote from DRAFT to a fully published state and retrieve the public link and PDF?

Thank you very much for your support.

---

<div class="post-metadata">

**Author:** ![HubDoPete](https://d10pqhm3lwygmk.cloudfront.net/user_avatar/community.hubspot.com/hubdopete/32/106153_2.png) [@HubDoPete](https://community.hubspot.com/u/HubDoPete)\
**Post date:** [May 28, 2025, 2:23pm UTC](https://community.hubspot.com/t/approving-a-quote-via-api/133506/2 "2025-05-28T14:23:08Z")

</div>

Hi Antonio,

I recommend that instead of creating the quote in DRAFT status (which is part of the approval flow), create it with the starting status of “APPROVAL\_NOT\_NEEDED”

best, Pete.

---

<div class="post-metadata">

**Author:** ![aalonso88](https://avatars.discourse-cdn.com/v4/letter/a/3ec8ea/32.png) [@aalonso88](https://community.hubspot.com/u/aalonso88)\
**Post date:** [June 2, 2025, 5:39am UTC](https://community.hubspot.com/t/approving-a-quote-via-api/133506/3 "2025-06-02T05:39:29Z")

</div>

Hello Pete, thanks for the suggestion.

I tried but it doesn’t work. For creating the quote I’m using the payload as follows:

const quotePayload = {

properties: {

hs\_title: `Title`,

hs\_expiration\_date: expiration\_date,

hs\_comments: comments,

hs\_status: “APPROVAL\_NOT\_NEEDED”,

hs\_template\_type: “QUOTE”,

hs\_proposal\_template\_path: “@hubspot/cms-quotes-theme/templates/modern.html”,

hs\_template: ‘MODERN’,

hs\_language: “es”,

hs\_sender\_firstname: ‘XXXXXXX’,

hs\_sender\_lastname: ‘xxxxxxxx’,

hs\_sender\_jobtitle: ‘Account Manager’,

hs\_currency : ‘EUR’

}

};

and the quote is not created. It works with hs\_status = ‘DRAFT’

Moreover, after creating the quote:

1. I associate the quote to the deal

2. I associate receiver contact to the quote

3. I associate receiver company to the quote

4. I associate template to the quote.

All these steps are possible with ‘DRAFT’ status. Are these possible setting ‘APPROVAL\_NOT\_NEEDED’?

Thank you very much.
