Skip to content

Providers and table configuration

A base names a data source and its credentials; a table inside it names one dataset and what to do with it. Both can be created through the REST API or managed in the UI.

Common to every base:

Key Meaning
baseId The external id. Airtable’s appXXXXXXXX, or a slug you choose
name Display name
provider One of the providers below
tables The tables to sync. Omit for providers that discover them
cacheHours Overrides the global freshness window for this base
providerConfig Provider-specific settings
public Readable without credentials
orgId Owning organization
activityRetentionDays History window; null inherits the org’s, 0 keeps forever
{ "baseId": "appXXXXXXXX", "provider": "airtable", "apiKey": "pat…", "airtableUrl": "https://api.airtable.com" }

Personal access token or OAuth. Supports webhooks for near-real-time updates, and attachments in both directions. Schema (including single/multi-select options and field types) is read from Airtable’s meta API and surfaced as Esri field metadata.

{ "baseId": "my-project", "provider": "nocodb", "apiKey": "…", "nocodbUrl": "https://app.nocodb.com" }

A deployment can set an instance-wide URL and key as fallbacks when a base doesn’t set its own. Webhooks supported; attachments are read-only.

{ "baseId": "warehouse", "provider": "postgis",
"host": "db.internal", "port": 5432, "database": "gis",
"user": "reader", "password": "…",
"providerConfig": { "schema": "public" } }

connectionString is accepted in place of the individual host/port/database/user/password keys. Reads tables and views. postgis adds native geometry — and serves vector tiles directly from the database with ST_AsMVT, per tile, rather than building them from a cached copy.

Schema discovery accepts * or a list, in which case tables are registered as schema.table. Clients may still address one by its bare name when that’s unambiguous.

Both providers have real transactions, which is why they’re the only ones where table- and base-wide rollback can be written back.

{ "baseId": "reporting", "provider": "mssql",
"server": "sql.internal", "database": "reporting",
"user": "reader", "password": "…",
"options": { "encrypt": true, "trustServerCertificate": false } }

MS SQL Server, with schema introspection. Geometry via WKB/WKT.

{ "baseId": "open-data", "provider": "fetch", "fetchUrl": "https://example.org/sites.geojson" }

Any HTTP endpoint returning GeoJSON or CSV. Read-only — a mirror, not a two-way sync.

A purpose-built adapter for TSIP. Read-only.

Key Meaning
name Table name — becomes the layer name and the URL segment
strategy What to do with the data (below). Required
enabled Set false to keep the config but skip the table
format geojson (default), csv, or json
cacheHours Per-table freshness override
provider, providerConfig Override the base’s provider for this table
tableId The provider’s own table id, when it differs from the name
Key Meaning
geometryType Point, PolyLine, Polygon, Multi
geometryField A column holding WKT/WKB/GeoJSON geometry
latitudeField / longitudeField Build point geometry from two numeric columns
spatialReference EPSG code of the source coordinates

A table with no geometry is still served — as a non-spatial table layer, queryable and joinable. A snapshot can supply geometry for one without editing the table config.

Where coordinates need to come from an address or a name, geometryServiceUrl and its companions (geometryServiceParams, geometryServiceIdField, geometryServiceField, geometryServiceSourceField) point at a service that resolves them.

Key Meaning
idField The provider’s stable record key. Drives OBJECTID derivation and the activity log
displayField The field Esri clients use as a label
typeField Subtype/category field

relations publishes ArcGIS relationships between tables in the same base:

{ "relations": [
{ "targetTable": "Regions", "sourceField": "RegionId", "targetField": "Id",
"relationType": "one-to-many" }
] }

one-to-one, one-to-many and many-to-many (via intermediaryTableName) are supported.

Strategy Extra keys What it does
cache cacheHours Write the GeoJSON to disk. What every read endpoint needs
publish idField, displayField, serviceItemId, apiKey, sharing, sync Diff against a hosted ArcGIS feature service and apply adds/updates/deletes
upload — Bulk-replace an ArcGIS feature service instead of diffing it
data-pipeline geometryType, apiKey, sharing, sync Transform on the way through — CSV cleanup, field mapping, geometry derivation
join joinField, tableJoinField Merge several sources into one table
layer idField, layerId, sync Create and manage one layer of a multi-layer service

Strategies are mutually exclusive — a table has exactly one.

publish is the heaviest of them: it fetches the target service’s current features, computes the difference against the freshly synced data, and applies only what changed, so an unchanged sync costs nothing. It needs ArcGIS credentials — AGOL_PORTAL_URL, AGOL_USERNAME and AGOL_PASSWORD, or per-table apiKey.

In CACHE_ONLY mode the outbound strategies (publish, upload, data-pipeline) are quietly downgraded to a plain cache, so an instance pointed at production credentials can be run safely without touching anything.