SDKs & downloads
Every artifact below is generated from the frozen contract — regenerate on your side with any OpenAPI 3.1 toolchain, or use ours.
The contract
OpenAPI 3.1. v1 is frozen; changes are additive-only — clients must ignore unknown fields. Machine-readable rate-limit tiers ship in the document root (x-ndas-rate-limit-tiers).
TypeScript
@ndas/contracts — generated types (openapi-typescript) plus a dependency-free fetch client.
import { createNdasClient } from "@ndas/contracts";
const ndas = createNdasClient({
baseUrl: "https://sandbox.n.das.ug",
apiKey: process.env.NDAS_SANDBOX_KEY,
});
const result = await ndas.resolve({ point: { lat: 0.3355, lon: 32.5555 } });
if (result.success) console.log(result.data?.postcode);Python
ndas-api-client — generated with openapi-python-client (typed models, sync + async).
from ndas_api_client import Client
from ndas_api_client.api.resolve import resolve_coordinate
from ndas_api_client.models import ResolveRequest, Point
client = Client(base_url="https://sandbox.n.das.ug",
headers={"X-API-Key": SANDBOX_KEY})
result = resolve_coordinate.sync(
client=client,
body=ResolveRequest(point=Point(lat=0.3355, lon=32.5555)),
)Plain HTTP
No SDK required — send X-API-Key (keys) or a Keycloak bearer token (OAuth2 client-credentials) and speak JSON. Quote meta.request_id when reporting issues.
curl 'https://sandbox.n.das.ug/v1/addresses/UG-0007-10201' \
-H 'X-API-Key: <your sandbox key>'