Get Quote
curl --request GET \
--url https://qwoty.app/api/quote/{id} \
--header 'Authorization: <authorization>'import requests
url = "https://qwoty.app/api/quote/{id}"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://qwoty.app/api/quote/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://qwoty.app/api/quote/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://qwoty.app/api/quote/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://qwoty.app/api/quote/{id}")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://qwoty.app/api/quote/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"quote": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"number": "Q-2024-001",
"status": "sent",
"publish": true,
"issue_date": "2026-03-10T09:15:00.000Z",
"owner": {
"id": "2f4c94f0-a27d-45e3-8b5e-b4ad0c9f57c9",
"first_name": "Paul",
"last_name": "Martin",
"email": "paul@acme.com",
"identifiers": {
"crm": "CRM-7654321",
"erp": "ERP-7654321",
"accounting": "ACC-7654321"
}
},
"expiration_date": "2024-12-31T23:59:59Z",
"currency": "EUR",
"language": "en",
"title": "Q4 2024 Services Proposal",
"opportunity_id": "opp_123456",
"pdf_link": "https://storage.qwoty.io/project/path/to/quote.pdf?token=...&expires=1744233600",
"dealroom_link": "https://qwoty.app/dealroom/abc123",
"business_unit": {
"id": "bu_123",
"type": "company",
"brand": "Acme",
"name": "Acme Corporation",
"logo": {
"url": "https://storage.qwoty.io/logos/acme.png",
"alt": "Acme Logo"
},
"tax_ids": [
{
"code": "VAT",
"value": "FR12345678901"
}
],
"address": {
"line1": "123 Main Street",
"city": "Paris",
"postal_code": "75001",
"country": "France",
"country_code": "FR"
}
},
"customer": {
"id": "cust_456",
"type": "company",
"name": "Customer Inc.",
"identifiers": {
"crm": "CRM-1234567",
"erp": null,
"accounting": "ACC-1234567"
},
"contacts": [
{
"id": "contact_789",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@customer.com",
"role": "decision_maker"
}
],
"billing_address": {
"line1": "456 Customer Ave",
"line2": null,
"city": "Lyon",
"postal_code": "69001",
"country": "France",
"country_code": "FR"
},
"shipping_address": null,
"custom_fields": {
"industry": "SaaS",
"account_manager": "Sophie Dubois"
}
},
"pricing_table": {
"settings": {
"is_prices_hidden": false
},
"sections": [
{
"id": "section_001",
"type": "standard",
"rank": 1,
"name": "Professional Services",
"phases": [
{
"id": "period_001",
"name": "Year 1",
"rank": 1,
"line_items": [
{
"id": "item_001",
"rank": 1,
"product": {
"product_id": "prod_123",
"product_parent_id": "660e8400-e29b-41d4-a716-446655440001",
"reference": "CONS-001",
"name": "Consulting Services",
"unit_of_measure": "hour"
},
"quantity": 100,
"pricing": {
"model": "per_unit",
"list_price": 150.0,
"currency": "EUR"
},
"identifiers": {
"crm": null,
"erp": null,
"accounting": "ACC-123"
},
"accounting": {
"ledger_account": "4010"
},
"shipping": {
"weight": 1.5,
"length": null,
"width": null,
"height": null,
"weight_unit": "kg",
"length_unit": null,
"country_of_origin": "FR",
"harmonized_system_code": null
},
"custom_fields": { "warranty_months": 24 }
}
]
}
]
}
]
},
"summary": {
"one_off": {
"net_amount": 50000.0,
"tax_amount": 10000.0,
"total_amount": 60000.0
},
"recurring": [
{
"interval": "month",
"interval_count": 1,
"net_amount": 5000.0,
"tax_amount": 1000.0,
"total_amount": 6000.0
}
],
"metrics": {
"mrr": 5000.0,
"arr": 60000.0,
"tcv": 180000.0
}
},
"recipients": {
"signature_type": "restricted",
"signing_order": "parallel",
"signers": [
{
"rank": 1,
"name": "Michel Lee",
"email": "michel.lee@external.com",
"type": "external",
"status": "not_viewed"
}
],
"viewers": [
{
"name": "Emmanuel Laureau",
"email": "emmanuel.laureau@company.com",
"user_id": "usr_001",
"type": "internal",
"status": "not_viewed"
}
]
},
"custom_fields": {
"sales_channel": "inbound",
"contract_duration": 12
},
"metadata": {
"created_at": "2024-12-01T10:00:00Z",
"updated_at": "2024-12-15T14:30:00Z",
"template_id": "tmpl_123",
"workspace_id": "ws_123",
"organisation_id": "org_123"
}
}
}
}
Quotes
Get Quote
Retrieve the complete quote for a specific project
GET
/
api
/
quote
/
{id}
Get Quote
curl --request GET \
--url https://qwoty.app/api/quote/{id} \
--header 'Authorization: <authorization>'import requests
url = "https://qwoty.app/api/quote/{id}"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://qwoty.app/api/quote/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://qwoty.app/api/quote/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://qwoty.app/api/quote/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://qwoty.app/api/quote/{id}")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://qwoty.app/api/quote/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"quote": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"number": "Q-2024-001",
"status": "sent",
"publish": true,
"issue_date": "2026-03-10T09:15:00.000Z",
"owner": {
"id": "2f4c94f0-a27d-45e3-8b5e-b4ad0c9f57c9",
"first_name": "Paul",
"last_name": "Martin",
"email": "paul@acme.com",
"identifiers": {
"crm": "CRM-7654321",
"erp": "ERP-7654321",
"accounting": "ACC-7654321"
}
},
"expiration_date": "2024-12-31T23:59:59Z",
"currency": "EUR",
"language": "en",
"title": "Q4 2024 Services Proposal",
"opportunity_id": "opp_123456",
"pdf_link": "https://storage.qwoty.io/project/path/to/quote.pdf?token=...&expires=1744233600",
"dealroom_link": "https://qwoty.app/dealroom/abc123",
"business_unit": {
"id": "bu_123",
"type": "company",
"brand": "Acme",
"name": "Acme Corporation",
"logo": {
"url": "https://storage.qwoty.io/logos/acme.png",
"alt": "Acme Logo"
},
"tax_ids": [
{
"code": "VAT",
"value": "FR12345678901"
}
],
"address": {
"line1": "123 Main Street",
"city": "Paris",
"postal_code": "75001",
"country": "France",
"country_code": "FR"
}
},
"customer": {
"id": "cust_456",
"type": "company",
"name": "Customer Inc.",
"identifiers": {
"crm": "CRM-1234567",
"erp": null,
"accounting": "ACC-1234567"
},
"contacts": [
{
"id": "contact_789",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@customer.com",
"role": "decision_maker"
}
],
"billing_address": {
"line1": "456 Customer Ave",
"line2": null,
"city": "Lyon",
"postal_code": "69001",
"country": "France",
"country_code": "FR"
},
"shipping_address": null,
"custom_fields": {
"industry": "SaaS",
"account_manager": "Sophie Dubois"
}
},
"pricing_table": {
"settings": {
"is_prices_hidden": false
},
"sections": [
{
"id": "section_001",
"type": "standard",
"rank": 1,
"name": "Professional Services",
"phases": [
{
"id": "period_001",
"name": "Year 1",
"rank": 1,
"line_items": [
{
"id": "item_001",
"rank": 1,
"product": {
"product_id": "prod_123",
"product_parent_id": "660e8400-e29b-41d4-a716-446655440001",
"reference": "CONS-001",
"name": "Consulting Services",
"unit_of_measure": "hour"
},
"quantity": 100,
"pricing": {
"model": "per_unit",
"list_price": 150.0,
"currency": "EUR"
},
"identifiers": {
"crm": null,
"erp": null,
"accounting": "ACC-123"
},
"accounting": {
"ledger_account": "4010"
},
"shipping": {
"weight": 1.5,
"length": null,
"width": null,
"height": null,
"weight_unit": "kg",
"length_unit": null,
"country_of_origin": "FR",
"harmonized_system_code": null
},
"custom_fields": { "warranty_months": 24 }
}
]
}
]
}
]
},
"summary": {
"one_off": {
"net_amount": 50000.0,
"tax_amount": 10000.0,
"total_amount": 60000.0
},
"recurring": [
{
"interval": "month",
"interval_count": 1,
"net_amount": 5000.0,
"tax_amount": 1000.0,
"total_amount": 6000.0
}
],
"metrics": {
"mrr": 5000.0,
"arr": 60000.0,
"tcv": 180000.0
}
},
"recipients": {
"signature_type": "restricted",
"signing_order": "parallel",
"signers": [
{
"rank": 1,
"name": "Michel Lee",
"email": "michel.lee@external.com",
"type": "external",
"status": "not_viewed"
}
],
"viewers": [
{
"name": "Emmanuel Laureau",
"email": "emmanuel.laureau@company.com",
"user_id": "usr_001",
"type": "internal",
"status": "not_viewed"
}
]
},
"custom_fields": {
"sales_channel": "inbound",
"contract_duration": 12
},
"metadata": {
"created_at": "2024-12-01T10:00:00Z",
"updated_at": "2024-12-15T14:30:00Z",
"template_id": "tmpl_123",
"workspace_id": "ws_123",
"organisation_id": "org_123"
}
}
}
}
Authorization
string
required
Bearer token for authentication. Format:
Bearer qwoty_your_tokenPath Parameters
string
required
UUID of the project
Examples
curl https://qwoty.app/api/quote/550e8400-e29b-41d4-a716-446655440000 \
-H "Authorization: Bearer qwoty_your_token"
const id = '550e8400-e29b-41d4-a716-446655440000'
const response = await fetch(`https://qwoty.app/api/quote/${id}`, {
headers: {
Authorization: 'Bearer qwoty_your_token',
},
})
const data = await response.json()
import requests
id = '550e8400-e29b-41d4-a716-446655440000'
response = requests.get(
f'https://qwoty.app/api/quote/{id}',
headers={
'Authorization': 'Bearer qwoty_your_token'
}
)
data = response.json()
Response
boolean
Indicates if the request was successful
object
The quote data wrapper
Show Quote Object
Show Quote Object
object
Complete quote information
Show Quote Structure
Show Quote Structure
string
Unique quote identifier (UUID)
string
Human-readable quote number
string
Quote status (e.g., ‘draft’, ‘sent’, ‘accepted’)
boolean
Indicates whether the quote is currently published
string
First recipient send date (
email_sent_timestamp of the first sent recipient)object
string
ISO 8601 expiration date
string
Currency code (e.g., ‘EUR’, ‘USD’)
string
Language code (e.g., ‘en’, ‘fr’)
string
Quote title
string
Associated CRM opportunity ID
string | null
Pre-signed URL (valid 1 hour) pointing to the generated PDF.
null if no PDF has been generated yet for this quote (e.g. the quote has never been downloaded or signed).string
URL to customer dealroom
object
Business unit information including brand, address, logo, and tax IDs
object
Customer information including company details, contacts, billing and shipping addresses
Show Customer
Show Customer
string
Customer UUID
string
Entity type:
company or individualstring
Company or individual name
object
External system identifiers:
crm, erp, accountingarray
List of contacts with
id, first_name, last_name, email, roleobject
Billing address with
line1, line2, city, postal_code, country (full name), country_code (ISO 3166-1 alpha-2)object
Shipping address with
line1, line2, city, postal_code, country (full name), country_code (ISO 3166-1 alpha-2)object
Custom field values of the customer, keyed by the field
api_name. Every customer custom field of the workspace is present (null when not set) — same shape as GET /customers/{id}. Values are typed: string, number or ISO 8601 string.object
Complete pricing structure with sections, line items, and periods
Show Pricing Table
Show Pricing Table
object
Associated catalog data
object
Associated pricebook data
object
Markup configuration (enabled, percent)
object
Display settings (is_prices_hidden, etc.)
array
Array of quote sections with line items, organized by phases/periods.
Each line item includes:
product—product_id(variant),product_parent_id(parent product),reference,api_name,sku,name,description,product_type,unit_of_measure,unit_per_pack,categoriesidentifiers—crm,erp,accounting(external accounting ID string)accounting—{ ledger_account }(ledger account code;nullwhen empty)shipping—weight,length,width,height,weight_unit,length_unit,country_of_origin,harmonized_system_code(all keys always present;nullwhen empty)custom_fields— custom field values of the product, keyed by the fieldapi_name, typed by datatype (string, number or ISO 8601 string)
object
object
Line-level and global discounts applied
object
Sales tax configuration and amounts
object
Payment terms and installments
object
Accepted payment methods
object
Customer account balance information
object
Custom field values of the quote, keyed by the field
api_name. Values are typed by the field datatype (string, number or ISO 8601 string); null when not set.array
Content blocks for quote customization (text, images, etc.)
array
Associated contracts with signature status
object
Signature recipients grouped by
signers and viewers, with signature_type and signing_orderobject
Creation/update timestamps and context metadata
{
"success": true,
"data": {
"quote": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"number": "Q-2024-001",
"status": "sent",
"publish": true,
"issue_date": "2026-03-10T09:15:00.000Z",
"owner": {
"id": "2f4c94f0-a27d-45e3-8b5e-b4ad0c9f57c9",
"first_name": "Paul",
"last_name": "Martin",
"email": "paul@acme.com",
"identifiers": {
"crm": "CRM-7654321",
"erp": "ERP-7654321",
"accounting": "ACC-7654321"
}
},
"expiration_date": "2024-12-31T23:59:59Z",
"currency": "EUR",
"language": "en",
"title": "Q4 2024 Services Proposal",
"opportunity_id": "opp_123456",
"pdf_link": "https://storage.qwoty.io/project/path/to/quote.pdf?token=...&expires=1744233600",
"dealroom_link": "https://qwoty.app/dealroom/abc123",
"business_unit": {
"id": "bu_123",
"type": "company",
"brand": "Acme",
"name": "Acme Corporation",
"logo": {
"url": "https://storage.qwoty.io/logos/acme.png",
"alt": "Acme Logo"
},
"tax_ids": [
{
"code": "VAT",
"value": "FR12345678901"
}
],
"address": {
"line1": "123 Main Street",
"city": "Paris",
"postal_code": "75001",
"country": "France",
"country_code": "FR"
}
},
"customer": {
"id": "cust_456",
"type": "company",
"name": "Customer Inc.",
"identifiers": {
"crm": "CRM-1234567",
"erp": null,
"accounting": "ACC-1234567"
},
"contacts": [
{
"id": "contact_789",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@customer.com",
"role": "decision_maker"
}
],
"billing_address": {
"line1": "456 Customer Ave",
"line2": null,
"city": "Lyon",
"postal_code": "69001",
"country": "France",
"country_code": "FR"
},
"shipping_address": null,
"custom_fields": {
"industry": "SaaS",
"account_manager": "Sophie Dubois"
}
},
"pricing_table": {
"settings": {
"is_prices_hidden": false
},
"sections": [
{
"id": "section_001",
"type": "standard",
"rank": 1,
"name": "Professional Services",
"phases": [
{
"id": "period_001",
"name": "Year 1",
"rank": 1,
"line_items": [
{
"id": "item_001",
"rank": 1,
"product": {
"product_id": "prod_123",
"product_parent_id": "660e8400-e29b-41d4-a716-446655440001",
"reference": "CONS-001",
"name": "Consulting Services",
"unit_of_measure": "hour"
},
"quantity": 100,
"pricing": {
"model": "per_unit",
"list_price": 150.0,
"currency": "EUR"
},
"identifiers": {
"crm": null,
"erp": null,
"accounting": "ACC-123"
},
"accounting": {
"ledger_account": "4010"
},
"shipping": {
"weight": 1.5,
"length": null,
"width": null,
"height": null,
"weight_unit": "kg",
"length_unit": null,
"country_of_origin": "FR",
"harmonized_system_code": null
},
"custom_fields": { "warranty_months": 24 }
}
]
}
]
}
]
},
"summary": {
"one_off": {
"net_amount": 50000.0,
"tax_amount": 10000.0,
"total_amount": 60000.0
},
"recurring": [
{
"interval": "month",
"interval_count": 1,
"net_amount": 5000.0,
"tax_amount": 1000.0,
"total_amount": 6000.0
}
],
"metrics": {
"mrr": 5000.0,
"arr": 60000.0,
"tcv": 180000.0
}
},
"recipients": {
"signature_type": "restricted",
"signing_order": "parallel",
"signers": [
{
"rank": 1,
"name": "Michel Lee",
"email": "michel.lee@external.com",
"type": "external",
"status": "not_viewed"
}
],
"viewers": [
{
"name": "Emmanuel Laureau",
"email": "emmanuel.laureau@company.com",
"user_id": "usr_001",
"type": "internal",
"status": "not_viewed"
}
]
},
"custom_fields": {
"sales_channel": "inbound",
"contract_duration": 12
},
"metadata": {
"created_at": "2024-12-01T10:00:00Z",
"updated_at": "2024-12-15T14:30:00Z",
"template_id": "tmpl_123",
"workspace_id": "ws_123",
"organisation_id": "org_123"
}
}
}
}
Error Responses
{
"error": "Project not found"
}
{
"error": "Invalid or expired token"
}
{
"error": "Quote has not been generated for this project"
}
Notes
The quote endpoint returns a comprehensive structure including:- Seller & Customer: Complete company and contact information, including custom field values (
custom_fields) - Pricing Table: All products/services organized by sections and time periods
- Summary: One-off totals, recurring totals by interval, and metrics (
mrr,arr,tcv) - Discounts & Taxes: Applied discounts and tax calculations
- Content & Contracts: Customizable content blocks and signature-ready contracts
- Recipients: Signature recipients grouped by signers/viewers
- Display quotes in customer dealrooms
- Generate PDF documents
- Integrate with CRM systems
- Track quote metrics and performance
Last modified on October 28, 2026
Was this page helpful?

