curl --request POST \
--url https://api.decodahealth.com/billing/quote/{quote_id}/items/add \
--header 'API-KEY: <api-key>' \
--header 'Content-Type: application/json' \
--header 'TENANT: <tenant>' \
--data '
{
"itemId": "<string>",
"packageId": "<string>",
"quantity": 1,
"unitPrice": 123,
"discountAmount": 0,
"discountPercentage": 0,
"description": "<string>"
}
'import requests
url = "https://api.decodahealth.com/billing/quote/{quote_id}/items/add"
payload = {
"itemId": "<string>",
"packageId": "<string>",
"quantity": 1,
"unitPrice": 123,
"discountAmount": 0,
"discountPercentage": 0,
"description": "<string>"
}
headers = {
"TENANT": "<tenant>",
"API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {TENANT: '<tenant>', 'API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
itemId: '<string>',
packageId: '<string>',
quantity: 1,
unitPrice: 123,
discountAmount: 0,
discountPercentage: 0,
description: '<string>'
})
};
fetch('https://api.decodahealth.com/billing/quote/{quote_id}/items/add', 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.decodahealth.com/billing/quote/{quote_id}/items/add",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'itemId' => '<string>',
'packageId' => '<string>',
'quantity' => 1,
'unitPrice' => 123,
'discountAmount' => 0,
'discountPercentage' => 0,
'description' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"API-KEY: <api-key>",
"Content-Type: application/json",
"TENANT: <tenant>"
],
]);
$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.decodahealth.com/billing/quote/{quote_id}/items/add"
payload := strings.NewReader("{\n \"itemId\": \"<string>\",\n \"packageId\": \"<string>\",\n \"quantity\": 1,\n \"unitPrice\": 123,\n \"discountAmount\": 0,\n \"discountPercentage\": 0,\n \"description\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("TENANT", "<tenant>")
req.Header.Add("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.post("https://api.decodahealth.com/billing/quote/{quote_id}/items/add")
.header("TENANT", "<tenant>")
.header("API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"itemId\": \"<string>\",\n \"packageId\": \"<string>\",\n \"quantity\": 1,\n \"unitPrice\": 123,\n \"discountAmount\": 0,\n \"discountPercentage\": 0,\n \"description\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.decodahealth.com/billing/quote/{quote_id}/items/add")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["TENANT"] = '<tenant>'
request["API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"itemId\": \"<string>\",\n \"packageId\": \"<string>\",\n \"quantity\": 1,\n \"unitPrice\": 123,\n \"discountAmount\": 0,\n \"discountPercentage\": 0,\n \"description\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"patientId": "<string>",
"status": "DRAFT",
"discountAmount": 123,
"discountPercentage": 123,
"taxAmount": 123,
"total": 123,
"subtotal": 123,
"creatorId": "<string>",
"chargeId": "<string>",
"title": "<string>",
"itemCount": 0,
"packageCount": 0,
"createdDate": "2023-11-07T05:31:56Z",
"updatedDate": "2023-11-07T05:31:56Z",
"validUntilDate": "2023-11-07T05:31:56Z",
"sentDate": "2023-11-07T05:31:56Z",
"viewedDate": "2023-11-07T05:31:56Z",
"respondedDate": "2023-11-07T05:31:56Z",
"internalNotes": "<string>",
"creator": {
"id": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"email": "<string>",
"createdDate": "2023-11-07T05:31:56Z"
},
"patient": {
"id": "<string>",
"type": "PROVIDER",
"createdDate": "2023-11-07T05:31:56Z",
"firstName": "<string>",
"lastName": "<string>",
"phoneNumber": "<string>",
"email": "<string>",
"locationId": "<string>",
"externalId": "<string>",
"address": "<string>",
"addressLineTwo": "<string>",
"city": "<string>",
"state": "<string>",
"zipCode": "<string>",
"country": "<string>",
"addressValid": true,
"meta": {},
"isArchived": true,
"primaryLocationId": "<string>",
"gender": "<string>",
"dateOfBirth": "2023-12-25",
"patientMedications": [
"<string>"
],
"onSchedulingBlacklist": true,
"surchargeDisabled": true,
"tags": [
{
"id": "<string>",
"name": "<string>",
"isActive": true,
"createdDate": "2023-11-07T05:31:56Z",
"emoji": "<string>",
"color": "<string>",
"updatedDate": "2023-11-07T05:31:56Z"
}
],
"creditBalance": 123,
"preferredProviderId": "<string>"
},
"description": "<string>",
"terms": "<string>",
"items": [],
"convertedChargeId": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Add Item To Quote
Add an item or package to a quote.
curl --request POST \
--url https://api.decodahealth.com/billing/quote/{quote_id}/items/add \
--header 'API-KEY: <api-key>' \
--header 'Content-Type: application/json' \
--header 'TENANT: <tenant>' \
--data '
{
"itemId": "<string>",
"packageId": "<string>",
"quantity": 1,
"unitPrice": 123,
"discountAmount": 0,
"discountPercentage": 0,
"description": "<string>"
}
'import requests
url = "https://api.decodahealth.com/billing/quote/{quote_id}/items/add"
payload = {
"itemId": "<string>",
"packageId": "<string>",
"quantity": 1,
"unitPrice": 123,
"discountAmount": 0,
"discountPercentage": 0,
"description": "<string>"
}
headers = {
"TENANT": "<tenant>",
"API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {TENANT: '<tenant>', 'API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
itemId: '<string>',
packageId: '<string>',
quantity: 1,
unitPrice: 123,
discountAmount: 0,
discountPercentage: 0,
description: '<string>'
})
};
fetch('https://api.decodahealth.com/billing/quote/{quote_id}/items/add', 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.decodahealth.com/billing/quote/{quote_id}/items/add",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'itemId' => '<string>',
'packageId' => '<string>',
'quantity' => 1,
'unitPrice' => 123,
'discountAmount' => 0,
'discountPercentage' => 0,
'description' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"API-KEY: <api-key>",
"Content-Type: application/json",
"TENANT: <tenant>"
],
]);
$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.decodahealth.com/billing/quote/{quote_id}/items/add"
payload := strings.NewReader("{\n \"itemId\": \"<string>\",\n \"packageId\": \"<string>\",\n \"quantity\": 1,\n \"unitPrice\": 123,\n \"discountAmount\": 0,\n \"discountPercentage\": 0,\n \"description\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("TENANT", "<tenant>")
req.Header.Add("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.post("https://api.decodahealth.com/billing/quote/{quote_id}/items/add")
.header("TENANT", "<tenant>")
.header("API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"itemId\": \"<string>\",\n \"packageId\": \"<string>\",\n \"quantity\": 1,\n \"unitPrice\": 123,\n \"discountAmount\": 0,\n \"discountPercentage\": 0,\n \"description\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.decodahealth.com/billing/quote/{quote_id}/items/add")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["TENANT"] = '<tenant>'
request["API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"itemId\": \"<string>\",\n \"packageId\": \"<string>\",\n \"quantity\": 1,\n \"unitPrice\": 123,\n \"discountAmount\": 0,\n \"discountPercentage\": 0,\n \"description\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"patientId": "<string>",
"status": "DRAFT",
"discountAmount": 123,
"discountPercentage": 123,
"taxAmount": 123,
"total": 123,
"subtotal": 123,
"creatorId": "<string>",
"chargeId": "<string>",
"title": "<string>",
"itemCount": 0,
"packageCount": 0,
"createdDate": "2023-11-07T05:31:56Z",
"updatedDate": "2023-11-07T05:31:56Z",
"validUntilDate": "2023-11-07T05:31:56Z",
"sentDate": "2023-11-07T05:31:56Z",
"viewedDate": "2023-11-07T05:31:56Z",
"respondedDate": "2023-11-07T05:31:56Z",
"internalNotes": "<string>",
"creator": {
"id": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"email": "<string>",
"createdDate": "2023-11-07T05:31:56Z"
},
"patient": {
"id": "<string>",
"type": "PROVIDER",
"createdDate": "2023-11-07T05:31:56Z",
"firstName": "<string>",
"lastName": "<string>",
"phoneNumber": "<string>",
"email": "<string>",
"locationId": "<string>",
"externalId": "<string>",
"address": "<string>",
"addressLineTwo": "<string>",
"city": "<string>",
"state": "<string>",
"zipCode": "<string>",
"country": "<string>",
"addressValid": true,
"meta": {},
"isArchived": true,
"primaryLocationId": "<string>",
"gender": "<string>",
"dateOfBirth": "2023-12-25",
"patientMedications": [
"<string>"
],
"onSchedulingBlacklist": true,
"surchargeDisabled": true,
"tags": [
{
"id": "<string>",
"name": "<string>",
"isActive": true,
"createdDate": "2023-11-07T05:31:56Z",
"emoji": "<string>",
"color": "<string>",
"updatedDate": "2023-11-07T05:31:56Z"
}
],
"creditBalance": 123,
"preferredProviderId": "<string>"
},
"description": "<string>",
"terms": "<string>",
"items": [],
"convertedChargeId": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Headers
The tenant you are making this request on behalf of
Your api key
Path Parameters
Body
Schema for creating quote items (handles both items and packages).
ID of the item (required if not package)
ID of the package (required if not item)
Quantity of the item/package
Custom unit price in cents (if different from item/package price)
Discount amount in cents
Discount percentage (0-100)
Custom description for this item/package in the quote
Response
Successful Response
Detailed schema for quote with all items and packages.
Quote ID
Patient ID
Quote status
DRAFT, SENT, VIEWED, ACCEPTED, DECLINED, EXPIRED, CONVERTED Total discount in cents
Overall discount percentage
Total tax in cents
Final total in cents
Calculate subtotal from items after item-level discounts.
Creator ID
Source draft charge ID
Title/subject of the quote
Number of items in quote
Number of packages in quote
Date the quote was created
Date the quote was last updated
When the quote expires
When the quote was sent
When the patient first viewed the quote
When the patient responded to the quote
Internal notes
Creator details
Show child attributes
Show child attributes
Patient details
Show child attributes
Show child attributes
Description of the quote
Terms and conditions
Items and packages in the quote
Show child attributes
Show child attributes
ID of charge if quote was converted

