Skip to main content
This is a preview of API version v20260309 and is not yet publicly available.

Quaderno API (20260309)

Download OpenAPI specification:Download

Quaderno helps you scale your business without stressing about taxes. Our powerful REST API solves all your tax compliance needs:

  • Accurate tax calculation on every sale, worldwide.
  • Billing with automatic invoices and credit notes.
  • Alerts for new tax obligations and registrations.
  • Tax reports by country or state.

Here you can check our OpenAPI reference. Don't miss our developer tools and guides too!

API features

This section covers the conventions that apply across all Quaderno API endpoints: authentication, rate limits, pagination, error codes, and versioning.

Authentication

Quaderno uses an API key to authorize all requests, combined with your account name in the endpoint URL. You can find your API keys at quadernoapp.com/users/api-keys.

The API key is passed via HTTP Basic Auth. Set the key as the username and leave the password blank:

-u <YOUR_API_KEY>:

Using that modifier with curl sends a request with an Authorization: Basic … header. Example authenticated request:

curl https://ACCOUNT_NAME.quadernoapp.com/api/invoices \
  -u <YOUR_API_KEY>:

You can also call /ping to verify your credentials and check your remaining requests without consuming a real API call:

curl https://quadernoapp.com/api/ping \
  -u <YOUR_API_KEY>:

Keep your API key secret. Anyone who has it can read and modify everything your account has access to.

Authorization

To discover the ACCOUNT_NAME for your target account, call the /authorization endpoint:

curl https://quadernoapp.com/api/authorization \
  -u <YOUR_API_KEY>:

Returns JSON structured like this:

{
  "identity": {
    "id": "999",
    "name": "Sheldon Cooper",
    "email": "[email protected]",
    "publishable_key": "pk_1111111111111111",
    "href": "https://nippur-999.quadernoapp.com/api/"
  }
}

Response fields:

Parameter Description
id An internal identifier. Do not use this to reference users in API requests.
name The user's full name.
email The user's email address.
publishable_key The user's publishable key, for use in frontend integrations.
href The custom API endpoint URL for this account. The ACCOUNT_NAME appears between https:// and .quadernoapp.

If the user does not have permission to perform an action, the API returns 401 Unauthorized.

Rate Limiting

The current limit is 100 API calls per 15 seconds.

Every successful API response includes the following headers to help you track usage:

  • X-RateLimit-Limit: Maximum requests allowed per time window.
  • X-RateLimit-Remaining: Requests remaining in the current window.
  • X-RateLimit-Reset: UTC epoch timestamp when the window resets.

When you exceed the limit, the API returns 429 Too Many Requests. We reserve the right to adjust these limits, but will keep them high enough for well-behaved applications.

Pagination

List endpoints are paginated using a created_before parameter. Pass an object ID to retrieve objects created before that ID, in reverse chronological order (newest first).

Response headers:

  • X-Pages-HasMore: true if additional records can be fetched.
  • X-Pages-NextPage: The URL to fetch the next page. Only present when more records exist.

The default page size is 25 objects, configurable with the limit parameter up to a maximum of 100.

Example paginated request:

curl https://ACCOUNT_NAME.quadernoapp.com/api/contacts?created_before=42 \
  -u <YOUR_API_KEY>:

Errors

The Quaderno API uses standard HTTP status codes:

Code Text Description
400 Bad Request The request is malformed or missing required parameters.
401 Unauthorized Invalid API key or insufficient permissions.
403 Forbidden The requested resource is restricted.
404 Not Found The requested resource does not exist.
405 Method Not Allowed The HTTP method is not supported for this endpoint.
406 Not Acceptable The request contains invalid parameter values (e.g. an unrecognized tax code).
410 Gone The resource has been permanently removed.
422 Unprocessable Entity The request is well-formed but cannot be processed for the given resource state.
429 Too Many Requests You have exceeded the rate limit. See Rate Limiting.
500 Internal Server Error An unexpected error occurred on our end. Please try again later.
502 Bad Gateway A gateway error occurred on our end. Please try again later.
503 Service Unavailable The API is temporarily offline for maintenance. Please try again later.
504 Gateway Timeout The request timed out on our end. Please try again later.

When an API error occurs, Quaderno does not retry or track the failed call. Retry logic is the responsibility of your integration.

Versioning

The Quaderno API is versioned using the release date as the version name (e.g. 20241028).

A new version is released only when a breaking change is introduced — such as renaming a field, changing a field type, or removing an endpoint.

Non-breaking additions (new endpoints, new optional parameters, new response fields) are applied directly to your current API version without requiring an upgrade.

Quaderno considers the following to be backwards-compatible changes:

  • Adding new API resources.
  • Adding new optional request parameters to existing methods.
  • Adding new properties to existing API responses.
  • Changing the order of properties in existing API responses.
  • Changing the length or format of opaque strings (object IDs, error messages, etc.).
  • Adding new webhook event types.

Your integration should handle backwards-compatible changes gracefully, ignoring unexpected fields rather than failing.

Example of a breaking change:

// Before version 20210316:
GET /taxes/calculate?country=US&postal_code=94010

// From version 20210316:
GET /tax_rates/calculate?to_country=US&to_postal_code=90210&tax_code=standard&amount=10

Upgrading your API version

Upgrade to the latest API version to benefit from new functionality. All changes are documented in the API Changelog.

Because upgrades to versions with breaking changes may affect your integration, we recommend testing in Quaderno Sandbox before upgrading production.

To upgrade or view your current version, go to Profile → API Keys.

You can also override the API version programmatically on a per-request basis using the Accept header:

curl https://ACCOUNT_NAME.quadernoapp.com/api/contacts \
  -u <YOUR_API_KEY>: \
  -H 'Accept: application/json; api_version: 20160602'

Version sunsetting and backported changes

We periodically sunset old API versions. Affected accounts are notified at least one month in advance, and our Engineering team provides full support during the transition.

In exceptional cases, we may backport breaking changes to all API versions for legal, security, or compliance reasons. These changes are communicated with the same advance notice as sunsetting.

Stay informed

To receive announcements about version sunsetting, backported changes, and new releases, ask your account admin to add a developer role with a valid email address.

For new features and product updates, see quaderno.io/blog/changelog.

Safely upgrading to API version 20220325

Version 20220325 replaces the freeform notice field in /tax_rates/calculate responses with a structured status code:

  • taxable: The transaction is taxable and the calculator returns a non-zero rate.
  • non_taxable: The transaction is exempt — either the product is not taxable in that jurisdiction (e.g. digital goods in California), or the customer's region is exempt within a registered jurisdiction.
  • not_registered: You are not registered to collect tax in the customer's jurisdiction.
  • reverse_charge: The transaction is subject to reverse charge; no VAT is calculated.

If your integration reads the notice field, switch to the status field. The notice field is no longer returned.

Safely upgrading to API version 20210701

From 1 July 2021, invoices and credit notes become final (non-editable) when any of the following occur:

  • The document has been sent to the customer.
  • The document has been paid.
  • The document has been manually marked as final in the dashboard.

To correct a finalized invoice, issue a credit note against it and create a new invoice.

Fields that remain editable on finalized documents: po_number, tag_list, payment_details, notes, custom_metadata, and billing address fields (street_line_1, street_line_2, city, region, postal_code).

API changes introduced:

  • DELETE /invoices/INVOICE_ID returns 410 Gone.
  • PUT /invoices/INVOICE_ID only accepts the fields listed above.

If your use case issues invoices automatically at the point of payment, consider migrating to the Transactions API, which creates the contact, invoice, and payment record in a single API call.

Safely upgrading to API version 20210316

Version 20210316 introduces two breaking changes:

Tax calculation endpoint

The /taxes/calculate endpoint is replaced by /tax_rates/calculate:

curl https://ACCOUNT_NAME.quadernoapp.com/api/tax_rates/calculate?to_country=US&to_postal_code=90210&tax_code=standard&amount=10 \
  -u <YOUR_API_KEY>:

The new endpoint only returns tax rates for jurisdictions where your account is registered. If you are getting a 0% rate, check your registered tax jurisdictions.

Pagination

Cursor-based pagination replaces page-based pagination. Replace the page parameter with created_before, passing the ID of the last object from the previous response. Response headers changed:

Old header New header
X-Pages-CurrentPage X-Pages-HasMore
X-Pages-TotalPages X-Pages-NextPage

The maximum page size remains 100 objects, returned in reverse chronological order.

To test before committing, override the version on individual requests:

curl https://ACCOUNT_NAME.quadernoapp.com/api/contacts \
  -u <YOUR_API_KEY>: \
  -H 'Accept: application/json; api_version: 20210316'

Transactions

Tax transactions record every sale and refund that flows through your platform. Quaderno processes each transaction asynchronously — calculating the applicable taxes, determining the supply type, and flagging any discrepancies between the tax you collected and what was owed. Use transactions as the source of truth for tax reporting and compliance.

Create a transaction

Creates a new sale or refund tax transaction.

Tax calculation is performed synchronously. The response will always have status: taxed — Quaderno calculates the applicable taxes inline and returns the final result in the same request.

Use transaction_type: "refund" to record a refund. The refund_of_processor_id must reference the processor_id of the original sale.

Authorizations:
API keyBearer token
Request Body schema: application/json
transaction_type
string
Default: "sale"
Enum: "sale" "refund"

Whether this is a sale or a refund.

processor
required
string

The payment processor that handled this transaction.

processor_id
required
string

The transaction ID in the payment processor. Must be unique per processor and transaction type.

refund_of_processor_id
string or null

The processor_id of the original sale. Required when transaction_type is refund.

date
required
string <date>

Date of the transaction. Defaults to today.

currency
required
string

Three-letter ISO 4217 currency code in uppercase.

required
object

Customer location and identification data.

object or null

Origin address for the transaction. Defaults to the account address.

required
Array of objects

Line items in the transaction.

Responses

Request samples

Content type
application/json
{
  • "transaction_type": "sale",
  • "processor": "stripe",
  • "processor_id": "ch_1234567890",
  • "refund_of_processor_id": "ch_0987654321",
  • "date": "2024-01-15",
  • "currency": "USD",
  • "customer": {
    },
  • "origin_address": {
    },
  • "items": [
    ]
}

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "processor": "stripe",
  • "processor_id": "ch_1234567890",
  • "currency": "USD",
  • "transaction_type": "sale",
  • "status": "pending",
  • "supply_type": "domestic",
  • "date": "2024-01-15",
  • "total": "100.00",
  • "customer": {
    },
  • "items": [
    ],
  • "tax_breakdown": [
    ],
  • "exchange_rate": {
    },
  • "discrepancy": {
    }
}

List transactions

Returns a paginated list of tax transactions for the account, ordered by date descending.

Authorizations:
API keyBearer token
query Parameters
status
string
Enum: "pending" "taxed" "errored" "draft"

Filter by processing status.

date_from
string <date>

Return transactions on or after this date.

date_to
string <date>

Return transactions on or before this date.

limit
integer [ 1 .. 100 ]
Default: 25

Number of transactions to return per page.

page
integer >= 1

Page number for pagination.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create transactions in batch

Creates multiple sale transactions in a single request. Use this endpoint to import historical transactions or sync large volumes of sales data efficiently.

All amounts are treated as tax-inclusive — the tax is extracted from each item amount rather than added on top. This behavior is enforced automatically and cannot be overridden.

Batches only support sale transactions. To record a refund, use POST /transactions with transaction_type: "refund".

A batch can contain up to 500 transactions. If the limit is exceeded the entire request is rejected.

Each transaction in the batch is validated before any are stored. If any transaction fails validation, the entire batch is rejected and no records are created.

Authorizations:
API keyBearer token
Request Body schema: application/json
required
object
required
Array of objects

List of sale transactions to create.

Array
processor
required
string

The payment processor that handled the transaction.

processor_id
required
string

The transaction ID in the payment processor. Must be unique per processor.

date
required
string <date>

Date of the transaction.

currency
required
string

Three-letter ISO 4217 currency code.

total
string

Total transaction amount as a decimal string, tax-inclusive.

total_tax
string

Total tax amount as a decimal string. When provided, Quaderno uses this value directly instead of recalculating.

required
object
object or null

Seller origin address. Defaults to the account address when omitted.

required
Array of objects

Responses

Request samples

