Developers

PUBLIC API v1

Import a pre-processed document without OCR

POST /api/v1/companies/{company_pk}/attachments/structured-import/

Stores one document and optional metadata supplied by an external document system. It never runs OCR, creates or matches a transaction, or categorizes bookkeeping data. external_source + external_id make retries idempotent within the company.

Permission: write_documents · Direct link

Company-scoped. Account permissions, plan limits and document state still apply.

Path and query parameters

ParameterLocation / typeDescription
company_pkRequiredpath · string (uuid)Not specified

Request body

multipart/form-data

FieldType / accepted valuesDescription
fileRequiredstring (binary)Not specified
externalSourcestringNot specified
externalIdstringNot specified
supplierstringNot specified
customerstringNot specified
invoiceNumberstringNot specified
invoiceDatestring (date)Not specified
serviceDatestring (date)Not specified
netAmountstring (decimal)Not specified
vatAmountstring (decimal)Not specified
grossAmountstring (decimal)Not specified
currencystringNot specified
documentType"invoice" | "receipt" | "credit_note" | "contract" | "other"* `invoice` - invoice * `receipt` - receipt * `credit_note` - credit_note * `contract` - contract * `other` - other
direction"incoming" | "outgoing"* `incoming` - incoming * `outgoing` - outgoing
tagsstring[]Not specified

Responses

200 Response fields

application/json

FieldType / accepted valuesDescription
createdRequiredbooleanNot specified
metadataRequiredobjectNot specified
documentRequiredobjectNot specified
Nested fields
FieldType / accepted valuesDescription
publicIdRequiredRead onlystring (uuid)Not specified
createdRequiredRead onlystring (date-time)Not specified
filestring (uri) | nullNot specified
transactionsRequiredstring (uuid)[]Not specified
companyRequiredstring (uuid)Not specified
attachmentType"invoice" | "receipt" | "contract" | "other"* `invoice` - Invoice * `receipt` - Receipt * `contract` - Contract * `other` - Other
amountstring (decimal) | nullNot specified
amountExchangedstring (decimal) | nullNot specified
attachmentNumberstringNot specified
brandNamestringNot specified
currencystringNot specified
currencyExchangedstring | nullNot specified
descriptionstringNot specified
supplierCountry"DE" | "PL" | "DOMESTIC" | "INSIDE_EU" | "OUTSIDE_EU" | ""Not specified
valueDatestring (date-time) | nullNot specified
vatSumAmountstring (decimal) | nullNot specified
vatSumAmountExchangedstring (decimal) | nullNot specified
fileNamestringNot specified
saleType"GOODS" | "SERVICES" | ""Not specified
vatRate23 | 19 | 8 | 7 | 5 | 0 | -1 | -2* `23` - 23% * `19` - 19% * `8` - 8% * `7` - 7% * `5` - 5% * `0` - 0% * `-1` - CUSTOM % * `-2` - Reverse charge
extractedItemsobject | nullPer-item OCR extraction results: [{description, amount, vat_rate, ...}]
fileHashstringNot specified
retentionUntilstring (date) | nullNot specified
externalSourcestringNot specified
externalIdstringNot specified
201 Response fields

application/json

FieldType / accepted valuesDescription
createdRequiredbooleanNot specified
metadataRequiredobjectNot specified
documentRequiredobjectNot specified
Nested fields
FieldType / accepted valuesDescription
publicIdRequiredRead onlystring (uuid)Not specified
createdRequiredRead onlystring (date-time)Not specified
filestring (uri) | nullNot specified
transactionsRequiredstring (uuid)[]Not specified
companyRequiredstring (uuid)Not specified
attachmentType"invoice" | "receipt" | "contract" | "other"* `invoice` - Invoice * `receipt` - Receipt * `contract` - Contract * `other` - Other
amountstring (decimal) | nullNot specified
amountExchangedstring (decimal) | nullNot specified
attachmentNumberstringNot specified
brandNamestringNot specified
currencystringNot specified
currencyExchangedstring | nullNot specified
descriptionstringNot specified
supplierCountry"DE" | "PL" | "DOMESTIC" | "INSIDE_EU" | "OUTSIDE_EU" | ""Not specified
valueDatestring (date-time) | nullNot specified
vatSumAmountstring (decimal) | nullNot specified
vatSumAmountExchangedstring (decimal) | nullNot specified
fileNamestringNot specified
saleType"GOODS" | "SERVICES" | ""Not specified
vatRate23 | 19 | 8 | 7 | 5 | 0 | -1 | -2* `23` - 23% * `19` - 19% * `8` - 8% * `7` - 7% * `5` - 5% * `0` - 0% * `-1` - CUSTOM % * `-2` - Reverse charge
extractedItemsobject | nullPer-item OCR extraction results: [{description, amount, vat_rate, ...}]
fileHashstringNot specified
retentionUntilstring (date) | nullNot specified
externalSourcestringNot specified
externalIdstringNot specified
400 Response fields

application/json

FieldType / accepted valuesDescription
detailRequiredstringNot specified
codeintegerNot specified
type_stringNot specified
fieldRequiredstringNot specified
401 Response fields

application/json

FieldType / accepted valuesDescription
detailRequiredRead onlystringNot 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.