Geliştiriciler · v1

Entegrasyon API'si

Organizasyonunuzun kendi web sitesi, etkinliklerini, programını, konuşmacılarını, sponsorlarını ve ekibini EventStage'den çeker; tasarım sizin, veri buradan.

API adresi: https://eventstage.com.tr/api/integration/v1

01

Başlarken

  1. 1 Anahtar oluşturun Organizasyon sahibi portalda API erişimi sayfasından bir anahtar üretir. Anahtar bir kez gösterilir; güvenli bir yere kaydedin.
  2. 2 İsteğe ekleyin Her isteği https://eventstage.com.tr/api/integration/v1 altına, anahtarla gönderin. Tüm uçlar GET'tir; API hiçbir şeyi değiştirmez.
  3. 3 Kendi tasarımınız Yanıtlar JSON'dur; görünüm tamamen size kalır.

Yalnızca yayınlanmış etkinlikler döner. Taslaklar, iptal edilenler, kayıtlı katılımcılar ve e-posta adresleri bu API'den hiçbir zaman çıkmaz. Konuşmacılarda yalnızca daveti kabul edenler, ekipte yalnızca "web sitesinde göster" işaretli üyeler görünür.

02

Kimlik doğrulama

Anahtar esk_ ile başlar. İki başlıktan birini kullanın; ikisi de aynı işi görür:

Başlık
Authorization: Bearer esk_xxxxxxxx…
X-Api-Key: esk_xxxxxxxx…

Anahtar tek bir organizasyona bağlıdır; hangi organizasyon olduğunu URL'de söylemezsiniz. Portalda iptal edilen anahtar bir sonraki istekte reddedilir. Askıya alınmış bir organizasyonun anahtarları, herkese açık sayfaları gibi, kapalıdır.

Geçersiz anahtar: 401 API_KEY_INVALID

03

Tarayıcıdan mı, sunucudan mı?

Sunucudan Önerilen PHP, Node, .NET ya da bir statik site üreticisinin derleme adımı: anahtar ziyaretçiye hiç görünmez. Portalda "izinli site adresleri" boş bırakılır.
Tarayıcıdan İzin listesiyle Sayfanızdaki JavaScript ile fetch: anahtar sayfa kaynağında görünür, yani herkese açıktır. Portalda anahtarın izinli site adreslerine sitenizi yazın; başka bir sitenin sayfasından gelen istek 403 API_KEY_ORIGIN_NOT_ALLOWED alır. CORS bu uçlar için açıktır; tarayıcı isteğinde çerez kullanılmaz.
04

Önbellek ve sınırlar

60 sn Cache-Control: private, max-age=60: aynı yanıtı bu süre boyunca yeniden istemeniz gerekmez.
304 Her yanıt bir ETag taşır. İkinci istekte If-None-Match gönderin; içerik değişmediyse gövdesiz döner.
600 Anahtar başına dakikada kabul edilen istek. Aşınca 429 ve Retry-After döner.

Sitenizde yanıtları sunucu tarafında birkaç dakika önbelleğe almanız yeterlidir; sayfa görüntülemesi başına istek atmayın. Görsel adresleri kalıcıdır; görsel değişince adres de değişir, yani süresiz önbelleğe alabilirsiniz.

05

Uçlar

/api/integration/v1

Tüm yollar https://eventstage.com.tr/api/integration/v1 ile başlar.