Content type
application/json
{
  • "batch": {
    }
}

Response samples

Content type
application/json
{
  • "accepted": 2,
  • "transactions": [
    ]
}

Retrieve a transaction

Retrieves an existing tax transaction by its ID.

Authorizations:
API keyBearer token
path Parameters
id
required
integer

Transaction ID.

Responses

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "processor": "stripe",
  • "processor_id": "ch_1234567890",
  • "currency": "USD",
  • "transaction_type": "sale",
  • "status": "pending",
  • "supply_type": "domestic",
  • "date": "2024-01-15",
  • "total": "100.00",
  • "customer": {
    },
  • "items": [
    ],
  • "tax_breakdown": [
    ],
  • "exchange_rate": {
    },
  • "discrepancy": {
    }
}

Reprocess a transaction

Triggers a new tax calculation for an existing transaction. Useful when a transaction is in errored status.

Returns 202 Accepted immediately. The transaction status is reset to pending and recalculated asynchronously.

Authorizations:
API keyBearer token
path Parameters
id
required
integer

Transaction ID.

Responses

Response samples

Content type
application/json
{
  • "error": "string"
}

Contacts

Contacts represent the customers and vendors who appear on your invoices, credit notes, and expenses. Each contact stores the billing information and tax identification data Quaderno uses to determine the correct tax treatment for every transaction.

List contacts

Lists contacts, paginated and sorted by creation date (newest first).

Authorizations:
API keyBearer token
query Parameters
q
string

Filters the contact list based on the contact's full name, email or tax id. Case-sensitive.

processor_id
string

Filters the contact list based on its processor_id.

Responses

Response samples

Content type
application/json
[]

Create a contact

Creates a new contact, representing a customer or vendor who appears on invoices, credit notes, and expenses.

Authorizations:
API keyBearer token
Request Body schema: application/json
city
string or null

City/District/Suburb/Town/Village.

contact_person
string or null

If the contact is a company, this is its contact person.

country
string

2-letter ISO country code.

department
string or null

If the contact is a company, this is the deparment.

number or null

Default discount for this contact.

email
string or null <email>

The contact's email address

first_name
required
string

The contact's first name. Only if the contact is a person.

kind
string
Default: "company"
Enum: "company" "person"

The type of contact.

language
string

The contact's preferred language. 2-letter ISO language code. Should be included in the account's translations list.

last_name
string or null

The contact's last name. Only if the contact is a person.

notes
string or null

Internal notes about the contact.

phone_1
string or null

The contact's phone number.

postal_code
string or null

ZIP or postal code.

processor
string or null

The external platform where the contact was imported from, if applicable.

processor_id
string or null

The ID the payment_processor assigned to the contact.

region
string or null

State/Province/Region.

street_line_1
string or null

Address line 1 (Street address/PO Box).

street_line_2
string or null

Address line 2 (Apartment/Suite/Unit/Building).

tax_id
string or null

The contact's tax identification number. Quaderno can validate EU VAT numbers, ABN, and NZBN.

tax_status
string
Default: "taxable"
Enum: "taxable" "exempt" "reverse"

Specifies the tax status of the contact.

web
string or null <uri>

The contact's website

Responses

Request samples

Content type
application/json
{
  • "city": "Pasadena",
  • "contact_person": "string",
  • "country": "US",
  • "department": "string",
  • "discount": 0,
  • "email": "[email protected]",
  • "first_name": "Leonard",
  • "kind": "person",
  • "language": "EN",
  • "last_name": "Hofstadter",
  • "notes": "Some private notes about the contact.",
  • "phone_1": "202-555-0104",
  • "postal_code": "91104",
  • "processor": "stripe",
  • "processor_id": "cus_999999999999",
  • "region": "CA",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "tax_id": "string",
  • "tax_status": "taxable",
}

Response samples

Content type
application/json
{}

Retrieve a contact

Retrieves the details of an existing contact.

Authorizations:
API keyBearer token
path Parameters
id
required
string

ID of the desired contact.

Responses

Response samples

Content type
application/json
{}

Update a contact

Updates a contact. Any parameters not provided will be left unchanged.

Authorizations:
API keyBearer token
path Parameters
id
required
integer

ID of the contact to be updated.

Request Body schema: application/json
city
string or null

City/District/Suburb/Town/Village.

contact_person
string or null

If the contact is a company, this is its contact person.

country
string

2-letter ISO country code.

department
string or null

If the contact is a company, this is the deparment.

number or null

Default discount for this contact.

email
string or null <email>

The contact's email address

first_name
required
string

The contact's first name. Only if the contact is a person.

kind
string
Default: "company"
Enum: "company" "person"

The type of contact.

language
string

The contact's preferred language. 2-letter ISO language code. Should be included in the account's translations list.

last_name
string or null

The contact's last name. Only if the contact is a person.

notes
string or null

Internal notes about the contact.

phone_1
string or null

The contact's phone number.

postal_code
string or null

ZIP or postal code.

processor
string or null

The external platform where the contact was imported from, if applicable.

processor_id
string or null

The ID the payment_processor assigned to the contact.

region
string or null

State/Province/Region.

street_line_1
string or null

Address line 1 (Street address/PO Box).

street_line_2
string or null

Address line 2 (Apartment/Suite/Unit/Building).

tax_id
string or null

The contact's tax identification number. Quaderno can validate EU VAT numbers, ABN, and NZBN.

tax_status
string
Default: "taxable"
Enum: "taxable" "exempt" "reverse"

Specifies the tax status of the contact.

web
string or null <uri>

The contact's website

Responses

Request samples

Content type
application/json
{
  • "city": "Pasadena",
  • "contact_person": "string",
  • "country": "US",
  • "department": "string",
  • "discount": 0,
  • "email": "[email protected]",
  • "first_name": "Leonard",
  • "kind": "person",
  • "language": "EN",
  • "last_name": "Hofstadter",
  • "notes": "Some private notes about the contact.",
  • "phone_1": "202-555-0104",
  • "postal_code": "91104",
  • "processor": "stripe",
  • "processor_id": "cus_999999999999",
  • "region": "CA",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "tax_id": "string",
  • "tax_status": "taxable",
}

Response samples

Content type
application/json
{}

Delete a contact

Permanently deletes a contact. This action cannot be undone.

Authorizations:
API keyBearer token
path Parameters
id
required
string

ID of the contact to be deleted.

Responses

Products

Products describe the goods and services you sell. Attaching a product to an invoice line item ensures consistent tax classification across all documents.

List products

Lists all products, paginated and sorted by creation date (newest first).

Authorizations:
API keyBearer token
query Parameters
q
string

Filters a product list based on the product's name or code. Case-sensitive.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a product

Creates a new product, which could be used as line item on invoices, credit notes and expenses.

Authorizations:
API keyBearer token
Request Body schema: application/json
code
required
string

The product’s SKU (Stock Keeping Unit) describe specific product variations, taking into account any combination of: attributes, currency, and cost.

country
string or null

2-letter ISO country code. Required if tax_based_on is country.

currency
string or null

Three-letter ISO currency code, in uppercase. Must be a supported currency in your payment processors.

description
required
string or null

The product’s description, meant to be displayable to the customer. Use this field to optionally store a long form explanation of the product being sold for your own rendering purposes.

paypal_interval_duration
integer or null

Only for subscriptions. Number of times the charge should recur.

paypal_interval_frequency
integer or null

Only for PayPal subscriptions. The number of intervals between subscription billings.

paypal_interval_unit
string
Default: "monthly"
Enum: "daily" "weekly" "monthly" "yearly"

Only for PayPal subscriptions. Specifies billing frequency.

kind
required
string
Default: "one_off"
Enum: "one_off" "subscription"

The type of transaction: one-off purchase or subscription.

name
required
string

The product’s name, meant to be displayable to the customer.

product_type
required
string
Default: "service"
Enum: "good" "service"

The type of the product. The product is either a tangible good or a service.

stripe_plan_id
string or null

Only for Stripe subscriptions. ID of the Stripe price related to the subscription.

tax_based_on
required
string
Default: "customer_country"
Enum: "customer_country" "country"

How taxes are going to be calculated: based on the customer country or a particular country.

tax_class
required
string
Default: "eservice"
Enum: "consulting" "eservice" "ebook" "saas" "standard" "reduced"

The tax class that applies to the product.

tax_type
required
string
Default: "included"
Enum: "excluded" "included"

Specify if taxes are included or excluded in the unit_cost.

unit_cost
required
string

The unit amount to be charged

stock
required
string or null

The stock of the physical product.

Responses

Request samples

Content type
application/json
{
  • "code": "012345678901-MFN",
  • "country": "US",
  • "currency": "USD",
  • "description": "string",
  • "paypal_interval_duration": 1,
  • "paypal_interval_frequency": 0,
  • "paypal_interval_unit": "monthly",
  • "kind": "one_off",
  • "name": "Ruby Essentials",
  • "product_type": "good",
  • "stripe_plan_id": "price_1GtYUvKYlo3Dy5yXgrQS",
  • "tax_based_on": "customer_country",
  • "tax_class": "consulting",
  • "tax_type": "excluded",
  • "unit_cost": "9.99",
  • "stock": "10"
}

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "code": "012345678901-MFN",
  • "country": "US",
  • "created_at": "1593260908",
  • "currency": "USD",
  • "description": "string",
  • "paypal_interval_duration": 1,
  • "paypal_interval_frequency": 0,
  • "paypal_interval_unit": "monthly",
  • "kind": "one_off",
  • "name": "Ruby Essentials",
  • "product_type": "good",
  • "stripe_plan_id": "price_1GtYUvKYlo3Dy5yXgrQS",
  • "tax_based_on": "customer_country",
  • "tax_class": "consulting",
  • "tax_type": "excluded",
  • "unit_cost": "9.99",
  • "stock": "10"
}

Retrieve a product

Retrieves the details of an existing product.

Authorizations:
API keyBearer token
path Parameters
id
required
string

ID of the desired product.

Responses

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "code": "012345678901-MFN",
  • "country": "US",
  • "created_at": "1593260908",
  • "currency": "USD",
  • "description": "string",
  • "paypal_interval_duration": 1,
  • "paypal_interval_frequency": 0,
  • "paypal_interval_unit": "monthly",
  • "kind": "one_off",
  • "name": "Ruby Essentials",
  • "product_type": "good",
  • "stripe_plan_id": "price_1GtYUvKYlo3Dy5yXgrQS",
  • "tax_based_on": "customer_country",
  • "tax_class": "consulting",
  • "tax_type": "excluded",
  • "unit_cost": "9.99",
  • "stock": "10"
}

Update a product

Updates a product. Any parameters not provided will be left unchanged.

Authorizations:
API keyBearer token
path Parameters
id
required
integer

ID of the product to be updated.

Request Body schema: application/json
code
required
string

The product’s SKU (Stock Keeping Unit) describe specific product variations, taking into account any combination of: attributes, currency, and cost.

country
string or null

2-letter ISO country code. Required if tax_based_on is country.

currency
string or null

Three-letter ISO currency code, in uppercase. Must be a supported currency in your payment processors.

description
required
string or null

The product’s description, meant to be displayable to the customer. Use this field to optionally store a long form explanation of the product being sold for your own rendering purposes.

paypal_interval_duration
integer or null

Only for subscriptions. Number of times the charge should recur.

paypal_interval_frequency
integer or null

Only for PayPal subscriptions. The number of intervals between subscription billings.

paypal_interval_unit
string
Default: "monthly"
Enum: "daily" "weekly" "monthly" "yearly"

Only for PayPal subscriptions. Specifies billing frequency.

kind
required
string
Default: "one_off"
Enum: "one_off" "subscription"

The type of transaction: one-off purchase or subscription.

name
required
string

The product’s name, meant to be displayable to the customer.

product_type
required
string
Default: "service"
Enum: "good" "service"

The type of the product. The product is either a tangible good or a service.

stripe_plan_id
string or null

Only for Stripe subscriptions. ID of the Stripe price related to the subscription.

tax_based_on
required
string
Default: "customer_country"
Enum: "customer_country" "country"

How taxes are going to be calculated: based on the customer country or a particular country.

tax_class
required
string
Default: "eservice"
Enum: "consulting" "eservice" "ebook" "saas" "standard" "reduced"

The tax class that applies to the product.

