Visena Documentation

Partner API · v1

Everything in Visena.
One API away.

The Partner API opens your firm's clients, contacts, engagements, tasks and documents to the software around you. Import at scale, export without friction, sync continuously — or put your own portal in front of it all.

Nine resources, one contract · three read modes on every list · revocation under a minute · every write has a name on it

Who it's for

Built where the work is regulated

Visena runs the daily practice of firms whose work must stand up to scrutiny. The Partner API extends that same discipline to every integration you build on top.

  • Audit firms. Connect engagement data, client registers and documentation to the audit tooling you already run — with the attribution trail your methodology demands.
  • Accounting firms. Keep client and contact data flowing between Visena and your ledger, payroll and reporting systems — one source of truth, no re-typing.
  • Law and advisory. Case and client information where your matter management needs it, documents archived where your obligations require it.
  • Software partners. Integrate once against a stable, versioned REST contract and reach every Visena customer who chooses to connect you.
Technical overview Read-only access

One platform behind it

The system your firm already lives in

Visena gathers the essential tools of a modern practice — CRM, client screening, engagement management, time and invoicing — in one online solution. The Partner API opens the core records of that system to your own software: nine resources under one contract, the same records your teams see on screen, readable and writable over plain REST. No exports by e-mail, no CSV rituals, no waiting for someone to click a button.

  • Clients and contacts. The register your teams work in — person and company.
  • Engagements and projects. The work you deliver, with its structure — project.
  • Tasks and activities. What is planned, done and logged — activity.
  • Documents and folders. Real files, filed where they belong — document and document/folder.
  • A change feed for the archive. What was added or replaced since your last run — document/changes.
  • Templates. The shapes new clients and projects are created from — company-template and project-template.
Concepts API reference

What our partners build

Your software, Visena underneath

Whatever your firm runs on Visena, the Partner API makes it programmable. Four patterns cover most of what partners ask us for.

Portal

Your own portal

Put a front door you design in front of Visena. Every change made through the API obeys the same business rules as Visena's own screens — no shadow copies, no drift, no surprises.

Import

Bulk import and migration

Moving from a legacy system or spreadsheets? Load thousands of clients, contacts, projects and documents — with duplicate detection before you create, and validation that never half-writes a record.

Export

Export and reporting

Walk an entire dataset in a single pass with cursor paging, and pull documents on demand. Your data in Visena is yours — getting it out is a first-class feature, not a support request.

Sync

Continuous sync

Change feeds tell you exactly what was created or modified since your last run — timeline on the records, document/changes on the archive. Keep your CRM, data warehouse or workflow tools current, without re-reading everything nightly.

Making requests Lists, paging and sync

See it in action

Real calls, not slideware

Plain HTTPS and JSON, standard OAuth 2.0 — if your team can call a REST API, they can build on Visena. Every call has the same shape: the instance name, the API version, a locale, then the resource. Here is what the everyday moves look like.

The request flow: credential, token, API call, your system. Your credential created in the Visena instance clientId + secret Access token short-lived and scoped …/auth/api/v1/token Partner API same rules as the screens /{instanceName}/api/v1/ {locale}/person Your system portal, ERP, data warehouse application/json POST Bearer JSON
Every call follows the same four steps: the credential is exchanged for a short-lived access token, the token authorises the request, and the response lands in your own system. The solid lines are calls you make; the dashed line is data coming back.

Create records at scale

Probe for duplicates first, then create. Companies with a known organisation number are protected — the API refuses to create the same company twice, a bad reference writes nothing at all, and every imported record shows who loaded it.

import.sh
# any duplicates before we create?
GET /acme/api/v1/en/company/duplicates?orgNumber=983163327

# clear — create the client company
POST /acme/api/v1/en/company
{ "name": "Fjellheim Regnskap AS",
  "orgNumber": "983163327" }

→ 201 Created · Location: …/company/bQ4wR8

Walk the whole dataset

Cursor paging is built for one consistent extract: start at the first page, follow links.next to the end, and the dataset is yours in a single pass, filtered to exactly the slice you need. It is not a substrate for resuming a sync — an id is allocated at first write rather than at commit, so a row committed out of id order can land behind a walk that has already passed it. Resuming is what the time-windowed timeline is for: cursor-paginated as well, and at-least-once, so de-duplicate by id. Neither list mode reports deletions — for the archive, document/changes is the only read path where a deletion is observable.

export.sh
GET /acme/api/v1/en/person/cursor?limit=100

{ "items": [ …100 people… ],
  "links": { "next": "…/person/cursor?cursor=eyJp…" } }

# follow links.next until it disappears — export complete

Only what changed

Every resource exposes a change feed: everything created or modified since a timestamp you choose. One watermark, one call — no full re-reads and no diffing on your side, whether you run it every five minutes or once a night.

sync.sh
# everything that changed since last night's run
GET /acme/api/v1/en/person/timeline?since=2026-08-20T02:00:00Z

{ "items": [ …created & modified people… ],
  "links": { "next": "…" } }

