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
- 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”.
- 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.
- 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
| Permission | allows |
|---|---|
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.
- Claude (web, desktop): Settings → Connectors → add custom connector, address:
https://valuedoc.app/api/voltdoc/mcp/vd_YOUR_KEY(the app shows it for copying when you create the key). - Claude Code:
claude mcp add --transport http voltdoc https://valuedoc.app/api/voltdoc/mcp --header "Authorization: Bearer vd_…"
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 path | Permission | Purpose |
|---|---|---|
| GET /kategorien[/{kind}] | none | What each category offers: fields, entry types, units, batteries, parts in km or years |
| GET /konto | any valid key | Key, permissions, package (allowed and existing files) |
| GET /objekte?kind= | lesen | All files |
| POST /objekte | anlegen | Create a file, for a house with einheiten (units), otherwise optionally akkus (batteries), teile (parts) |
| GET /objekte/{id} | lesen | File with units, batteries, parts, figures and the category's rules |
| PATCH /objekte/{id} | anlegen | Change fields (category stays) |
| GET / POST /objekte/{id}/einheiten | lesen / anlegen | Units (house only), POST with {"einheiten":[…]}, up to 500 at once |
| PATCH /einheiten/{id} | anlegen | Change a unit |
| GET /objekte/{id}/eintraege | lesen | Filters: unit, kind, zu_klaeren=true (to clarify), von (from), bis (to), limit, seite (page) |
| POST /objekte/{id}/eintraege | anlegen | Create an entry directly, optionally with dateien (files) |
| GET / PATCH /eintraege/{id} | lesen / anlegen | Read or change an entry, assign a unit, clarify, attach receipts |
| GET / POST /objekte/{id}/akkus, PATCH /akkus/{id} | lesen / anlegen | Batteries and home storage |
| GET / POST /objekte/{id}/teile, PATCH /teile/{id} | lesen / anlegen | Wear parts (km) or building components (years) |
| GET /objekte/{id}/eingang?status= | lesen | Inbox: zu_pruefen (to review), uebernommen (accepted), verworfen (discarded) |
| POST /objekte/{id}/eingang | einliefern | Submit a receipt, the owner confirms |
| GET /dateien/{eintraege|eingang|akkus|objekte}/{id}/{name} | lesen | Download 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.
| Category | File | Entry types | Extras |
|---|---|---|---|
| haus | name, house_type (efh, dhh, rh, wohnung, mfh), area, year, heating, heat_year, energy_class, energy_kwh, cert_type, cert_until | energetisch, renovierung, wartung, reparatur, pruefung, mangel, massnahme, kauf, sonstiges | Units, labor_cost, funding_ref, components in years, home storage |
| Vehicles | name, brand, model, ident, year, km (not for boot) | wartung, inspektion, reparatur, reifen, akku, pruefung, mangel, kauf, sonstiges | Batteries (not fahrrad, motorrad, auto), parts in km (boot in years) |
| speicher | name, brand, model, ident, year | wartung, pruefung, reparatur, mangel, kauf, sonstiges | Batteries, 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
- At most 120 requests per minute per address, 300 submitted receipts per file and day, 1000 units per house.
- Package: if the account has more files than the package covers, the API answers with
402until the package is larger. - Errors come as
{"status":400,"message":"…"}in German:400value wrong or not available in the category,401key missing, invalid or expired,402package too small,403permission missing, not enabled or switched off,404not found,429too many requests. - Every change appears in the file's history with the date and key name; reads at most once per hour. Entries carry
source: "API: …". - All information is without guarantee. Deadlines, costs and notes are guide values, not legal or tax advice. What ValueDoc deliberately doesn't do.
Questions?
Tap “Report a problem” at the bottom or write via the contact form.