tax_type
required
string
Default: "included"
Enum: "excluded" "included"

Specify if taxes are included or excluded in the unit_cost.

unit_cost
required
string

The unit amount to be charged

stock
required
string or null

The stock of the physical product.

Responses

Request samples

Content type
application/json
{
  • "code": "012345678901-MFN",
  • "country": "US",
  • "currency": "USD",
  • "description": "string",
  • "paypal_interval_duration": 1,
  • "paypal_interval_frequency": 0,
  • "paypal_interval_unit": "monthly",
  • "kind": "one_off",
  • "name": "Ruby Essentials",
  • "product_type": "good",
  • "stripe_plan_id": "price_1GtYUvKYlo3Dy5yXgrQS",
  • "tax_based_on": "customer_country",
  • "tax_class": "consulting",
  • "tax_type": "excluded",
  • "unit_cost": "9.99",
  • "stock": "10"
}

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "code": "012345678901-MFN",
  • "country": "US",
  • "created_at": "1593260908",
  • "currency": "USD",
  • "description": "string",
  • "paypal_interval_duration": 1,
  • "paypal_interval_frequency": 0,
  • "paypal_interval_unit": "monthly",
  • "kind": "one_off",
  • "name": "Ruby Essentials",
  • "product_type": "good",
  • "stripe_plan_id": "price_1GtYUvKYlo3Dy5yXgrQS",
  • "tax_based_on": "customer_country",
  • "tax_class": "consulting",
  • "tax_type": "excluded",
  • "unit_cost": "9.99",
  • "stock": "10"
}

Delete a product

Permanently deletes a product. This action cannot be undone.

Authorizations:
API keyBearer token
path Parameters
id
required
string

ID of the product to be deleted.

Responses

Calculations

The Calculations endpoint computes the applicable taxes for one or more line items in real time, without creating any records. Use it at checkout to show customers the correct tax before charging them, or to validate your own tax logic against Quaderno's engine.

Calculate tax

Calculates the applicable taxes for one or more line items based on the seller's origin, the customer's address, and the product type.

Pass customer_tax_id when selling to a business — Quaderno will determine whether the transaction qualifies for a reverse charge or zero-rate exemption.

Use tax_behavior to control whether the returned amounts are tax-exclusive (the default) or tax-inclusive. When inclusive, the tax is extracted from the line item amount rather than added on top.

Authorizations:
None
header Parameters
Authorization
required
string
Request Body schema: application/json
object

Physical location of the seller. Required for origin-based tax states (e.g. US states like Texas). Defaults to the account's registered address when omitted.

required
object

Delivery or billing address of the customer. Used to determine the tax jurisdiction.

customer_tax_id
string

Business tax ID of the customer (e.g. a VAT number). When provided and valid, Quaderno applies B2B rules such as reverse charge or zero-rating.

currency
string

Three-letter ISO 4217 currency code for the transaction. Defaults to the account's default currency.

tax_date
integer

Unix timestamp for the tax point date. Defaults to the current date when omitted. Use this to apply the correct rates for past or future transactions.

tax_behavior
string
Enum: "exclusive" "inclusive"

Whether the line item amounts already include tax (inclusive) or tax is added on top (exclusive). Defaults to exclusive.

required
Array of objects

One or more items to calculate tax for. Each item must include a unique reference and the amount in the transaction currency.

Responses

Request samples

Content type
application/json
{
  • "origin_address": {
    },
  • "customer_address": {
    },
  • "customer_tax_id": "FR32123456789",
  • "currency": "EUR",
  • "tax_date": 1700000000,
  • "tax_behavior": "exclusive",
  • "line_items": [
    ]
}

Response samples

Content type
application/json
{
  • "subtotal": "100.00",
  • "total_tax": "19.00",
  • "total": "119.00",
  • "currency": "EUR",
  • "tax_behavior": "exclusive",
  • "tax_context": {
    },
  • "line_items": [
    ],
  • "tax_breakdown": [
    ],
  • "tax_id_validation": {
    }
}

Registrations

Registrations represent your business's tax presence in a specific jurisdiction. Each registration pairs a tax jurisdiction with the local tax ID issued by that authority (for example, a VAT number in Germany or a GST registration in Australia). Quaderno uses your registrations to determine where you are obligated to collect tax and to apply the correct rules for each sale.

List registrations

Returns a list of all your tax registrations. A registration represents your business's tax presence in a specific jurisdiction along with its local tax ID.

Authorizations:
API keyBearer token

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a registration

Creates a new tax registration, associating your business with a tax jurisdiction and its corresponding local tax ID.

Authorizations:
API keyBearer token
Request Body schema: application/json
jurisdiction_id
required
integer

ID of the tax jurisdiction where your business is registered.

value
required
string

The local tax ID issued by the jurisdiction (e.g. a VAT number).

valid_from
string

Date from which the registration is valid. Defaults to the beginning of the current year.

valid_until
string

Expiration date of the registration. Omit or leave blank if the registration has no expiration.

permanent_establishment
boolean
Default: false

Whether your business has a physical presence (office, warehouse, etc.) in the jurisdiction.

import_scheme
boolean
Default: false

Whether the business is enrolled in the EU import scheme for foreign sellers of physical goods.

Responses

Request samples

Content type
application/json
{
  • "jurisdiction_id": 94,
  • "value": "123456789BW0001",
  • "valid_from": "2023-01-01",
  • "valid_until": "",
  • "permanent_establishment": true,
  • "import_scheme": true
}

Response samples

Content type
application/json
{
  • "id": 23546,
  • "import_scheme": true,
  • "jurisdiction": {
    },
  • "permanent_establishment": true,
  • "state": "verified",
  • "valid_from": "2023-01-01",
  • "valid_until": "2024-12-31",
  • "value": "123456789BW0001",
  • "created_at": 1681199310
}

Retrieve a registration

Retrieves the details of an existing registration.

Authorizations:
API keyBearer token
path Parameters
id
required
integer

ID of the registration.

Responses

Response samples

Content type
application/json
{
  • "id": 23546,
  • "import_scheme": true,
  • "jurisdiction": {
    },
  • "permanent_establishment": true,
  • "state": "verified",
  • "valid_from": "2023-01-01",
  • "valid_until": "2024-12-31",
  • "value": "123456789BW0001",
  • "created_at": 1681199310
}

Update a registration

Updates an existing registration. Any parameters not provided will be left unchanged.

Authorizations:
API keyBearer token
path Parameters
id
required
any

ID of the registration to update.

Request Body schema: application/json
value
string

The local tax ID value.

valid_from
string

Date from which the registration is valid.

valid_until
string

Expiration date of the registration, or blank if it has no expiration.

permanent_establishment
boolean
Default: false

Whether your business has a physical presence in the jurisdiction.

import_scheme
boolean
Default: false

Whether the business is enrolled in the EU import scheme for foreign sellers of physical goods.

Responses

Request samples

Content type
application/json
{
  • "value": "123456789BW0001",
  • "valid_from": "2023-01-01",
  • "valid_until": "2024-12-31",
  • "permanent_establishment": true,
  • "import_scheme": true
}

Response samples

Content type
application/json
{
  • "id": 23546,
  • "import_scheme": true,
  • "jurisdiction": {
    },
  • "permanent_establishment": true,
  • "state": "verified",
  • "valid_from": "2023-01-01",
  • "valid_until": "2024-12-31",
  • "value": "123456789BW0001",
  • "created_at": 1681199310
}

Delete a registration

Permanently deletes a registration. This action cannot be undone.

Authorizations:
API keyBearer token
path Parameters
id
required
string

ID of the registration to delete.

Responses

Jurisdictions

Jurisdictions are the geographic areas that define their own tax rules — a country, a state, a province, or a territory. Quaderno maintains a curated list of all supported jurisdictions. Use this endpoint to look up jurisdiction IDs when creating or updating registrations.

Retrieve a jurisdiction

Retrieves a single tax jurisdiction by ID. Use this to look up the details of a jurisdiction before creating a registration.

Authorizations:
API keyBearer token
path Parameters
id
required
string

ID of the jurisdiction to retrieve.

Responses

Response samples

Content type
application/json
{
  • "id": 94,
  • "name": "Canada - British Columbia",
  • "country": "CA",
  • "region": "BC"
}

List all jurisdictions

Returns the list of all tax jurisdictions supported by Quaderno. A jurisdiction is a geographic area with its own tax rules — it can be a country, a state, a province, or a territory.

Use the country and region filters to narrow results. To look up the jurisdiction ID needed to create a registration, filter by country and region code.

Pass region=none to return only country-level jurisdictions (those with no region).

Authorizations:
API keyBearer token
query Parameters
country
string
Example: country=CA

Filter by country. Two-letter ISO 3166-1 country code. Case-sensitive.

region
string

Filter by region (state, province, or territory code). Case-sensitive. Pass none to return only country-level jurisdictions.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Tax Codes

Tax codes classify your products and services for tax purposes. Different jurisdictions apply different rules depending on whether an item is a physical good, a digital service, a SaaS subscription, or an ebook. Assigning the right tax code ensures Quaderno applies the correct rate — and the correct exemption — for every sale.

Retrieve a tax code

Retrieves a tax code, which classify goods and services for tax purposes.

Authorizations:
API keyBearer token
path Parameters
id
required
string
Enum: "consulting" "ebook" "eservice" "exempt" "reduced" "saas" "standard"
Example: eservice

The ID of the tax code to retrieve.

Responses

Response samples

Content type
application/json
{
  • "id": "eservice",
  • "description": "Service that is delivered over the internet. It is essentially automated, involves minimal human intervention and in the absence of information technology does not have viability.",
  • "name": "Electronically supplied services"
}

List all tax codes

Retrieves the list of supported tax codes.

Authorizations:
API keyBearer token

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    }
]

Invoices

Invoices are formal payment requests that document amounts owed by customers for goods or services. Once issued, invoices are legally immutable in most jurisdictions — only administrative fields can be changed. Use the void endpoint to correct a finalized invoice.

List all invoices

Lists all invoices, paginated and sorted by creation date (newest first).

Authorizations:
API keyBearer token
query Parameters
q
string

Filters an invoices list based on the invoice number, customer name or PO number.

date
string

Filters an invoices list based on the issue date. A date range must be entered. Allowed formats are 2019-01-01,2019-12-31 and 2019/01/01,2019/12/31.

state
string
Enum: "outstanding" "late" "uncollectible" "paid"

Filters an invoices list based on the invoice state.

processor_id
string

Filters an invoices list based on its processor_id.

contact
integer

Filters an invoices list based on the customer ID.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create an invoice

Creates a new invoice. If a payment_method is provided, a payment for the full amount is automatically recorded and the invoice is immediately marked as paid.

Authorizations:
API keyBearer token
Request Body schema: application/json
number
string

Unique, sequential number identifying this invoice. Invoice numbers must be sequential without gaps or duplicates to comply with legal requirements. Automatically generated if not provided.

issue_date
string <date>

Date the invoice was issued. May differ from the actual delivery or service date.

po_number
string or null

Customer's purchase order number for reference and tracking.

due_date
string or null <date>

Payment due date. Defines when payment is expected and affects the invoice state (outstanding, late, etc.).

currency
string

Three-letter ISO 4217 currency code in uppercase.

exchange_rate
number or null <float>

Exchange rate applied when converting from transaction currency to account base currency. If omitted, the ECB (European Central Bank) reference rate for the issue date is automatically applied.

tag_list
Array of strings or null

Array of tags for categorizing and filtering invoices. Useful for organizing by product line, sales channel, or custom categories.

payment_details
string or null

Additional information about accepted payment methods, displayed to the customer.

notes
string or null

Internal notes or additional information about this invoice. Not typically shown to customers.

required
contact (object) or object

Customer being billed. Can reference an existing contact by ID or include full contact details.

object (attachment)

Invoices and expenses can have attached files.

street_line_1
string or null

First line of customer's billing address (street address or PO Box).

street_line_2
string or null

Second line of customer's billing address (apartment, suite, unit, or building number).

tax_id
string or null

Customer's tax identification number (VAT number, EIN, etc.). Important for B2B transactions and tax exemptions.

subject
string or null

Brief summary or title describing what this invoice is for. Displayed prominently on the document.

required
Array of objects (document_item)

