Skip to main content

How to Use Pricing Tables with GetAccept API

Create and manage pricing tables programmatically via the GetAccept REST API.

Updated yesterday

Use the GetAccept API to Manage Pricing Tables

The GetAccept REST API lets you create, read, and update pricing tables programmatically. This is useful for integrating GetAccept with your CPQ (Configure, Price, Quote) systems, automating document creation workflows, and syncing pricing data between platforms.

This article covers the API endpoints and request structure for pricing tables. You'll learn how to create pricing tables when building documents, fetch pricing table structure from templates, read values from sent documents, and update pricing tables after sending.

Pro-tip: If you're looking for UI-based pricing table setup instead, see Add a Pricing Table and Pricing Table Settings.

API Access Requirements

To use pricing table endpoints, you need:

  • Professional plan or above , API access requires a paid subscription tier

  • API key or bearer token , authenticate all requests with your GetAccept API credentials

  • Document ID or Template ID , the ID of the template or sent document containing the pricing table

Find your API credentials in your GetAccept account settings under Integrations β†’ API. Store your API key securely and never share it publicly.

Set Up a Pricing Table Template First

Before using the API, create a template with a pricing table placeholder in GetAccept. The template defines the table structure, columns, sections, and currency settings that the API will reference.

To create a template with a pricing table:

  1. Navigate to Content β†’ Create content β†’ Template

  2. Add a new Editor block and select Pricing Table

  3. Configure the table structure: add sections, define columns (name, description, SKU, price, units, tax, discount, totals)

  4. Set currency and locale for the table

  5. Save the template

Once saved, the template ID appears in the top section of the template editor. You'll use this ID to fetch pricing table metadata via the API.

Fetch Pricing Table Structure from a Template

Before creating a document with a pricing table, fetch the table structure from your template. This gives you the table ID, section IDs, and column IDs you'll need when populating values.

Endpoint:

GET https://api.getaccept.com/v1/templates/{template_id}/pricing-tables

Required parameters:

  • template_id , the ID of your template (found in the template editor)

Authentication:

Include your API key in the Authorization header:

Authorization: Bearer YOUR_API_KEY

Example response:

{  "pricing_tables": [    {      "table_id": "fOlpofN7-OSCAArlnSYfo",      "display_name": "Pricing Package",      "currency_settings": {        "currency": "USD",        "locale": "en-US"      },      "sections": [        {          "section_id": "1z-wzICAmx1GPQWgfn5AY",          "display_name": "Best Offer for You",          "columns": [            {              "column_id": "H_Cc3-ffDGDT0alng-5qD",              "name": "name",              "display_name": "Name"            },            {              "column_id": "fMvGzeKINFfTXWlf-nwgs",              "name": "price",              "display_name": "Price"            },            {              "column_id": "ADBdSln0iEw17fpG44FfP",              "name": "units",              "display_name": "Units"            }          ]        }      ]    }  ]}

Save the table_id, section_id, and all column_id values , you'll reference these when creating documents with populated pricing tables.

Create a Document with Pricing Table Values

Once you have the template structure, create a document and populate the pricing table with actual values. You must provide a value for every column in every row.

Endpoint:

POST https://api.getaccept.com/v1/documents

Required body fields:

  • name , document name (e.g., "Proposal for Acme Corp")

  • template_id , ID of the template with the pricing table

  • recipients , array of recipient objects (email, name, role)

  • custom_pricing_tables , array containing the pricing table data

Pricing table structure:

Inside custom_pricing_tables, provide:

  • id , the table ID from the template

  • display_name , optional display name for the table (use null to keep template default)

  • currency_settings , currency and locale (use null to keep template default)

  • pre_calculated , set to true if you pre-calculate totals; false if GetAccept should auto-calculate

  • summary_values , object with price, discount, tax (each with value, flat_fee, enabled)

  • sections , array of section objects containing rows

Row and value mapping:

Each row represents a line item. Inside each row, the values array must have one entry per column, in the same order as the columns returned from the template.

Example POST request body:

