How the CRM fits together
Know which identifiers to use, what gets created and where your data appears.
Resources and identifiers
| Resource | Identifier | Where it appears |
|---|---|---|
| User | id (UUID), discoverable by email | A member of your workspace |
| Company | orgnr in company URLs; id (UUID) in relationships | The company's CRM profile |
| Contact | id (UUID) | Contacts and linked company profiles |
| Contact detail | id (integer) | Email, mobile, phone or another detail on the contact |
| Company link | id (integer) | The contact's company relationships and roles |
| Task | id (UUID) | Tasks, assigned to a workspace member |
| Offer | id (UUID) | The sales pipeline, linked to a company |
| Note | id (integer) | The company's activity timeline |
Organisation numbers are strings of nine digits. A company's organisation number and its CRM UUID are not interchangeable.
Companies start with register data
POST /companies imports basic company and contact details from Aventra's Norwegian company register. The organisation number must already be available there. If it is not, the API returns 422 company_unavailable; check the number or add the company in Aventra first.
You can set a CRM status and optional assignee/contact details on a new company. Existing companies are returned unchanged. Use PATCH for intentional updates. The API does not let an integration overwrite registered names, financial statements or credit assessments. Creating a company does not perform a credit assessment or import financial statements.
Supported statuses are lead, prospect, contacted, customer, inactive_customer, and supplier. Deleted companies are excluded from reads and cannot receive notes or new relationships. Archived companies remain accessible.
Contacts have separate details and relationships
A contact is a person. Its name and notes are on the contact itself. Email addresses and phone numbers are contact details. A company connection is a separate relationship, optionally carrying a role such as Daglig leder.
One contact can have multiple details and company relationships. The API doesn't merge people by name or email. Keep your own mapping between source-system IDs and Aventra UUIDs.
Contact creation, adding a detail and adding a relationship are independent requests. A failure in a later step does not undo earlier steps.
Tasks always have an assignee
user_id is required when creating a task. Use GET users with an email filter, or list your workspace directory, and pass the selected UUID. The assignee must belong to your workspace.
Task timestamps use ISO 8601 with an explicit UTC offset, for example 2026-10-05T09:00:00+02:00. Z is also accepted. For a date-only task, use has_time_specified: false and a timestamp on the intended date in your team's timezone.
Offers are pipeline records
Offers track commercial opportunities. A company and explicit owner (user_id) are required. Resolve the owner through the workspace user directory. Creating or updating an offer does not send an email, generate a quote document, or append a separate activity event.
- Money: whole Norwegian kroner, excluding VAT.
15000means NOK 15,000, not NOK 150. - Recurring revenue: the amount per
monthly,quarterly,biannuallyorannuallyperiod. - Probability:
weight, an integer from 0 to 100. - Status:
new,sent,negotiating,acceptedorrejected.
An accepted offer always has a 100% probability. Send status: "accepted"; Aventra sets weight: 100 automatically, including on creation. A lower weight is ignored while the offer remains accepted. Other statuses use the supplied or existing probability.
Partial updates
PATCH changes only supplied fields. An empty object or an unknown field is rejected. To clear a nullable value, send null:
{ "assigned_to": null, "phone_number": null }Use an empty string to clear contact notes. Task assignees, offer owners and offer company IDs cannot be null.