Yöntem Yol Ne döner
GET /organization Anahtarın ait olduğu organizasyonun herkese açık profili. Nesne: Organizasyon
GET /team Ekip: portalda "web sitesinde göster" işaretli üyeler, sıra numarasına göre. Liste: EkipÜyesi[]
GET /speakers Organizasyonda konuşmacılığı onaylanmış herkes, birer kez, ada göre: yayınlanmış bir etkinliğin bir oturumunda ya da etkinliğin kendisinde konuşmacı olmayı kabul etmiş olanlar. İptal edilmiş oturumlar ve yayınlanmamış etkinlikler sayılmaz; yalnızca davet edilmiş olanlar listelenmez. Liste: Konuşmacı[]
GET /sponsors Organizasyonun tüm sponsorları, ada göre. Tür etkinliğe ait olduğu için burada boştur. Liste: Sponsor[]
GET /events Yayınlanmış etkinlikler, sayfa sayfa. Taslaklar, iptal edilenler ve askıya alınanlar hiç dönmez. Sayfalı liste: items (EtkinlikÖzeti), page, pageSize, totalCount, hasMore.
timing
upcoming (varsayılan: henüz başlamamış), ongoing (şu an süren), past (bitmiş, en yeni önce) veya all.
category
Bir kategori adresi (Kategori.slug); yalnızca o kategorideki etkinlikler döner. Bilinmeyen bir adres hata değil, boş sayfa verir.
page
1'den başlayan sayfa numarası.
pageSize
Sayfa başına kayıt; en fazla 100, varsayılan 20.
GET /events/{idVeyaSlug} Bir etkinliğin tamamı: bilgileri, programı konuşmacılarıyla, tüm konuşmacıları ve sponsorları. Bir etkinlik sayfası için gereken her şey tek istekte. Nesne: EtkinlikDetayı
idVeyaSlug
Etkinliğin kimliği ya da bu organizasyon içindeki slug'ı (adresteki kısa ad).
GET /events/{idVeyaSlug}/sessions Etkinliğin programı: planlanmış oturumlar, sırayla, her biri konuşmacılarıyla. Liste: Oturum[]
idVeyaSlug
Etkinliğin kimliği ya da slug'ı.
GET /events/{idVeyaSlug}/speakers Etkinlikte konuşan herkes, birer kez, program sırasıyla. Konuşmacılar oturumlara bağlandığı için programı olmayan bir etkinliğin konuşmacı listesi boştur. Liste: Konuşmacı[]
idVeyaSlug
Etkinliğin kimliği ya da slug'ı.
GET /events/{idVeyaSlug}/sponsors Etkinliğin sponsorları, türleri ve rozetleriyle, organizatörün belirlediği sırada. Liste: Sponsor[]
idVeyaSlug
Etkinliğin kimliği ya da slug'ı.
06

Veri şekilleri

Alan adları JSON'da küçük harfle başlar (fullName). "Boş olabilir" işaretli alanlar null gelebilir; diğerleri her zaman doludur. Tarihler ISO 8601'dir.

Zaman

Bir an, iki biçimde: hesaplamak için UTC, yazdırmak için mekânın duvar saati.

utc string
ISO 8601, UTC. Örnek: 2026-10-05T06:00:00Z.
local string
Aynı an, etkinliğin saat diliminde ve saat farkıyla. Örnek: 2026-10-05T09:00:00+03:00. Saat dilimi kütüphanesi olmadan doğrudan yazdırılabilir.
timeZoneId string
local değerinin hesaplandığı IANA saat dilimi. Örnek: Europe/Istanbul.

Görsel

Sitenize doğrudan gömebileceğiniz bir görsel.

fileId string
Dosyanın kimliği.
url string
Mutlak adres. Görsel değiştirildiğinde yeni bir kimlik ve adres üretilir; bu adres süresiz önbelleğe alınabilir.

Kategori

Etkinliğin platformdaki kategorisi. Liste EventStage'e aittir; organizatör bunlardan birini seçer.

slug string
Kategorinin adresi; /events uç noktasının category süzgecine verilir. Örnek: teknoloji.
name string
Türkçe adı. Örnek: Teknoloji.

Organizasyon

Organizasyonun herkese açık profili.

id string
Kimlik.
name string
Ad.
slug string
Adresteki kısa ad.
description string · boş olabilir
Açıklama.
logo Görsel · boş olabilir
Logo.
cover Görsel · boş olabilir
Kapak görseli.
website string · boş olabilir
Web sitesi.
email string · boş olabilir
Herkese açık iletişim e-postası.
phone string · boş olabilir
Telefon.
address string · boş olabilir
Adres.
city string · boş olabilir
Şehir.
country string · boş olabilir
Ülke.
latitude number · boş olabilir
Enlem.
longitude number · boş olabilir
Boylam.
publicUrl string
Organizasyonun EventStage'deki sayfası.

