PUBLIC API v1
Extract an invoice proposal from a contract
POST /api/v1/companies/{company_pk}/invoices/contract-draft/
Stores the source contract and returns terms for review. Does not create or send invoices. The draft uses major currency units for line rates; invoice creation uses minor units. Maximum file size: 10 MB.
Permission: write_invoices write_documents read_clients · 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 |
|---|---|---|
file | string (binary) | Not specified |
attachmentId | string (uuid) | Not specified |
contextAttachmentId | string (uuid) | Not specified |
fileContentBase64 | string | Not specified |
filename | string | Not specified |
multipart/form-data
| Field | Type / accepted values | Description |
|---|---|---|
file | string (binary) | Not specified |
attachmentId | string (uuid) | Not specified |
contextAttachmentId | string (uuid) | Not specified |
fileContentBase64 | string | Not specified |
filename | string | Not specified |
application/x-www-form-urlencoded
| Field | Type / accepted values | Description |
|---|---|---|
file | string (binary) | Not specified |
attachmentId | string (uuid) | Not specified |
contextAttachmentId | string (uuid) | Not specified |
fileContentBase64 | string | Not specified |
filename | string | Not specified |
Responses
200 Response fields
application/json
| Field | Type / accepted values | Description |
|---|---|---|
sourceContractRequired | string (uuid) | Not specified |
sourceContractNameRequired | string | Not specified |
draftRequired | object | Proposal for review. Line rates use major currency units; convert to minor units before creating an invoice. |
clientDataRequired | object | Not specified |
reviewNotesRequired | string[] | Not specified |
401 The API key is invalid, expired or revoked.
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.