Glossary
A reference for the domain concepts and project-specific terms used throughout
ckan-cli. This tool wraps the CKAN Action API of any CKAN portal — by default the
Hamburg Transparenzportal (suche.transparenz.hamburg.de) — so the vocabulary is
split between CKAN itself (and its quirks, e.g. “package” == “dataset”), the
portals it runs, and the project’s own client/CLI terms.
CKAN and the portals
CKAN. The open-source data-management and cataloguing software (originally by the
Open Knowledge Foundation) behind many public-sector open-data portals. Every CKAN portal
offers the same Action API, which this client wraps; each portal adds its own fields
(extras) and settings.
Portal. One CKAN installation, addressed by its site URL (--base-url), e.g.
https://suche.transparenz.hamburg.de or https://www.daten-bw.de/ckan (a CKAN mounted
under a sub-path). A URL copied from a portal’s API docs (…/api/3/action) is reduced to
the site URL.
Known portal. A German CKAN portal in the list built into the CLI, addressed by a
short id with --portal (hamburg, govdata, berlin, nrw, …). ckan portals
lists them with the result of their last check; ckan portals --check checks them live.
The list is refreshed from Wikidata, the CKAN project’s instance registry and GovData’s
harvest sources (see DEVELOPING.md).
Transparenzportal Hamburg. The default portal: the register the Hamburg Transparency Act (HmbTG) requires. Most of its records are documents (contracts, reports, Senate papers, council decisions), not datasets.
GovData. Germany’s national open-data catalogue (ckan.govdata.de, --portal
govdata). It harvests most Länder portals, so its numbers overlap theirs.
CKAN core objects
Dataset (Package). The primary catalogue unit: a described collection of resources
with a title, description, publisher, tags, licence and timestamps. CKAN’s API calls it a
package (package_search, package_show). Addressed by id (UUID) or name (slug).
Type. A dataset’s kind, in type: normally dataset; Hamburg also has document
and app.
Resource (distribution). One file or service within a dataset: format, url,
size. A resource URL is not always a file: WMS/WFS are map services, html
resources are usually landing pages. Addressed by id only (ckan resource <id>).
Organization. A data publisher that owns datasets (ckan organizations,
ckan organization <id>). On Hamburg many records have no organization.
Group. A theme or category (ckan groups, ckan group <id>).
Tag. A free keyword on a dataset (ckan tags --query <substring>). On Hamburg many
tags are whole keyword lists in one string.
Licence (license_id). The licence of a record, set per record. Portals spell the same
licence differently (dl-de-by-2.0, dl-by-de/2.0,
http://dcat-ap.de/def/licenses/dl-by-de/2.0); on GovData and daten.bw the package licence
is mostly empty and the licence sits on the resources. ckan licenses lists the licences
a portal offers.
Extras. Portal-specific fields as {key, value} pairs, searchable as extras_<key>.
Hamburg’s: registerobject_type (the Informationsgegenstand), publishing_date,
terms_of_use (with the required attribution text), offline_date.
Informationsgegenstand. Hamburg’s document type (contract, Gutachten, Senate
communication, …), in extras_registerobject_type. Only the stemmed index form
filters reliably: vertrageoffinteress, not vertraege_oeff_interesse (Hamburg’s own
value list, which matches nothing).
CKAN Action API mechanics
Action API. CKAN’s RPC-style HTTP API under <site>/api/3/action/<name>, one action
per operation (package_search, organization_list, status_show, …).
Action name. The [a-z0-9_]+ identifier of an action. The client rejects anything else
before a request, so a name can’t smuggle in a path, query or fragment.
Envelope. Every response is wrapped in { help, success, result }, or { success:
false, error }. The client unwraps result; a failed envelope is an error.
Error shapes. CKAN reports errors three ways, all shown as one readable line: a
message (Not Found Error: Not found, HTTP 404), a validation field map
(Validation Error: rows: Invalid integer, HTTP 409) and a bare string for an unknown
action (HTTP 400). A Solr syntax error is cut down to Solr’s own reason.
status_show. Site title, CKAN version and installed extensions (ckan status); some
portals lock it (Berlin answers 403).
Generic action. ckan action <name> --param key=value … calls any read action,
including those added by extensions.
Search parameters (Solr)
CKAN search runs on Apache Solr, so its parameters use Solr syntax.
q (query). The full-text query, e.g. elbe or title:haushalt. CLI: search
[query].
fq (filter query). A filter that narrows the results without changing their order,
e.g. organization:allris. CLI: --fq, repeatable; every filter must match. CKAN answers a
repeated fq key with HTTP 409, so one filter is sent as fq and several as fq_list.
rows / start. Page size and zero-based offset. CKAN caps rows (1000 by default),
silently; page on with --start.
sort. A sort expression, e.g. metadata_modified desc. An unknown sort field is
ignored, not refused.
Facet (facet.field, facet.limit). Value counts over a search result, e.g. per
publisher or format. CLI: --facet <field> (repeatable) and --facet-limit <n>; the default
limit is 50 and cuts the list off silently, -1 returns every value. Counts are
datasets, not files.
res_format. A resource format, usable in fq and as a facet. Spelled differently per
portal (pdf, PDF, EU file-type URIs); Berlin’s filter is case-sensitive.
metadata_created / metadata_modified. When a record entered the portal and last
changed; real date fields, so ranges work:
--fq 'metadata_created:[2026-09-01T00:00:00Z TO *]'. A range on an extras_* date is
compared as text and returns nonsense.
Identifiers & pagination
id / name. Datasets, organizations and groups are addressed by id (UUID) or name (slug); resources by id only.
limit / offset. Paging for the *_list actions (packages, organizations,
groups), distinct from search’s rows / start.
all_fields. On organizations / groups, return full objects instead of names. CKAN
caps such a list at 25 entries without saying so; the client pages past the cap.
Blank value. An empty or whitespace-only filter, query or id is a usage error, never a silently unfiltered search.
Library & internals. Terms for the TypeScript client and its internals —
CkanClient, the request engine, transport, retry/backoff, error types, the portal list and its update script — live in DEVELOPING.md.