Usage
Use-case-driven recipes for the fim-portal CLI, which talks to the open (no-auth)
endpoints of the FIM Portal REST API (https://fimportal.de) — the data schemas,
data fields, document/service profiles and process models of the German federal
“Föderales Informationsmanagement” (FIM).
JSON commands print to stdout (pretty by default); download commands (xdf,
xzufi, pdf, report, visualization*, search-csv) stream raw bytes to
stdout or to a file via -o/--output.
The identifiers in the examples (e.g.
S07000009,L100001,99050048262000) are illustrative — substitute real ones from a search/list result.
Install
npm i -g @maschinenlesbar.org/fim-portal-cli
This installs the binary fim-portal (run fim-portal --help). All examples
below assume it is on your PATH. If you have not installed globally, replace
fim-portal with node dist/src/cli/index.js.
Many examples pipe JSON to jq for filtering;
jq is optional.
Use cases
Schemas & document profiles (XDatenfelder)
1. Find a data schema by topic, newest version only
You are looking for the form schema that covers a life event (e.g. a birth) and only want the current versions.
fim-portal schemas search --fts-query "Geburt" --is-latest --limit 5
Returns a JSON search result (a paged list of schema summaries). Add --compact
for one-line JSON, or pipe to jq to pull just the IDs and names:
fim-portal --compact schemas search --fts-query "Geburt" --is-latest --limit 5 \
| jq '.items[] | {id: .fim_id, name, version: .fim_version}'
(Adjust the jq path to the actual response keys.)
2. Inspect one schema and check its data quality
Before reusing a schema, look at the full definition and FITKO’s quality report.
# Full schema, latest version
fim-portal schemas get S07000009
# A specific version
fim-portal schemas get S07000009 1.0
# Quality report (completeness/consistency findings) for that version
fim-portal schemas quality-report S07000009 latest
# List every published version of the schema
fim-portal schemas versions S07000009
All four print JSON.
3. Download the official XDatenfelder XML for offline use / a validator
You need the machine-readable XML artefact, not the JSON view.
fim-portal -o geburt.xml schemas xdf S07000009 1.0
Writes the raw XML to geburt.xml and prints a confirmation (with the server’s
Content-Type) to stderr, keeping stdout clean. Omit -o to stream the XML to
stdout for piping.
The same xdf download exists for document profiles, fields and groups:
fim-portal -o profil.xml document-profiles xdf D00000003
fim-portal -o feld.xml fields xdf baukasten F00000000008
fim-portal -o gruppe.xml groups xdf baukasten G00000000046
Note that fields and groups take a <namespace> argument before the FIM id.
4. Search reusable data fields by type and approval status
You are modelling a form and want only released (Freigabestatus) text input
fields. --freigabe-status is repeatable.
fim-portal fields search \
--feldart input --datentyp text \
--freigabe-status 5 --freigabe-status 6 \
--limit 20
--feldart accepts input|select|label|hidden|locked; --datentyp accepts
text|text_latin|date|time|datetime|bool|num|num_int|num_currency|file|obj.
Use fim-portal groups search ... for data-field groups (same shared filters
like --name, --nummernkreis, --xdf-version, --order-by).
5. Search document profiles (Dokumentsteckbriefe) by Dokumentart
You want document profiles of a specific document kind, sorted by last change.
fim-portal document-profiles search \
--dokumentart 001 \
--order-by geaendert_datum_zeit_desc \
--is-latest --limit 10
--dokumentart is a fixed code (001..014, 999); --order-by choices
include name_asc, id_asc, geaendert_datum_zeit_desc, etc.
Services (XZuFi)
6. Find a public service (Leistung) and export its citizen-facing PDF
Look up a Leistungsteckbrief by keyword in a given language, then export the PDF a portal would show.
# Search service descriptions, German, full text "Personalausweis"
fim-portal service-profiles search --fts-query "Personalausweis" --sprache Deutsch
# Fetch one by its Leistungsschlüssel
fim-portal service-profiles get 99008001012012
# Export it as a PDF (second arg is the language code, e.g. de-DE)
fim-portal -o leistung.pdf service-profiles pdf 99008001012012 de-DE
--sprache choices include Deutsch, Deutsch (leichte Sprache), Englisch,
Polnisch, Sorbisch, Ukrainisch, Französisch. search returns JSON; pdf
streams bytes (use -o).
7. List SDG-relevant services for a Themenfeld
For Single-Digital-Gateway (SDG) reporting you need only SDG-relevant services in one OZG Themenfeld, newest first.
fim-portal service-profiles search \
--sdg-relevant \
--ozg-themenfeld familie_kind \
--order-by geaendert_datum_zeit_desc \
--limit 50
--ozg-themenfeld is repeatable; valid values include familie_kind,
bauen_wohnen, gesundheit, mobilitaet_reisen, steuern_zoll, etc. Other
useful filters: --leistungsadressat (repeatable), --einheitlicher-ansprechpartner,
--vollzugsbehoerde BAMF|BLE|DRV, --updated-since <iso>.
8. Get a service master text (Leistungsstammtext) and its XZuFi XML
Master texts are keyed by redaktionId, leistungId and a source
(leika|landesredaktion|pvog).
# Search master texts (e.g. all from one Redaktion)
fim-portal service-texts search --source leika --fts-query "Reisepass"
# Get one specific master text as JSON
fim-portal service-texts get B100019 574621 leika
# Download its XZuFi XML
fim-portal -o stammtext.xml service-texts xzufi B100019 574621 leika
# Export as PDF (last arg is the language code, e.g. de-DE)
fim-portal -o stammtext.pdf service-texts pdf B100019 574621 leika de-DE
9. Page through XZuFi organisational units (cursor pagination)
You need a full export of organisational units; these endpoints use a cursor rather than offset.
# First page
fim-portal organizational-units list --limit 50
# Next page: pass the cursor returned by the previous response
fim-portal organizational-units list --cursor 50 --limit 50
# Download the XZuFi XML for one unit (by redaktionId + id)
fim-portal -o ou.xml organizational-units xzufi L100038 368512
The same list / xzufi shape applies to specializations and online-services.
Processes (XProzess)
10. Find Musterprozesse at a given detail level and export a diagram
You want template processes (Musterprozesse) at detail level 105, then export
one as a visualization PDF.
# Search processes
fim-portal processes search --detaillierungsstufe 105 --is-musterprozess --limit 20
# Get one process (id, version, stufe 101..105)
fim-portal processes get 99146014080000 01.00.00 105
# Download the visualization PDF
fim-portal -o vis.pdf processes visualization 99146014080000 01.00.00 105
--detaillierungsstufe and the <stufe> argument are 101..105. Process
downloads: xprozess (XML), report, visualization, visualization-display
(all PDFs except xprozess). For higher-level classes use process-classes search
(filters: --operatives-ziel, --verfahrensart, --handlungsform) and
process-classes get <id> <version> / xprozess.
Cross-cutting tools
11. Bulk export a search result as CSV
For a spreadsheet of search hits, use the CSV tool endpoint instead of paging JSON.
fim-portal -o fields.csv search-csv --resource fields --term Name
--resource (required) accepts e.g. schemas, fields, groups, steckbriefe,
leistungen, processes. Additional pass-through filters: --xdf-version,
--order-by, --feldart, --datentyp, --dokumentart, --sprache. These are
forwarded verbatim and validated by the server.
12. List the referenced code lists
Discover which code lists the data fields reference (paged with offset/limit).
fim-portal code-lists --limit 20
fim-portal code-lists --offset 20 --limit 20
Prints JSON.
Global options
These go before the command, e.g. fim-portal --compact schemas get S07000009:
| Flag | Purpose |
|---|---|
--base-url <url> |
API base URL (default https://fimportal.de; https://schema.fim.fitko.net also works) |
--timeout <ms> |
Per-request timeout in milliseconds |
--max-retries <n> |
Retries for transient 429/503 responses |
--max-response-bytes <n> |
Cap response body size in bytes (0 = unlimited; default 100 MiB) |
--user-agent <ua> |
User-Agent header value |
--compact |
Print JSON on a single line instead of pretty-printed |
-o, --output <file> |
For downloads: write bytes to this file instead of stdout (an existing file is overwritten without a prompt) |
-V, --version / -h, --help |
Version / help |
Examples:
# Hit the alternate base URL with a longer timeout and more retries
fim-portal --base-url https://schema.fim.fitko.net --timeout 60000 --max-retries 4 \
schemas search --fts-query "Geburt" --limit 5
# Compact JSON straight into jq
fim-portal --compact fields search --feldart select --limit 100 | jq '.items | length'