API
Projelerini, grafiklerini ve haritalarını başka bir uygulamadan okumak, yeni proje, grafik ve harita oluşturmak ve anahtarla oluşturduklarını güncellemek: kimlik, uç noktalar, istek ve yanıt biçimi, hata kodları, hız sınırı ve OpenAPI belgesi.
Son doğrulama: 2026-09-22 · 0 gün önce
Tuvelia API'si, başka bir uygulamanın (ör. bir WordPress eklentisinin ya da
kendi betiğinin) projelerini, grafiklerini ve haritalarını okumasını, yeni
proje, grafik ve harita oluşturmasını ve bir anahtarla oluşturduğu grafiklerin
ve haritaların verisini ve ayarlarını değiştirmesini sağlar. API ile hiçbir şey silinmez ve yayınlanmaz: yayın her
zaman Tuvelia'da, elle yapılır.
API şu an önizlemede. Tuvelia'nın kendi WordPress eklentisi yayınlanana
kadar uçlar ve alanlar değişebilir; alan kaldırmak ve ad değiştirmek de buna
dahildir. Her değişiklik, tarihiyle birlikte bu sayfanın sonundaki
Değişiklik günlüğü bölümüne yazılır. Önizleme bitince sürüm kuralı
yürürlüğe girer vev1içinde yalnız ekleme yapılır.
Kimlik
Her istek bir API anahtarı taşır. Anahtarı Hesap › API anahtarları
sayfasında oluşturursun (API anahtarları) ve
isteğe şu başlıkla eklersin:
Authorization: Bearer tuv_pat_…
Anahtar, oluşturan hesabın verisini okur ve yazar; başka bir hesabın projesini
göremez. Sözleşmenin tanıdığı tek kimlik yöntemi API anahtarıdır.
Uç noktalar
Bütün adresler https://tuvelia.com/api/v1 ile başlar.
| İstek | Ne yapar |
|---|---|
GET /projects | Projelerin, en yenisi önce: kimlik, ad, oluşturulma zamanı. |
POST /projects | Yeni, boş bir proje oluşturur. |
GET /projects/{projectId}/charts | Projedeki grafikler, editördeki sırayla. Veri ve ayar gelmez; yayındaki grafik gömme adresleriyle gelir. |
POST /projects/{projectId}/charts | Projeye yeni grafik ekler. |
GET /charts/{chartId} | Grafiğin verisi (tablo) ve görünüm ayarları. |
PATCH /charts/{chartId} | Grafiğin ayarlarını değiştirir; yalnız gönderdiğin alanlar değişir. |
PUT /charts/{chartId}/data | Grafiğin verisini baştan yazar; ayarlar değişmez. |
GET /chart-templates | POST .../charts gövdesindeki template alanına yazabileceğin başlangıç şablonları. |
GET /chart-options | Ayarların listesi: adı, türü, ne işe yaradığı ve seçenekli olanlarda geçerli değerlerin tamamı. ?chartType=scatter ile o tipe özgü ayarlar da gelir. |
GET /projects/{projectId}/maps | Projedeki haritalar, editördeki sırayla. Veri ve ayar gelmez; yayındaki harita gömme adresleriyle gelir. |
GET /maps/{mapId} | Haritanın çizilen satırları, ham kaynağı ve ayarları. |
GET /geographies | Haritaya altlık olabilecek coğrafyalar: config.geographyId alanına ne yazılabileceği. |
GET /geographies/{geographyId}/scope-parents | O coğrafyada kapsam olarak seçilebilecek üst birimler, adıyla ve çizilecek bölge sayısıyla. |
GET /region-presets | Hazır çok ülkeli bölge listeleri (Baltık, AB-27, Balkanlar…). |
GET /map-options | Harita ayarlarının listesi: adı, türü, ne işe yaradığı ve seçenekli olanlarda geçerli değerlerin tamamı. |
POST /projects/{projectId}/maps | Projeye yeni harita ekler (veri ayrı uçtan yazılır). |
PATCH /maps/{mapId} | Haritanın ayarlarını değiştirir; yalnız gönderdiğin alanlar değişir. |
PUT /maps/{mapId}/data | Haritanın verisini baştan yazar; bölge adlarını sunucu çözer. |
Kimlikler UUID biçimindedir (ör. 3f2b8c1e-5a4d-4e6f-9b7a-1c2d3e4f5a6b).
Coğrafya kimlikleri bunun DIŞINDADIR: onlar de-adm2 gibi kısa anahtarlardır.
Bu sürümde grafikler ve haritalar okunabilir ve yazılabilir. Hikâyeler listede
yer almaz.
Örnek:
curl -H "Authorization: Bearer tuv_pat_…" https://tuvelia.com/api/v1/projects
{
"projects": [
{ "id": "3f2b8c1e-…", "name": "Haber grafikleri", "createdAt": "2026-09-02T12:00:00.000Z" }
]
}
Zamanlar ISO 8601 biçiminde ve UTC'dir.
Yayındaki grafiği ya da haritayı gömmek
Grafik ve harita yanıtlarında, listede de tek öğe okumasında da, yayındaki
öğenin published alanı doludur; yayında olmayan öğede bu alan nulldır.
published.urls üç adres taşır:
live: etkileşimli, canlı çizim.<iframe>ile gömmek için budur; ipucu
kutuları ve zaman imleci çalışır. Her zaman doludur.page: grafiğin tek başına açılan sayfası.nullolabilir.svg: grafiğin durağan görüntüsü.nullolabilir.
page ve svg durağan görüntüye dayanır. Bir yayında durağan görüntü yoksa bu
iki adres çalışmaz; API o durumda adres uydurmaz, null döner. Programın bu
ikisini kullanmadan önce dolu olup olmadığına bakmalı; live her yayında
çalışır.
Yayındaki görüntü, öğe Tuvelia'da yeniden yayınlanana kadar değişmez. API ile
verisini değiştirdiğin bir grafik ya da harita da öyledir: yeni veri, öğeyi
Tuvelia'da yeniden yayınladığında görünür. published.stale bunu söyler:
true ise öğede yapılan değişiklikler gömülü görüntüde henüz görünmüyor. API
yayınlayamaz; kullanıcının Tuvelia'da Yeniden yayınla demesi gerekir.
Grafiğin içeriği
GET /charts/{chartId} yanıtında data tablo biçimindedir: headers sütun
başlıklarıdır (ilki kategori sütunu), rows satırlardır. Her hücre METİN
olarak gelir, sayılar da; boş hücre "ölçüm yok" demektir, sıfır değil.
⚠ Ondalık ayırıcı NOKTADIR ("64.8"). Virgüllü yazım ("64,8") sayı
sayılmaz: o hücre sıfır olarak çizilir ve grafik boş görünebilir. Sayıların
ekranda nasıl yazılacağı ayrı bir ayardır (grafik ayarlarındaki sayı biçimi);
gönderdiğin veriyi etkilemez.
title grafiğin Tuvelia'daki adıdır, yani proje listesinde gördüğün ad.
Grafiğin üstünde görünen başlık bu değil, config.title alanıdır; ikisi
farklı olabilir.
config grafiğin görünüm ayarlarıdır: grafik tipi (chartType), renkler,
eksenler, notlar, künye. Ayar alanları zamanla çoğalır; tanımadığın alanları
yok say.
config içinde neye söz veriliyor. Sürüm kuralı config nesnesinin
tamamını değil, şu alanları kapsar: chartType, title, subtitle,
sourceName, sourceLink. Nesnedeki diğer ayarlar Tuvelia'nın iç ayarlarıdır:
okuyabilir ve geri yazabilirsin, ama haber verilmeden değişebilirler.
Programını onlara bağlama.
Yanıtta üç alan daha vardır:
-
version: içerik sürümü. Veri ya da ayar her değiştiğinde artar. -
apiManaged: grafiğin bir API anahtarıyla oluşturulmuş olduğunu söyler;
alanın anlamı budur. Bugünkü kural gereği anahtar yalnıztrueolan
grafikleri değiştirebilir. Grafik listesinde de bu alan vardır. -
warnings: verinin bir kısmı çizilmiyorsa uyarılar, yoksa boş dizi. Örneğin
ağaç haritası boş, sıfır ya da eksi değerli satırları çizemez; yarış aynı anda
sınırlı sayıda varlık gösterir. Her uyarı bircode, çizilmeyenlerin sayısı
(count) ve Türkçe bir açıklama (message) taşır. Veri silinmez, yalnız
çizilmez.En önemlisi
nothing_drawn: grafiğin hiçbir öğesi çizilmiyor demektir.
Yarış, dağılım, süre çizelgesi ve ağaç haritası bir eşleme olmadan boş çizilir
(ör. yarış içinconfig.temporal); uyarı hangi ayarın eksik olduğunu ve varsa
hangitemplateile hazır kurulacağını söyler. Bu uyarıyı gördüğünde grafik
oluşturma isteği başarılı olmuştur ama grafik boştur.Bir uyarı da sayı biçimiyle ilgilidir:
comma_decimal_cells, virgüllü ondalık
taşıyan ("12,5") ve bu yüzden sıfır çizilen hücreleri sayar. Veri yazarken
ondalık ayırıcı noktadır; bu uyarıyı görüyorsan gönderdiğin sayılar grafikte
görünmüyor demektir.
Haritanın içeriği
GET /maps/{mapId} yanıtında veri iki biçimde gelir ve aradaki fark önemlidir:
rawRows— haritanın ham kaynağı:{ "input": "Ankara", "value": "806.2" }.
Bölge adı yazıldığı gibi durur ve coğrafyada karşılığı bulunamayan satırlar da
buradadır.data— haritada gerçekten çizilen satırlar:{ "id": 6, "value": 806.2, "label": "Ankara" }. Bölge adı coğrafyanın sayısal kimliğine çözülmüştür.
Eşleşmeyen bir satır rawRowsta vardır ama datada yoktur. Bu yüzden veriyi
okuyup değiştirmek istersen rawRowsu temel al: datadan türetip geri
yazmak, eşleşmeyen satırları sessizce silerdi.
Zamanlı haritalarda her satırda bir at alanı bulunur:
{ "precision": "year", "iso": "1985" }. isonun biçimi precisiona bağlıdır
(year → 1985, month → 1985-03, day → 1985-03-17). Yıllık bir veriyi
1985-01-01 diye yazmak, eksende olmayan bir gün kesinliği uydurur.
config haritanın ayarlarıdır. Sözleşmenin kapsadığı alanlar geographyId
(hangi coğrafya), view (kapsam), meta (künye) ve temporal (zaman beyanı);
diğerleri Tuvelia'nın iç ayarlarıdır.
Harita coğrafyaları ve kapsam
Bir haritanın altlığı config.geographyId ile seçilir. Geçerli değerleri
GET /geographies listeler; her satır coğrafyanın adını, ait olduğu ülkeyi ve
idari düzeyini verir.
Kapsam (config.view.scope) haritanın yalnız bir bölümünü çizmeye yarar ve iki
türü vardır:
- Üst birime göre —
{ "parentId": 15 }yalnız o üst birimin alt
birimlerini çizer (ör. bir eyaletin ilçeleri). Yazılabilecek değerleri
GET /geographies/{geographyId}/scope-parentslisteler; her satır üst birimin
adını ve seçilirse çizilecek bölge sayısını verir. Bu keşif ucu gereklidir:
bazı coğrafyalarda yüzlerce üst birim vardır ve hata mesajı hepsini sayamaz.
CoğrafyanınparentGeographyIdalanınullise bu tür kapsam kullanılamaz. - Kimlik listesine göre —
{ "ids": [233, 428, 440] }yalnız o bölgeleri
çizer ve her düzeyde çalışır. Hazır çok ülkeli listeler için
GET /region-presetse bak: yanıttakiidsdeğerini olduğu gibi kullan,
listenin adını değil. Liste ileride değişirse adı kaydedilmiş bir harita
sessizce başka bir şey gösterirdi.
Harita oluşturmak ve veri yazmak
Harita iki adımda kurulur ve bu bilinçli: bölge adlarının coğrafyaya
çözülmesi ayrı bir iştir ve eşleşme raporunu veri ucu döndürür.
1. Haritayı oluştur — veri göndermezsin, harita boş doğar:
POST /projects/{projectId}/maps
{ "title": "İllere göre nüfus", "config": { "geographyId": "tr-adm1" } }
geographyId değerlerini GET /geographies listeler. Projeksiyon coğrafyadan
türetilir; harita hesabının varsayılan marka kitini giyer. Yanıt 201 ve
Location başlığıyla gelir.
2. Veriyi yaz — bölge adlarını gönderirsin, sunucu çözer:
PUT /maps/{mapId}/data
{
"rows": [
{ "region": "Ankara", "value": "5803" },
{ "region": "İstanbul", "value": "15907" }
]
}
Değerler metin olarak gönderilir ve ondalık ayırıcı noktadır ("806.2");
binlik ayırıcı kullanılmaz ("4946", "4.946" değil). Sütunun geri kalanı
kanıtlarsa virgüllü ondalık çevrilir (806,2 → 806.2). Belirsiz (4.946,
1,234) ya da sayı olmayan değerler yanıtta uyarıyla bildirilir; sayı olmayan
değer (abc, N/A) çizilmez, boş değer 0 sayılır.
Zamanlı harita için her satıra at eklersin:
{ "region": "Ankara", "value": "5803", "at": { "precision": "year", "iso": "2026" } }.
Zaman beyanı (config.temporal) at taşıyan satırlardan türetilir, ayrıca
göndermen gerekmez; hassasiyet ilk zamanlı satırınkidir. Zamanlı bir haritada
at taşımayan ya da hassasiyeti farklı olan satır reddedilmez: kaydedilir
ama çizilmez ve yanıtın warnings alanında undeclared_period_rows koduyla
adıyla sayılır. Hiçbir satırda at yoksa harita zamansızdır.
Eşleşmeyen satırlar sessizce düşmez. Bir bölge adı coğrafyada bulunamazsa ya
da haritanın kapsamı dışında kalırsa satır kaydedilir (rawRows'ta durur) ama
çizilmez, ve yanıtın warnings alanında adıyla sayılır:
"warnings": [
{ "code": "unmatched_rows", "count": 1,
"message": "1 bölge adı bu coğrafyada bulunamadı: Lefkoşa. …" }
]
Uyarı kodları: unmatched_rows (ad çözülemedi) · mixed_id_types (ad ile kod
aynı veride karışık; bu yüzden bulunamayan satırlar) · out_of_scope_rows
(kapsam dışı) · matched_not_drawable (bu geometride yok) ·
undeclared_period_rows (satırın anı haritanın dönemlerinde yok — zamanlı
haritada at eksikse de bu gelir) · duplicate_rows (aynı bölge ya da
bölge+an için birden fazla değer; yalnız biri çizilir) · unreadable_values
(sayı değil, çizilmez) · ambiguous_number_cells (binlik mi ondalık mı
belirsiz) · comma_decimal_cells (virgüllü ondalık noktalıya çevrildi) ·
scheme_hidden_by_colors (renk şeması değişti ama katmandaki colors onu
gizliyor; yalnız PATCH yanıtında).
Hangi ayarlar var? GET /map-options hepsini listeler: adı, türü, ne işe
yaradığı ve seçenekli olanlarda (renk şeması, projeksiyon, lejant köşesi…)
geçerli değerlerin tamamı. Bir ayarı değiştirmeden önce buraya bakmak, geçersiz
bir değer gönderip 400 almaktan hızlıdır.
⚠ Renk şeması, basamak sayısı ve "veri yok" rengi layers dizisinin
içindedir (layers[].colorScale.scheme gibi). Bu dizi bütün olarak yazılır:
tek bir alanı değiştirmek için haritayı oku, katman nesnesini kopyala, alanı
değiştir ve layersı tamamen geri gönder — eksik gönderdiğin alanlar kaybolur.
⚠ config.dataSource (konnektör künyesi) API ile yazılamaz. O blok verinin
hangi kaynaktan, hangi lisansla geldiğini söyleyen bir köken iddiasıdır ve
lisansı haritanın künyesine basılır; tek meşru yazarı Tuvelia'daki "Kaynaktan
veri" akışıdır. Kaynağı belirtmek için config.meta.source alanına serbest
metin yaz.
Ayarları değiştirmek için PATCH /maps/{mapId} kullanırsın; yalnız
gönderdiğin alanlar değişir. ⚠ geographyId değiştirirsen kapsam (view)
sıfırlanır — aynı çağrıda açıkça view göndermediysen. Sebebi: 15 Almanya'da
bir eyalet, başka bir ülkede başka bir bölgedir.
Haritalarda da anahtar yalnız anahtarla oluşturulan haritaları değiştirir;
Tuvelia'da oluşturduğun haritalar okunur ama değiştirilemez. expectedVersion
gönderirsen araya giren bir değişiklik yazımı conflict (409) ile reddeder.
Proje ve grafik oluşturmak
Yazma isteklerinin gövdesi JSON'dır ve Content-Type: application/json
başlığı zorunludur. Gövdede tanınmayan bir alan varsa (ör. yazım hatası) istek
reddedilir; alan sessizce yok sayılmaz.
Proje oluşturmak için adını gönderirsin:
curl -X POST https://tuvelia.com/api/v1/projects \
-H "Authorization: Bearer tuv_pat_…" \
-H "Content-Type: application/json" \
-d '{ "name": "Seçim grafikleri" }'
Yanıt 201 durumuyla projeyi döner. Proje adı en çok 200 karakter olabilir.
Grafik oluşturmak için bir ad ve genellikle veri gönderirsin:
curl -X POST https://tuvelia.com/api/v1/projects/{projectId}/charts \
-H "Authorization: Bearer tuv_pat_…" \
-H "Content-Type: application/json" \
-d '{
"title": "Yıllık enflasyon",
"data": { "headers": ["Yıl", "TÜFE"], "rows": [["2023", "64.8"], ["2024", "44.4"]] },
"config": { "chartType": "line", "sourceName": "TÜİK" }
}'
Yanıt 201 durumuyla grafiği döner; Location başlığı grafiğin adresini
taşır. Oluşturulan grafik için şunları bil:
- Hesabının varsayılan marka kitini giyer: renkleri ve yazı tipi Tuvelia'daki
Yeni öğe ile oluşturduğun bir grafikle aynıdır. - Veri gönderir ve
config.titlevermezsen grafiğin görünen başlığı grafiğin
adıdır, alt başlığı boştur. Veri göndermezsen grafik örnek veriyle ve o
örneğin kendi başlığıyla oluşur; gerçek veriyi sonraPUTile verirsin. templatealanı üç başlangıç şablonundan birini seçer:race(yarış),
scatter(dağılım) ya datimeline(süre çizelgesi). Bu tipler veri eşlemesi
olmadan boş çizer; şablon onları çalışır hâlde kurar. Gönderdiğindatave
configşablonun üzerine yazar.configteGET /charts/{chartId}yanıtındaki ayar alanlarını kullanırsın.
Notlar (annotations) API ile yazılamaz; notları Tuvelia'da eklersin.- Veri sınırları Tuvelia'dakiyle aynıdır: en çok 30 sütun, 5.000 satır, hücre
başına 300 karakter.
Grafik yayınlanmaz. Gömmek için onu Tuvelia'da bir kez yayınlarsın.
Grafiği güncellemek
Bir API anahtarı YALNIZ anahtarla oluşturulmuş grafikleri (apiManaged: true)
değiştirebilir. Hesabının herhangi bir anahtarı bunu yapabilir; anahtarı
yenilediğinde uygulaman o grafikleri güncellemeye devam eder. Tuvelia'da
oluşturduğun grafikler anahtarla okunur ama değiştirilemez; istek 403
forbidden alır.
PATCH /charts/{chartId}gövdesindeconfigtaşır ve yalnız gönderdiğin
alanları değiştirir. Grafik tipini de böyle değiştirirsin:
{ "config": { "chartType": "bar" } }.PUT /charts/{chartId}/datagövdesindedatataşır ve verinin tamamını
yeniden yazar; ayarlar değişmez.
İkisi de güncellenen grafiği döner.
Arada değişen grafiğin üzerine yazmamak. Grafik bu arada Tuvelia'da
değişmiş olabilir. İstersen gövdeye son okuduğun sürümü eklersin:
{ "data": { … }, "expectedVersion": 7 }
Grafiğin sürümü artık 7 değilse yazma yapılmaz ve yanıt 409 conflict
olur; mesaj güncel sürümü söyler. Grafiği yeniden okur, değişikliğini güncel
hâline uygular ve tekrar gönderirsin. expectedVersion göndermezsen son yazan
kazanır.
Anahtarla yapılan her yazma, hangi anahtarla, ne zaman ve hangi proje ya da
grafik üzerinde yapıldığıyla kayda geçer. Kayıt içeriği (veriyi, ayarları)
tutmaz ve 90 gün saklanır.
Hatalar
Hata yanıtı her zaman aynı biçimdedir:
{ "error": { "code": "not_found", "message": "Grafik bulunamadı (id=…). …" } }
Programın codea bakmalı; message insan için yazılmış Türkçe bir
açıklamadır ve değişebilir.
| Kod | HTTP | Ne demek |
|---|---|---|
invalid_request | 400 | İstek geçersiz: kimlik UUID biçiminde değil, gövde JSON değil, bir alan eksik ya da tanınmayan bir alan var. |
unauthorized | 401 | Anahtar yok, biçimsiz, geçersiz, süresi dolmuş ya da iptal edilmiş. |
insufficient_scope | 403 | Anahtarın yazma yetkisi yok (eski, yalnız okuma yetkili anahtar). Yeni bir anahtar oluştur. |
forbidden | 403 | Grafik ya da harita Tuvelia'da oluşturulmuş; anahtar onu değiştiremez. |
not_found | 404 | Kaynak yok: silinmiş ya da başka bir hesaba ait olabilir. |
conflict | 409 | Grafik ya da harita, gönderdiğin expectedVersiondan sonra değişti; yeniden oku ve tekrar dene. |
payload_too_large | 413 | İstek gövdesi çok büyük. |
rate_limited | 429 | Hız sınırı aşıldı; Retry-After başlığındaki saniye kadar bekle. |
internal_error | 500 | Beklenmeyen bir hata; birazdan yeniden dene. |
unavailable | 503 | Anahtar şu an doğrulanamadı, ama reddedilmedi; Retry-After kadar bekle. |
İleride yeni kodlar eklenebilir; tanımadığın kodu HTTP durumuna göre ele al.
Hız sınırı
Okuma istekleri hesap başına 10 dakikada 300, yazma istekleri ayrıca 10
dakikada 120 ile sınırlıdır. Okumanın ve yazmanın bütçeleri birbirinden
bağımsızdır; hesabın bütün anahtarları bu bütçeleri paylaşır. Sınır aşılınca
yanıt 429 olur ve Retry-After başlığı kaç saniye bekleyeceğini söyler.
Bir yazma isteğinin gövdesi en çok 2 MB olabilir; daha büyüğü 413 alır.
Buradaki sayılar söz değildir ve değişebilir. Programın her durumda 429 ve
413 yanıtlarını karşılayabilmeli.
OpenAPI belgesi
API'nin makinece okunur tarifi şu adrestedir ve kimlik istemez:
https://tuvelia.com/api/v1/openapi.json
Belgeyi Postman gibi araçlara ya da bir ChatGPT eylemine (Actions) adresiyle
aktarabilirsin.
Sürüm kuralı
Şimdi (önizleme). API önizlemede olduğu sürece uçlar ve alanlar
değişebilir: bir alan kaldırılabilir, adı ya da anlamı değişebilir. Böyle bir
değişiklik önce aşağıdaki Değişiklik günlüğüne yazılır. Gereksiz değişiklik
yapılmaz; amaç, sözleşmeyi ilk gerçek kullanıcısı olan WordPress eklentisiyle
sınamak.
Önizleme bittikten sonra. v1 içinde yalnız ekleme yapılır: yeni uç ya da
yanıtlara yeni alan. Var olan bir alan silinmez, adı ya da anlamı değişmez;
böyle bir değişiklik /api/v2 olarak gelir.
Her iki dönemde de istemcin tanımadığı alanları ve tanımadığı hata kodlarını
yok saymalı.
Değişiklik günlüğü
- 2026-09-22 — grafikte alt eksen adlarının açısı. Yeni opsiyonel ayar
xAxis.labelAngle:horizontal(varsayılan, alan yoksa da böyle) ·
diagonal(45°) ·vertical·auto(yatay sığmıyorsa 45°, o da sığmıyorsa
dikey). Yalnız dikey çubuk, yığılmış, çizgi, alan ve dikey dumbbell'da
etkilidir. Döndürülmüş adlar alttan yer açar; grafik yüksekliğinin %40'ına
sığmayan ad "…" ile kısalır. Her grafik tipinin ayar keşfinde görünür. - 2026-09-22 — haritada "Made with Tuvelia" satırı. Yeni opsiyonel ayar
showBranding(üst düzeyde,metanın dışında): yoksa açık,false
gizler. Satır sağ altta, coğrafya atfının sonunda durur; atıf bundan
bağımsızdır ve gizlenemez. ⚠ Görünüm değişikliği: alanı hiç yazılmamış
mevcut haritalarda da satır artık görünür ve alt satır payı açılır. - 2026-09-21 — haritada değer etiketleri. Yeni opsiyonel ayar
labels.mode:off(varsayılan, alan yoksa da böyle) ·all·exports
(yalnız video, indirilen görsel ve ZIP karelerinde; gömülü haritada ve hikâyede
yazılmaz). Sığmayan bölgede etiket basılmaz. Nesne bütün yazılır. - 2026-09-21 — haritada iki yeni ayar: doğal kırılım ve kaynak etiketi.
layers[].colorScale.modeartıknaturaldeğerini de alır: birbirine yakın
değerleri aynı renk basamağında toplar, tek bir dev değeri kendi basamağına
ayırır.meta.sourceLabel(opsiyonel, varsayılanKaynak) künyede kaynağın
önüne basılan ön ektir; harita": "ekler. ⚠ Görünüm değişikliği: künye
artık "Kaynak: TÜİK · not · lisans" biçiminde basılıyor (eskiden ön eksiz ve
uzun tireyle);meta.sourcealanına ön eki ayrıca yazma. - 2026-09-21 — belge düzeltmesi: haritada iç içe ayar nesneleri bütün
yazılır.PATCH /maps/{mapId}ayarları yalnız üst düzeyde birleştirir;
meta,legend,scaleBar,locatorveanimationgibi iç içe nesneler
bütün olarak yazılır ve eksik alan reddedilir. Belge bunu artık açıkça
söylüyor; hata mesajı da eksik alanın adını veriyor. Davranış değişmedi. - 2026-09-21 — haritanın coğrafyası değişince veri yeniden çözülüyor;
okuma yanıtı da uyarıları adıyla veriyor.PATCH /maps/{mapId}ile
geographyIddeğiştiğinde veri artık yeni coğrafyaya göre yeniden çözülüyor.
⚠ Davranış değişikliği: eskiden veri eski coğrafyanın kimlikleriyle
kalıyordu ve değerler yeni haritada yanlış bölgelere boyanabiliyordu. Ham
satırı olmayan eski bir kayıtta coğrafya değişimi artık anlaşılır bir hatayla
reddediliyor. AynıgeographyId'yi yeniden göndermek artık değişim sayılmıyor
ve kapsamı sıfırlamıyor.GET /maps/{mapId}vePATCHyanıtlarındaki
warnings, yazma yanıtıyla aynı kodları ve adları taşıyor; eskiden okuma
yanıtı her çizilmeyen satırıunmatched_rowsdiye bildiriyordu. Yeni uyarı
kodu:scheme_hidden_by_colors. - 2026-09-21 — harita verisinde sessiz kalan durumlar artık bildiriliyor.
PUT /maps/{mapId}/datayanıtına dört yeni uyarı kodu eklendi:
unreadable_values,ambiguous_number_cells,comma_decimal_cellsve
mixed_id_types. Aynı ad ve dönem iki kez geldiğinde, zamansız haritada da
aynı bölge iki kez geldiğinde,duplicate_rowsartık bildiriliyor.
⚠ Davranış değişikliği: sayı olmayan bir değer (abc,N/A) eskiden
sessizce 0 sayılıp çiziliyordu; artık çizilmiyor ve uyarıyla bildiriliyor.
Boş değer eskisi gibi 0 sayılıyor. - 2026-09-21 — belge düzeltmesi: harita verisinde zamanı eksik satır
reddedilmez.PUT /maps/{mapId}/dataaçıklaması ve bu sayfa "kısmi zaman
reddedilir" diyordu; doğru değildi. Zamanlı bir yazımdaattaşımayan ya da
hassasiyeti farklı olan satır kaydedilir, çizilmez veundeclared_period_rows
uyarısıyla adıyla sayılır. Davranış değişmedi; yalnız anlatımı düzeltildi. - 2026-09-21 — harita ayarları keşfedilebilir oldu (
GET /map-options) ve
config.dataSourceAPI'ye kapatıldı. Harita ayarlarının tamamı artık adı,
türü, açıklaması ve geçerli değerleriyle listeleniyor — renk şeması ve
basamak sayısı dahil.dataSourcebir köken iddiası olduğu ve haritanın
künyesine basıldığı için API ile yazılamaz hâle geldi; kaynak belirtmek için
meta.sourcekullanılır. ⚠ Bu ikincisi kısıtlayıcı bir değişikliktir (önizleme
kapsamında). - 2026-09-21 — haritalar yazılabilir oldu (üç yeni uç).
POST /projects/{projectId}/maps·PATCH /maps/{mapId}·
PUT /maps/{mapId}/data. Veri ucu bölge adlarını coğrafyaya çözer ve
eşleşmeyenleriwarningsalanında adıyla sayar. Ekleme yapıldı; var olan
hiçbir uç değişmedi. - 2026-09-21 — haritalar okunabilir oldu (beş yeni uç).
GET /projects/{projectId}/maps·GET /maps/{mapId}·GET /geographies·
GET /geographies/{geographyId}/scope-parents·GET /region-presets.
Harita oluşturma ve düzenleme henüz yok. Ekleme yapıldı; var olan hiçbir uç
değişmedi. - 2026-09-20 — yayın bilgisi grafik yanıtına eklendi (
published,stale).
Bir grafiği API ile güncellediğinde yayındaki sürüm geride kalır; yanıt artık
bunu söylüyor. Yayına gitmek insan onayıyla olur: API ile yeniden
yayınlanamaz, kullanıcı Tuvelia'da "Yeniden yayınla" demelidir. Ekleme
yapıldı. - 2026-09-20 — ayar açıklamaları.
GET /chart-optionsartık her ayarın ne
işe yaradığını da yazıyor; ayrıcatemporalvelegendgibi her tipte
geçerli ayar blokları alan alan listeleniyor (önce yalnız blok adı
görünüyordu). Ekleme yapıldı. - 2026-09-20 — yeni uç:
GET /chart-options. Ayarların adları yanıtlarda
zaten görünüyordu ama seçenekli alanlarda hangi değerlerin geçerli olduğunu
öğrenmenin yolu denemekti; artık listeleniyor. Ekleme yapıldı. - 2026-09-20 — yeni uyarı kodu:
nothing_drawn. Eşlemesi olmayan yarış,
dağılım, süre çizelgesi ve ağaç haritası boş çiziliyordu ve yanıt bunu
söylemiyordu; artıkwarningssebebini ve çözümünü bildiriyor. Ekleme
yapıldı, var olan bir kodun anlamı değişmedi. - 2026-09-20 — yeni uç:
GET /chart-templates.createChartintemplate
alanı ilk günden beri vardı ama geçerli kimlikleri öğrenmenin yolu yoktu; artık
listelenebiliyor. Ekleme yapıldı, var olan hiçbir uç değişmedi. - 2026-09-20 — yeni uyarı kodu:
comma_decimal_cells. Virgüllü ondalık
taşıyan hücreler sıfır çiziliyordu ve yanıt bunu söylemiyordu;warnings
artık bildiriyor. Ekleme yapıldı, var olan bir kodun anlamı değişmedi. - 2026-09-20 — ondalık ayırıcı netleşti. Örnekteki virgüllü sayı noktalıyla
değiştirildi ve kural açıkça yazıldı: veri alanında ondalık ayırıcı noktadır.
Davranış değişmedi; belge yanlış yönlendiriyordu (ajan denemesinde görüldü). - 2026-09-20 — önizleme başladı. API'nin ilk yayını.