MCP server for Quaderno — tax-rate calculation, invoices, contacts, products, receipts & expenses.
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Calculate the correct tax rate/amount for a sale given the customer's location and product. This is Quaderno's flagship endpoint — it applies the right VAT / GST / US sales-tax rules per jurisdiction. READ-ONLY (no record is created). Quaderno API: GET /tax_rates/calculate. Returns { name, rate, country, region, county, city, tax_code, status (taxable|non_taxable|not_registered|reverse_charge), tax_amount, subtotal, total_amount }.
The customer's country — 2-letter ISO code (e.g. "US", "DE"). Required.
Transaction date (YYYY-MM-DD); defaults to today.
Transaction amount to compute the tax on.
The customer's tax ID / VAT number (may trigger reverse-charge).
The customer's city (recommended for US sales tax).
ISO 4217 currency code (e.g. "USD").
Product tax code, e.g. "standard", "reduced", "exempt", "eservice", "ebook", "saas", "consulting".
The customer's street address (recommended for US sales tax).
The seller's country (2-letter ISO); defaults to the account country.
Whether the product is a good or a service.
Whether the amount includes tax or not.
The customer's ZIP / postal code (recommended for US sales tax).
The seller's postal code.
Calculate the correct tax rate/amount for a sale given the customer's location and product. This is Quaderno's flagship endpoint — it applies the right VAT / GST / US sales-tax rules per jurisdiction. READ-ONLY (no record is created). Quaderno API: GET /tax_rates/calculate. Returns { name, rate, country, region, county, city, tax_code, status (taxable|non_taxable|not_registered|reverse_charge), tax_amount, subtotal, total_amount }.
| Argument | Type | Description |
|---|---|---|
| date | string | Transaction date (YYYY-MM-DD); defaults to today. |
| amount | number | Transaction amount to compute the tax on. |
| tax_id | string | The customer's tax ID / VAT number (may trigger reverse-charge). |
| to_city | string | The customer's city (recommended for US sales tax). |
| currency | string | ISO 4217 currency code (e.g. "USD"). |
| tax_code | string | Product tax code, e.g. "standard", "reduced", "exempt", "eservice", "ebook", "saas", "consulting". |
| to_street | string | The customer's street address (recommended for US sales tax). |
| to_country* | string | The customer's country — 2-letter ISO code (e.g. "US", "DE"). Required. |
| from_country | string | The seller's country (2-letter ISO); defaults to the account country. |
| product_type | string | Whether the product is a good or a service. |
| tax_behavior | string | Whether the amount includes tax or not. |
| to_postal_code | string | The customer's ZIP / postal code (recommended for US sales tax). |
| from_postal_code | string | The seller's postal code. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"to_country"
],
"properties": {
"date": {
"type": "string",
"description": "Transaction date (YYYY-MM-DD); defaults to today."
},
"amount": {
"type": "number",
"description": "Transaction amount to compute the tax on."
},
"tax_id": {
"type": "string",
"description": "The customer's tax ID / VAT number (may trigger reverse-charge)."
},
"to_city": {
"type": "string",
"description": "The customer's city (recommended for US sales tax)."
},
"currency": {
"type": "string",
"description": "ISO 4217 currency code (e.g. \"USD\")."
},
"tax_code": {
"type": "string",
"description": "Product tax code, e.g. \"standard\", \"reduced\", \"exempt\", \"eservice\", \"ebook\", \"saas\", \"consulting\"."
},
"to_street": {
"type": "string",
"description": "The customer's street address (recommended for US sales tax)."
},
"to_country": {
"type": "string",
"description": "The customer's country — 2-letter ISO code (e.g. \"US\", \"DE\"). Required."
},
"from_country": {
"type": "string",
"description": "The seller's country (2-letter ISO); defaults to the account country."
},
"product_type": {
"enum": [
"good",
"service"
],
"type": "string",
"description": "Whether the product is a good or a service."
},
"tax_behavior": {
"enum": [
"inclusive",
"exclusive"
],
"type": "string",
"description": "Whether the amount includes tax or not."
},
"to_postal_code": {
"type": "string",
"description": "The customer's ZIP / postal code (recommended for US sales tax)."
},
"from_postal_code": {
"type": "string",
"description": "The seller's postal code."
}
}
}MUTATES Quaderno data — create a contact (customer or vendor). Provide kind plus a name; use `fields` for any other Quaderno contact attribute (phone_1, region, postal_code, city, street_line_1/2, tax_status, language, discount, notes, processor/processor_id). Quaderno API: POST /contacts. Returns the created contact.
| Argument | Type | Description |
|---|---|---|
| kind* | string | Contact kind. |
| string | Contact email address. | |
| fields | object | Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above). |
| tax_id | string | The contact's tax ID / VAT number. |
| country | string | 2-letter ISO country code. |
| last_name | string | The person's last name (persons only). |
| first_name | string | For a person: their first name. For a company: the company name (Quaderno stores it here). |
| contact_name | string | The contact person's name at a company (companies only). |
MUTATES Quaderno data — create an invoice for a contact. Provide contact_id (or a contact via `fields`) and items; use `fields` for any other attribute (currency, issue_date, due_date, po_number, notes, tag_list, custom_metadata, payment_details). Each item = { description, quantity, unit_price, tax_1_name?, tax_1_rate?, discount_rate?, … }. Quaderno API: POST /invoices. Returns the created invoice (incl. permalink, pdf).
| Argument | Type | Description |
|---|---|---|
| items | array | Line items, e.g. [{ description, quantity, unit_price, tax_1_name, tax_1_rate }]. |
| notes | string | Free-text notes on the invoice. |
| fields | object | Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above). |
| currency | string | ISO 4217 currency code. |
| due_date | string | Due date (YYYY-MM-DD). |
| po_number | string | Purchase-order number. |
| contact_id | string | The id of an existing contact to invoice. Omit only if you pass a full `contact` object via `fields`. |
| issue_date |
MUTATES Quaderno data — create a product/item in the catalog. Provide name + unit_cost; use `fields` for any other attribute (code, description, tax_class, tax_type, currency, country, stock). Quaderno API: POST /items. Returns the created item.
| Argument | Type | Description |
|---|---|---|
| code | string | SKU / product code. |
| kind | string | Whether it is a one-off or a subscription product. |
| name* | string | Product name. |
| fields | object | Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above). |
| currency | string | ISO 4217 currency code. |
| unit_cost* | number | Unit price of the product. |
| product_type | string | Whether the product is a good or a service. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"unit_cost"
],
"properties": {
"code": {
"type": "string",
"description": "SKU / product code."
},
"kind": {
"enum": [
"one_off",
"subscription"
],
"type": "string",
"description": "Whether it is a one-off or a subscription product."
},
"name": {
"type": "string",
"description": "Product name."
},
"fields": {
"type": "object",
"description": "Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above).",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"currency": {
"type": "string",
"description": "ISO 4217 currency code."
},
"unit_cost": {
"type": "number",
"description": "Unit price of the product."
},
"product_type": {
"enum": [
"good",
"service"
],
"type": "string",
"description": "Whether the product is a good or a service."
}
}
}MUTATES Quaderno data — record a sale or refund transaction (Quaderno computes tax and produces the compliant document). Provide the customer, items, and payment. Use `fields` for any other attribute (date, currency, shipping_address, evidence, processor, processor_id, processor_fee_cents, exchange_rate, po_number, notes, tags, custom_metadata). Quaderno API: POST /transactions. Returns the created invoice/credit-note object.
| Argument | Type | Description |
|---|---|---|
| type | string | Transaction type (default "sale"). |
| items* | array | Required. Transaction line items, e.g. [{ description, amount, quantity, tax_code, product_type }]. |
| fields | object | Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above). |
| payment | object | Payment object, e.g. { payment_method, amount, date }. |
| currency | string | ISO 4217 currency code. |
| customer | object | The customer contact object (or reference), e.g. { first_name, last_name, email, country, tax_id }. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"items"
],
"properties": {
"type": {
"enum": [
"sale",
"refund"
],
"type": "string",
"description": "Transaction type (default \"sale\")."
},
"items": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"description": "Required. Transaction line items, e.g. [{ description, amount, quantity, tax_code, product_type }]."
},
"fields": {
"type": "object",
"description": "Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above).",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"payment": {
"type": "object",
"description": "Payment object, e.g. { payment_method, amount, date }.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"currency": {
"type": "string",
"description": "ISO 4217 currency code."
},
"customer": {
"type": "object",
"description": "The customer contact object (or reference), e.g. { first_name, last_name, email, country, tax_id }.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
}
}Fetch a single contact by id. Quaderno API: GET /contacts/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | string | The resource id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The resource id."
}
}
}Fetch a single credit note by id. Quaderno API: GET /credit_notes/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | string | The resource id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The resource id."
}
}
}Fetch a single expense by id. Quaderno API: GET /expenses/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | string | The resource id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The resource id."
}
}
}Fetch a single invoice by id (full object incl. items, taxes, payments, permalink, pdf). Quaderno API: GET /invoices/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | string | The resource id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The resource id."
}
}
}Fetch a single product/item by id. Quaderno API: GET /items/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | string | The resource id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The resource id."
}
}
}Fetch a single receipt by id. Quaderno API: GET /receipts/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | string | The resource id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The resource id."
}
}
}List contacts (customers/vendors), newest first. Quaderno API: GET /contacts. Returns contact objects (id, kind, first_name, last_name, contact_name, email, country, tax_id, tax_status, …), wrapped as { data, pagination } when more pages exist.
| Argument | Type | Description |
|---|---|---|
| q | string | Search by contact name, email, or tax ID. |
| page | integer | Page number (legacy pagination; prefer created_before). |
| per_page | integer | Entries per page (1-100, default 25). |
| created_before | string | Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"q": {
"type": "string",
"description": "Search by contact name, email, or tax ID."
},
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number (legacy pagination; prefer created_before)."
},
"per_page": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Entries per page (1-100, default 25)."
},
"created_before": {
"type": "string",
"description": "Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id)."
}
}
}List credit notes (refund documents), newest first. Quaderno API: GET /credit_notes. Wrapped as { data, pagination } when more pages exist.
| Argument | Type | Description |
|---|---|---|
| q | string | Search by number, customer name, or PO number. |
| date | string | Date range filter, e.g. "2026-01-01,2026-12-31". |
| page | integer | Page number (legacy pagination; prefer created_before). |
| contact | string | Filter by customer (contact) id. |
| per_page | integer | Entries per page (1-100, default 25). |
| created_before | string | Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"q": {
"type": "string",
"description": "Search by number, customer name, or PO number."
},
"date": {
"type": "string",
"description": "Date range filter, e.g. \"2026-01-01,2026-12-31\"."
},
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number (legacy pagination; prefer created_before)."
},
"contact": {
"type": "string",
"description": "Filter by customer (contact) id."
},
"per_page": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Entries per page (1-100, default 25)."
},
"created_before": {
"type": "string",
"description": "Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id)."
}
}
}List expenses (bills you received), newest first. Quaderno API: GET /expenses. Wrapped as { data, pagination } when more pages exist.
| Argument | Type | Description |
|---|---|---|
| q | string | Search by number or vendor name. |
| date | string | Date range filter, e.g. "2026-01-01,2026-12-31". |
| page | integer | Page number (legacy pagination; prefer created_before). |
| contact | string | Filter by vendor (contact) id. |
| per_page | integer | Entries per page (1-100, default 25). |
| created_before | string | Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"q": {
"type": "string",
"description": "Search by number or vendor name."
},
"date": {
"type": "string",
"description": "Date range filter, e.g. \"2026-01-01,2026-12-31\"."
},
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number (legacy pagination; prefer created_before)."
},
"contact": {
"type": "string",
"description": "Filter by vendor (contact) id."
},
"per_page": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Entries per page (1-100, default 25)."
},
"created_before": {
"type": "string",
"description": "Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id)."
}
}
}List invoices, newest first, with optional filters. Quaderno API: GET /invoices. Returns invoice objects (id, number, issue_date, due_date, currency, contact, items, taxes, payments, state, total_cents, subtotal_cents), wrapped as { data, pagination } when more pages exist.
| Argument | Type | Description |
|---|---|---|
| q | string | Search by invoice number, customer name, or PO number. |
| date | string | Date range filter, e.g. "2026-01-01,2026-12-31". |
| page | integer | Page number (legacy pagination; prefer created_before). |
| state | string | Filter by invoice state. |
| contact | string | Filter by customer (contact) id. |
| per_page | integer | Entries per page (1-100, default 25). |
| created_before | string | Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"q": {
"type": "string",
"description": "Search by invoice number, customer name, or PO number."
},
"date": {
"type": "string",
"description": "Date range filter, e.g. \"2026-01-01,2026-12-31\"."
},
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number (legacy pagination; prefer created_before)."
},
"state": {
"enum": [
"outstanding",
"late",
"uncollectible",
"paid"
],
"type": "string",
"description": "Filter by invoice state."
},
"contact": {
"type": "string",
"description": "Filter by customer (contact) id."
},
"per_page": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Entries per page (1-100, default 25)."
},
"created_before": {
"type": "string",
"description": "Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id)."
}
}
}List products/items in the catalog, newest first. Quaderno API: GET /items. Returns item objects (id, code, name, kind, product_type, unit_cost, tax_class, tax_type, currency, stock, …), wrapped as { data, pagination } when more pages exist.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (legacy pagination; prefer created_before). |
| per_page | integer | Entries per page (1-100, default 25). |
| created_before | string | Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number (legacy pagination; prefer created_before)."
},
"per_page": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Entries per page (1-100, default 25)."
},
"created_before": {
"type": "string",
"description": "Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id)."
}
}
}List the tax jurisdictions (id, name, country, region) where the account is registered to collect tax. Quaderno API: GET /jurisdictions.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List receipts, newest first. Quaderno API: GET /receipts. Wrapped as { data, pagination } when more pages exist.
| Argument | Type | Description |
|---|---|---|
| q | string | Search by number or customer name. |
| date | string | Date range filter, e.g. "2026-01-01,2026-12-31". |
| page | integer | Page number (legacy pagination; prefer created_before). |
| contact | string | Filter by customer (contact) id. |
| per_page | integer | Entries per page (1-100, default 25). |
| created_before | string | Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"q": {
"type": "string",
"description": "Search by number or customer name."
},
"date": {
"type": "string",
"description": "Date range filter, e.g. \"2026-01-01,2026-12-31\"."
},
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number (legacy pagination; prefer created_before)."
},
"contact": {
"type": "string",
"description": "Filter by customer (contact) id."
},
"per_page": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Entries per page (1-100, default 25)."
},
"created_before": {
"type": "string",
"description": "Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id)."
}
}
}List the product tax codes Quaderno supports (id, name, description) — used as the tax_code on products / tax calculations. Quaderno API: GET /tax_codes.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List the account's configured webhooks (id, url, events). Quaderno API: GET /webhooks.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Verify the API key and connection by pinging Quaderno. Returns account/authentication status. Quaderno API: GET /ping.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Power-user escape hatch: GET any Quaderno API path not wrapped by a dedicated tool. READ-ONLY — only GET is allowed. Path is taken after /api (e.g. "/tax_ids", "/evidence"). Quaderno API: GET {path}.
| Argument | Type | Description |
|---|---|---|
| path* | string | API path after /api, starting with a slash, e.g. "/tax_ids". |
| query | object | Optional query params object. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"path"
],
"properties": {
"path": {
"type": "string",
"description": "API path after /api, starting with a slash, e.g. \"/tax_ids\"."
},
"query": {
"type": "object",
"description": "Optional query params object.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
}
}MUTATES Quaderno data — update an existing contact. Only the fields you pass are changed; use `fields` for any attribute not typed here. Quaderno API: PUT /contacts/{id}. Returns the updated contact.
| Argument | Type | Description |
|---|---|---|
| id* | string | The resource id. |
| string | Contact email address. | |
| fields | object | Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above). |
| tax_id | string | Tax ID / VAT number. |
| country | string | 2-letter ISO country code. |
| last_name | string | Person last name. |
| first_name | string | Person first name / company name. |
| contact_name | string | Contact person at a company. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The resource id."
},
"email": {
"type": "string",
"description": "Contact email address."
},
"fields": {
"type": "object",
"description": "Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above).",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"tax_id": {
"type": "string",
"description": "Tax ID / VAT number."
},
"country": {
"type": "string",
"description": "2-letter ISO country code."
},
"last_name": {
"type": "string",
"description": "Person last name."
},
"first_name": {
"type": "string",
"description": "Person first name / company name."
},
"contact_name": {
"type": "string",
"description": "Contact person at a company."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"kind"
],
"properties": {
"kind": {
"enum": [
"company",
"person"
],
"type": "string",
"description": "Contact kind."
},
"email": {
"type": "string",
"description": "Contact email address."
},
"fields": {
"type": "object",
"description": "Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above).",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"tax_id": {
"type": "string",
"description": "The contact's tax ID / VAT number."
},
"country": {
"type": "string",
"description": "2-letter ISO country code."
},
"last_name": {
"type": "string",
"description": "The person's last name (persons only)."
},
"first_name": {
"type": "string",
"description": "For a person: their first name. For a company: the company name (Quaderno stores it here)."
},
"contact_name": {
"type": "string",
"description": "The contact person's name at a company (companies only)."
}
}
}| string |
| Issue date (YYYY-MM-DD). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"description": "Line items, e.g. [{ description, quantity, unit_price, tax_1_name, tax_1_rate }]."
},
"notes": {
"type": "string",
"description": "Free-text notes on the invoice."
},
"fields": {
"type": "object",
"description": "Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above).",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"currency": {
"type": "string",
"description": "ISO 4217 currency code."
},
"due_date": {
"type": "string",
"description": "Due date (YYYY-MM-DD)."
},
"po_number": {
"type": "string",
"description": "Purchase-order number."
},
"contact_id": {
"type": "string",
"description": "The id of an existing contact to invoice. Omit only if you pass a full `contact` object via `fields`."
},
"issue_date": {
"type": "string",
"description": "Issue date (YYYY-MM-DD)."
}
}
}