EkipÜyesi

Ekip sayfasındaki bir üyenin web sitesi profili. E-posta ya da hesap bilgisi içermez; ekipten çıkarılan kişi listeden hemen düşer.

id string
Kimlik.
fullName string
Ad soyad.
title string · boş olabilir
Unvan, organizatörün yazdığı gibi.
bio string · boş olabilir
Kısa özgeçmiş.
photo Görsel · boş olabilir
Fotoğraf.
linkedInUrl string · boş olabilir
LinkedIn adresi.
websiteUrl string · boş olabilir
Web sitesi.
sortOrder number
Sıra; küçük önce gelir. Liste zaten bu sırayla döner.
role string
Üyenin topluluktaki rolü: Owner (topluluk yöneticisi) ya da Member (ekip üyesi). Sitenizde yöneticileri ayrı bir başlık altında listelemek için kullanın; organizasyon kime sahiplik verdiyse hepsi Owner döner.

Konuşmacı

Bir konuşmacı profili.

id string
Kimlik.
name string
Ad soyad.
jobTitle string · boş olabilir
Unvan.
company string · boş olabilir
Kurum.
bio string · boş olabilir
Kısa özgeçmiş.
photo Görsel · boş olabilir
Fotoğraf.
linkedInUrl string · boş olabilir
LinkedIn adresi.
gitHubUrl string · boş olabilir
GitHub adresi.
websiteUrl string · boş olabilir
Web sitesi.
profileUrl string · boş olabilir
Konuşmacının EventStage'deki herkese açık profili. Çoğu zaman boştur: kişinin hesabı yoksa, daveti kabul etmediyse, adresini doğrulamadıysa ya da profilini kapattıysa bu alan gelmez. Dolu geldiğinde sayfanın açılacağı garantidir.

Sponsor

Bir sponsor; havuzdan ya da bir etkinliğin listesinden. Etkinlik listesinde sponsorun o etkinlikteki türü de gelir.

id string
Kimlik.
name string
Ad.
description string · boş olabilir
Açıklama.
logo Görsel · boş olabilir
Logo.
websiteUrl string · boş olabilir
Web sitesi.
tier string · boş olabilir
Etkinlikteki sponsor türünün adı: "Elmas", "Altın". Türler platform tarafından belirlenir. Organizasyon genelindeki listede ve türü seçilmemiş sponsorlarda boştur; katalog öncesinden kalan birkaç kayıtta organizatörün elle yazdığı metin gelir.
sortOrder number
Etkinlikteki sıra. Organizasyon genelindeki listede 0.
isOrganizationSponsor boolean
Organizasyonun genel sponsoru mu; ana sayfanızdaki sponsor listesini bununla süzün.
tierId string · boş olabilir
Sponsor türünün kimliği; sponsorları ada göre değil bu değere göre gruplamak için. tier metni katalog dışıysa ya da tür seçilmemişse boştur.
tierRank number · boş olabilir
Türün katalogdaki sırası: küçük sayı daha üst kademedir, yani Elmas Altın'dan önce gelir. Sponsor duvarınızı kuşaklara bunun ile ayırın; sortOrder yalnızca kuşak içindeki dizilişi verir.
tierBadge Görsel · boş olabilir
Türün rozet görseli; platform o tür için bir rozet yüklediyse gelir.

Oturum

Programdaki bir oturum.

id string
Kimlik.
name string
Oturum adı.
description string · boş olabilir
Açıklama.
room string · boş olabilir
Salon.
start Zaman
Başlangıç.
end Zaman
Bitiş.
capacity number · boş olabilir
Kontenjan; sınır yoksa boş.
speakers array
Daveti kabul etmiş konuşmacılar (Konuşmacı), sırayla.
speakerNames string · boş olabilir
Aynı konuşmacıların virgülle ayrılmış adları, fotoğrafa yer olmayan listeler için. Henüz onaylı konuşmacı yoksa boş.

