PUBLIC API v1
Create a new attachment
POST /api/v1/companies/{company_pk}/attachments/
Endpoint to create a new attachment. This endpoint allows the creation of a new attachment with the following fields: - \`file\`: The file being attached (required). - \`transactions\`: List of related transactions, see more in /api/v1/accounting/transactions/. - \`company\`: The company associated with the attachment, see more in /api/v1/companies/. - \`attachment_type\`: Type of the attachment, available types: invoice, receipt. - \`amount\`: Amount related to the attachment. - \`amount_exchanged\`: Exchanged amount in a different currency. - \`attachment_number\`: Unique number for the attachment. - \`brand_name\`: Brand name associated with the attachment. - \`currency\`: Currency of the amount, default is "EUR". - \`currency_exchanged\`: Exchanged currency, default is "EUR". - \`description\`: Description of the attachment. - \`supplier_country\`: Country of the supplier, available choices are: [ [ "DE", "Germany" ], [ "INSIDE_EU", "Inside EU" ], [ "OUTSIDE_EU", "Outside EU" ] ]. First value in the array is the db-understandable code, second is the representation. - \`value_date\`: Date of the value. - \`vat_sum_amount\`: VAT sum amount. - \`vat_sum_amount_exchanged\`: Exchanged VAT sum amount. - \`vat_rate\`: VAT rate, see more in /api/v1/choices/vat-percents. - \`sale_type\`: Type of sale, see more in /api/v1/choices/sale-types/. - \`additional_metadata\`: Additional metadata for the attachment. All fields except \`file\` are optional.
Permission: write_documents · Direct link
Company-scoped. Account permissions, plan limits and document state still apply.
Path and query parameters
| Parameter | Location / type | Description |
|---|---|---|
company_pkRequired | path · string (uuid) | Not specified |
Request body
application/json
| Field | Type / accepted values | Description |
|---|---|---|
fileRequired | string (binary) | Not specified |
transactionsRequired | string (uuid)[] | Not specified |
company | string (uuid) | Not specified |
attachmentType | "invoice" | "receipt" | "contract" | "other" | * `invoice` - Invoice * `receipt` - Receipt * `contract` - Contract * `other` - Other |
amount | string (decimal) | null | Not specified |
amountExchanged | string (decimal) | null | Not specified |
attachmentNumber | string | Not specified |
brandName | string | Not specified |
currency | string | Not specified |
currencyExchanged | string | null | Not specified |
description | string | Not specified |
supplierCountry | "DE" | "PL" | "DOMESTIC" | "INSIDE_EU" | "OUTSIDE_EU" | "" | Not specified |
valueDate | string (date-time) | null | Not specified |
vatSumAmount | string (decimal) | null | Not specified |
vatSumAmountExchanged | string (decimal) | null | Not specified |
vatRate | 23 | 19 | 8 | 7 | 5 | 0 | -1 | -2 | * `23` - 23% * `19` - 19% * `8` - 8% * `7` - 7% * `5` - 5% * `0` - 0% * `-1` - CUSTOM % * `-2` - Reverse charge |
saleType | "GOODS" | "SERVICES" | "" | Not specified |
additionalMetadata | object | null | Not specified |
extractedItems | object | null | Per-item OCR extraction results: [{description, amount, vat_rate, ...}] |
isEinvoice | boolean | Not specified |
multipart/form-data
| Field | Type / accepted values | Description |
|---|---|---|
fileRequired | string (binary) | Not specified |
transactionsRequired | string (uuid)[] | Not specified |
company | string (uuid) | Not specified |
attachmentType | "invoice" | "receipt" | "contract" | "other" | * `invoice` - Invoice * `receipt` - Receipt * `contract` - Contract * `other` - Other |
amount | string (decimal) | null | Not specified |
amountExchanged | string (decimal) | null | Not specified |
attachmentNumber | string | Not specified |
brandName | string | Not specified |
currency | string | Not specified |
currencyExchanged | string | null | Not specified |
description | string | Not specified |
supplierCountry | "DE" | "PL" | "DOMESTIC" | "INSIDE_EU" | "OUTSIDE_EU" | "" | Not specified |
valueDate | string (date-time) | null | Not specified |
vatSumAmount | string (decimal) | null | Not specified |
vatSumAmountExchanged | string (decimal) | null | Not specified |
vatRate | 23 | 19 | 8 | 7 | 5 | 0 | -1 | -2 | * `23` - 23% * `19` - 19% * `8` - 8% * `7` - 7% * `5` - 5% * `0` - 0% * `-1` - CUSTOM % * `-2` - Reverse charge |
saleType | "GOODS" | "SERVICES" | "" | Not specified |
additionalMetadata | object | null | Not specified |
extractedItems | object | null | Per-item OCR extraction results: [{description, amount, vat_rate, ...}] |
isEinvoice | boolean | Not specified |
application/x-www-form-urlencoded
| Field | Type / accepted values | Description |
|---|---|---|
fileRequired | string (binary) | Not specified |
transactionsRequired | string (uuid)[] | Not specified |
company | string (uuid) | Not specified |
attachmentType | "invoice" | "receipt" | "contract" | "other" | * `invoice` - Invoice * `receipt` - Receipt * `contract` - Contract * `other` - Other |
amount | string (decimal) | null | Not specified |
amountExchanged | string (decimal) | null | Not specified |
attachmentNumber | string | Not specified |
brandName | string | Not specified |
currency | string | Not specified |
currencyExchanged | string | null | Not specified |
description | string | Not specified |
supplierCountry | "DE" | "PL" | "DOMESTIC" | "INSIDE_EU" | "OUTSIDE_EU" | "" | Not specified |
valueDate | string (date-time) | null | Not specified |
vatSumAmount | string (decimal) | null | Not specified |
vatSumAmountExchanged | string (decimal) | null | Not specified |
vatRate | 23 | 19 | 8 | 7 | 5 | 0 | -1 | -2 | * `23` - 23% * `19` - 19% * `8` - 8% * `7` - 7% * `5` - 5% * `0` - 0% * `-1` - CUSTOM % * `-2` - Reverse charge |
saleType | "GOODS" | "SERVICES" | "" | Not specified |
additionalMetadata | object | null | Not specified |
extractedItems | object | null | Per-item OCR extraction results: [{description, amount, vat_rate, ...}] |
isEinvoice | boolean | Not specified |
Responses
201 Response fields
application/json
| Field | Type / accepted values | Description |
|---|---|---|
publicIdRequiredRead only | string (uuid) | Not specified |
createdRequiredRead only | string (date-time) | Not specified |
file | string (uri) | null | Not specified |
transactionsRequired | string (uuid)[] | Not specified |
companyRequired | string (uuid) | Not specified |
attachmentType | "invoice" | "receipt" | "contract" | "other" | * `invoice` - Invoice * `receipt` - Receipt * `contract` - Contract * `other` - Other |
amount | string (decimal) | null | Not specified |
amountExchanged | string (decimal) | null | Not specified |
attachmentNumber | string | Not specified |
brandName | string | Not specified |
currency | string | Not specified |
currencyExchanged | string | null | Not specified |
description | string | Not specified |
supplierCountry | "DE" | "PL" | "DOMESTIC" | "INSIDE_EU" | "OUTSIDE_EU" | "" | Not specified |
valueDate | string (date-time) | null | Not specified |
vatSumAmount | string (decimal) | null | Not specified |
vatSumAmountExchanged | string (decimal) | null | Not specified |
fileName | string | Not specified |
saleType | "GOODS" | "SERVICES" | "" | Not specified |
vatRate | 23 | 19 | 8 | 7 | 5 | 0 | -1 | -2 | * `23` - 23% * `19` - 19% * `8` - 8% * `7` - 7% * `5` - 5% * `0` - 0% * `-1` - CUSTOM % * `-2` - Reverse charge |
extractedItems | object | null | Per-item OCR extraction results: [{description, amount, vat_rate, ...}] |
fileHash | string | Not specified |
retentionUntil | string (date) | null | Not specified |
externalSource | string | Not specified |
externalId | string | Not specified |
401 Response fields
application/json
| Field | Type / accepted values | Description |
|---|---|---|
detailRequiredRead only | string | Not specified |
403 Missing scope, company mismatch, unsupported operation, or a plan/account restriction.
429 Rate limit exceeded. Wait for the Retry-After header before retrying.
Use the base URL https://api.norman.finance/api/v1. Sign up or log in to Norman to create an API key, then send it as a Bearer token. For an OpenAPI JSON file, contact support.