# apply, store the new watermark, done

The archive, programmable

Upload files against the client or engagement they belong to, organise them in folders, and pull whole folder trees back as zip bundles. Real binaries go in and out, not just metadata, and a conflict policy decides whether an existing file is replaced, skipped or kept alongside the new one.

archive.sh
# file the signed engagement letter on the client
POST /acme/api/v1/en/document   (multipart)
  file=@engagement-letter.pdf
  entityType=COMPANY  entityId=bQ4wR8

→ 201 Created · Location: …/document/dN3pT7

# later: the whole folder tree as one zip
GET /acme/api/v1/en/document/folder/fR2kX9/content

Precise edits from your front end

Merge-patch updates change exactly the fields you send and nothing else — ideal behind a form in your own portal. Acting for a named user? The response records both identities: the person the change was made for, and what made it.

portal.sh
PATCH /acme/api/v1/en/person/xK9mQ2
Content-Type: application/merge-patch+json

{ "jobTitle": "Head of Operations",
  "directPhone": null }          ← cleared; the rest untouched

→ 200 OK · modified + modifiedBy recorded

Why audit firms in particular

Accountability isn't a feature we added. It's how the API is built.

Your business is trust and traceability. An integration surface that blurs who did what would be disqualifying — so ours never does.

Security, without ceremony

Locked down by default, open on your terms

The security model is the same one we trust with our own platform — and it stays out of your developers' way.

See the proof: read-only access Credentials and tokens

Professional by design

Standards your engineers already know

No proprietary SDK, no exotic protocol. The Partner API is built on the open standards every integration team speaks — which is why first calls happen in an afternoon, not a sprint.

OAuth 2.0 client credentials REST + JSON over HTTPS JSON Merge Patch RFC 7396 Problem Details RFC 9457 Web Linking RFC 8288

Machine-readable errors, navigable pagination links, precise partial updates — the conventions are boring on purpose. Boring is what integrates well, and what still integrates well five years from now.

Getting started

From first conversation to production

No procurement maze, no six-week enablement program. This is the whole journey.

The guides below cover credentials, tokens, scopes, paging and error handling, and the reference documents every endpoint. Your engineers will feel at home in the first hour.

Questions we hear first

The short answers

Do we need an SDK or special tooling?

No. The API is plain HTTPS with JSON bodies and standard OAuth 2.0. Any language, any HTTP client, any integration platform that can send a request works — most teams make their first call with nothing but curl.

Can we get our data out again?

Yes — completely, and without asking us. Cursor paging walks an entire dataset in one pass, timeline resumes the sync afterwards, and documents download as files or whole folder trees. Exit is a supported feature, not a negotiation.

Does API activity bypass Visena's business rules?

Never. API writes run through the same validation and business logic as Visena's own screens, and land with the same attribution. What is invalid in the interface is invalid through the API — your data stays consistent no matter which door it came through.

Who controls access, and how fast can it be cut?

The customer does. Credentials are created inside their Visena instance, scoped to exactly the permissions the integration needs, and revocable in one call — every token dies within about a minute. Secrets are shown once and stored only as a one-way hash.

Can an integration act on behalf of a specific employee?

Yes. On-behalf credentials are issued by the customer's administrator for a named user. Every change then records both identities — who it was done for, and what did it — which is exactly the trail an audit methodology expects.

What does it cost?

That depends on what you are building and the scale you are planning for. Talk to your Visena contact, or write to sales@visena.com, and we will put together terms that fit.

Everything in the Partner API documentation

Ten pages: an overview for the people who sign off on the integration, eight guides that build on each other, and the endpoint reference. Every page exists in English and Norwegian.

Guides, in reading order

Evaluation

Technical overview

Architecture, the surface you get and the security model — written for the people who have to sign off on the integration.

technical-overview.html →
Guide

Getting started

The whole flow in three moves, what you need before you start, and a 60-second taste that returns a real record.

getting-started.html →
Guide

Concepts

Instances, credentials, access tokens and scopes, plain versus on-behalf credentials, masked ids, and what the locale in the URL decides.

concepts.html →
Guide

Credentials and tokens

Create, list, revoke and rotate a credential, then exchange it for a token — with a screen-by-screen walkthrough of doing it the first time.

credentials.html →
Guide

Making requests

The anatomy of a URL, the headers every request carries, create, read, update — PUT against PATCH — delete, and the response conventions worth knowing.

requests.html →
Guide

Lists, paging and sync

Offset lists, a cursor walk for one consistent extract, time-windowed timelines for resuming a sync, and filters.

lists-and-sync.html →
Guide

Errors and troubleshooting

The RFC 9457 problem document every failure returns, what to do about each status code, a retry policy that will not make things worse, and a quick diagnosis table.

errors.html →
Guarantee

Read-only access

What a read-scoped token can and cannot do — and the 403 Forbidden that proves a read-only integration is unable to change anything.

read-only-access.html →
Guide

Going live

The checklist before you point an integration at production, and how to reach us when something does not add up.

go-live.html →

Endpoint reference