EtkinlikÖzeti

Listelerdeki etkinlik.

id string
Kimlik.
name string
Ad.
slug string
Bu organizasyon içindeki kısa ad; /events/{slug} ile detaya gidilir.
description string · boş olabilir
Açıklama.
cover Görsel · boş olabilir
Kapak görseli.
logo Görsel · boş olabilir
Etkinlik logosu.
timing string
upcoming, ongoing veya past; istek anındaki saate göre.
start Zaman
Başlangıç.
end Zaman
Bitiş.
venueName string · boş olabilir
Mekân adı.
city string · boş olabilir
Şehir.
country string · boş olabilir
Ülke.
latitude number · boş olabilir
Enlem.
longitude number · boş olabilir
Boylam.
isRegistrationOpen boolean
Şu an kayıt alınıyor mu.
sessionCount number
Programdaki oturum sayısı.
publicUrl string
Etkinliğin EventStage'deki tanıtım sayfası: program, mekân, konuşmacılar.
applicationUrl string
Başvuru sayfasının adresi. Sitenizdeki "Kaydol" düğmesini buraya bağlayın; form EventStage'de açılır, sizin sayfanıza gömülmez ve bu bağlantıyı vermek için API anahtarı gerekmez. Kayıtlar kapandığında da dolu gelir, çünkü sayfa açık kalıp sebebini yazar; düğmeyi gösterip göstermemeye isRegistrationOpen karar verir.
category Kategori · boş olabilir
Etkinliğin kategorisi. Katalogdan önce yayınlanmış bir etkinlikte boş olabilir.

EtkinlikDetayı

Bir etkinliğin tamamı.

id string
Kimlik.
name string
Ad.
slug string
Kısa ad.
description string · boş olabilir
Açıklama.
cover Görsel · boş olabilir
Kapak görseli.
logo Görsel · boş olabilir
Etkinlik logosu.
timing string
upcoming, ongoing veya past.
start Zaman
Başlangıç.
end Zaman
Bitiş.
venueName string · boş olabilir
Mekân adı.
address string · boş olabilir
Adres.
city string · boş olabilir
Şehir.
country string · boş olabilir
Ülke.
latitude number · boş olabilir
Enlem.
longitude number · boş olabilir
Boylam.
isRegistrationOpen boolean
Şu an kayıt alınıyor mu.
registrationStart Zaman · boş olabilir
Kayıt dönemi başlangıcı; belirlenmemişse boş.
registrationEnd Zaman · boş olabilir
Kayıt dönemi bitişi; belirlenmemişse boş.
capacity number · boş olabilir
Kontenjan; sınır yoksa boş.
publicUrl string
Etkinliğin EventStage'deki tanıtım sayfası.
applicationUrl string
Başvuru sayfasının adresi; EtkinlikÖzeti'ndeki alanla aynı kuralla gelir.
sessions array
Program (Oturum), sırayla.
speakers array
Etkinlikteki tüm konuşmacılar (Konuşmacı), birer kez, program sırasıyla.
sponsors array
Sponsorlar (Sponsor), türleri ve rozetleriyle.
category Kategori · boş olabilir
Etkinliğin kategorisi; EtkinlikÖzeti'ndeki alanla aynı.
07

Hatalar

Her hata RFC 7807 biçiminde bir JSON gövdeyle gelir: status, title, detail ve programınızın dallanacağı errorCode.

HTTP errorCode Anlamı
401 API_KEY_INVALID Anahtar gönderilmemiş, tanınmıyor ya da iptal edilmiş. Portaldan yeni bir anahtar üretin.
403 ORGANIZATION_SUSPENDED Organizasyon askıya alınmış ya da kapatılmış. Verileri herkese açık sitede olduğu gibi burada da görünmez.
403 API_KEY_ORIGIN_NOT_ALLOWED İstek tarayıcıdan, anahtarın izin listesinde olmayan bir siteden geldi. Portalda adresi ekleyin ya da sunucudan çağırın.
404 EVENT_NOT_FOUND Böyle bir etkinlik yok ya da yayında değil.
400 BAD_REQUEST Bir parametre geçersiz; ayrıntı yanıttaki detail alanında.
429 RATE_LIMITED Bu anahtar dakikalık sınırını aştı. Retry-After başlığındaki saniye kadar bekleyin ve yanıtları önbelleğe alın.
08

