manifest form field on PUT /datasets/{id}/data, or configure it from the Alphacast web UI.
Manifest shape
A manifest is a JSON array of column definitions. Each element describes one column:Column fields
The exact column name as it appears in the CSV header row. Whitespace at the edges is trimmed automatically; embedded newlines are converted to spaces. Comparison against the CSV header is case-insensitive and accent-insensitive (
País matches pais), so minor casing inconsistencies in the source file are tolerated — Alphacast normalizes the column to the manifest’s canonical name.The data type for this column. One of:
Date— a date value, parsed using the dataset’s date format. There must be exactly oneDatecolumn in the manifest, and it acts implicitly as an entity column.String— text or categorical value. Used for both entity dimensions (e.g.Country) and value strings (e.g.Notes).Decimal— numeric value with arbitrary precision. The default for any value column that is not explicitly String or Short Integer.Short Integer— anInt16integer (range −32,768 to 32,767). Use this only when you know every value fits — uploads fail withColumn 'X' cannot be cast to Short Integer (Int16)if any row exceeds the range.
Whether the column is part of the row identity (a dimension) or a measurement.
true— entity column. Together with theDatecolumn, entity columns form the composite key Alphacast uses to match rows during merges. Typical entities:Country,Sector,Ticker,Region.false— value column. Holds the actual measurements that get inserted, updated, or deleted.
Date column is always treated as an entity, even though it has its own dataType: "Date".Optional. If provided, Alphacast renames the column from
sourceName to destinationName before applying any other logic. Useful when the upstream file uses a different name from the one you want to expose in Alphacast (e.g. CSV column GDP_USD_Billions → dataset column GDP).Optional. When
true, Alphacast drops the column from the upload before validation. Use this for ad-hoc columns in the CSV that you do not want to import.Entity vs value columns
Understanding the entity / value split is the key concept of the manifest:- Entity columns identify a row uniquely. Two rows with the same
Date+ same combination of entity values represent the same observation. If your CSV contains two rows withDate = 2024-01-01, Country = USA, the upload fails with a duplicate-rows error. - Value columns hold the data that changes between observations. When the same entity key appears in both the upload and the existing dataset but a value column differs, Alphacast treats that as a conflict and resolves it according to your upload modes.
'none' so they still participate in the composite key. Entity values are also stripped of surrounding whitespace.
The date column
Exactly one column should havedataType: "Date" and isEntity: true. This column drives:
- The dataset’s
minDateandmaxDatemetadata. - The inferred
frequency(D,M,Q,A, ornullif Alphacast cannot detect a regular cadence). - Date-range optimizations during merges — historical rows outside the upload’s date window are preserved without comparison, which keeps incremental uploads fast.
Date format
Each dataset has adate_format property — a Python strftime string such as %Y-%m-%d, %d/%m/%Y, or %Y-%m. Every value in the date column must match this format, or the upload fails with Date should be formatted as <format>.
Alphacast tries the configured format first, then a lowercased variant, and finally splits on whitespace and tries again (so timestamps like 2024-01-01 00:00:00 parse against a %Y-%m-%d format). Anything still unrecognized is rejected.
Numeric type inference
For value columns marked asDecimal, Alphacast does not require pre-cleaned numbers. The processor:
- Strips a trailing
%and remembers it (so12.5%becomes0.125). - Tries an English-number parse (
1,200.50→1200.5). - Falls back to a continental-Europe parse (
1.200,50→1200.5). - Picks whichever interpretation parses cleanly — and if at least 80% of the column’s non-null values are numeric, the column is accepted as
Decimal. Otherwise it is downgraded toStringautomatically.
Short Integercolumns: there is no fallback. Every value must fit inInt16after parsing, or the upload fails.- Columns with mixed numeric and non-numeric content where the numeric share is below 80%: they will silently become strings, which is rarely what you want. Inspect the process’s
stats.entitiesCountand column types after the first upload to confirm the inference.
Manifest locking
A dataset can have its manifest locked (manifestLocked = true). When locked:
- The
manifestform field on uploads is ignored — the dataset’s existing manifest is the only one used. deleteMissingFromDBis forced tofalseregardless of what you pass.acceptNewColumnsis forced tofalseregardless of what you pass.
Renaming and ignoring columns: a worked example
Suppose your CSV looks like this:Notas_Internas excluded:
Date, Country, GDP_USD_Billions, Category. The original CSV column names never appear anywhere downstream.
What’s next
Validation & upload modes
The validation rules every upload runs through, plus the three flags that control conflict resolution.
Upload API reference
Request shape, form fields, error codes, and code samples for
PUT /datasets/{id}/data.