{
  "service": "quaderno",
  "displayName": "Quaderno",
  "categories": [
    "Finance",
    "Developer Tools"
  ],
  "authTypes": [
    "api_key"
  ],
  "auth": [
    {
      "type": "api_key",
      "label": "API Key",
      "placeholder": "QUADERNO_API_KEY",
      "description": "Quaderno API key used with HTTP Basic Auth. Create or view API keys in your Quaderno account: https://quadernoapp.com/users/api-keys"
    }
  ],
  "homepageUrl": "https://quaderno.io/",
  "actions": [
    {
      "id": "quaderno.calculate_tax_rate",
      "service": "quaderno",
      "name": "calculate_tax_rate",
      "description": "Calculate the Quaderno tax rate for an address and transaction details.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "from_country": {
            "type": "string",
            "minLength": 2,
            "description": "The seller's two-letter ISO country code."
          },
          "from_postal_code": {
            "type": "string",
            "minLength": 1,
            "description": "The seller's ZIP or postal code."
          },
          "to_country": {
            "type": "string",
            "minLength": 2,
            "description": "The customer's two-letter ISO country code."
          },
          "to_postal_code": {
            "type": "string",
            "minLength": 1,
            "description": "The customer's ZIP or postal code."
          },
          "to_city": {
            "type": "string",
            "minLength": 1,
            "description": "The customer's city."
          },
          "to_street": {
            "type": "string",
            "minLength": 1,
            "description": "The customer's street address."
          },
          "tax_id": {
            "type": "string",
            "minLength": 1,
            "description": "The customer's tax identification number."
          },
          "tax_code": {
            "type": "string",
            "enum": [
              "consulting",
              "eservice",
              "ebook",
              "saas",
              "standard",
              "reduced",
              "exempt"
            ],
            "description": "The transaction tax code."
          },
          "tax_behavior": {
            "type": "string",
            "enum": [
              "inclusive",
              "exclusive"
            ],
            "description": "Whether the price includes tax."
          },
          "product_type": {
            "type": "string",
            "enum": [
              "good",
              "service"
            ],
            "description": "Whether the product is a good or service."
          },
          "date": {
            "type": "string",
            "minLength": 1,
            "description": "The transaction date. Defaults to today in Quaderno."
          },
          "amount": {
            "type": "string",
            "minLength": 1,
            "description": "The transaction amount."
          },
          "currency": {
            "type": "string",
            "minLength": 3,
            "description": "The three-letter ISO 4217 currency code."
          }
        },
        "additionalProperties": false,
        "required": [
          "to_country"
        ],
        "description": "Input for calculating a Quaderno tax rate."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "taxRate": {
            "type": "object",
            "properties": {
              "name": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The tax name."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "rate": {
                "anyOf": [
                  {
                    "type": "number",
                    "description": "The tax rate applied."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "taxablePart": {
                "anyOf": [
                  {
                    "type": "number",
                    "description": "The percentage of the subtotal used for calculating the tax amount."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "country": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The country used for the tax calculation."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "region": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The region used for the tax calculation."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "taxCode": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The tax code used for the calculation."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "taxBehavior": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "Whether prices were treated as inclusive or exclusive."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "taxAmount": {
                "anyOf": [
                  {
                    "type": "number",
                    "description": "The calculated tax amount."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "subtotal": {
                "anyOf": [
                  {
                    "type": "number",
                    "description": "The price before taxes."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "totalAmount": {
                "anyOf": [
                  {
                    "type": "number",
                    "description": "The total amount including taxes."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "status": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The tax calculation status."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "raw": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "The raw Quaderno API object."
              }
            },
            "additionalProperties": false,
            "description": "A normalized Quaderno tax rate calculation."
          }
        },
        "additionalProperties": false,
        "description": "A Quaderno tax rate calculation response."
      }
    },
    {
      "id": "quaderno.create_contact",
      "service": "quaderno",
      "name": "create_contact",
      "description": "Create a Quaderno contact.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "contact": {
            "type": "object",
            "properties": {
              "first_name": {
                "type": "string",
                "minLength": 1,
                "description": "The contact's first name. Required by Quaderno when creating a contact."
              },
              "last_name": {
                "type": "string",
                "minLength": 1,
                "description": "The contact's last name when the contact is a person."
              },
              "email": {
                "type": "string",
                "description": "The contact's email address.",
                "format": "email"
              },
              "kind": {
                "type": "string",
                "enum": [
                  "company",
                  "person"
                ],
                "description": "The contact kind."
              },
              "country": {
                "type": "string",
                "minLength": 2,
                "description": "The two-letter ISO 3166-1 alpha-2 country code."
              },
              "processor_id": {
                "type": "string",
                "minLength": 1,
                "description": "The external payment processor ID."
              },
              "tax_status": {
                "type": "string",
                "enum": [
                  "taxable",
                  "exempt",
                  "reverse"
                ],
                "description": "The contact tax status."
              }
            },
            "additionalProperties": true,
            "description": "The Quaderno contact fields to create or update."
          }
        },
        "additionalProperties": false,
        "description": "Input for creating a Quaderno contact."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "contact": {
            "type": "object",
            "properties": {
              "id": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The contact ID."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "firstName": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact first name."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "lastName": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact last name."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "email": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact email address."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "kind": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact kind, such as company or person."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "country": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact country code."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "processorId": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The external payment processor ID for the contact."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "taxStatus": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact tax status."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "raw": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "The raw Quaderno API object."
              }
            },
            "additionalProperties": false,
            "description": "A normalized Quaderno contact."
          }
        },
        "additionalProperties": false,
        "description": "A created Quaderno contact response."
      }
    },
    {
      "id": "quaderno.create_product",
      "service": "quaderno",
      "name": "create_product",
      "description": "Create a Quaderno product.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "product": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "minLength": 1,
                "description": "The product name displayed to customers."
              },
              "code": {
                "type": "string",
                "minLength": 1,
                "description": "The product SKU or code."
              },
              "unit_cost": {
                "type": "string",
                "minLength": 1,
                "description": "The unit amount charged for the product."
              },
              "currency": {
                "type": "string",
                "minLength": 3,
                "description": "The three-letter ISO 4217 currency code."
              },
              "product_type": {
                "type": "string",
                "enum": [
                  "good",
                  "service"
                ],
                "description": "Whether the product is a good or a service."
              },
              "tax_class": {
                "type": "string",
                "enum": [
                  "consulting",
                  "eservice",
                  "ebook",
                  "saas",
                  "standard",
                  "reduced"
                ],
                "description": "The tax class that applies to the product."
              }
            },
            "additionalProperties": true,
            "description": "The Quaderno product fields to create or update."
          }
        },
        "additionalProperties": false,
        "description": "Input for creating a Quaderno product."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "product": {
            "type": "object",
            "properties": {
              "id": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The product ID."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "name": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The product name."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "code": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The product SKU or code."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "unitCost": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The unit amount charged for the product."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "currency": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The product currency code."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "productType": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The product type, such as good or service."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "taxClass": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The tax class that applies to the product."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "raw": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "The raw Quaderno API object."
              }
            },
            "additionalProperties": false,
            "description": "A normalized Quaderno product."
          }
        },
        "additionalProperties": false,
        "description": "A created Quaderno product response."
      }
    },
    {
      "id": "quaderno.delete_contact",
      "service": "quaderno",
      "name": "delete_contact",
      "description": "Delete a Quaderno contact permanently.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "description": "The Quaderno object ID."
          }
        },
        "additionalProperties": false,
        "description": "Input for deleting a Quaderno contact."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "deleted": {
            "type": "boolean",
            "description": "Whether Quaderno accepted the delete request."
          }
        },
        "additionalProperties": false,
        "description": "A Quaderno contact deletion response."
      }
    },
    {
      "id": "quaderno.delete_product",
      "service": "quaderno",
      "name": "delete_product",
      "description": "Delete a Quaderno product permanently.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "description": "The Quaderno object ID."
          }
        },
        "additionalProperties": false,
        "description": "Input for deleting a Quaderno product."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "deleted": {
            "type": "boolean",
            "description": "Whether Quaderno accepted the delete request."
          }
        },
        "additionalProperties": false,
        "description": "A Quaderno product deletion response."
      }
    },
    {
      "id": "quaderno.get_account",
      "service": "quaderno",
      "name": "get_account",
      "description": "Retrieve the Quaderno account identity and API endpoint for the API key.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false,
        "description": "Input for retrieving the Quaderno account identity."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "account": {
            "type": "object",
            "properties": {
              "id": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The Quaderno identity ID."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "name": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The account user's full name."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "email": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The account user's email address."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "publishableKey": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The account publishable key."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "accountUrl": {
                "type": "string",
                "description": "The Quaderno account API base URL."
              },
              "accountSubdomain": {
                "type": "string",
                "description": "The Quaderno account subdomain."
              },
              "raw": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "The raw Quaderno API object."
              }
            },
            "additionalProperties": false,
            "description": "A normalized Quaderno account identity."
          }
        },
        "additionalProperties": false,
        "description": "A Quaderno account identity response."
      }
    },
    {
      "id": "quaderno.get_contact",
      "service": "quaderno",
      "name": "get_contact",
      "description": "Retrieve one Quaderno contact by ID.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "description": "The Quaderno object ID."
          }
        },
        "additionalProperties": false,
        "description": "Input for retrieving a Quaderno contact."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "contact": {
            "type": "object",
            "properties": {
              "id": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The contact ID."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "firstName": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact first name."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "lastName": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact last name."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "email": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact email address."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "kind": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact kind, such as company or person."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "country": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact country code."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "processorId": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The external payment processor ID for the contact."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "taxStatus": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact tax status."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "raw": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "The raw Quaderno API object."
              }
            },
            "additionalProperties": false,
            "description": "A normalized Quaderno contact."
          }
        },
        "additionalProperties": false,
        "description": "A Quaderno contact response."
      }
    },
    {
      "id": "quaderno.get_product",
      "service": "quaderno",
      "name": "get_product",
      "description": "Retrieve one Quaderno product by ID.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "description": "The Quaderno object ID."
          }
        },
        "additionalProperties": false,
        "description": "Input for retrieving a Quaderno product."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "product": {
            "type": "object",
            "properties": {
              "id": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The product ID."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "name": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The product name."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "code": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The product SKU or code."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "unitCost": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The unit amount charged for the product."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "currency": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The product currency code."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "productType": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The product type, such as good or service."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "taxClass": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The tax class that applies to the product."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "raw": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "The raw Quaderno API object."
              }
            },
            "additionalProperties": false,
            "description": "A normalized Quaderno product."
          }
        },
        "additionalProperties": false,
        "description": "A Quaderno product response."
      }
    },
    {
      "id": "quaderno.list_contacts",
      "service": "quaderno",
      "name": "list_contacts",
      "description": "List Quaderno contacts with optional search or processor ID filters.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "minLength": 1,
            "description": "A case-sensitive search query accepted by Quaderno."
          },
          "processor_id": {
            "type": "string",
            "minLength": 1,
            "description": "The external payment processor ID."
          }
        },
        "additionalProperties": false,
        "description": "Input for listing Quaderno contacts."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "contacts": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "description": "The contact ID."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "firstName": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The contact first name."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "lastName": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The contact last name."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "email": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The contact email address."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "kind": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The contact kind, such as company or person."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "country": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The contact country code."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "processorId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The external payment processor ID for the contact."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "taxStatus": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The contact tax status."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "raw": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": true,
                  "description": "The raw Quaderno API object."
                }
              },
              "additionalProperties": false,
              "description": "A normalized Quaderno contact."
            },
            "description": "Contacts returned by Quaderno."
          },
          "pagination": {
            "type": "object",
            "properties": {
              "next": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The URL for the next page when Quaderno provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "previous": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The URL for the previous page when Quaderno provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "first": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The URL for the first page when Quaderno provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "last": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The URL for the last page when Quaderno provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "rateLimitLimit": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The Quaderno request limit for the current window."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "rateLimitRemaining": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The number of Quaderno requests remaining in the current window."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "rateLimitReset": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The UTC epoch second when the Quaderno rate limit window resets."
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false,
            "description": "Pagination links and rate limit metadata returned by Quaderno."
          }
        },
        "additionalProperties": false,
        "description": "A list of Quaderno contacts."
      }
    },
    {
      "id": "quaderno.list_products",
      "service": "quaderno",
      "name": "list_products",
      "description": "List Quaderno products with an optional search query.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "minLength": 1,
            "description": "A case-sensitive search query accepted by Quaderno."
          }
        },
        "additionalProperties": false,
        "description": "Input for listing Quaderno products."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "products": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "description": "The product ID."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "name": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The product name."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "code": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The product SKU or code."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "unitCost": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The unit amount charged for the product."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "currency": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The product currency code."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "productType": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The product type, such as good or service."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "taxClass": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The tax class that applies to the product."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "raw": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": true,
                  "description": "The raw Quaderno API object."
                }
              },
              "additionalProperties": false,
              "description": "A normalized Quaderno product."
            },
            "description": "Products returned by Quaderno."
          },
          "pagination": {
            "type": "object",
            "properties": {
              "next": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The URL for the next page when Quaderno provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "previous": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The URL for the previous page when Quaderno provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "first": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The URL for the first page when Quaderno provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "last": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The URL for the last page when Quaderno provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "rateLimitLimit": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The Quaderno request limit for the current window."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "rateLimitRemaining": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The number of Quaderno requests remaining in the current window."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "rateLimitReset": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The UTC epoch second when the Quaderno rate limit window resets."
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false,
            "description": "Pagination links and rate limit metadata returned by Quaderno."
          }
        },
        "additionalProperties": false,
        "description": "A list of Quaderno products."
      }
    },
    {
      "id": "quaderno.update_contact",
      "service": "quaderno",
      "name": "update_contact",
      "description": "Update a Quaderno contact. Fields not provided are left unchanged.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "The Quaderno object ID."
          },
          "contact": {
            "type": "object",
            "properties": {
              "first_name": {
                "type": "string",
                "minLength": 1,
                "description": "The contact's first name. Required by Quaderno when creating a contact."
              },
              "last_name": {
                "type": "string",
                "minLength": 1,
                "description": "The contact's last name when the contact is a person."
              },
              "email": {
                "type": "string",
                "description": "The contact's email address.",
                "format": "email"
              },
              "kind": {
                "type": "string",
                "enum": [
                  "company",
                  "person"
                ],
                "description": "The contact kind."
              },
              "country": {
                "type": "string",
                "minLength": 2,
                "description": "The two-letter ISO 3166-1 alpha-2 country code."
              },
              "processor_id": {
                "type": "string",
                "minLength": 1,
                "description": "The external payment processor ID."
              },
              "tax_status": {
                "type": "string",
                "enum": [
                  "taxable",
                  "exempt",
                  "reverse"
                ],
                "description": "The contact tax status."
              }
            },
            "additionalProperties": true,
            "description": "The Quaderno contact fields to create or update."
          }
        },
        "additionalProperties": false,
        "description": "Input for updating a Quaderno contact."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "contact": {
            "type": "object",
            "properties": {
              "id": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The contact ID."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "firstName": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact first name."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "lastName": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact last name."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "email": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact email address."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "kind": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact kind, such as company or person."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "country": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact country code."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "processorId": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The external payment processor ID for the contact."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "taxStatus": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The contact tax status."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "raw": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "The raw Quaderno API object."
              }
            },
            "additionalProperties": false,
            "description": "A normalized Quaderno contact."
          }
        },
        "additionalProperties": false,
        "description": "An updated Quaderno contact response."
      }
    },
    {
      "id": "quaderno.update_product",
      "service": "quaderno",
      "name": "update_product",
      "description": "Update a Quaderno product. Fields not provided are left unchanged.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "The Quaderno object ID."
          },
          "product": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "minLength": 1,
                "description": "The product name displayed to customers."
              },
              "code": {
                "type": "string",
                "minLength": 1,
                "description": "The product SKU or code."
              },
              "unit_cost": {
                "type": "string",
                "minLength": 1,
                "description": "The unit amount charged for the product."
              },
              "currency": {
                "type": "string",
                "minLength": 3,
                "description": "The three-letter ISO 4217 currency code."
              },
              "product_type": {
                "type": "string",
                "enum": [
                  "good",
                  "service"
                ],
                "description": "Whether the product is a good or a service."
              },
              "tax_class": {
                "type": "string",
                "enum": [
                  "consulting",
                  "eservice",
                  "ebook",
                  "saas",
                  "standard",
                  "reduced"
                ],
                "description": "The tax class that applies to the product."
              }
            },
            "additionalProperties": true,
            "description": "The Quaderno product fields to create or update."
          }
        },
        "additionalProperties": false,
        "description": "Input for updating a Quaderno product."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "product": {
            "type": "object",
            "properties": {
              "id": {
                "anyOf": [
                  {
                    "type": "integer",
                    "description": "The product ID."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "name": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The product name."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "code": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The product SKU or code."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "unitCost": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The unit amount charged for the product."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "currency": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The product currency code."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "productType": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The product type, such as good or service."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "taxClass": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The tax class that applies to the product."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "raw": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "The raw Quaderno API object."
              }
            },
            "additionalProperties": false,
            "description": "A normalized Quaderno product."
          }
        },
        "additionalProperties": false,
        "description": "An updated Quaderno product response."
      }
    }
  ]
}