Başvuru düğmesi

Kayıt formunu kendi sitenizde barındırmanıza gerek yok — barındırmamanız da gerekir. Etkinliğin başvuru sayfası EventStage'de durur; sitenize eklediğiniz şey ona giden bir bağlantıdır. Adres her etkinlik için şu biçimdedir:

Adres
https://eventstage.com.tr/o/{organizasyonSlug}/e/{etkinlikSlug}/kaydol

Adres, etkinlik yanıtlarındaki applicationUrl alanında hazır gelir; slug'ları da slug alanından alabilirsiniz. Portalda etkinlik sayfasındaki Siteme ekle panelinde de adres hazır olarak durur.

HTML
<a href="https://eventstage.com.tr/o/toplulugunuz/e/ornek-konferans-2026/kaydol">Kaydol</a>

Katılımcı adını ve e-postasını yazar, adresine gelen 6 haneli kodu girer ve kaydı tamamlanır. Hesabı yoksa açılır, şifre sorulmaz. Bu adrese bağlantı vermek için API anahtarına ihtiyacınız yoktur ve herhangi bir izin listesi tutulmaz: sayfa, etkinliğin herkese açık sayfası kadar açıktır.

Formu <iframe> ile gömmek desteklenmez. Sayfa frame-ancestors 'none' ile yayınlanır; kimlik doğrulama ve antiforgery çerezleri üçüncü taraf çerçevede zaten çalışmazdı.

09

Örnekler

curl

Terminal
curl -H "Authorization: Bearer esk_…" \
  "https://eventstage.com.tr/api/integration/v1/events?timing=upcoming&pageSize=5"

Sunucu tarafı JavaScript (Node)

Node
const response = await fetch("https://eventstage.com.tr/api/integration/v1/events/ornek-konferans-2026", {
  headers: { "X-Api-Key": process.env.EVENTSTAGE_API_KEY }
});
const event = await response.json();

for (const session of event.sessions) {
  console.log(session.start.local, session.name, session.speakers.map(s => s.name));
}

Örnek yanıt: GET /events/{slug} (kısaltılmış)

JSON
{
  "id": "0199…",
  "name": "Örnek Konferans 2026",
  "slug": "ornek-konferans-2026",
  "timing": "upcoming",
  "start": { "utc": "2026-11-14T06:00:00Z", "local": "2026-11-14T09:00:00+03:00", "timeZoneId": "Europe/Istanbul" },
  "end":   { "utc": "2026-11-14T15:00:00Z", "local": "2026-11-14T18:00:00+03:00", "timeZoneId": "Europe/Istanbul" },
  "cover": { "fileId": "0199…", "url": "https://eventstage.com.tr/media/0199…" },
  "isRegistrationOpen": true,
  "publicUrl": "https://eventstage.com.tr/o/toplulugunuz/e/ornek-konferans-2026",
  "applicationUrl": "https://eventstage.com.tr/o/toplulugunuz/e/ornek-konferans-2026/kaydol",
  "sessions": [
    {
      "name": "Açılış",
      "room": "Ana salon",
      "start": { "utc": "2026-11-14T06:30:00Z", "local": "2026-11-14T09:30:00+03:00", "timeZoneId": "Europe/Istanbul" },
      "speakers": [ { "name": "…", "jobTitle": "…", "photo": { "url": "…" } } ],
      "speakerNames": null
    }
  ],
  "speakers": [ { "name": "…", "jobTitle": "…" } ],
  "sponsors": [ { "name": "…", "tier": "…", "logo": { "url": "…" } } ]
}