Line items included in this invoice (products, services, fees, etc.). Maximum 200 items per request; use update requests to add more. Total limit: 1000 items per invoice.

object (evidence)

Location evidence (IP address, billing country, etc.) used to determine applicable tax rates and jurisdictions.

payment_processor
string or null

Name of the payment processor that handled this transaction (e.g., "stripe", "paypal", "braintree").

payment_processor_id
string or null

Transaction ID from the payment processor. Used to link this invoice to the original payment gateway transaction.

processor_fee_cents
integer or null

Payment processing fee charged by the payment processor, in cents.

custom_metadata
object or null

Custom key-value pairs for storing additional structured data. Useful for integrations and storing application-specific information.

payment_method
string
Enum: "credit_card" "cash" "wire_transfer" "direct_debit" "check" "iou" "paypal" "offset" "other"

If provided, a payment for the full invoice amount is automatically recorded using this method, marking the invoice as paid immediately upon creation.

Responses

Request samples

Content type
application/json
{
  • "number": "00001",
  • "issue_date": "2020-06-27",
  • "po_number": "999",
  • "due_date": "2020-07-27",
  • "currency": "USD",
  • "exchange_rate": 0.680309,
  • "tag_list": "consulting, premium",
  • "payment_details": "string",
  • "notes": "string",
  • "contact": {
    },
  • "attachment": {
    },
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "tax_id": "string",
  • "subject": "string",
  • "items": [
    ],
  • "evidence": {
    },
  • "payment_processor": "stripe",
  • "payment_processor_id": "ch_999999999999",
  • "processor_fee_cents": 99,
  • "custom_metadata": { },
  • "payment_method": "credit_card"
}

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "created_at": 1593260908,
  • "number": "00001",
  • "issue_date": "2020-06-27",
  • "related_document": {
    },
  • "po_number": "999",
  • "due_date": "2020-07-27",
  • "currency": "USD",
  • "exchange_rate": 0.680309,
  • "tag_list": "consulting, premium",
  • "payment_details": "string",
  • "notes": "string",
  • "contact": {},
  • "country": "US",
  • "postal_code": "91104",
  • "region": "CA",
  • "city": "Pasadena",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "tax_id": "string",
  • "subject": "string",
  • "deliveries": [
    ],
  • "items": [
    ],
  • "taxes": [
    ],
  • "payments": [],
  • "evidence": {
    },
  • "payment_processor": "stripe",
  • "payment_processor_id": "ch_999999999999",
  • "processor_fee_cents": 99,
  • "custom_metadata": { },
  • "subtotal_cents": 9375,
  • "discount_cents": 0,
  • "total_cents": 9375,
  • "state": "outstanding",
  • "alerts": [
    ],
}

Retrieve an invoice

Retrieves the details of an existing invoice. You need only supply the unique invoice identifier that was returned upon invoice creation.

Authorizations:
API keyBearer token
path Parameters
id
required
string

The ID of the desired invoice.

Responses

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "created_at": 1593260908,
  • "number": "00001",
  • "issue_date": "2020-06-27",
  • "related_document": {
    },
  • "po_number": "999",
  • "due_date": "2020-07-27",
  • "currency": "USD",
  • "exchange_rate": 0.680309,
  • "tag_list": "consulting, premium",
  • "payment_details": "string",
  • "notes": "string",
  • "contact": {},
  • "country": "US",
  • "postal_code": "91104",
  • "region": "CA",
  • "city": "Pasadena",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "tax_id": "string",
  • "subject": "string",
  • "deliveries": [
    ],
  • "items": [
    ],
  • "taxes": [
    ],
  • "payments": [],
  • "evidence": {
    },
  • "payment_processor": "stripe",
  • "payment_processor_id": "ch_999999999999",
  • "processor_fee_cents": 99,
  • "custom_metadata": { },
  • "subtotal_cents": 9375,
  • "discount_cents": 0,
  • "total_cents": 9375,
  • "state": "outstanding",
  • "alerts": [
    ],
}

Update an invoice

Updates an existing invoice. Once finalized, invoices are legally immutable — tax law prohibits altering amounts, line items, dates, or customer details on issued invoices. Only administrative fields (tag_list, payment_details, notes, custom_metadata) can still be modified. If a correction is needed, void the invoice and issue a new one.

Authorizations:
API keyBearer token
path Parameters
id
required
integer

The ID of the invoice to be updated.

Request Body schema: application/json
tag_list
Array of strings or null

Multiple tags should be separated by commas.

payment_details
string or null

Detailed information about the accepted payment methods.

notes
string or null

Extra notes about the document.

custom_metadata
object or null

Set of key-value pairs that you can attach to an object.

object (attachment)

Invoices and expenses can have attached files.

Responses

Request samples

Content type
application/json
{
  • "tag_list": "consulting, premium",
  • "payment_details": "string",
  • "notes": "string",
  • "custom_metadata": {
    },
  • "attachment": {
    }
}

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "created_at": 1593260908,
  • "number": "00001",
  • "issue_date": "2020-06-27",
  • "related_document": {
    },
  • "po_number": "999",
  • "due_date": "2020-07-27",
  • "currency": "USD",
  • "exchange_rate": 0.680309,
  • "tag_list": "consulting, premium",
  • "payment_details": "string",
  • "notes": "string",
  • "contact": {},
  • "country": "US",
  • "postal_code": "91104",
  • "region": "CA",
  • "city": "Pasadena",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "tax_id": "string",
  • "subject": "string",
  • "deliveries": [
    ],
  • "items": [
    ],
  • "taxes": [
    ],
  • "payments": [],
  • "evidence": {
    },
  • "payment_processor": "stripe",
  • "payment_processor_id": "ch_999999999999",
  • "processor_fee_cents": 99,
  • "custom_metadata": { },
  • "subtotal_cents": 9375,
  • "discount_cents": 0,
  • "total_cents": 9375,
  • "state": "outstanding",
  • "alerts": [
    ],
}

Mark an invoice as uncollectible

Marks an invoice as uncollectible. This is useful for tracking invoices that you have determined will not be paid.

Authorizations:
API keyBearer token
path Parameters
id
required
string

The ID of the desired invoice.

Responses

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "created_at": 1593260908,
  • "number": "00001",
  • "issue_date": "2020-06-27",
  • "related_document": {
    },
  • "po_number": "999",
  • "due_date": "2020-07-27",
  • "currency": "USD",
  • "exchange_rate": 0.680309,
  • "tag_list": "consulting, premium",
  • "payment_details": "string",
  • "notes": "string",
  • "contact": {},
  • "country": "US",
  • "postal_code": "91104",
  • "region": "CA",
  • "city": "Pasadena",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "tax_id": "string",
  • "subject": "string",
  • "deliveries": [
    ],
  • "items": [
    ],
  • "taxes": [
    ],
  • "payments": [],
  • "evidence": {
    },
  • "payment_processor": "stripe",
  • "payment_processor_id": "ch_999999999999",
  • "processor_fee_cents": 99,
  • "custom_metadata": { },
  • "subtotal_cents": 9375,
  • "discount_cents": 0,
  • "total_cents": 9375,
  • "state": "outstanding",
  • "alerts": [
    ],
}

Void an invoice

Voids an invoice by creating a credit note with the given reason. If the invoice is pending, it will be marked as paid via an offset payment.

Authorizations:
API keyBearer token
path Parameters
id
required
string

The ID of the invoice to void.

Request Body schema: application/json
void_reason
required
string

Responses

Request samples

Content type
application/json
{
  • "void_reason": "string"
}

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "created_at": 1593260908,
  • "number": "00001",
  • "issue_date": "2020-06-27",
  • "related_document": {
    },
  • "po_number": "999",
  • "due_date": "2020-07-27",
  • "currency": "USD",
  • "exchange_rate": 0.680309,
  • "tag_list": "consulting, premium",
  • "payment_details": "string",
  • "notes": "string",
  • "contact": {},
  • "country": "US",
  • "postal_code": "91104",
  • "region": "CA",
  • "city": "Pasadena",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "tax_id": "string",
  • "subject": "string",
  • "deliveries": [
    ],
  • "items": [
    ],
  • "taxes": [
    ],
  • "payments": [],
  • "evidence": {
    },
  • "payment_processor": "stripe",
  • "payment_processor_id": "ch_999999999999",
  • "processor_fee_cents": 99,
  • "custom_metadata": { },
  • "subtotal_cents": 9375,
  • "discount_cents": 0,
  • "total_cents": 9375,
  • "state": "outstanding",
  • "alerts": [
    ],
}

Record a payment

Records a payment against an invoice. When the total payments reach the invoice amount, the invoice is automatically marked as paid.

Authorizations:
API keyBearer token
path Parameters
id
required
string

The ID of the invoice.

Request Body schema: application/json
amount
number <float>

Paid amount.

date
string or null <date>

Default is current date.

payment_method
string or null
Enum: "credit_card" "cash" "wire_transfer" "direct_debit" "check" "iou" "paypal" "other" "credit" "offset"
processor
string or null

The payment processor used to process the payment.

processor_id
string or null

The ID the payment_processor assigned to the payment.

Responses

Request samples

Content type
application/json
{
  • "amount": 56.6,
  • "date": "2020-06-27",
  • "payment_method": "credit_card",
  • "processor": "stripe",
  • "processor_id": "ch_999999999999"
}

Response samples

Content type
application/json
{}

Deliver an invoice

Sends the invoice to the customer via email using the account's configured invoice template and language. The contact must have a valid email address. Delivery history is recorded and accessible via the deliveries field.

Authorizations:
API keyBearer token
path Parameters
id
required
string

The ID of the desired invoice.

Responses

Receipts

Receipts document completed transactions. Unlike invoices, receipts are always paid by definition — a payment method is required at creation. They are immutable after creation; use the void endpoint if a correction is needed.

List all receipts

Lists all receipts, paginated and sorted by creation date (newest first). All receipts are paid by definition.

Authorizations:
API keyBearer token
query Parameters
q
string

Filters an receipts list based on the receipt number, customer name or PO number.

date
string

Filters an receipts list based on the issue date. A date range must be entered. Allowed formats are 2019-01-01,2019-12-31 and 2019/01/01,2019/12/31.

processor_id
string

Filters an receipts list based on its processor_id.

contact
integer

Filters an receipts list based on the customer ID.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a receipt

Creates a new receipt documenting a completed transaction. Unlike invoices, receipts are always paid — a payment_method is required. Receipts are immutable after creation and cannot be updated or deleted. Use the void endpoint if a correction is needed.

Authorizations:
API keyBearer token
Request Body schema: application/json
number
string

Unique, sequential number identifying this receipt. Receipt numbers must be sequential without gaps or duplicates to comply with legal requirements. Automatically generated if not provided.

issue_date
string <date>

Date the receipt was issued. May differ from the actual transaction date.

po_number
string or null

Customer's purchase order number for reference and tracking.

due_date
string or null <date>

Payment due date. For receipts this is typically the same as the issue date since payment is usually immediate.

currency
string

Three-letter ISO 4217 currency code in uppercase.

exchange_rate
number or null <float>

Exchange rate applied when converting from transaction currency to account base currency. If omitted, the ECB (European Central Bank) reference rate for the issue date is automatically applied.

tag_list
Array of strings or null

Array of tags for categorizing and filtering receipts. Useful for organizing by product line, sales channel, or custom categories.

payment_details
string or null

Additional information about accepted payment methods, displayed to the customer.

notes
string or null

Internal notes or additional information about this receipt. Not typically shown to customers.

required
contact (object) or object

Customer receiving this receipt. Can reference an existing contact by ID or include full contact details.

street_line_1
string or null

First line of customer's billing address (street address or PO Box).

street_line_2
string or null

Second line of customer's billing address (apartment, suite, unit, or building number).

subject
string or null

Brief summary or title describing what this receipt is for. Displayed prominently on the document.

required
Array of objects (document_item)

Line items included in this receipt (products, services, fees, etc.). Maximum 200 items per request; use update requests to add more. Total limit: 1000 items per receipt.

object (evidence)

Location evidence (IP address, billing country, etc.) used to determine applicable tax rates and jurisdictions.

payment_processor
string or null

Name of the payment processor that handled this transaction (e.g., "stripe", "paypal", "braintree").

payment_processor_id
string or null

Transaction ID from the payment processor. Used to link this receipt to the original payment gateway transaction.

