Prototype Phase P preview — the data and results on this page do not come from real machinery yet. Data contoh Prototype map

One schema, whoever the provider is.

Every product is served through the same request and response shape — datasets uploaded by sellers, third-party APIs we relay, and scripts we execute. The examples on this page are built from a product that really exists in the catalogue, not from an invented schema.

Channels

Seven distribution channels, one data model. Channels that are not open yet carry their stage.

REST API

Token auth, pagination, and filtering. The version is explicit in the URL — never swapped silently.

Programmatic downloads

CSV, Parquet, and GeoJSON/GeoPackage for spatial data — via presigned URLs.

Push & delta Stage 2

Webhook, object storage, SFTP, or online spreadsheet, with a delta option: changed rows only.

API relay gateway Stage 2

A DataDiti endpoint in front of third-party APIs: normalised responses, TTL-based caching, per-tier quotas.

Script execution endpoint Stage 3

An API wrapper around script products: synchronous or asynchronous (job + completion webhook), with per-call resource limits.

MCP endpoint Stage 3

A thin layer over an API that is already clean — positioning DataDiti as a source of facts for AI agents.

Authentication

Every request carries a bearer token belonging to your account. Tokens can be scoped per dataset and revoked at any time from the buyer area.

  • The token goes in the Authorization header, never as a URL parameter — URL parameters end up in intermediary logs.
  • A provider’s upstream API credentials never reach you; you always call a DataDiti endpoint.
  • Every call is written to the audit log: who, when, from which jurisdiction.
# Authentication Authorization: Bearer $DATADITI_TOKEN

Endpoints

Three endpoints cover most of what you need: product metadata, data rows, and the column schema.

Method Path Purpose
GET /v1/datasets The products your token can reach.
GET /v1/datasets/{slug} Product metadata: latest version, score, coverage, access class.
GET /v1/datasets/{slug}/rows Data rows, with pagination and filtering.
GET /v1/datasets/{slug}/schema The data dictionary for that version: column names, types, units, notes.

Your first request

The example below uses Proyeksi Penduduk Kabupaten 2020-2025 — a real catalogue product, with its actual column names.

Request

curl -H "Authorization: Bearer $DATADITI_TOKEN" \ "https://api.dataditi.com/v1/datasets/proyeksi-penduduk-kabupaten-2020-2025/rows?per_halaman=100"

Response

{ "version": "2.1.0", "fingerprint": "req_8f2c1a47", "meta": { "halaman": 1, "per_halaman": 100, "total": 3140000 }, "rows": [ { "kode_wilayah": "3273", "nama_wilayah": "Kota Bandung", "tahun": 2024, "nilai": 2452943, "sumber": "BPS" } ] }

One row shown; the rest follows pagination.

Pagination & filtering

Page-based pagination with a limit of 100 rows per request. Filters use the column names in that product’s data dictionary — there are no special filter names to memorise.

  • halaman and per_halaman control the slice; meta.total gives the full number of matching rows.
  • For per-row pricing, what you are billed for is the rows actually delivered after your filters.
  • A filter naming an unknown column is rejected with an error rather than silently ignored.
# Pagination & filtering GET https://api.dataditi.com/v1/datasets/proyeksi-penduduk-kabupaten-2020-2025/rows?halaman=2&per_halaman=100&kode_wilayah=3273

Errors

HTTP status codes are used for what they mean, and the response body always names a cause you can act on.

401 Token missing, expired, or revoked.
403 The token is valid but this product is out of its scope — or your jurisdiction may not receive this data.
404 No such product or version. Products removed by takedown also answer 404.
410 This version was retired after its service window ended.
429 Tier quota exceeded. The response headers say when the quota resets.

Versioning & deprecation

Integrations break quietly when a column is renamed without warning. These three promises are what prevent that.

/v1/

Explicit version in the URL

Every endpoint carries its version. A published version is never edited in place — fixes ship as a new version.

≥90

Breaking changes announced

At least 90 days before release, through the changelog, in-app notifications, and email.

≥180

Old versions keep running

At least 180 days after the replacement ships, then retired with staged reminders.

MCP endpoint Stage 3

AI agents call a tool, not a URL. The response carries provenance — version, source, and score — so an answer quoting these numbers can be traced back to where they came from.

Tool call

{ "tool": "dataditi.query_dataset", "arguments": { "dataset": "proyeksi-penduduk-kabupaten-2020-2025", "filter": { "wilayah": "ID-JK" }, "limit": 25 } }

Response

{ "content": [ { "kode_wilayah": "3273", "nama_wilayah": "Kota Bandung", "tahun": 2024, "nilai": 2452943, "sumber": "BPS" } ], "provenance": { "dataset": "proyeksi-penduduk-kabupaten-2020-2025", "versi": "2.1.0", "skor": 72.61, "sumber": "PT Geodata Nusantara", "diperiksa_pada": "2026-02-04" } }