API
The API provides province, district and neighbourhood level records and summaries of crime and public order incidents, and a crime report for a location, in…
Coverage
In addition to the homicide and armed assault indicators published on the site, incidents of the following types are indexed at location level. The legal definitions of these types are on the other offences page. Armed assaults are flagged with the silahli field regardless of type.
The API provides incident records and counts. Incident records cover 2023–2025; if no year is given, the latest data year is returned. Population rates and indices are calculated only for homicide and armed assault; for other types, incidents reported in the press are a small share of official records and are unevenly distributed across provinces. Most drug and smuggling records relate to law enforcement operations.
Location and privacy
- The konum_duzeyi field of each record is il (province), ilce (district) or mahalle (neighbourhood). Incidents whose district could not be verified are returned only in province queries.
- Neighbourhood and village names are matched to the list of the TurkStat Address Based Population Registration System. For settlements with fewer than 1,000 residents, location is given at district level.
- For sexual offences, location is given at district level at most.
- In the location report, the district of the point is determined from geoBoundaries boundaries, and distances are calculated from neighbourhood and village centres derived from OpenStreetMap data. Coordinates are not included in responses.
- Dates are given by month. Records contain no names, ages, sex, addresses, streets or source links.
- Codes are written in lower case with Turkish characters simplified: kadikoy for Kadıköy. The list of codes is available from the /api/v1/konumlar endpoint. Field names and values are Turkish identifiers; their meanings are given below.
Authentication
Every request must carry the key issued under the licence. The key is shown once, and only its hash is stored on the server. The daily request limit depends on the package and is reported in the headers of every response (X-Istek-Limiti: limit, X-Istek-Kalan: remaining).
Authorization: Bearer se_•••••••••••••••• X-Istek-Limiti: 5000 X-Istek-Kalan: 4987
Endpoints
GET /api/v1/konum-raporu
Returns a crime report for a point or an area: the province and district of the point, province and district indices, incidents within the radius, and incident counts for the district and the province. The report covers all types; types not included in the indices are given as incident counts.
- enlem, boylam
- Latitude and longitude of the point (WGS84), with a full stop as the decimal separator. Example: 40.9870, 29.0260
- yaricap
- Radius of the vicinity in metres; 100–10,000, default 1,000
- olay_limit
- Maximum number of incidents in the vicinity list; 0–200, default 50
- il, ilce
- An area instead of a point: province code and optional district code; the vicinity section is not returned
- yil
- Incident year, several years separated by commas, or tum (all data years; currently 2023, 2024, 2025); defaults to the latest year. With several years, counts are summed over the years and indices refer to the latest year
GET /api/v1/konum-raporu?enlem=40.9870&boylam=29.0260&yaricap=1000
{
"yil": 2025, "yillar": [2025],
"sorgu": { "enlem": 40.987, "boylam": 29.026, "yaricap": 1000, "olay_limit": 50 },
"konum": {
"il": "istanbul", "il_ad": "İstanbul", "ilce": "kadikoy", "ilce_ad": "Kadıköy",
"mahalle": { "kod": "caferaga", "ad": "Caferağa", "tip": "mahalle", "mesafe_m": 240 }
},
"endeksler": {
"turkiye": { "cinayet": { "vaka": <number>, "oran_100bin": <number> }, "cinayette_olen": { … }, "silahli_saldiri": { … } },
"il": {
"nufus": <number>,
"cinayet": { "endeks": <number>, "sira": <1–81>, "il_sayisi": 81, "sinif": <1–5>, "sinif_ad": "90–110",
"vaka": <number>, "oran_100bin": <number> },
"cinayette_olen": { "kisi": <number>, "oran_100bin": <number> },
"silahli_saldiri": { … }
},
"ilce": {
"nufus": <number>, "guven": "orta",
"cinayet": { "sinif": <1–5>, "sinif_ad": "…", "il_sira": <number>, "il_ilce_sayisi": 39,
"turkiye_yuzdelik": <0–100>, "il_ile_kiyas": "civarında" },
"silahli_saldiri": { … }
}
},
"yakin_cevre": {
"yaricap_m": 1000, "mahalle_sayisi": <number>, "toplam": <number>, "silahli": <number>,
"turler": { "cinayet": { "n": <number>, "silahli": <number> }, "gasp": { … }, … },
"olaylar": [
{ "id": "ornek00000000002", "yil": 2025, "ay": 7, "tur": "gasp", "yontem": null, "sonuc": null, "silahli": 0,
"il": "istanbul", "ilce": "kadikoy", "ilce_ad": "Kadıköy", "mahalle": "caferaga", "mahalle_ad": "Caferağa",
"mesafe_m": 240 }
],
"olay_listesi_tam": true
},
"ilce": { "toplam": <number>, "silahli": <number>, "konum_duzeyi": { "mahalle": <number>, "ilce": <number>, "il": 0 }, "turler": { … } },
"il": { "toplam": <number>, "silahli": <number>, "konum_duzeyi": { … }, "turler": { … } },
"turler": [
{ "kod": "cinayet", "ad": "Cinayet (kasten öldürme ve teşebbüs)", "maddeler": "TCK 81–83, 35", "kapsam": "yuksek", "endekste": true },
{ "kod": "kasten_yaralama", "ad": "Kasten yaralama", "maddeler": "TCK 86–87", "kapsam": "dusuk", "endekste": false },
…
],
"kaynaklar": { … }
}- yil, yillar
- yillar gives the years the counts cover and yil the latest of them; indices refer to yil. Each incident in the vicinity list carries its own year
- konum.mahalle
- The nearest neighbourhood or village centre within 3 km, in the district of the point; otherwise null
- endeksler.il
- Homicide and armed assault index (Turkey = 100), rank among 81 provinces (1 is highest), class (1: under 70, 5: 140 and over), case count and rate per 100,000 people. The homicide index is based on the number of people killed per 100,000; cinayet.vaka and cinayet.oran_100bin give homicide cases resulting in death, and cinayette_olen gives the number of people killed
- endeksler.ilce
- Class, rank within the province, percentile among 973 districts (100 is highest) and comparison with the provincial rate. guven shows how well the estimate is supported given the district population: dusuk (low), orta (medium), yuksek (high)
- yakin_cevre
- Incidents located at neighbourhood level; distance is measured to the neighbourhood centre. If olay_listesi_tam is false, the list was cut at olay_limit
- ilce, il
- Counts by type of all records at neighbourhood, district and province level
- turler[].kapsam
- yuksek (high): a type with a published index; dusuk (low): a type not included in the indices and given as incident counts
GET /api/v1/olaylar
Returns the incident records for a location, sorted by month and paginated.
- il
- Province code, required. Example: istanbul
- ilce
- District code. Example: kadikoy
- mahalle
- Neighbourhood code; used with ilce
- tur
- One type code, or several separated by commas
- yil
- Incident year; defaults to the latest year
- ay_bas, ay_bit
- Month range, 1–12
- silahli
- 1: armed assaults only
- konum_duzeyi
- il, ilce or mahalle
- limit, sayfa
- Up to 500 records per page
GET /api/v1/olaylar?il=izmir&ilce=bornova&tur=hirsizlik,gasp&ay_bas=1&ay_bit=6
Authorization: Bearer se_••••••••••••••••
200 OK
X-Istek-Limiti: 5000
X-Istek-Kalan: 4987
{
"yil": 2025,
"sorgu": { "il": "izmir", "ilce": "bornova", "tur": ["hirsizlik", "gasp"], "ay_bas": 1, "ay_bit": 6 },
"sayfa": 1, "limit": 100, "toplam": 1,
"veri": [
{
"id": "ornek00000000001", "yil": 2025, "ay": 3,
"il": "izmir", "il_ad": "İzmir", "ilce": "bornova", "ilce_ad": "Bornova",
"mahalle": "kazimdirik", "mahalle_ad": "Kazımdirik", "mahalle_tip": "mahalle", "konum_duzeyi": "mahalle",
"tur": "hirsizlik", "yontem": null, "sonuc": null, "silahli": 0
}
]
}GET /api/v1/ozet
Returns incident counts by type and month for a location. With komsu=1, neighbouring districts are included.
- il
- Province code, required
- ilce
- District code
- mahalle
- Neighbourhood code
- komsu
- 1: include districts that share a border with the district
- yil
- Incident year; defaults to the latest year
GET /api/v1/ozet?il=izmir&ilce=bornova&komsu=1
{
"yil": 2025,
"konum": {
"il": "izmir", "ilce": "bornova", "mahalle": null,
"komsular": ["izmir/bayrakli", "izmir/buca", "izmir/karsiyaka", "izmir/kemalpasa",
"izmir/konak", "izmir/menemen", "manisa/yunusemre"]
},
"toplam": <number>,
"silahli": <number>,
"konum_duzeyi": { "ilce": <number>, "mahalle": <number> },
"turler": {
"hirsizlik": { "n": <number>, "silahli": <number>, "aylik": [<12 months>] },
"kasten_yaralama": { … }
}
}GET /api/v1/konumlar
Returns the provinces, the districts of a province, or the neighbourhoods of a district that have incident records, with their codes and incident counts.
- il
- If given, the districts of the province; otherwise the provinces
- ilce
- If given, the neighbourhoods of the district that have incident records
- yil
- Incident year; defaults to the latest year
GET /api/v1/turler
Returns type codes, names, related legal provisions, the most detailed location level for each type and its coverage.
Fields
- id
- Permanent record identifier
- yil, ay
- Incident year and month
- il, il_ad
- Province code and name
- ilce, ilce_ad
- District code and name; null if the district could not be verified
- mahalle, mahalle_ad
- Official neighbourhood or village code and name; otherwise null
- mahalle_tip
- mahalle (neighbourhood) or koy (village)
- konum_duzeyi
- il (province), ilce (district) or mahalle (neighbourhood)
- tur
- Type code; see coverage
- yontem
- atesli_silah (firearm), kesici_alet (knife or blade), darp (beating), diger (other) or null
- sonuc
- olum (death), yaralanma (injury), girisim (attempt) or null
- silahli
- 1: an attack with a firearm or a knife or blade that resulted in death or injury
Errors
- 400
- Missing or invalid parameter
- 401
- Missing or invalid key
- 403
- A province outside the scope of the key
- 404
- Unknown endpoint, province or district; point outside Turkey
- 429
- Daily request limit reached
{ "hata": "il parametresi gerekli." }Error messages are returned in Turkish in the hata field.
Access
Keys are issued under an annual licence after the institutional access request has been reviewed. The query limit, the provinces covered and in-product display rights are set out in the agreement. A trial key may be issued while the request is under review. A single form is used for file delivery, dashboards and the API; select the Platform package or API access in the form.