processor_fee_cents
integer or null

Payment processing fee charged by the payment processor, in cents.

custom_metadata
object or null

Custom key-value pairs for storing additional structured data. Useful for integrations and storing application-specific information.

payment_method
required
string
Enum: "credit_card" "cash" "wire_transfer" "direct_debit" "check" "iou" "paypal" "offset" "other"

How the customer paid. Required — receipts document completed transactions and must always record the payment method used.

Responses

Request samples

Content type
application/json
{
  • "number": "00001",
  • "issue_date": "2020-06-27",
  • "po_number": "999",
  • "due_date": "2020-07-27",
  • "currency": "USD",
  • "exchange_rate": 0.680309,
  • "tag_list": "consulting, premium",
  • "payment_details": "string",
  • "notes": "string",
  • "contact": {
    },
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "subject": "string",
  • "items": [
    ],
  • "evidence": {
    },
  • "payment_processor": "stripe",
  • "payment_processor_id": "ch_999999999999",
  • "processor_fee_cents": 99,
  • "custom_metadata": { },
  • "payment_method": "credit_card"
}

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "created_at": 1593260908,
  • "number": "00001",
  • "issue_date": "2020-06-27",
  • "po_number": "999",
  • "due_date": "2020-07-27",
  • "currency": "USD",
  • "exchange_rate": 0.680309,
  • "tag_list": "consulting, premium",
  • "payment_details": "string",
  • "notes": "string",
  • "contact": {},
  • "attachments": [
    ],
  • "country": "US",
  • "postal_code": "91104",
  • "region": "CA",
  • "city": "Pasadena",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "subject": "string",
  • "deliveries": [
    ],
  • "items": [
    ],
  • "taxes": [
    ],
  • "payments": [],
  • "evidence": {
    },
  • "payment_processor": "stripe",
  • "payment_processor_id": "ch_999999999999",
  • "processor_fee_cents": 99,
  • "custom_metadata": { },
  • "subtotal_cents": 9375,
  • "discount_cents": 0,
  • "total_cents": 9375,
  • "state": "paid",
  • "alerts": [
    ],
}

Retrieve an receipt

Retrieves the details of an existing receipt.

Authorizations:
API keyBearer token
path Parameters
id
required
string

The ID of the desired receipt.

Responses

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "created_at": 1593260908,
  • "number": "00001",
  • "issue_date": "2020-06-27",
  • "po_number": "999",
  • "due_date": "2020-07-27",
  • "currency": "USD",
  • "exchange_rate": 0.680309,
  • "tag_list": "consulting, premium",
  • "payment_details": "string",
  • "notes": "string",
  • "contact": {},
  • "attachments": [
    ],
  • "country": "US",
  • "postal_code": "91104",
  • "region": "CA",
  • "city": "Pasadena",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "subject": "string",
  • "deliveries": [
    ],
  • "items": [
    ],
  • "taxes": [
    ],
  • "payments": [],
  • "evidence": {
    },
  • "payment_processor": "stripe",
  • "payment_processor_id": "ch_999999999999",
  • "processor_fee_cents": 99,
  • "custom_metadata": { },
  • "subtotal_cents": 9375,
  • "discount_cents": 0,
  • "total_cents": 9375,
  • "state": "paid",
  • "alerts": [
    ],
}

Void a receipt

Voids a receipt by automatically issuing an offsetting credit note. Tax law prohibits deleting receipts — voiding is the only way to reverse a completed transaction. A void_reason is required for audit purposes.

Authorizations:
API keyBearer token
path Parameters
id
required
string

The ID of the receipt to void.

Request Body schema: application/json
void_reason
required
string

Responses

Request samples

Content type
application/json
{
  • "void_reason": "string"
}

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "created_at": 1593260908,
  • "number": "00001",
  • "issue_date": "2020-06-27",
  • "po_number": "999",
  • "due_date": "2020-07-27",
  • "currency": "USD",
  • "exchange_rate": 0.680309,
  • "tag_list": "consulting, premium",
  • "payment_details": "string",
  • "notes": "string",
  • "contact": {},
  • "attachments": [
    ],
  • "country": "US",
  • "postal_code": "91104",
  • "region": "CA",
  • "city": "Pasadena",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "subject": "string",
  • "deliveries": [
    ],
  • "items": [
    ],
  • "taxes": [
    ],
  • "payments": [],
  • "evidence": {
    },
  • "payment_processor": "stripe",
  • "payment_processor_id": "ch_999999999999",
  • "processor_fee_cents": 99,
  • "custom_metadata": { },
  • "subtotal_cents": 9375,
  • "discount_cents": 0,
  • "total_cents": 9375,
  • "state": "paid",
  • "alerts": [
    ],
}

Deliver an receipt

Sends the receipt to the customer via email using the account's configured invoice template and language. The contact must have a valid email address. Delivery history is recorded and accessible via the deliveries field.

Authorizations:
API keyBearer token
path Parameters
id
required
string

The ID of the desired receipt.

Responses

Credits

Credit notes reduce or cancel amounts owed by customers. They are used for refunds, order cancellations, and pricing corrections. Tax law prohibits deleting credit notes — voiding is the only way to reverse one.

List all credit notes

Lists all credit notes, paginated and sorted by creation date (newest first). Credit notes are used to cancel or partially refund an invoice.

Authorizations:
API keyBearer token
query Parameters
q
string

Filters a credit notes list based on the credit number, customer name or PO number.

date
string

Filters a credit notes list based on the issue date. A date range must be entered. Allowed formats are 2019-01-01,2019-12-31 and 2019/01/01,2019/12/31.

state
string
Enum: "outstanding" "late" "paid"

Filters a credit notes list based on the credit state.

processor_id
string

Filters a credit notes list based on its processor_id.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a credit note

Creates a credit note against an existing invoice. The credit note offsets the invoice amount — fully or partially — and automatically records the refund. Credit notes are immutable after creation and cannot be updated or deleted. Use the void endpoint if a correction is needed.

Authorizations:
API keyBearer token
Request Body schema: application/json
invoice_id
required
integer

The ID of the refunded invoice.

payment_method
string
Enum: "credit_card" "cash" "wire_transfer" "direct_debit" "check" "iou" "paypal" "other"

Payment method used to refund the credited amount.

credited_amount
number

Total amount to be credited, equal or lower than the total amount of the related invoice. Only works for refunds of invoices with one single item. When empty, defaults to the total amount of the related invoice.

Responses

Request samples

Content type
application/json
Example
{
  • "invoice_id": 139331
}

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "created_at": "1593260908",
  • "number": "00001",
  • "issue_date": "2020-06-27",
  • "related_document": {
    },
  • "po_number": "999",
  • "due_date": "2020-07-27",
  • "currency": "USD",
  • "tag_list": "refund, product_return",
  • "notes": "string",
  • "contact": {},
  • "country": "US",
  • "postal_code": "91104",
  • "region": "CA",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "tax_id": "string",
  • "subject": "Product return refund",
  • "deliveries": [
    ],
  • "items": [
    ],
  • "taxes": [
    ],
  • "payments": [],
  • "payment_processor": "stripe",
  • "payment_processor_id": "ch_999999999999",
  • "processor_fee_cents": 99,
  • "custom_metadata": { },
  • "exchange_rate": 0.680309,
  • "subtotal_cents": 9375,
  • "discount_cents": 0,
  • "total_cents": 9375,
  • "state": "outstanding",
}

Retrieve a credit note

Retrieves the details of an existing credit note. You need only supply the unique identifier returned upon creation.

Authorizations:
API keyBearer token
path Parameters
id
required
string

The ID of the desired credit.

Responses

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "created_at": "1593260908",
  • "number": "00001",
  • "issue_date": "2020-06-27",
  • "related_document": {
    },
  • "po_number": "999",
  • "due_date": "2020-07-27",
  • "currency": "USD",
  • "tag_list": "refund, product_return",
  • "notes": "string",
  • "contact": {},
  • "country": "US",
  • "postal_code": "91104",
  • "region": "CA",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "tax_id": "string",
  • "subject": "Product return refund",
  • "deliveries": [
    ],
  • "items": [
    ],
  • "taxes": [
    ],
  • "payments": [],
  • "payment_processor": "stripe",
  • "payment_processor_id": "ch_999999999999",
  • "processor_fee_cents": 99,
  • "custom_metadata": { },
  • "exchange_rate": 0.680309,
  • "subtotal_cents": 9375,
  • "discount_cents": 0,
  • "total_cents": 9375,
  • "state": "outstanding",
}

Update a credit note

Updates an existing credit note. Once finalized, credit notes are legally immutable — tax law prohibits altering amounts, line items, or customer details. Only administrative fields (tag_list, payment_details, notes, custom_metadata) can still be modified. If a correction is needed, void the credit note and issue a new one.

Authorizations:
API keyBearer token
path Parameters
id
required
integer

The ID of the credit to be updated.

Request Body schema: application/json
tag_list
Array of strings or null

Multiple tags should be separated by commas.

payment_details
string or null

Detailed information about the accepted payment methods.

notes
string or null

Extra notes about the document.

custom_metadata
object or null

Set of key-value pairs that you can attach to an object.

object (attachment)

Invoices and expenses can have attached files.

Responses

Request samples

Content type
application/json
{
  • "tag_list": "consulting, premium",
  • "payment_details": "string",
  • "notes": "string",
  • "custom_metadata": {
    },
  • "attachment": {
    }
}

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "created_at": "1593260908",
  • "number": "00001",
  • "issue_date": "2020-06-27",
  • "related_document": {
    },
  • "po_number": "999",
  • "due_date": "2020-07-27",
  • "currency": "USD",
  • "tag_list": "refund, product_return",
  • "notes": "string",
  • "contact": {},
  • "country": "US",
  • "postal_code": "91104",
  • "region": "CA",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "tax_id": "string",
  • "subject": "Product return refund",
  • "deliveries": [
    ],
  • "items": [
    ],
  • "taxes": [
    ],
  • "payments": [],
  • "payment_processor": "stripe",
  • "payment_processor_id": "ch_999999999999",
  • "processor_fee_cents": 99,
  • "custom_metadata": { },
  • "exchange_rate": 0.680309,
  • "subtotal_cents": 9375,
  • "discount_cents": 0,
  • "total_cents": 9375,
  • "state": "outstanding",
}

Record a payment

Records a payment against a credit note. When the total payments reach the credit note amount, it is automatically marked as paid.

Authorizations:
API keyBearer token
path Parameters
id
required
string

The ID of the credit note.

Request Body schema: application/json
amount
number <float>

Paid amount.

date
string or null <date>

Default is current date.

payment_method
string or null
Enum: "credit_card" "cash" "wire_transfer" "direct_debit" "check" "iou" "paypal" "other" "credit" "offset"
processor
string or null

The payment processor used to process the payment.

processor_id
string or null

The ID the payment_processor assigned to the payment.

Responses

Request samples

Content type
application/json
{
  • "amount": 56.6,
  • "date": "2020-06-27",
  • "payment_method": "credit_card",
  • "processor": "stripe",
  • "processor_id": "ch_999999999999"
}

Response samples

Content type
application/json
{}

Void a credit note

Voids a credit note, effectively canceling it. Tax law prohibits deleting credit notes — voiding is the only way to reverse one. A void_reason is required for audit purposes. Voiding reopens the original invoice if it was closed by this credit note.

Authorizations:
API keyBearer token
path Parameters
id
required
integer

The ID of the credit to be voided.

Request Body schema: application/json
void_reason
required
string

Responses

Request samples

Content type
application/json
{
  • "void_reason": "string"
}

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "created_at": "1593260908",
  • "number": "00001",
  • "issue_date": "2020-06-27",
  • "related_document": {
    },
  • "po_number": "999",
  • "due_date": "2020-07-27",
  • "currency": "USD",
  • "tag_list": "refund, product_return",
  • "notes": "string",
  • "contact": {},
  • "country": "US",
  • "postal_code": "91104",
  • "region": "CA",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "tax_id": "string",
  • "subject": "Product return refund",
  • "deliveries": [
    ],
  • "items": [
    ],
  • "taxes": [
    ],
  • "payments": [],
  • "payment_processor": "stripe",
  • "payment_processor_id": "ch_999999999999",
  • "processor_fee_cents": 99,
  • "custom_metadata": { },
  • "exchange_rate": 0.680309,
  • "subtotal_cents": 9375,
  • "discount_cents": 0,
  • "total_cents": 9375,
  • "state": "outstanding",
}

