DEEN

← Back

API and Claude access

With the ValueDoc API, your own programs, your property manager, a professional business or an AI assistant like Claude create and read files, units, entries, batteries and parts, and submit invoices. No retyping. One rule always applies: each category only allows what exists there. Units only exist for a house, kilometres not for a house, batteries not for a bicycle without a motor.

Version 1 · As of 31 October 2026 · We announce changes here.

How to get access

  1. Get it enabled. The API is an add-on package. We enable it per account, with a number of files the account may use via the API. Write to us via “Report a problem”.
  2. Switch it on yourself. In the app under Account → API and Claude → “Switch on API for my account”. Switching it off blocks all keys immediately.
  3. Create a key. Name (who it's for), permissions, which files, validity. The key (vd_…) is shown only once. You can revoke it at any time.

Property manager or professional business: the owner creates a key for you and gives it to you. Or you use the API with your own account for your own properties.

Key permissions

Permissionallows
lesen (read)View files, units, entries, batteries, parts, inbox and documents
einliefern (submit)Put receipts into the “To review” inbox; the owner confirms in the app
anlegen (create)Create and change files, units, entries, batteries and parts

Deleting is not possible via the API. A key can be limited to certain files; if it creates a new file, it also applies to that file.

Using it with Claude (MCP)

ValueDoc speaks the Model Context Protocol. With it, Claude can create properties, enter units, assign invoices and flag anything unclear by itself.

Tools: konto, kategorien, objekte_liste, objekt_details, objekt_anlegen, objekt_aendern, einheiten_anlegen, einheit_aendern, eintraege_liste, eintrag_anlegen, eintrag_aendern, akku_anlegen, teil_anlegen, eingang_einliefern, eingang_liste. The names are German; Claude understands requests in English as well.

Example: “Create my three houses from this list with all flats and assign the invoices from the folder. Mark anything you can't assign with certainty as to clarify.”

The address with the key is like a password. Treat it like one. Whatever Claude retrieves goes to Anthropic; their terms apply there (privacy policy).

REST API

Base: https://valuedoc.app/api/voltdoc/v1 · Authentication: header Authorization: Bearer vd_… · Data as JSON (UTF-8) · Dates as YYYY-MM-DD · Amounts in euros gross, as a number or text such as "289,50".

Method and pathPermissionPurpose
GET /kategorien[/{kind}]noneWhat each category offers: fields, entry types, units, batteries, parts in km or years
GET /kontoany valid keyKey, permissions, package (allowed and existing files)
GET /objekte?kind=lesenAll files
POST /objekteanlegenCreate a file, for a house with einheiten (units), otherwise optionally akkus (batteries), teile (parts)
GET /objekte/{id}lesenFile with units, batteries, parts, figures and the category's rules
PATCH /objekte/{id}anlegenChange fields (category stays)
GET / POST /objekte/{id}/einheitenlesen / anlegenUnits (house only), POST with {"einheiten":[…]}, up to 500 at once
PATCH /einheiten/{id}anlegenChange a unit
GET /objekte/{id}/eintraegelesenFilters: unit, kind, zu_klaeren=true (to clarify), von (from), bis (to), limit, seite (page)
POST /objekte/{id}/eintraegeanlegenCreate an entry directly, optionally with dateien (files)
GET / PATCH /eintraege/{id}lesen / anlegenRead or change an entry, assign a unit, clarify, attach receipts
GET / POST /objekte/{id}/akkus, PATCH /akkus/{id}lesen / anlegenBatteries and home storage
GET / POST /objekte/{id}/teile, PATCH /teile/{id}lesen / anlegenWear parts (km) or building components (years)
GET /objekte/{id}/eingang?status=lesenInbox: zu_pruefen (to review), uebernommen (accepted), verworfen (discarded)
POST /objekte/{id}/eingangeinliefernSubmit a receipt, the owner confirms
GET /dateien/{eintraege|eingang|akkus|objekte}/{id}/{name}lesenDownload a file (the link is in dateien[].url)

Categories

fahrrad (bicycle), ebike, escooter, emoped, motorrad (motorbike), emotorrad, auto (car), eauto (electric car), hybrid, haus (house), wohnmobil (motorhome), boot (boat), speicher (home battery), sonstiges (other, with kind_label). GET /kategorien returns the exact fields. The API rejects fields that don't exist in a category with a clear message.

CategoryFileEntry typesExtras
hausname, house_type (efh, dhh, rh, wohnung, mfh), area, year, heating, heat_year, energy_class, energy_kwh, cert_type, cert_untilenergetisch, renovierung, wartung, reparatur, pruefung, mangel, massnahme, kauf, sonstigesUnits, labor_cost, funding_ref, components in years, home storage
Vehiclesname, brand, model, ident, year, km (not for boot)wartung, inspektion, reparatur, reifen, akku, pruefung, mangel, kauf, sonstigesBatteries (not fahrrad, motorrad, auto), parts in km (boot in years)
speichername, brand, model, ident, yearwartung, pruefung, reparatur, mangel, kauf, sonstigesBatteries, parts in years

Each file also has inbox_words: comma-separated keywords (for example number plate or customer number) used by the inbox to assign mails sent to the account address to this file.

Entries always have date, optionally title, shop, cost, notes, part, unclear and unclear_note (to clarify), and for defects and measures state (offen = open, erledigt = done).

Example: create a house with flats

curl -X POST https://valuedoc.app/api/voltdoc/v1/objekte \
  -H "Authorization: Bearer vd_…" -H "Content-Type: application/json" \
  -d '{"kind":"haus","name":"Musterstraße 5","house_type":"mfh","area":640,"year":1972,
       "einheiten":[{"name":"EG links","kind":"wohnung","area":72},
                    {"name":"Garage 1","kind":"stellplatz"}]}'

Unit types: wohnung (flat), gewerbe (commercial), stellplatz (parking space), keller (cellar), allgemein (common area), sonstiges (other). Please don't enter tenants' names.

Example: create an invoice, assign a unit, mark as to clarify

curl -X POST https://valuedoc.app/api/voltdoc/v1/objekte/AKTEN_ID/eintraege \
  -H "Authorization: Bearer vd_…" -H "Content-Type: application/json" \
  -d '{"kind":"wartung","date":"2026-10-01","title":"Heizungswartung",
       "shop":"Heizung Muster GmbH","cost":"289,50","labor_cost":120,
       "unit":"EINHEITEN_ID","unclear":true,"unclear_note":"Umlagefähig?",
       "dateien":[{"name":"rechnung.pdf","type":"application/pdf","data":"BASE64…"}]}'

Clarified: PATCH /eintraege/{id} with {"unclear":false}. Open items: GET /objekte/{id}/eintraege?zu_klaeren=true.

Example: submit a receipt (owner confirms)

curl -X POST https://valuedoc.app/api/voltdoc/v1/objekte/AKTEN_ID/eingang \
  -H "Authorization: Bearer vd_…" \
  -F 'subject=Rechnung Schornsteinfeger' \
  -F 'fields={"date":"2026-09-12","shop":"Huber","cost":84.2,"kind":"pruefung"}' \
  -F 'dateien=@rechnung.pdf'

Files are sent as JSON (dateien: Base64 with name, type, data) or as a form upload (field dateien). Allowed: PDF, JPEG, PNG, WebP, each at most 1 MB, up to 5 per entry. With "auslesen":true and without fields, ValueDoc reads the first receipt with AI; this counts towards the account's monthly AI readings.

Limits and errors

Questions?

Tap “Report a problem” at the bottom or write via the contact form.