{config_path}/metadata.json defines how upload metadata is collected, validated, and stored.
Each field supports the following properties.
key(string, unique) Unique identifier used in API payloads and stored metadata.label(string) Human-readable label displayed in the UI.type(string) Data type of the field. Supported values:string,text,number,integer,boolean,date,datetime,select,multiselect.
required(boolean) Whether the field must be present.placeholder(string) Placeholder text shown in the UI.help/description(string) Helper text displayed below the input.default(any) Default value used by the frontend when initializing the upload form.
options(array) Allowed values. Each entry may be a string or an object of the form{ "label": "...", "value": "..." }.allowCustom(boolean) When enabled, users may provide values not listed inoptions(the UI uses a datalist-style input).
min,maxNumeric bounds fornumberandintegerfields.minLength,maxLengthLength constraints forstringandtextfields.regexRegular expression the value must match. Enforced both on the frontend and backend.
extract_regexOptional Python regular expression applied to the uploaded filename to prefill the field. If the pattern matches, capture group 1 is used; otherwise, the full match is used. Fordatefields, named groupsyear,month, anddayare combined intoYYYY-MM-DD.
- The active schema is exposed via
GET /api/metadata. - Filename extraction is available via
POST /api/metadata/extract. - During upload initiation, metadata is validated server-side against the schema.
- The frontend and CLI both use the extraction endpoint for filename-based prefilling.
- Metadata is stored per upload as JSON in the
meta_datafield.