Deliver a credit

Sends the credit note to the customer via email using the account's configured template and language. The contact must have a valid email address. Delivery history is recorded and accessible via the deliveries field.

Authorizations:
API keyBearer token
path Parameters
id
required
string

The ID of the desired credit.

Responses

Proformas

Proformas are preliminary documents sent to customers before a sale is confirmed. They outline the expected cost and can be accepted, declined, or converted into a full invoice once the customer agrees.

List all proformas

Lists all proformas, paginated and sorted by creation date (newest first).

Authorizations:
API keyBearer token
query Parameters
q
string

Filters a proformas list based on the proforma number, customer name or PO number.

date
string

Filters a proformas list based on the issue date. A date range must be entered. Allowed formats are 2019-01-01,2019-12-31 and 2019/01/01,2019/12/31.

state
string
Enum: "outstanding" "accepted" "declined" "invoiced" "late"

Filters a proformas list based on the proforma state.

contact
integer

Filters a proformas list based on the customer ID.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a proforma

Creates a new proforma object.

Authorizations:
API keyBearer token
Request Body schema: application/json
object (attachment)

Invoices and expenses can have attached files.

required
contact (object) or object

Customer receiving the proforma. Can reference an existing contact by ID or include full contact details.

currency
string

Three-letter ISO 4217 currency code in uppercase.

custom_metadata
object or null

Custom key-value pairs for storing additional structured data.

due_days
integer or null

Number of days after the invoice issue date when payment is due. When the proforma is converted to an invoice, the invoice due_date is calculated as issue_date + due_days.

required
Array of objects (document_item)

Line items included in this proforma (products, services, fees, etc.).

notes
string or null

Internal notes or additional information about this proforma.

payment_details
string or null

Additional information about accepted payment methods, displayed to the customer.

po_number
string or null

Customer's purchase order number for reference and tracking.

street_line_1
string or null

First line of customer's billing address.

street_line_2
string or null

Second line of customer's billing address.

subject
string or null

Brief summary or title describing what this proforma is for. Displayed prominently on the document.

tag_list
Array of strings or null

Array of tags for categorizing and filtering proformas.

tax_id
string or null

Customer's tax identification number (VAT number, EIN, etc.).

valid_until
string or null <date>

Expiration date of the proforma. Once this date is passed and the proforma has not been accepted, it transitions to the "late" state.

Responses

Request samples

Content type
application/json
{
  • "attachment": {
    },
  • "contact": {
    },
  • "currency": "USD",
  • "custom_metadata": { },
  • "due_days": 30,
  • "items": [
    ],
  • "notes": "string",
  • "payment_details": "string",
  • "po_number": "999",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "subject": "string",
  • "tag_list": "consulting, premium",
  • "tax_id": "string",
  • "valid_until": "2020-07-27"
}

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "created_at": 1593260908,
  • "alerts": [
    ],
  • "city": "Pasadena",
  • "contact": {},
  • "country": "US",
  • "currency": "USD",
  • "custom_metadata": { },
  • "deliveries": [
    ],
  • "due_days": 30,
  • "discount_cents": 0,
  • "issue_date": "2020-06-27",
  • "items": [
    ],
  • "notes": "string",
  • "number": "E-00001",
  • "payment_details": "string",
  • "po_number": "999",
  • "postal_code": "91104",
  • "region": "CA",
  • "state": "outstanding",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "subject": "string",
  • "subtotal_cents": 9375,
  • "tag_list": "consulting, premium",
  • "tax_id": "string",
  • "taxes": [
    ],
  • "total_cents": 9375,
  • "valid_until": "2020-07-27"
}

Retrieve a proforma

Retrieves the details of an existing proforma.

Authorizations:
API keyBearer token
path Parameters
id
required
string

The ID of the desired proforma.

Responses

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "created_at": 1593260908,
  • "alerts": [
    ],
  • "city": "Pasadena",
  • "contact": {},
  • "country": "US",
  • "currency": "USD",
  • "custom_metadata": { },
  • "deliveries": [
    ],
  • "due_days": 30,
  • "discount_cents": 0,
  • "issue_date": "2020-06-27",
  • "items": [
    ],
  • "notes": "string",
  • "number": "E-00001",
  • "payment_details": "string",
  • "po_number": "999",
  • "postal_code": "91104",
  • "region": "CA",
  • "state": "outstanding",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "subject": "string",
  • "subtotal_cents": 9375,
  • "tag_list": "consulting, premium",
  • "tax_id": "string",
  • "taxes": [
    ],
  • "total_cents": 9375,
  • "valid_until": "2020-07-27"
}

Update a proforma

Updates an existing proforma. Accepted and invoiced proformas cannot be modified.

Authorizations:
API keyBearer token
path Parameters
id
required
integer

The ID of the proforma to be updated.

Request Body schema: application/json
object (attachment)

Invoices and expenses can have attached files.

required
contact (object) or object

Customer receiving the proforma. Can reference an existing contact by ID or include full contact details.

currency
string

Three-letter ISO 4217 currency code in uppercase.

custom_metadata
object or null

Custom key-value pairs for storing additional structured data.

due_days
integer or null

Number of days after the invoice issue date when payment is due. When the proforma is converted to an invoice, the invoice due_date is calculated as issue_date + due_days.

required
Array of objects (document_item)

Line items included in this proforma (products, services, fees, etc.).

notes
string or null

Internal notes or additional information about this proforma.

payment_details
string or null

Additional information about accepted payment methods, displayed to the customer.

po_number
string or null

Customer's purchase order number for reference and tracking.

street_line_1
string or null

First line of customer's billing address.

street_line_2
string or null

Second line of customer's billing address.

subject
string or null

Brief summary or title describing what this proforma is for. Displayed prominently on the document.

tag_list
Array of strings or null

Array of tags for categorizing and filtering proformas.

tax_id
string or null

Customer's tax identification number (VAT number, EIN, etc.).

valid_until
string or null <date>

Expiration date of the proforma. Once this date is passed and the proforma has not been accepted, it transitions to the "late" state.

Responses

Request samples

Content type
application/json
{
  • "attachment": {
    },
  • "contact": {
    },
  • "currency": "USD",
  • "custom_metadata": { },
  • "due_days": 30,
  • "items": [
    ],
  • "notes": "string",
  • "payment_details": "string",
  • "po_number": "999",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "subject": "string",
  • "tag_list": "consulting, premium",
  • "tax_id": "string",
  • "valid_until": "2020-07-27"
}

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "created_at": 1593260908,
  • "alerts": [
    ],
  • "city": "Pasadena",
  • "contact": {},
  • "country": "US",
  • "currency": "USD",
  • "custom_metadata": { },
  • "deliveries": [
    ],
  • "due_days": 30,
  • "discount_cents": 0,
  • "issue_date": "2020-06-27",
  • "items": [
    ],
  • "notes": "string",
  • "number": "E-00001",
  • "payment_details": "string",
  • "po_number": "999",
  • "postal_code": "91104",
  • "region": "CA",
  • "state": "outstanding",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "subject": "string",
  • "subtotal_cents": 9375,
  • "tag_list": "consulting, premium",
  • "tax_id": "string",
  • "taxes": [
    ],
  • "total_cents": 9375,
  • "valid_until": "2020-07-27"
}

Accept a proforma

Marks a proforma as accepted by the customer. Only proformas in "outstanding" or "late" state can be accepted.

Authorizations:
API keyBearer token
path Parameters
id
required
string

The ID of the proforma to accept.

Responses

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "created_at": 1593260908,
  • "alerts": [
    ],
  • "city": "Pasadena",
  • "contact": {},
  • "country": "US",
  • "currency": "USD",
  • "custom_metadata": { },
  • "deliveries": [
    ],
  • "due_days": 30,
  • "discount_cents": 0,
  • "issue_date": "2020-06-27",
  • "items": [
    ],
  • "notes": "string",
  • "number": "E-00001",
  • "payment_details": "string",
  • "po_number": "999",
  • "postal_code": "91104",
  • "region": "CA",
  • "state": "outstanding",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "subject": "string",
  • "subtotal_cents": 9375,
  • "tag_list": "consulting, premium",
  • "tax_id": "string",
  • "taxes": [
    ],
  • "total_cents": 9375,
  • "valid_until": "2020-07-27"
}

Decline a proforma

Marks a proforma as declined by the customer. Only proformas in "outstanding" or "late" state can be declined.

Authorizations:
API keyBearer token
path Parameters
id
required
string

The ID of the proforma to decline.

Responses

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "created_at": 1593260908,
  • "alerts": [
    ],
  • "city": "Pasadena",
  • "contact": {},
  • "country": "US",
  • "currency": "USD",
  • "custom_metadata": { },
  • "deliveries": [
    ],
  • "due_days": 30,
  • "discount_cents": 0,
  • "issue_date": "2020-06-27",
  • "items": [
    ],
  • "notes": "string",
  • "number": "E-00001",
  • "payment_details": "string",
  • "po_number": "999",
  • "postal_code": "91104",
  • "region": "CA",
  • "state": "outstanding",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "subject": "string",
  • "subtotal_cents": 9375,
  • "tag_list": "consulting, premium",
  • "tax_id": "string",
  • "taxes": [
    ],
  • "total_cents": 9375,
  • "valid_until": "2020-07-27"
}

Revert a proforma

Reverts a proforma back to "outstanding" from "accepted" or "declined". Invoiced proformas cannot be reverted.

Authorizations:
API keyBearer token
path Parameters
id
required
string

The ID of the proforma to revert.

Responses

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "created_at": 1593260908,
  • "alerts": [
    ],
  • "city": "Pasadena",
  • "contact": {},
  • "country": "US",
  • "currency": "USD",
  • "custom_metadata": { },
  • "deliveries": [
    ],
  • "due_days": 30,
  • "discount_cents": 0,
  • "issue_date": "2020-06-27",
  • "items": [
    ],
  • "notes": "string",
  • "number": "E-00001",
  • "payment_details": "string",
  • "po_number": "999",
  • "postal_code": "91104",
  • "region": "CA",
  • "state": "outstanding",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "subject": "string",
  • "subtotal_cents": 9375,
  • "tag_list": "consulting, premium",
  • "tax_id": "string",
  • "taxes": [
    ],
  • "total_cents": 9375,
  • "valid_until": "2020-07-27"
}

Convert a proforma into an invoice

Converts an accepted proforma into an invoice. The proforma state transitions to "invoiced" and a new invoice is returned. Only proformas in the "accepted" state can be converted.

Authorizations:
API keyBearer token
path Parameters
id
required
string

The ID of the proforma to convert.

Responses

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "created_at": 1593260908,
  • "number": "00001",
  • "issue_date": "2020-06-27",
  • "related_document": {
    },
  • "po_number": "999",
  • "due_date": "2020-07-27",
  • "currency": "USD",
  • "exchange_rate": 0.680309,
  • "tag_list": "consulting, premium",
  • "payment_details": "string",
  • "notes": "string",
  • "contact": {},
  • "country": "US",
  • "postal_code": "91104",
  • "region": "CA",
  • "city": "Pasadena",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "tax_id": "string",
  • "subject": "string",
  • "deliveries": [
    ],
  • "items": [
    ],
  • "taxes": [
    ],
  • "payments": [],
  • "evidence": {
    },
  • "payment_processor": "stripe",
  • "payment_processor_id": "ch_999999999999",
  • "processor_fee_cents": 99,
  • "custom_metadata": { },
  • "subtotal_cents": 9375,
  • "discount_cents": 0,
  • "total_cents": 9375,
  • "state": "outstanding",
  • "alerts": [
    ],
}

Deliver a proforma

Delivers a proforma to your customer via email.

Authorizations:
API keyBearer token
path Parameters
id
required
string

The ID of the desired proforma.

Responses

Expenses

Expenses record the costs your business incurs from vendors and suppliers. They appear in your financial reports and can be used to track deductible business expenditures.

List all expenses

Lists all expenses, paginated and sorted by creation date (newest first).

Authorizations:
API keyBearer token
query Parameters
q
string

Filters an expenses list based on the expense number, customer name or PO number.