{  "is_automatic_sending": false,  "name": "Custom Proposal - Acme Corp",  "template_id": "REPLACE_WITH_YOUR_TEMPLATE_ID",  "recipients": [    {      "first_name": "Jane",      "last_name": "Smith",      "email": "jane.smith@acmecorp.com",      "role": "signer"    }  ],  "custom_pricing_tables": [    {      "id": "fOlpofN7-OSCAArlnSYfo",      "display_name": null,      "currency_settings": null,      "pre_calculated": true,      "sections": [        {          "id": "1z-wzICAmx1GPQWgfn5AY",          "display_name": "Best Offer for You",          "rows": [            {              "values": [                {                  "column_id": "H_Cc3-ffDGDT0alng-5qD",                  "value": "Professional Plan"                },                {                  "column_id": "-gXSWsKKK47qoTy2M0KP3",                  "value": "Full access with priority support"                },                {                  "column_id": "fMvGzeKINFfTXWlf-nwgs",                  "value": "500"                },                {                  "column_id": "ADBdSln0iEw17fpG44FfP",                  "value": "2"                },                {                  "column_id": "5fNyEf7DFAZXbzFCTF_4o",                  "value": "1000"                }              ]            }          ]        }      ],      "summary_values": {        "price": {          "value": "1000.00",          "flat_fee": true,          "enabled": true,          "display_name": "Total"        },        "discount": {          "value": "",          "flat_fee": true,          "enabled": false        },        "tax": {          "value": "",          "flat_fee": true,          "enabled": false        }      }    }  ]}

Response:

On success, GetAccept returns a 201 Created response with the new document object, including its document_id. Use this ID to track the document, fetch its current pricing table values, or update it later.

Pricing Table Field Reference

Summary Values

Summary values appear at the bottom of the pricing table and show totals, discounts, and taxes. Each summary field has three properties:

  • value , the numeric or percentage value as a string (e.g., "100.50" or "15" for 15%)

  • flat_fee , true if the value is a currency amount; false if it's a percentage

  • enabled , true to show this field in the summary; false to hide it

  • display_name , optional label (e.g., "Total Price" or "Loyalty Discount")

Example summary configuration:

"summary_values": {  "price": {    "value": "1500.00",    "flat_fee": true,    "enabled": true,    "display_name": "Total Price"  },  "discount": {    "value": "10",    "flat_fee": false,    "enabled": true,    "display_name": "Early Bird Discount"  },  "tax": {    "value": "150.00",    "flat_fee": true,    "enabled": true,    "display_name": "Sales Tax"  }}

Currency Settings

Define the currency and formatting locale for the pricing table. All sections in a single table share one currency.

  • currency , ISO-4217 currency code (e.g., "USD", "EUR", "GBP", "SEK")

  • locale , IETF BCP 47 language tag plus ISO 3166-1 country code (e.g., "en-US", "sv-SE", "de-DE")

Pass null for currency_settings to use the template's default currency. Otherwise, provide both fields:

"currency_settings": {  "currency": "USD",  "locale": "en-US"}

Row Values

Each row value maps to a single column. Always provide values as strings, even for numbers. The order of values must match the order of columns in the template section.

  • column_id , the column ID from the template

  • value , the cell content as a string (empty string "" for empty cells)

  • is_markdown , set to true if the value contains Markdown formatting (optional)

Example row:

"values": [  { "column_id": "H_Cc3-ffDGDT0alng-5qD", "value": "Standard Package" },  { "column_id": "-gXSWsKKK47qoTy2M0KP3", "value": "Includes 5 users" },  { "column_id": "fMvGzeKINFfTXWlf-nwgs", "value": "250" },  { "column_id": "ADBdSln0iEw17fpG44FfP", "value": "1" },  { "column_id": "5fNyEf7DFAZXbzFCTF_4o", "value": "250" }]

Read Pricing Table Values from a Sent Document

After sending a document, fetch its current pricing table values. This is useful for importing data back into your CPQ system or preparing updates via the Edit After Send workflow.

Endpoint:

GET https://api.getaccept.com/v1/documents/{document_id}/pricing-tables

Required parameters:

  • document_id , the ID of the sent document

Response structure:

Returns the same structure as the template endpoint, but includes all current values in the rows. Use the column IDs from this response when updating the pricing table later.

Update Pricing Tables After Sending

Modify pricing table values after a document is sent without creating a new version. This is called "Edit After Send." You can add rows, change prices, adjust discounts, or update any field , as long as no recipient has signed yet.

Step 1: Fetch the current pricing table structure

Call the GET endpoint above to retrieve the current table structure and column IDs.

Step 2: Update the pricing table values

Endpoint:

PUT https://api.getaccept.com/v1/documents/{document_id}/pricing-tables

Request body:

Use the same structure as when creating a document. Replace the values and rows with your updates, keeping the same table ID and section ID:

{  "custom_pricing_tables": [    {      "id": "fOlpofN7-OSCAArlnSYfo",
Did this answer your question?