curl --request PATCH \
--url https://api.dualentry.com/public/v3-alpha/quotes/{record_number}/ \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"valid_until": "2023-12-25",
"company_id": 123,
"customer_id": 123,
"name": "<string>",
"email": "<string>",
"currency_iso_4217_code": "<string>",
"term_id": 123,
"memo": "<string>",
"close_date": "2023-12-25",
"contract_start_date": "2023-12-25",
"number_of_months": 2,
"contract_end_date": "2023-12-25",
"contract_legal_terms": "<string>",
"document_total_rows": [],
"document_year_by_year": true,
"billing_address": {
"street": "<string>",
"city": "<string>",
"postal_code": "<string>",
"state": "",
"country": "",
"second_line": "",
"name": "<string>"
},
"shipping_address": {
"street": "<string>",
"city": "<string>",
"postal_code": "<string>",
"state": "",
"country": "",
"second_line": "",
"name": "<string>"
},
"items": [
{
"item_id": 123,
"quantity": 1,
"rate": 123,
"position": 1,
"discount_value": 123,
"tax": {
"code": "<string>",
"rate": 123,
"amount": 123,
"is_taxable": true,
"tax_exempt_amount": 123,
"vat_rate_id": 123,
"gst_tax_rate_id": 123,
"tax_metadata": {}
},
"id": 123,
"memo": "",
"billing_frequency": "one_time",
"billing_interval": 1,
"billing_start_date": "2023-12-25",
"billing_end_date": "2023-12-25",
"ramp_group_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"recipients": [
{
"id": 123,
"organization_user_id": 123,
"customer_id": 123,
"name": "",
"email": "",
"is_signer": true,
"signing_order": 2,
"position": 1
}
]
}
'import requests
url = "https://api.dualentry.com/public/v3-alpha/quotes/{record_number}/"
payload = {
"valid_until": "2023-12-25",
"company_id": 123,
"customer_id": 123,
"name": "<string>",
"email": "<string>",
"currency_iso_4217_code": "<string>",
"term_id": 123,
"memo": "<string>",
"close_date": "2023-12-25",
"contract_start_date": "2023-12-25",
"number_of_months": 2,
"contract_end_date": "2023-12-25",
"contract_legal_terms": "<string>",
"document_total_rows": [],
"document_year_by_year": True,
"billing_address": {
"street": "<string>",
"city": "<string>",
"postal_code": "<string>",
"state": "",
"country": "",
"second_line": "",
"name": "<string>"
},
"shipping_address": {
"street": "<string>",
"city": "<string>",
"postal_code": "<string>",
"state": "",
"country": "",
"second_line": "",
"name": "<string>"
},
"items": [
{
"item_id": 123,
"quantity": 1,
"rate": 123,
"position": 1,
"discount_value": 123,
"tax": {
"code": "<string>",
"rate": 123,
"amount": 123,
"is_taxable": True,
"tax_exempt_amount": 123,
"vat_rate_id": 123,
"gst_tax_rate_id": 123,
"tax_metadata": {}
},
"id": 123,
"memo": "",
"billing_frequency": "one_time",
"billing_interval": 1,
"billing_start_date": "2023-12-25",
"billing_end_date": "2023-12-25",
"ramp_group_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"recipients": [
{
"id": 123,
"organization_user_id": 123,
"customer_id": 123,
"name": "",
"email": "",
"is_signer": True,
"signing_order": 2,
"position": 1
}
]
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
valid_until: '2023-12-25',
company_id: 123,
customer_id: 123,
name: '<string>',
email: '<string>',
currency_iso_4217_code: '<string>',
term_id: 123,
memo: '<string>',
close_date: '2023-12-25',
contract_start_date: '2023-12-25',
number_of_months: 2,
contract_end_date: '2023-12-25',
contract_legal_terms: '<string>',
document_total_rows: [],
document_year_by_year: true,
billing_address: {
street: '<string>',
city: '<string>',
postal_code: '<string>',
state: '',
country: '',
second_line: '',
name: '<string>'
},
shipping_address: {
street: '<string>',
city: '<string>',
postal_code: '<string>',
state: '',
country: '',
second_line: '',
name: '<string>'
},
items: [
{
item_id: 123,
quantity: 1,
rate: 123,
position: 1,
discount_value: 123,
tax: {
code: '<string>',
rate: 123,
amount: 123,
is_taxable: true,
tax_exempt_amount: 123,
vat_rate_id: 123,
gst_tax_rate_id: 123,
tax_metadata: {}
},
id: 123,
memo: '',
billing_frequency: 'one_time',
billing_interval: 1,
billing_start_date: '2023-12-25',
billing_end_date: '2023-12-25',
ramp_group_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
}
],
recipients: [
{
id: 123,
organization_user_id: 123,
customer_id: 123,
name: '',
email: '',
is_signer: true,
signing_order: 2,
position: 1
}
]
})
};
fetch('https://api.dualentry.com/public/v3-alpha/quotes/{record_number}/', 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://api.dualentry.com/public/v3-alpha/quotes/{record_number}/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'valid_until' => '2023-12-25',
'company_id' => 123,
'customer_id' => 123,
'name' => '<string>',
'email' => '<string>',
'currency_iso_4217_code' => '<string>',
'term_id' => 123,
'memo' => '<string>',
'close_date' => '2023-12-25',
'contract_start_date' => '2023-12-25',
'number_of_months' => 2,
'contract_end_date' => '2023-12-25',
'contract_legal_terms' => '<string>',
'document_total_rows' => [
],
'document_year_by_year' => true,
'billing_address' => [
'street' => '<string>',
'city' => '<string>',
'postal_code' => '<string>',
'state' => '',
'country' => '',
'second_line' => '',
'name' => '<string>'
],
'shipping_address' => [
'street' => '<string>',
'city' => '<string>',
'postal_code' => '<string>',
'state' => '',
'country' => '',
'second_line' => '',
'name' => '<string>'
],
'items' => [
[
'item_id' => 123,
'quantity' => 1,
'rate' => 123,
'position' => 1,
'discount_value' => 123,
'tax' => [
'code' => '<string>',
'rate' => 123,
'amount' => 123,
'is_taxable' => true,
'tax_exempt_amount' => 123,
'vat_rate_id' => 123,
'gst_tax_rate_id' => 123,
'tax_metadata' => [
]
],
'id' => 123,
'memo' => '',
'billing_frequency' => 'one_time',
'billing_interval' => 1,
'billing_start_date' => '2023-12-25',
'billing_end_date' => '2023-12-25',
'ramp_group_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
],
'recipients' => [
[
'id' => 123,
'organization_user_id' => 123,
'customer_id' => 123,
'name' => '',
'email' => '',
'is_signer' => true,
'signing_order' => 2,
'position' => 1
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.dualentry.com/public/v3-alpha/quotes/{record_number}/"
payload := strings.NewReader("{\n \"valid_until\": \"2023-12-25\",\n \"company_id\": 123,\n \"customer_id\": 123,\n \"name\": \"<string>\",\n \"email\": \"<string>\",\n \"currency_iso_4217_code\": \"<string>\",\n \"term_id\": 123,\n \"memo\": \"<string>\",\n \"close_date\": \"2023-12-25\",\n \"contract_start_date\": \"2023-12-25\",\n \"number_of_months\": 2,\n \"contract_end_date\": \"2023-12-25\",\n \"contract_legal_terms\": \"<string>\",\n \"document_total_rows\": [],\n \"document_year_by_year\": true,\n \"billing_address\": {\n \"street\": \"<string>\",\n \"city\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"state\": \"\",\n \"country\": \"\",\n \"second_line\": \"\",\n \"name\": \"<string>\"\n },\n \"shipping_address\": {\n \"street\": \"<string>\",\n \"city\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"state\": \"\",\n \"country\": \"\",\n \"second_line\": \"\",\n \"name\": \"<string>\"\n },\n \"items\": [\n {\n \"item_id\": 123,\n \"quantity\": 1,\n \"rate\": 123,\n \"position\": 1,\n \"discount_value\": 123,\n \"tax\": {\n \"code\": \"<string>\",\n \"rate\": 123,\n \"amount\": 123,\n \"is_taxable\": true,\n \"tax_exempt_amount\": 123,\n \"vat_rate_id\": 123,\n \"gst_tax_rate_id\": 123,\n \"tax_metadata\": {}\n },\n \"id\": 123,\n \"memo\": \"\",\n \"billing_frequency\": \"one_time\",\n \"billing_interval\": 1,\n \"billing_start_date\": \"2023-12-25\",\n \"billing_end_date\": \"2023-12-25\",\n \"ramp_group_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"recipients\": [\n {\n \"id\": 123,\n \"organization_user_id\": 123,\n \"customer_id\": 123,\n \"name\": \"\",\n \"email\": \"\",\n \"is_signer\": true,\n \"signing_order\": 2,\n \"position\": 1\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.dualentry.com/public/v3-alpha/quotes/{record_number}/")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"valid_until\": \"2023-12-25\",\n \"company_id\": 123,\n \"customer_id\": 123,\n \"name\": \"<string>\",\n \"email\": \"<string>\",\n \"currency_iso_4217_code\": \"<string>\",\n \"term_id\": 123,\n \"memo\": \"<string>\",\n \"close_date\": \"2023-12-25\",\n \"contract_start_date\": \"2023-12-25\",\n \"number_of_months\": 2,\n \"contract_end_date\": \"2023-12-25\",\n \"contract_legal_terms\": \"<string>\",\n \"document_total_rows\": [],\n \"document_year_by_year\": true,\n \"billing_address\": {\n \"street\": \"<string>\",\n \"city\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"state\": \"\",\n \"country\": \"\",\n \"second_line\": \"\",\n \"name\": \"<string>\"\n },\n \"shipping_address\": {\n \"street\": \"<string>\",\n \"city\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"state\": \"\",\n \"country\": \"\",\n \"second_line\": \"\",\n \"name\": \"<string>\"\n },\n \"items\": [\n {\n \"item_id\": 123,\n \"quantity\": 1,\n \"rate\": 123,\n \"position\": 1,\n \"discount_value\": 123,\n \"tax\": {\n \"code\": \"<string>\",\n \"rate\": 123,\n \"amount\": 123,\n \"is_taxable\": true,\n \"tax_exempt_amount\": 123,\n \"vat_rate_id\": 123,\n \"gst_tax_rate_id\": 123,\n \"tax_metadata\": {}\n },\n \"id\": 123,\n \"memo\": \"\",\n \"billing_frequency\": \"one_time\",\n \"billing_interval\": 1,\n \"billing_start_date\": \"2023-12-25\",\n \"billing_end_date\": \"2023-12-25\",\n \"ramp_group_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"recipients\": [\n {\n \"id\": 123,\n \"organization_user_id\": 123,\n \"customer_id\": 123,\n \"name\": \"\",\n \"email\": \"\",\n \"is_signer\": true,\n \"signing_order\": 2,\n \"position\": 1\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dualentry.com/public/v3-alpha/quotes/{record_number}/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"valid_until\": \"2023-12-25\",\n \"company_id\": 123,\n \"customer_id\": 123,\n \"name\": \"<string>\",\n \"email\": \"<string>\",\n \"currency_iso_4217_code\": \"<string>\",\n \"term_id\": 123,\n \"memo\": \"<string>\",\n \"close_date\": \"2023-12-25\",\n \"contract_start_date\": \"2023-12-25\",\n \"number_of_months\": 2,\n \"contract_end_date\": \"2023-12-25\",\n \"contract_legal_terms\": \"<string>\",\n \"document_total_rows\": [],\n \"document_year_by_year\": true,\n \"billing_address\": {\n \"street\": \"<string>\",\n \"city\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"state\": \"\",\n \"country\": \"\",\n \"second_line\": \"\",\n \"name\": \"<string>\"\n },\n \"shipping_address\": {\n \"street\": \"<string>\",\n \"city\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"state\": \"\",\n \"country\": \"\",\n \"second_line\": \"\",\n \"name\": \"<string>\"\n },\n \"items\": [\n {\n \"item_id\": 123,\n \"quantity\": 1,\n \"rate\": 123,\n \"position\": 1,\n \"discount_value\": 123,\n \"tax\": {\n \"code\": \"<string>\",\n \"rate\": 123,\n \"amount\": 123,\n \"is_taxable\": true,\n \"tax_exempt_amount\": 123,\n \"vat_rate_id\": 123,\n \"gst_tax_rate_id\": 123,\n \"tax_metadata\": {}\n },\n \"id\": 123,\n \"memo\": \"\",\n \"billing_frequency\": \"one_time\",\n \"billing_interval\": 1,\n \"billing_start_date\": \"2023-12-25\",\n \"billing_end_date\": \"2023-12-25\",\n \"ramp_group_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"recipients\": [\n {\n \"id\": 123,\n \"organization_user_id\": 123,\n \"customer_id\": 123,\n \"name\": \"\",\n \"email\": \"\",\n \"is_signer\": true,\n \"signing_order\": 2,\n \"position\": 1\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"bill_to_address": "<string>",
"ship_to_address": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"id": 123,
"number": 123,
"record_status": "draft",
"valid_until": "2023-12-25",
"company_id": 123,
"company_name": "<string>",
"company_currency": "<string>",
"customer_id": 123,
"customer_name": "<string>",
"name": "<string>",
"email": "<string>",
"currency_iso_4217_code": "<string>",
"term_id": 123,
"term_name": "<string>",
"memo": "<string>",
"close_date": "2023-12-25",
"contract_start_date": "2023-12-25",
"contract_end_type": "after",
"number_of_months": 123,
"contract_end_date": "2023-12-25",
"contract_legal_terms": "<string>",
"sent_at": "2023-11-07T05:31:56Z",
"document_headline_total": "tcv",
"document_total_rows": [
"one_time"
],
"document_year_by_year": true,
"items": [
{
"id": 123,
"item_id": 123,
"item_name": "<string>",
"quantity": "<string>",
"rate": "<string>",
"position": 123,
"memo": "<string>",
"billing_frequency": "one_time",
"billing_interval": 123,
"billing_start_date": "2023-12-25",
"billing_end_date": "2023-12-25",
"service_start_date": "2023-12-25",
"service_end_date": "2023-12-25",
"periods_in_term": 123,
"ramp_group_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"net_amount": "<string>",
"tax_amount": "<string>",
"gross_amount": "<string>",
"amount": "<string>",
"discount_amount": "<string>",
"line_tcv": "<string>",
"item_type": "<string>",
"hsn_sac_code": "<string>",
"discount_type": "PERCENTAGE",
"discount_value": "<string>",
"tax": {
"code": "<string>",
"rate": "<string>",
"amount": "<string>",
"is_taxable": true,
"tax_exempt_amount": "<string>",
"vat_rate_id": 123,
"gst_tax_rate_id": 123,
"tax_metadata": {},
"tax_components": [
{
"component_type": "CGST",
"rate": "<string>",
"amount": "<string>",
"position": 123,
"region": "<string>"
}
],
"amount_with_tax": "<string>",
"rate_name": "<string>",
"rate_description": "<string>",
"rate_type": "<string>",
"tax_treatment": "<string>",
"valid_to": "2023-12-25"
}
}
],
"recipients": [
{
"id": 123,
"side": "company",
"organization_user_id": 123,
"customer_id": 123,
"name": "<string>",
"email": "<string>",
"is_signer": true,
"signing_order": 123,
"position": 123
}
],
"subtotal": "<string>",
"discount_total": "<string>",
"tax_total": "<string>",
"amount": "<string>",
"contract_value": "<string>",
"totals": {
"one_time": {
"subtotal": "<string>",
"discount_total": "<string>",
"tax_total": "<string>",
"total": "<string>"
},
"recurring": [
{
"subtotal": "<string>",
"discount_total": "<string>",
"tax_total": "<string>",
"total": "<string>",
"billing_frequency": "one_time",
"billing_interval": 123
}
],
"mrr": "<string>",
"arr": "<string>",
"first_invoice_amount": "<string>",
"first_year_value": "<string>",
"tcv": "<string>",
"initial_term_tcv": "<string>",
"years": [
{
"year": 123,
"start_date": "2023-12-25",
"end_date": "2023-12-25",
"total": "<string>"
}
]
},
"billing_address": {
"street": "<string>",
"city": "<string>",
"postal_code": "<string>",
"state": "",
"country": "",
"second_line": "",
"name": "<string>"
},
"shipping_address": {
"street": "<string>",
"city": "<string>",
"postal_code": "<string>",
"state": "",
"country": "",
"second_line": "",
"name": "<string>"
},
"completed_approvals_count": 0,
"total_approvals_count": 0,
"workflow_status": "<string>",
"pending_approvers_count": 0,
"send_status": "draft",
"can_send": false,
"approval_info": {
"workflow_name": "<string>",
"workflow_version": 123,
"step_name": "<string>",
"current_substep": 123,
"substeps": [
{
"order": 123,
"status": "completed",
"approve_condition": "any",
"approvers": [
{
"id": 123,
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"full_name": "<string>",
"avatar_url": "<string>"
}
],
"approved_by": [
{
"id": 123,
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"full_name": "<string>",
"avatar_url": "<string>"
}
],
"rejected_by": [
{
"id": 123,
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"full_name": "<string>",
"avatar_url": "<string>"
}
]
}
]
},
"approval_chain": {
"workflow_name": "<string>",
"workflow_version": 123,
"steps": [
{
"order": 123,
"name": "<string>",
"status": "completed",
"approve_condition": "any",
"substeps": [
{
"order": 123,
"status": "completed",
"approve_condition": "any",
"approvers": [
{
"id": 123,
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"full_name": "<string>",
"avatar_url": "<string>"
}
],
"approved_by": [
{
"id": 123,
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"full_name": "<string>",
"avatar_url": "<string>"
}
],
"rejected_by": [
{
"id": 123,
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"full_name": "<string>",
"avatar_url": "<string>"
}
]
}
],
"approvers": [
{
"id": 123,
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"full_name": "<string>",
"avatar_url": "<string>"
}
],
"approved_by": [
{
"id": 123,
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"full_name": "<string>",
"avatar_url": "<string>"
}
],
"rejected_by": [
{
"id": 123,
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"full_name": "<string>",
"avatar_url": "<string>"
}
]
}
]
},
"bank_match_status": "<string>",
"code": "<string>",
"created_by": {
"actor_type": "<string>",
"email": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
},
"updated_by": {
"actor_type": "<string>",
"email": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"errors": {},
"success": false,
"error_code": "<string>",
"error_reason": "<string>"
}{
"errors": {},
"success": false,
"error_code": "<string>",
"error_reason": "<string>"
}{
"errors": {},
"success": false,
"error_code": "<string>",
"error_reason": "<string>"
}{
"errors": {},
"success": false,
"error_code": "<string>",
"error_reason": "<string>"
}Update Quote record (partial)
Partially update an existing Quote record. Send only the fields you want to change — anything you don’t send stays as it is. Updates are subject to the same constraints as the full update endpoint: period locks, payment-applied restrictions, and approval-workflow rules apply.
curl --request PATCH \
--url https://api.dualentry.com/public/v3-alpha/quotes/{record_number}/ \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"valid_until": "2023-12-25",
"company_id": 123,
"customer_id": 123,
"name": "<string>",
"email": "<string>",
"currency_iso_4217_code": "<string>",
"term_id": 123,
"memo": "<string>",
"close_date": "2023-12-25",
"contract_start_date": "2023-12-25",
"number_of_months": 2,
"contract_end_date": "2023-12-25",
"contract_legal_terms": "<string>",
"document_total_rows": [],
"document_year_by_year": true,
"billing_address": {
"street": "<string>",
"city": "<string>",
"postal_code": "<string>",
"state": "",
"country": "",
"second_line": "",
"name": "<string>"
},
"shipping_address": {
"street": "<string>",
"city": "<string>",
"postal_code": "<string>",
"state": "",
"country": "",
"second_line": "",
"name": "<string>"
},
"items": [
{
"item_id": 123,
"quantity": 1,
"rate": 123,
"position": 1,
"discount_value": 123,
"tax": {
"code": "<string>",
"rate": 123,
"amount": 123,
"is_taxable": true,
"tax_exempt_amount": 123,
"vat_rate_id": 123,
"gst_tax_rate_id": 123,
"tax_metadata": {}
},
"id": 123,
"memo": "",
"billing_frequency": "one_time",
"billing_interval": 1,
"billing_start_date": "2023-12-25",
"billing_end_date": "2023-12-25",
"ramp_group_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"recipients": [
{
"id": 123,
"organization_user_id": 123,
"customer_id": 123,
"name": "",
"email": "",
"is_signer": true,
"signing_order": 2,
"position": 1
}
]
}
'import requests
url = "https://api.dualentry.com/public/v3-alpha/quotes/{record_number}/"
payload = {
"valid_until": "2023-12-25",
"company_id": 123,
"customer_id": 123,
"name": "<string>",
"email": "<string>",
"currency_iso_4217_code": "<string>",
"term_id": 123,
"memo": "<string>",
"close_date": "2023-12-25",
"contract_start_date": "2023-12-25",
"number_of_months": 2,
"contract_end_date": "2023-12-25",
"contract_legal_terms": "<string>",
"document_total_rows": [],
"document_year_by_year": True,
"billing_address": {
"street": "<string>",
"city": "<string>",
"postal_code": "<string>",
"state": "",
"country": "",
"second_line": "",
"name": "<string>"
},
"shipping_address": {
"street": "<string>",
"city": "<string>",
"postal_code": "<string>",
"state": "",
"country": "",
"second_line": "",
"name": "<string>"
},
"items": [
{
"item_id": 123,
"quantity": 1,
"rate": 123,
"position": 1,
"discount_value": 123,
"tax": {
"code": "<string>",
"rate": 123,
"amount": 123,
"is_taxable": True,
"tax_exempt_amount": 123,
"vat_rate_id": 123,
"gst_tax_rate_id": 123,
"tax_metadata": {}
},
"id": 123,
"memo": "",
"billing_frequency": "one_time",
"billing_interval": 1,
"billing_start_date": "2023-12-25",
"billing_end_date": "2023-12-25",
"ramp_group_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"recipients": [
{
"id": 123,
"organization_user_id": 123,
"customer_id": 123,
"name": "",
"email": "",
"is_signer": True,
"signing_order": 2,
"position": 1
}
]
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
valid_until: '2023-12-25',
company_id: 123,
customer_id: 123,
name: '<string>',
email: '<string>',
currency_iso_4217_code: '<string>',
term_id: 123,
memo: '<string>',
close_date: '2023-12-25',
contract_start_date: '2023-12-25',
number_of_months: 2,
contract_end_date: '2023-12-25',
contract_legal_terms: '<string>',
document_total_rows: [],
document_year_by_year: true,
billing_address: {
street: '<string>',
city: '<string>',
postal_code: '<string>',
state: '',
country: '',
second_line: '',
name: '<string>'
},
shipping_address: {
street: '<string>',
city: '<string>',
postal_code: '<string>',
state: '',
country: '',
second_line: '',
name: '<string>'
},
items: [
{
item_id: 123,
quantity: 1,
rate: 123,
position: 1,
discount_value: 123,
tax: {
code: '<string>',
rate: 123,
amount: 123,
is_taxable: true,
tax_exempt_amount: 123,
vat_rate_id: 123,
gst_tax_rate_id: 123,
tax_metadata: {}
},
id: 123,
memo: '',
billing_frequency: 'one_time',
billing_interval: 1,
billing_start_date: '2023-12-25',
billing_end_date: '2023-12-25',
ramp_group_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
}
],
recipients: [
{
id: 123,
organization_user_id: 123,
customer_id: 123,
name: '',
email: '',
is_signer: true,
signing_order: 2,
position: 1
}
]
})
};
fetch('https://api.dualentry.com/public/v3-alpha/quotes/{record_number}/', 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://api.dualentry.com/public/v3-alpha/quotes/{record_number}/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'valid_until' => '2023-12-25',
'company_id' => 123,
'customer_id' => 123,
'name' => '<string>',
'email' => '<string>',
'currency_iso_4217_code' => '<string>',
'term_id' => 123,
'memo' => '<string>',
'close_date' => '2023-12-25',
'contract_start_date' => '2023-12-25',
'number_of_months' => 2,
'contract_end_date' => '2023-12-25',
'contract_legal_terms' => '<string>',
'document_total_rows' => [
],
'document_year_by_year' => true,
'billing_address' => [
'street' => '<string>',
'city' => '<string>',
'postal_code' => '<string>',
'state' => '',
'country' => '',
'second_line' => '',
'name' => '<string>'
],
'shipping_address' => [
'street' => '<string>',
'city' => '<string>',
'postal_code' => '<string>',
'state' => '',
'country' => '',
'second_line' => '',
'name' => '<string>'
],
'items' => [
[
'item_id' => 123,
'quantity' => 1,
'rate' => 123,
'position' => 1,
'discount_value' => 123,
'tax' => [
'code' => '<string>',
'rate' => 123,
'amount' => 123,
'is_taxable' => true,
'tax_exempt_amount' => 123,
'vat_rate_id' => 123,
'gst_tax_rate_id' => 123,
'tax_metadata' => [
]
],
'id' => 123,
'memo' => '',
'billing_frequency' => 'one_time',
'billing_interval' => 1,
'billing_start_date' => '2023-12-25',
'billing_end_date' => '2023-12-25',
'ramp_group_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
],
'recipients' => [
[
'id' => 123,
'organization_user_id' => 123,
'customer_id' => 123,
'name' => '',
'email' => '',
'is_signer' => true,
'signing_order' => 2,
'position' => 1
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.dualentry.com/public/v3-alpha/quotes/{record_number}/"
payload := strings.NewReader("{\n \"valid_until\": \"2023-12-25\",\n \"company_id\": 123,\n \"customer_id\": 123,\n \"name\": \"<string>\",\n \"email\": \"<string>\",\n \"currency_iso_4217_code\": \"<string>\",\n \"term_id\": 123,\n \"memo\": \"<string>\",\n \"close_date\": \"2023-12-25\",\n \"contract_start_date\": \"2023-12-25\",\n \"number_of_months\": 2,\n \"contract_end_date\": \"2023-12-25\",\n \"contract_legal_terms\": \"<string>\",\n \"document_total_rows\": [],\n \"document_year_by_year\": true,\n \"billing_address\": {\n \"street\": \"<string>\",\n \"city\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"state\": \"\",\n \"country\": \"\",\n \"second_line\": \"\",\n \"name\": \"<string>\"\n },\n \"shipping_address\": {\n \"street\": \"<string>\",\n \"city\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"state\": \"\",\n \"country\": \"\",\n \"second_line\": \"\",\n \"name\": \"<string>\"\n },\n \"items\": [\n {\n \"item_id\": 123,\n \"quantity\": 1,\n \"rate\": 123,\n \"position\": 1,\n \"discount_value\": 123,\n \"tax\": {\n \"code\": \"<string>\",\n \"rate\": 123,\n \"amount\": 123,\n \"is_taxable\": true,\n \"tax_exempt_amount\": 123,\n \"vat_rate_id\": 123,\n \"gst_tax_rate_id\": 123,\n \"tax_metadata\": {}\n },\n \"id\": 123,\n \"memo\": \"\",\n \"billing_frequency\": \"one_time\",\n \"billing_interval\": 1,\n \"billing_start_date\": \"2023-12-25\",\n \"billing_end_date\": \"2023-12-25\",\n \"ramp_group_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"recipients\": [\n {\n \"id\": 123,\n \"organization_user_id\": 123,\n \"customer_id\": 123,\n \"name\": \"\",\n \"email\": \"\",\n \"is_signer\": true,\n \"signing_order\": 2,\n \"position\": 1\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.dualentry.com/public/v3-alpha/quotes/{record_number}/")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"valid_until\": \"2023-12-25\",\n \"company_id\": 123,\n \"customer_id\": 123,\n \"name\": \"<string>\",\n \"email\": \"<string>\",\n \"currency_iso_4217_code\": \"<string>\",\n \"term_id\": 123,\n \"memo\": \"<string>\",\n \"close_date\": \"2023-12-25\",\n \"contract_start_date\": \"2023-12-25\",\n \"number_of_months\": 2,\n \"contract_end_date\": \"2023-12-25\",\n \"contract_legal_terms\": \"<string>\",\n \"document_total_rows\": [],\n \"document_year_by_year\": true,\n \"billing_address\": {\n \"street\": \"<string>\",\n \"city\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"state\": \"\",\n \"country\": \"\",\n \"second_line\": \"\",\n \"name\": \"<string>\"\n },\n \"shipping_address\": {\n \"street\": \"<string>\",\n \"city\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"state\": \"\",\n \"country\": \"\",\n \"second_line\": \"\",\n \"name\": \"<string>\"\n },\n \"items\": [\n {\n \"item_id\": 123,\n \"quantity\": 1,\n \"rate\": 123,\n \"position\": 1,\n \"discount_value\": 123,\n \"tax\": {\n \"code\": \"<string>\",\n \"rate\": 123,\n \"amount\": 123,\n \"is_taxable\": true,\n \"tax_exempt_amount\": 123,\n \"vat_rate_id\": 123,\n \"gst_tax_rate_id\": 123,\n \"tax_metadata\": {}\n },\n \"id\": 123,\n \"memo\": \"\",\n \"billing_frequency\": \"one_time\",\n \"billing_interval\": 1,\n \"billing_start_date\": \"2023-12-25\",\n \"billing_end_date\": \"2023-12-25\",\n \"ramp_group_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"recipients\": [\n {\n \"id\": 123,\n \"organization_user_id\": 123,\n \"customer_id\": 123,\n \"name\": \"\",\n \"email\": \"\",\n \"is_signer\": true,\n \"signing_order\": 2,\n \"position\": 1\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dualentry.com/public/v3-alpha/quotes/{record_number}/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"valid_until\": \"2023-12-25\",\n \"company_id\": 123,\n \"customer_id\": 123,\n \"name\": \"<string>\",\n \"email\": \"<string>\",\n \"currency_iso_4217_code\": \"<string>\",\n \"term_id\": 123,\n \"memo\": \"<string>\",\n \"close_date\": \"2023-12-25\",\n \"contract_start_date\": \"2023-12-25\",\n \"number_of_months\": 2,\n \"contract_end_date\": \"2023-12-25\",\n \"contract_legal_terms\": \"<string>\",\n \"document_total_rows\": [],\n \"document_year_by_year\": true,\n \"billing_address\": {\n \"street\": \"<string>\",\n \"city\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"state\": \"\",\n \"country\": \"\",\n \"second_line\": \"\",\n \"name\": \"<string>\"\n },\n \"shipping_address\": {\n \"street\": \"<string>\",\n \"city\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"state\": \"\",\n \"country\": \"\",\n \"second_line\": \"\",\n \"name\": \"<string>\"\n },\n \"items\": [\n {\n \"item_id\": 123,\n \"quantity\": 1,\n \"rate\": 123,\n \"position\": 1,\n \"discount_value\": 123,\n \"tax\": {\n \"code\": \"<string>\",\n \"rate\": 123,\n \"amount\": 123,\n \"is_taxable\": true,\n \"tax_exempt_amount\": 123,\n \"vat_rate_id\": 123,\n \"gst_tax_rate_id\": 123,\n \"tax_metadata\": {}\n },\n \"id\": 123,\n \"memo\": \"\",\n \"billing_frequency\": \"one_time\",\n \"billing_interval\": 1,\n \"billing_start_date\": \"2023-12-25\",\n \"billing_end_date\": \"2023-12-25\",\n \"ramp_group_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"recipients\": [\n {\n \"id\": 123,\n \"organization_user_id\": 123,\n \"customer_id\": 123,\n \"name\": \"\",\n \"email\": \"\",\n \"is_signer\": true,\n \"signing_order\": 2,\n \"position\": 1\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"bill_to_address": "<string>",
"ship_to_address": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"id": 123,
"number": 123,
"record_status": "draft",
"valid_until": "2023-12-25",
"company_id": 123,
"company_name": "<string>",
"company_currency": "<string>",
"customer_id": 123,
"customer_name": "<string>",
"name": "<string>",
"email": "<string>",
"currency_iso_4217_code": "<string>",
"term_id": 123,
"term_name": "<string>",
"memo": "<string>",
"close_date": "2023-12-25",
"contract_start_date": "2023-12-25",
"contract_end_type": "after",
"number_of_months": 123,
"contract_end_date": "2023-12-25",
"contract_legal_terms": "<string>",
"sent_at": "2023-11-07T05:31:56Z",
"document_headline_total": "tcv",
"document_total_rows": [
"one_time"
],
"document_year_by_year": true,
"items": [
{
"id": 123,
"item_id": 123,
"item_name": "<string>",
"quantity": "<string>",
"rate": "<string>",
"position": 123,
"memo": "<string>",
"billing_frequency": "one_time",
"billing_interval": 123,
"billing_start_date": "2023-12-25",
"billing_end_date": "2023-12-25",
"service_start_date": "2023-12-25",
"service_end_date": "2023-12-25",
"periods_in_term": 123,
"ramp_group_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"net_amount": "<string>",
"tax_amount": "<string>",
"gross_amount": "<string>",
"amount": "<string>",
"discount_amount": "<string>",
"line_tcv": "<string>",
"item_type": "<string>",
"hsn_sac_code": "<string>",
"discount_type": "PERCENTAGE",
"discount_value": "<string>",
"tax": {
"code": "<string>",
"rate": "<string>",
"amount": "<string>",
"is_taxable": true,
"tax_exempt_amount": "<string>",
"vat_rate_id": 123,
"gst_tax_rate_id": 123,
"tax_metadata": {},
"tax_components": [
{
"component_type": "CGST",
"rate": "<string>",
"amount": "<string>",
"position": 123,
"region": "<string>"
}
],
"amount_with_tax": "<string>",
"rate_name": "<string>",
"rate_description": "<string>",
"rate_type": "<string>",
"tax_treatment": "<string>",
"valid_to": "2023-12-25"
}
}
],
"recipients": [
{
"id": 123,
"side": "company",
"organization_user_id": 123,
"customer_id": 123,
"name": "<string>",
"email": "<string>",
"is_signer": true,
"signing_order": 123,
"position": 123
}
],
"subtotal": "<string>",
"discount_total": "<string>",
"tax_total": "<string>",
"amount": "<string>",
"contract_value": "<string>",
"totals": {
"one_time": {
"subtotal": "<string>",
"discount_total": "<string>",
"tax_total": "<string>",
"total": "<string>"
},
"recurring": [
{
"subtotal": "<string>",
"discount_total": "<string>",
"tax_total": "<string>",
"total": "<string>",
"billing_frequency": "one_time",
"billing_interval": 123
}
],
"mrr": "<string>",
"arr": "<string>",
"first_invoice_amount": "<string>",
"first_year_value": "<string>",
"tcv": "<string>",
"initial_term_tcv": "<string>",
"years": [
{
"year": 123,
"start_date": "2023-12-25",
"end_date": "2023-12-25",
"total": "<string>"
}
]
},
"billing_address": {
"street": "<string>",
"city": "<string>",
"postal_code": "<string>",
"state": "",
"country": "",
"second_line": "",
"name": "<string>"
},
"shipping_address": {
"street": "<string>",
"city": "<string>",
"postal_code": "<string>",
"state": "",
"country": "",
"second_line": "",
"name": "<string>"
},
"completed_approvals_count": 0,
"total_approvals_count": 0,
"workflow_status": "<string>",
"pending_approvers_count": 0,
"send_status": "draft",
"can_send": false,
"approval_info": {
"workflow_name": "<string>",
"workflow_version": 123,
"step_name": "<string>",
"current_substep": 123,
"substeps": [
{
"order": 123,
"status": "completed",
"approve_condition": "any",
"approvers": [
{
"id": 123,
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"full_name": "<string>",
"avatar_url": "<string>"
}
],
"approved_by": [
{
"id": 123,
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"full_name": "<string>",
"avatar_url": "<string>"
}
],
"rejected_by": [
{
"id": 123,
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"full_name": "<string>",
"avatar_url": "<string>"
}
]
}
]
},
"approval_chain": {
"workflow_name": "<string>",
"workflow_version": 123,
"steps": [
{
"order": 123,
"name": "<string>",
"status": "completed",
"approve_condition": "any",
"substeps": [
{
"order": 123,
"status": "completed",
"approve_condition": "any",
"approvers": [
{
"id": 123,
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"full_name": "<string>",
"avatar_url": "<string>"
}
],
"approved_by": [
{
"id": 123,
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"full_name": "<string>",
"avatar_url": "<string>"
}
],
"rejected_by": [
{
"id": 123,
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"full_name": "<string>",
"avatar_url": "<string>"
}
]
}
],
"approvers": [
{
"id": 123,
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"full_name": "<string>",
"avatar_url": "<string>"
}
],
"approved_by": [
{
"id": 123,
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"full_name": "<string>",
"avatar_url": "<string>"
}
],
"rejected_by": [
{
"id": 123,
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"full_name": "<string>",
"avatar_url": "<string>"
}
]
}
]
},
"bank_match_status": "<string>",
"code": "<string>",
"created_by": {
"actor_type": "<string>",
"email": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
},
"updated_by": {
"actor_type": "<string>",
"email": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"errors": {},
"success": false,
"error_code": "<string>",
"error_reason": "<string>"
}{
"errors": {},
"success": false,
"error_code": "<string>",
"error_reason": "<string>"
}{
"errors": {},
"success": false,
"error_code": "<string>",
"error_reason": "<string>"
}{
"errors": {},
"success": false,
"error_code": "<string>",
"error_reason": "<string>"
}Authorizations
Headers
Optional. A unique value (a UUID works well) identifying this operation. If the request is repeated with the same key, the original response is replayed instead of the operation running again, so a retry cannot create a duplicate record. Results are replayable for 48 hours. Reusing a key with a different request body returns 422.
255Path Parameters
The number attribute of the record.
Body
Update only the fields you send; lines, recipients, and document settings you leave out keep their saved values.
Send {"record_status": "posted"} to submit a draft quote for approval. items and recipients replace the saved
list when sent, so send every line or recipient you want to keep, with its id.
128after, ongoing, date x >= 1tcv, annual, quarterly, monthly, first_year 7Total rows on the quote document. Monthly, quarterly and annual are the recurring value per period.
one_time, monthly, quarterly, annual, first_year, first_invoice, tcv Show child attributes
Show child attributes
Show child attributes
Show child attributes
items replaces the quote lines wholesale: send id to keep a line, and send its billing fields (billing_frequency, billing_interval, billing_start_date, billing_end_date, ramp_group_id) or it is saved as a one-time line that follows the quote contract dates. On recurring lines rate is the price per billing period.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
draft, posted, archived Response
OK
A quote with its lines, recipients (signing order included), send status, and totals by billing frequency.
Deprecated: send the structured billing_address / shipping_address instead.
Deprecated: send the structured billing_address / shipping_address instead.
draft, posted, archived after, ongoing, date tcv, annual, quarterly, monthly, first_year Total rows on the quote document. Monthly, quarterly and annual are the recurring value per period.
one_time, monthly, quarterly, annual, first_year, first_invoice, tcv Show child attributes
Show child attributes
Show child attributes
Show child attributes
Sum of quantity x rate before discounts and tax
^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$Sum of inline line discounts
^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$Sum of line tax
^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$Quote total for one billing period of each line, calculated like an invoice total
^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$Contract amount this quote converts to: quantity x rate over each line's term, before discount and tax; approvals compare this
^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$Totals by billing frequency
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
draft, awaiting_approval, approved, rejected Schema for complete approval workflow information.
Show child attributes
Show child attributes
Full approval chain.
Show child attributes
Show child attributes
Code from the company quote sequence, e.g. QT-0001
Schema for audit actor information.
Show child attributes
Show child attributes
Schema for audit actor information.
Show child attributes
Show child attributes
Was this page helpful?