Developers
Build with Tareky.
Plain HTTPS and JSON, request shapes your Mapbox and OSRM code already speaks, and one error shape everywhere. Here is everything to start.
Quickstart
- 1Get a keyDuring early access we issue keys by hand. A public tareky_pk_ key is for browsers and apps; a secret tareky_sk_ key stays on your server.
- 2Make a requestSend the secret key as a Bearer token, or a public key as access_token. Every answer carries your remaining limits.
- 3Draw a mapLoad a style URL in MapLibre GL JS v6, which shapes Arabic itself. A map load is one unit; its tiles are free.
# Directions, in Mapbox Directions’ shapecurl -H "Authorization: Bearer $TAREKY_SECRET_KEY" \ "https://api.tareky.com/v1/directions/driving/44.4183,33.3049;44.3650,33.3118" # Search: الكراده finds الكرادةcurl -H "Authorization: Bearer $TAREKY_SECRET_KEY" \ --get "https://api.tareky.com/v1/locations/geocode" --data-urlencode "q=الكراده" # An address people actually usecurl -H "Authorization: Bearer $TAREKY_SECRET_KEY" \ "https://api.tareky.com/v1/locations/reverse-geocode?lng=44.3661&lat=33.3152"import maplibregl from 'maplibre-gl' // v6 shapes Arabic natively const map = new maplibregl.Map({ container: 'map', // one map load is billed here; the tiles are free style: `https://api.tareky.com/v1/styles/light?lang=ar&access_token=${pk}`, center: [44.3661, 33.3152], zoom: 12,}) map.on('click', async ({ lngLat }) => { const place = await fetch(`https://api.tareky.com/v1/locations/reverse-geocode ?lng=${lngLat.lng}&lat=${lngLat.lat}&access_token=${pk}`).then((r) => r.json())})import 'package:http/http.dart' as http; // A static map is an image URL; a tareky_pk_ key is safe to ship.Image.network( 'https://api.tareky.com/v1/static-map/light/' '44.0091,36.1911,13/[email protected]?lang=ar&access_token=$pk',); final eta = await http.get(Uri.parse( 'https://api.tareky.com/v1/matrix/driving/' '44.0091,36.1911;44.0217,36.2012?access_token=$pk',));Endpoints
The public API under /v1, read from the same OpenAPI spec the API is checked against.
| Method | Path | Product |
|---|---|---|
| GET | /v1/locations/reverse-geocode | Reverse geocodingEarly access |
| GET | /v1/locations/search | Search & geocodingEarly access |
| POST | /v1/locations/geo-coding | Reverse geocodingEarly access |
| GET | /v1/locations/geocode | Search & geocodingEarly access |
| POST | /v1/tokens | Keys, scopes & limitsEarly access |
| GET | /v1/poi/nearby | Places nearbyEarly access |
| GET | /v1/poi/in-bounds | Places nearbyEarly access |
| POST | /v1/poi/along-route | Places nearbyEarly access |
| GET | /v1/directions/{profile}/{coordinates} | DirectionsEarly access |
| GET | /v1/matrix/{profile}/{coordinates} | Travel-time matrixEarly access |
| GET | /v1/match/{profile}/{coordinates} | Map matchingEarly access |
| GET | /v1/optimize/{profile}/{coordinates} | Trip optimisationEarly access |
| GET | /v1/traffic/tiles/{z}/{x}/{y} | Live trafficNot available yet |
| GET | /v1/traffic/flow | Live trafficNot available yet |
| GET | /v1/traffic/historical | Live trafficNot available yet |
| GET | /v1/traffic/snapshot | Live trafficNot available yet |
| GET | /v1/static-map/{theme}/{coords}/{size} | Static mapsEarly access |
| GET | /v1/geofences | Geofences & devicesIn development |
| POST | /v1/geofences | Geofences & devicesIn development |
| POST | /v1/geofences/import | Geofences & devicesIn development |
| GET | /v1/geofences/{id} | Geofences & devicesIn development |
| DELETE | /v1/geofences/{id} | Geofences & devicesIn development |
| POST | /v1/tracking/devices/{externalId}/positions | Geofences & devicesIn development |
| GET | /v1/tracking/devices/{externalId} | Geofences & devicesIn development |
| POST | /v1/tracking/devices/{externalId}/shares | Tracking linksIn development |
| GET | /v1/styles/glyphs/{handle}/{fontstack}/{file} | Fonts & iconsIn development |
| GET | /v1/tilesets/{id} | TilesetsIn development |
| POST | /v1/tilesets/{name}/uploads | TilesetsIn development |
| POST | /v1/tilesets/{name}/builds | TilesetsIn development |
| GET | /v1/tilesets/{name}/builds/{jobId} | TilesetsIn development |
| GET | /v1/styles/{theme} | Map stylesEarly access |
| GET | /v1/styles/{handle}/{styleId} | Custom styles & StudioIn development |
| GET | /v1/styles/{handle}/{styleId}/sprites/{file} | Custom styles & StudioIn development |
| GET | /v1/styles/{handle}/{styleId}/static/{coords}/{size} | Custom styles & StudioIn development |
| GET | /v1/styles/{handle}/{styleId}/tiles/{z}/{x}/{y} | Custom styles & StudioIn development |
| GET | /v1/tiles/{theme}/{z}/{x}/{y} | Raster tilesEarly access |
| GET | /v1/tilequery/{point} | TilequeryEarly access |
| GET | /v1/transit/plan/{points} | Transit trip planningEarly access |
| GET | /v1/transit/{points} | Transit trip planningEarly access |
| GET | /v1/feeds/cifs.json | Incident feedsEarly access |
| GET | /v1/feeds/incidents.geojson | Incident feedsEarly access |
| POST | /v1/feeds/incidents | Incident feedsEarly access |
Keys
Public keys
tareky_pk_ keys ship inside a page or an app, so they are limited instead of secret: to your origins, to your app ids and to the APIs you tick.
Secret keys
tareky_sk_ keys stay on your servers, can be limited to your addresses, and are never accepted in a URL.
Rotation
A rotated key keeps working for 24 hours, so you can deploy the new one without downtime.
Limits and errors
Every plan has per-second and per-minute limits in front of a monthly quota. Over a limit the API answers 429 with Retry-After, and every response says where you stand.
Every response carries
- X-RateLimit-Limit
- X-RateLimit-Remaining
- X-RateLimit-Reset
- X-Quota-Limit
- X-Quota-Remaining
- Retry-After
Every error has the same shape
{ "error": { "code": "quota_exceeded", "message": "Monthly quota exhausted for this app", "status": 429, "docsUrl": "https://docs.tareky.com/errors/#quota_exceeded" }, "requestId": "…"}Migrating from Mapbox
Static images, directions, matrix, map matching and tilequery take the same paths, parameters and responses as their Mapbox equivalents, and a public key rides in access_token like a Mapbox token. For most code the migration is the host.
// Mapbox static imagesconst url = `https://api.mapbox.com/styles/v1/mapbox/dark-v11/static/ ${lng},${lat},${zoom}/720x420@2x?access_token=${token}`const url = `https://api.tareky.com/v1/static-map/dark/ ${lng},${lat},${zoom}/[email protected]?lang=ar&access_token=${pk}` // Directions: same path, same responseconst base = 'https://api.mapbox.com/directions/v5/mapbox'const base = 'https://api.tareky.com/v1/directions'Tools
- MCP serverEarly accessPoint an AI assistant at the MCP endpoint with your key and it gets seven read-only tools: search, nearby places, reverse geocoding, directions, transit plans, map images and incidents. Metered like any call.
- TypeScript SDKIn developmentTyped requests and responses for every endpoint, plus helpers for style URLs and map images. In development: not published yet.
- Navigation packageIn developmentRoute progress, rerouting, Arabic voice phrasing and CarPlay and Android Auto maneuver names in one package. In development: not published yet.
Documentation
Every endpoint with its parameters, responses and errors, generated from the OpenAPI spec.
Open the API referenceBuild on Iraq’s own map.
Tell us what you are building. During early access we issue keys by hand, and we email you once when yours are ready.