date
string

Filters an expenses list based on the issue date. A date range must be entered. Allowed formats are 2019-01-01,2019-12-31 and 2019/01/01,2019/12/31.

state
string
Enum: "outstanding" "late" "paid"

Filters an expenses list based on the expense state: outstanding, late and paid.

contact
integer

Filters an expenses list based on the customer ID.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create an expense

Creates a new expense.

Authorizations:
API keyBearer token
Request Body schema: application/json
issue_date
string <date>

Date when the expense was issued.

po_number
string or null

Purchase order number.

currency
string

Three-letter ISO currency code, in uppercase.

tag_list
Array of strings or null

Multiple tags should be separated by commas.

payment_details
string or null

Detailed information about the payment.

notes
string or null

Extra notes about the expense.

required
contact (object) or object

Provider of your expense.

object (attachment)

Invoices and expenses can have attached files.

country
string

The customer’s billing country. 2-letter ISO country code.

postal_code
string or null

The customer’s billing ZIP or postal code.

region
string or null

The customer’s billing state/province/region.

street_line_1
string or null

The customer’s billing address line 1 (Street address/PO Box).

street_line_2
string or null

The customer’s billing address line 2 (Apartment/Suite/Unit/Building).

subject
string or null

An optional summary description of the document.

required
Array of objects (document_item)

The individual line items that make up the expense. No more than 200 items are allowed in a request. To add more use subsequent update requests. Maximum items per document are limited up to 1000 items.

payment_method
string
Enum: "credit_card" "cash" "wire_transfer" "direct_debit" "check" "iou" "paypal" "other"

Payment method used.

payment_processor
string or null

The payment processor used to pay the expense.

payment_processor_id
string or null

The ID the payment_processor assigned to the payment.

custom_metadata
object or null

Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format.

Responses

Request samples

Content type
application/json
{
  • "issue_date": "2023-09-01",
  • "po_number": "999",
  • "currency": "USD",
  • "tag_list": "consulting, office",
  • "payment_details": "string",
  • "notes": "string",
  • "contact": {
    },
  • "attachment": {
    },
  • "country": "US",
  • "postal_code": "91104",
  • "region": "CA",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "subject": "string",
  • "items": [
    ],
  • "payment_method": "credit_card",
  • "payment_processor": "stripe",
  • "payment_processor_id": "ch_999999999999",
  • "custom_metadata": { }
}

Response samples

Content type
application/json
{
  • "id": 927324,
  • "created_at": 1593260908,
  • "issue_date": "2023-09-01",
  • "po_number": "999",
  • "currency": "USD",
  • "tag_list": "consulting, office",
  • "payment_details": "string",
  • "notes": "string",
  • "contact": {},
  • "country": "US",
  • "postal_code": "91104",
  • "region": "CA",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "subject": "string",
  • "items": [
    ],
  • "taxes": [
    ],
  • "payments": [],
  • "custom_metadata": { },
  • "subtotal_cents": 9375,
  • "discount_cents": 0,
  • "total_cents": 9375,
  • "state": "outstanding",
}

Retrieve an expense

Retrieves the details of an existing expense.

Authorizations:
API keyBearer token
path Parameters
id
required
string

The ID of the desired expense.

Responses

Response samples

Content type
application/json
{
  • "id": 927324,
  • "created_at": 1593260908,
  • "issue_date": "2023-09-01",
  • "po_number": "999",
  • "currency": "USD",
  • "tag_list": "consulting, office",
  • "payment_details": "string",
  • "notes": "string",
  • "contact": {},
  • "country": "US",
  • "postal_code": "91104",
  • "region": "CA",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "subject": "string",
  • "items": [
    ],
  • "taxes": [
    ],
  • "payments": [],
  • "custom_metadata": { },
  • "subtotal_cents": 9375,
  • "discount_cents": 0,
  • "total_cents": 9375,
  • "state": "outstanding",
}

Update an expense

Updates an expense.

Authorizations:
API keyBearer token
path Parameters
id
required
integer

The ID of the expense to be updated.

Request Body schema: application/json
issue_date
string <date>

Date when the expense was issued.

po_number
string or null

Purchase order number.

currency
string

Three-letter ISO currency code, in uppercase.

tag_list
Array of strings or null

Multiple tags should be separated by commas.

payment_details
string or null

Detailed information about the payment.

notes
string or null

Extra notes about the expense.

required
contact (object) or object

Provider of your expense.

object (attachment)

Invoices and expenses can have attached files.

country
string

The customer’s billing country. 2-letter ISO country code.

postal_code
string or null

The customer’s billing ZIP or postal code.

region
string or null

The customer’s billing state/province/region.

street_line_1
string or null

The customer’s billing address line 1 (Street address/PO Box).

street_line_2
string or null

The customer’s billing address line 2 (Apartment/Suite/Unit/Building).

subject
string or null

An optional summary description of the document.

required
Array of objects (document_item)

The individual line items that make up the expense. No more than 200 items are allowed in a request. To add more use subsequent update requests. Maximum items per document are limited up to 1000 items.

payment_method
string
Enum: "credit_card" "cash" "wire_transfer" "direct_debit" "check" "iou" "paypal" "other"

Payment method used.

payment_processor
string or null

The payment processor used to pay the expense.

payment_processor_id
string or null

The ID the payment_processor assigned to the payment.

custom_metadata
object or null

Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format.

Responses

Request samples

Content type
application/json
{
  • "issue_date": "2023-09-01",
  • "po_number": "999",
  • "currency": "USD",
  • "tag_list": "consulting, office",
  • "payment_details": "string",
  • "notes": "string",
  • "contact": {
    },
  • "attachment": {
    },
  • "country": "US",
  • "postal_code": "91104",
  • "region": "CA",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "subject": "string",
  • "items": [
    ],
  • "payment_method": "credit_card",
  • "payment_processor": "stripe",
  • "payment_processor_id": "ch_999999999999",
  • "custom_metadata": { }
}

Response samples

Content type
application/json
{
  • "id": 927324,
  • "created_at": 1593260908,
  • "issue_date": "2023-09-01",
  • "po_number": "999",
  • "currency": "USD",
  • "tag_list": "consulting, office",
  • "payment_details": "string",
  • "notes": "string",
  • "contact": {},
  • "country": "US",
  • "postal_code": "91104",
  • "region": "CA",
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "subject": "string",
  • "items": [
    ],
  • "taxes": [
    ],
  • "payments": [],
  • "custom_metadata": { },
  • "subtotal_cents": 9375,
  • "discount_cents": 0,
  • "total_cents": 9375,
  • "state": "outstanding",
}

Delete an expense

Deletes an existing expense.

Authorizations:
API keyBearer token
path Parameters
id
required
string

The ID of the expense to be deleted.

Responses

Recurring Documents

Recurring documents automatically generate invoices or expenses on a defined schedule — daily, weekly, monthly, or yearly. Use them to automate subscription billing and regular vendor payments without manual intervention.

List all recurring

Lists all recurring, paginated and sorted by creation date (newest first).

Authorizations:
API keyBearer token
query Parameters
q
string

Filters a recurring list based on the recurring number, customer name or PO number.

date
string

Filters a recurring list based on the issue date. A date range must be entered. Allowed formats are 2019-01-01,2019-12-31 and 2019/01/01,2019/12/31.

state
string
Enum: "active" "archived"

Filters a recurring list based on the recurring state.

contact
integer

Filters a recurring list based on the customer ID.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a recurring

Creates a new recurring.

Authorizations:
API keyBearer token
Request Body schema: application/json
start_date
string <date>

Date of the issue of the first document for this recurring. Defaults to 1 months from today.

end_date
string or null <date>

Date of the issue of the last document for this recurring.

frequency
string
Default: "monthly"
Enum: "daily" "weekly" "biweekly" "monthly" "bimonthly" "quarterly" "semiyearly" "yearly" "biyearly"

Recurring frequency. Deprecated. Use recurring_period and recurring_frequency instead.

recurring_period
string
Default: "months"
Enum: "days" "weeks" "months" "years"

Recurring period.

recurring_frequency
integer
Default: 1

The number of recurring periods between each document.

due_days
string or null <date>

The date on which payment for this recurring is due.

po_number
string or null

Purchase order number.

currency
string

Three-letter ISO currency code, in uppercase.

tag_list
Array of strings or null

Multiple tags should be separated by commas.

payment_details
string or null

Detailed information about the accepted payment methods.

notes
string or null

Extra notes about the recurring.

required
contact (object) or object

Customer who will be billed.

subject
string or null

An optional summary description for the document.

required
Array of objects (document_item)

The individual line items that make up the recurring. No more than 200 items are allowed in a request. To add more use subsequent update requests. Maximum items per document are limited up to 1000 items.

custom_metadata
object or null

Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format.

Responses

Request samples

Content type
application/json
{
  • "start_date": "2023-01-27",
  • "end_date": "2024-01-27",
  • "frequency": "daily",
  • "recurring_period": "days",
  • "recurring_frequency": 1,
  • "due_days": "2020-07-27",
  • "po_number": "999",
  • "currency": "USD",
  • "tag_list": "consulting, premium",
  • "payment_details": "string",
  • "notes": "string",
  • "contact": {
    },
  • "subject": "string",
  • "items": [
    ],
  • "custom_metadata": { }
}

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "start_date": "2023-01-27",
  • "end_date": "2024-01-27",
  • "frequency": "daily",
  • "recurring_period": "days",
  • "recurring_frequency": 1,
  • "due_days": "2020-07-27",
  • "po_number": "999",
  • "currency": "USD",
  • "tag_list": "consulting, premium",
  • "payment_details": "string",
  • "notes": "string",
  • "contact": {},
  • "subject": "string",
  • "items": [
    ],
  • "taxes": [
    ],
  • "custom_metadata": { },
  • "total_cents": 9375,
  • "state": "active",
}

Retrieve a recurring

Retrieves the details of an existing recurring.

Authorizations:
API keyBearer token
path Parameters
id
required
string

The ID of the desired recurring.

Responses

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "start_date": "2023-01-27",
  • "end_date": "2024-01-27",
  • "frequency": "daily",
  • "recurring_period": "days",
  • "recurring_frequency": 1,
  • "due_days": "2020-07-27",
  • "po_number": "999",
  • "currency": "USD",
  • "tag_list": "consulting, premium",
  • "payment_details": "string",
  • "notes": "string",
  • "contact": {},
  • "subject": "string",
  • "items": [
    ],
  • "taxes": [
    ],
  • "custom_metadata": { },
  • "total_cents": 9375,
  • "state": "active",
}

Update a recurring

Updates a recurring.

Authorizations:
API keyBearer token
path Parameters
id
required
integer

The ID of the recurring to be updated.

Request Body schema: application/json
start_date
string <date>

Date of the issue of the first document for this recurring. Defaults to 1 months from today.

end_date
string or null <date>

Date of the issue of the last document for this recurring.

frequency
string
Default: "monthly"
Enum: "daily" "weekly" "biweekly" "monthly" "bimonthly" "quarterly" "semiyearly" "yearly" "biyearly"

Recurring frequency. Deprecated. Use recurring_period and recurring_frequency instead.

recurring_period
string
Default: "months"
Enum: "days" "weeks" "months" "years"

Recurring period.

recurring_frequency
integer
Default: 1

The number of recurring periods between each document.

due_days
string or null <date>

The date on which payment for this recurring is due.

po_number
string or null

Purchase order number.

currency
string

Three-letter ISO currency code, in uppercase.

tag_list
Array of strings or null

Multiple tags should be separated by commas.

payment_details
string or null

Detailed information about the accepted payment methods.

notes
string or null

Extra notes about the recurring.

required
contact (object) or object

Customer who will be billed.

subject
string or null

An optional summary description for the document.

required
Array of objects (document_item)

The individual line items that make up the recurring. No more than 200 items are allowed in a request. To add more use subsequent update requests. Maximum items per document are limited up to 1000 items.

custom_metadata
object or null

Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format.

Responses

Request samples

Content type
application/json
{
  • "start_date": "2023-01-27",
  • "end_date": "2024-01-27",
  • "frequency": "daily",
  • "recurring_period": "days",
  • "recurring_frequency": 1,
  • "due_days": "2020-07-27",
  • "po_number": "999",
  • "currency": "USD",
  • "tag_list": "consulting, premium",
  • "payment_details": "string",
  • "notes": "string",
  • "contact": {
    },
  • "subject": "string",
  • "items": [
    ],
  • "custom_metadata": { }
}

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "start_date": "2023-01-27",
  • "end_date": "2024-01-27",
  • "frequency": "daily",
  • "recurring_period": "days",
  • "recurring_frequency": 1,
  • "due_days": "2020-07-27",
  • "po_number": "999",
  • "currency": "USD",
  • "tag_list": "consulting, premium",
  • "payment_details": "string",
  • "notes": "string",
  • "contact": {},
  • "subject": "string",
  • "items": [
    ],
  • "taxes": [
    ],
  • "custom_metadata": { },
  • "total_cents": 9375,
  • "state": "active",
}

Delete a recurring

Deletes an existing recurring.

Authorizations:
API keyBearer token
path Parameters
id
required
string

The ID of the recurring to be deleted.

Responses

Accounts

Quaderno Connect accounts are sub-accounts that belong to your platform. Each account has its own invoices, contacts, and tax settings. Use this API to create and manage accounts on behalf of your users.

Retrieve a custom account

Retrieves the details of an existing Quaderno Connect custom account.

Authorizations:
API keyBearer token
path Parameters
id
required
integer
Example: 41

The ID of the custom account to retrieve.

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "business_name": "string",
  • "created_at": 0,
  • "currency": "string",
  • "default_product_type": "good",
  • "default_tax_code": "eservice",
  • "email": "string",
  • "state": "string",
  • "subdomain": "string",
  • "web": "string",
  • "registration_number": "string",
  • "authentication": {
    }
}

Update a custom account

Updates the details of an existing Quaderno Connect custom account.

Authorizations:
API keyBearer token
path Parameters
id
required
integer

The ID of the custom account to update.

Request Body schema: application/json
required
business_name
string

Legal or trade name of the business.

default_product_type
string or null
Enum: "good" "service"

Fallback product type for documents and tax calculations. Defaults to "service".

default_tax_code
string or null
Enum: "eservice" "ebook" "saas" "consulting" "standard" "reduced" "retention"

Fallback tax code for items and tax calculations. Defaults to "eservice".

email
string

Primary contact email for account notifications.

web
string

Business website URL.

registration_number
string

Official government-issued number that identifies the business entity (e.g., EIN in the US, SIREN in France, W-IdNr. in Germany, ABN in Australia).

Responses

Request samples

Content type
application/json
{
  • "business_name": "string",
  • "default_product_type": "good",
  • "default_tax_code": "eservice",
  • "email": "string",
  • "web": "string",
  • "registration_number": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "business_name": "string",
  • "created_at": 0,
  • "currency": "string",
  • "default_product_type": "good",
  • "default_tax_code": "eservice",
  • "email": "string",
  • "state": "string",
  • "subdomain": "string",
  • "web": "string",
  • "registration_number": "string",
  • "authentication": {
    }
}

Create a custom account

Creates a new Quaderno Connect custom account.

Authorizations:
API keyBearer token
Request Body schema: application/json
required
business_name
required
string

Legal or trade name of the business.

country
required
string

Two-letter ISO 3166-1 alpha-2 country code. Cannot be changed after creation.

currency
string or null

Three-letter ISO 4217 currency code. Defaults to the country's official currency.

default_product_type
string or null
Enum: "good" "service"

Fallback product type for documents and tax calculations. Defaults to "service".

default_tax_code
string or null
Enum: "eservice" "ebook" "saas" "consulting" "standard" "reduced" "retention"

Fallback tax code for items and tax calculations. Defaults to "eservice".

email
required
string

Primary contact email for account notifications.

local_tax_id
string or null

Tax ID that registers the account for tax collection in the country. Cannot be changed after creation.

postal_code
string or null

ZIP or postal code of the business location. Cannot be changed after creation.

web
string or null

Business website URL.

registration_number
string or null

Official government-issued number that identifies the business entity (e.g., EIN in the US, SIREN in France, W-IdNr. in Germany, ABN in Australia).

Responses

Request samples

Content type
application/json
{
  • "business_name": "string",
  • "country": "string",
  • "currency": "string",
  • "default_product_type": "good",
  • "default_tax_code": "eservice",
  • "email": "string",
  • "local_tax_id": "string",
  • "postal_code": "string",
  • "web": "string",
  • "registration_number": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "business_name": "string",
  • "created_at": 0,
  • "currency": "string",
  • "default_product_type": "good",
  • "default_tax_code": "eservice",
  • "email": "string",
  • "state": "string",
  • "subdomain": "string",
  • "web": "string",
  • "registration_number": "string",
  • "authentication": {
    }
}

List all accounts

Retrieves a list of all Quaderno Connect accounts.

Authorizations:
API keyBearer token

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Addresses

Addresses store the location history of a Quaderno Connect account. Each address has a validity period, allowing Quaderno to apply the correct tax rules based on where the business was located at any given point in time.

List addresses

Lists all addresses from a Quaderno Connect custom account, paginated and sorted by creation date (newest first).

Authorizations:
Bearer token

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create an address

Creates a new address to be used on a Quaderno Connect custom account.

Authorizations:
Bearer token
Request Body schema: application/json
street_line_1
string or null

Primary street address, including street number and name or PO Box.

street_line_2
string or null

Secondary address line for apartment, suite, unit, or building details.

city
string or null

City, district, suburb, town, or village name.

region
string or null

State, province, or region code.

postal_code
string or null

ZIP or postal code.

country
string or null

Two-letter ISO 3166-1 alpha-2 country code. Defaults to the account's original country. WARNING: Changing the country is not recommended, especially if the new country uses a different official currency than the account currency. This may lead to tax calculation errors, reporting inconsistencies, and compliance issues. If you need to operate in a different country with a different currency, consider creating a new account instead.

valid_from
string <date>

Date when this address becomes effective (ISO 8601 format: YYYY-MM-DD). Defaults to the current date.

valid_until
string or null <date>

Date when this address expires, if applicable (ISO 8601 format: YYYY-MM-DD). Leave empty for addresses with no end date.

Responses

Request samples

Content type
application/json
{
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "city": "Pasadena",
  • "region": "CA",
  • "postal_code": "91104",
  • "country": "US",
  • "valid_from": "2023-07-01",
  • "valid_until": "2024-02-03"
}

Response samples

Content type
application/json
{
  • "id": 16,
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "city": "Pasadena",
  • "region": "CA",
  • "postal_code": "91104",
  • "country": "US",
  • "valid_from": "2023-07-01",
  • "valid_until": "2024-02-03"
}

Retrieve an address

Retrieves the details of an existing address.

Authorizations:
Bearer token
path Parameters
id
required
string

ID of the desired address.

Responses

Response samples

Content type
application/json
{
  • "id": 16,
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "city": "Pasadena",
  • "region": "CA",
  • "postal_code": "91104",
  • "country": "US",
  • "valid_from": "2023-07-01",
  • "valid_until": "2024-02-03"
}

Update an address

Updates a address. Any parameters not provided will be left unchanged.

Authorizations:
Bearer token
path Parameters
id
required
integer

ID of the address to be updated.

Request Body schema: application/json
street_line_1
string or null

Primary street address, including street number and name or PO Box.

street_line_2
string or null

Secondary address line for apartment, suite, unit, or building details.

city
string or null

City, district, suburb, town, or village name.

region
string or null

State, province, or region code.

postal_code
string or null

ZIP or postal code.

country
string or null

Two-letter ISO 3166-1 alpha-2 country code. Defaults to the account's original country. WARNING: Changing the country is not recommended, especially if the new country uses a different official currency than the account currency. This may lead to tax calculation errors, reporting inconsistencies, and compliance issues. If you need to operate in a different country with a different currency, consider creating a new account instead.

valid_from
string <date>

Date when this address becomes effective (ISO 8601 format: YYYY-MM-DD). Defaults to the current date.

valid_until
string or null <date>

Date when this address expires, if applicable (ISO 8601 format: YYYY-MM-DD). Leave empty for addresses with no end date.

Responses

Request samples

Content type
application/json
{
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "city": "Pasadena",
  • "region": "CA",
  • "postal_code": "91104",
  • "country": "US",
  • "valid_from": "2023-07-01",
  • "valid_until": "2024-02-03"
}

Response samples

Content type
application/json
{
  • "id": 16,
  • "street_line_1": "2311 North Los Robles Av.",
  • "street_line_2": "Apartment C",
  • "city": "Pasadena",
  • "region": "CA",
  • "postal_code": "91104",
  • "country": "US",
  • "valid_from": "2023-07-01",
  • "valid_until": "2024-02-03"
}

Reporting

Reporting requests generate downloadable tax and billing reports asynchronously. Submit a request, then poll or wait for the report URL to become available once processing is complete.

List all reporting requests

Retrieves the list of reporting requests.

Authorizations:
API keyBearer token

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Requests a report

Creates a new reporting request. The report file will be ready some minutes after creating a new request.

Authorizations:
API keyBearer token
Request Body schema: application/json
report_type
string
Enum: "tax_summary" "invoices_list" "credits_list"

The type of report.

object

Parameters specifying report details.

Responses

Request samples

Content type
application/json
{
  • "report_type": "tax_summary",
  • "parameters": {
    }
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "report_type": "tax_summary",
  • "report_url": null,
  • "state": "pending",
  • "parameters": {
    },
  • "completed_at": 1632985500,
  • "created_at": 1632985500
}

Retrieve a reporting request

Retrieves updated info from the reporting request.

Authorizations:
API keyBearer token
path Parameters
id
required
integer
Example: 41

The ID of the reporting request to retrieve.

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "report_type": "tax_summary",
  • "report_url": null,
  • "state": "pending",
  • "parameters": {
    },
  • "completed_at": 1632985500,
  • "created_at": 1632985500
}

Webhooks

Webhooks notify your server in real time when events happen in a Quaderno account — such as an invoice being created, a payment being recorded, or a tax transaction being processed. Each webhook delivers a signed payload to a URL you control.

List all webhooks

Lists all webhooks, sorted by creation date (newest first).

Authorizations:
API keyBearer token

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a webhook

Creates a new webhook object. The url provided needs to respond with 200 OK to HEAD requests in order to validate the callback endpoint.

Authorizations:
API keyBearer token
Request Body schema: application/json
events_types
required
Array of strings

The list of events to enable for this endpoint.

url
required
string <uri>

The URL of the webhook endpoint.

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "auth_key": "zXQgArTtQxAMaYppMrDoUQ",
  • "created_at": "2023-01-24T10:59:15.000Z",
  • "events_sent": 0,
  • "events_types": [
    ],
  • "last_error": "Response code 503 returned.",
  • "last_error_at": "2023-01-24T10:59:15.000Z",
  • "last_sent_at": "2023-01-24T10:59:15.000Z",
}

Retrieve a webhook

Retrieves the details of an existing webhook.

Authorizations:
API keyBearer token
path Parameters
id
required
string

The ID of the desired webhook.

Responses

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "auth_key": "zXQgArTtQxAMaYppMrDoUQ",
  • "created_at": "2023-01-24T10:59:15.000Z",
  • "events_sent": 0,
  • "events_types": [
    ],
  • "last_error": "Response code 503 returned.",
  • "last_error_at": "2023-01-24T10:59:15.000Z",
  • "last_sent_at": "2023-01-24T10:59:15.000Z",
}

Update a webhook

Updates the specified webhook.

Authorizations:
API keyBearer token
path Parameters
id
required
integer

The ID of the webhook to be updated.

Request Body schema: application/json
events_types
required
Array of strings

The list of events to enable for this endpoint.

url
required
string <uri>

The URL of the webhook endpoint.

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "id": 92732431,
  • "auth_key": "zXQgArTtQxAMaYppMrDoUQ",
  • "created_at": "2023-01-24T10:59:15.000Z",
  • "events_sent": 0,
  • "events_types": [
    ],
  • "last_error": "Response code 503 returned.",
  • "last_error_at": "2023-01-24T10:59:15.000Z",
  • "last_sent_at": "2023-01-24T10:59:15.000Z",
}

Delete a webhook

Deletes a webhook. This action cannot be undone.

Authorizations:
API keyBearer token
path Parameters
id
required
string

The ID of the webhook to be deleted.

Responses