Referans

REST API

SDK'nın alabileceği her uç nokta, her başlık ve her durum kodu.

SDK, HTTPS üzerinden RDUI/1 konuşur. Bu uç noktaları kendiniz nadiren çağırırsınız; ancak bir tur ters gittiğinde cevabın bulunduğu katman burasıdır.

Temel URL: https://api.rendel.ai

Başlıklar

Her istekte gönderilir. İsim değişikliğinden önce bunlar X-NC-Key, X-NC-Device ve X-NC-User-Token şeklindeydi ve anahtarlar nc_pk_ ile başlıyordu; her iki yazım da kabul edilir ve bir nc_pk_ anahtarı çalışmaya devam eder.

BaşlıkZorunlu muNe işe yarar
X-Rendel-KeyEvetYayınlanabilir anahtarınız. rd_pk_live_… canlı trafiğe hizmet verir ve planınızdan düşer; rd_pk_test_… hiçbir zaman faturalandırılmayan test ortamı sohbetleri açar. Yayınlanabilir anahtarlar tasarım gereği herkese açıktır; ikili dosyanızın (binary) içinde dağıtılırlar, bu nedenle erişebildikleri hiçbir şey gizli değildir.
X-Rendel-DeviceÖnerilirKurulum başına opak bir kimlik, 32 küçük harfli onaltılık (hex) karakter. İstek limitlerinin gruplandığı, identify fonksiyonunun bir kullanıcıyı bağladığı ve tek bir kurulumun iki açılışını iki yeni cihaz yerine geri dönen bir cihaz yapan şey budur. POST /v1/invocations/:id/confirm ve /edit, /v1/feedback, /v1/ratings, /v1/uploads ve /v1/pairings/claim uç noktalarında zorunludur. Bunu atlarsanız, bunu atlayan her cihazdan gelen her istek tek bir grubu paylaşır.
Content-TypePOST isteklerindeDosyanın türü olduğu POST /v1/uploads hariç, application/json.
X-Rendel-User-TokenPOST /v1/chat üzerinde, bir yönetim paneli aksiyonu API'nizi oturum açmış kullanıcı olarak çağırdığındaUygulamanızdan alınan ve oturum açmış kullanıcının belirtecini kullanacak şekilde ayarlanmış yönetim paneli aksiyonlarına iletilen, oturum açmış kullanıcının belirteci. 8.192 karakterde kesilir. Asla günlüğe kaydedilmez veya saklanmaz.
X-Request-IdHayırBu tur için kendi izleme (trace) kimliğiniz. Bir tane gönderirseniz onu kullanırız; aksi takdirde biz bir tane üretiriz. Her iki durumda da yanıtta X-Request-Id olarak ve turn.start içinde geri gelir.
If-None-MatchHayırYalnızca GET /v1/apps/config üzerinde. Gövdesi olmayan bir 304 almak için gördüğünüz son ETag değerini gönderin.

Cihaz kimliği nereden gelir

Flutter SDK bir tane üretir ve ona RendelConfig.deviceIdStore verirseniz, bunu açılışlar arasında saklar. Bir depolama olmadan her soğuk başlatmada yenidir; bu doğrudur ancak unutkandır: istek limitleri açılış başına sıfırlanır ve yönetim paneli cihaz sayılarınız yüksek görünür.

Durum kodları

Aynı kodlar her uç noktada aynı anlama gelir.

DurumNe zamanGövde
200BaşarılıUç noktanın yanıt gövdesi.
201Oluşturuldu{ id, media_type, bytes }. Yalnızca POST /v1/uploads.
204Kabul edildi, söylenecek bir şey yokBoş. Yalnızca POST /v1/events.
304Önbelleğe alınmış kopyanız güncelBoş. Yalnızca GET /v1/apps/config.
400İstek ayrıştırılamadı veya zorunlu bir başlık eksikti{ error: { code, message, details? } }
401Bilinmeyen, iptal edilmiş veya hatalı biçimlendirilmiş anahtar{ error: { code: "invalid_key" } }
403Uygulama askıya alındı (yapılandırma, logo ve yüklemelerde app_suspended; sohbet, onay ve eşleştirmede quota_exceeded), kimlik doğrulaması gerekiyor ve sunulmadı ya da bir tarayıcı isteği Settings → Security → Allowed domains altında listelenmeyen bir kaynaktan geldi (origin_not_allowed; bir test anahtarı localhost üzerinde de yanıt verir){ error: { code, message? } }
404Adı geçen öğe mevcut değil veya size ait değil{ error: { code: "invalid_request", message } }; logoda no_logo ve eşleştirmede pairing_not_found
409Bir onay kartı yanıtlandıktan veya süresi dolduktan sonra değiştirildi{ error: { code: "invalid_request", message }, status }. Yalnızca POST /v1/invocations/:id/edit.
41320 MB üzerinde bir yükleme{ error: { code: "payload_too_large", message } }
415Modelin okuyamadığı türde bir yükleme{ error: { code: "unsupported_media_type", message } }
422Bir onay kartında değiştirilen bir değer aksiyonun kontrollerinden geçemedi{ error: { code: "invalid_params", message, fields } }. Yalnızca POST /v1/invocations/:id/edit.
429İstek limiti aşıldı{ error: { code: "rate_limited", message } }, bazen Retry-After ile
502Depolama bir yüklemeyi reddetti{ error: { code: "upload_failed", message } }. Yeniden deneyin.
503Hizmet bu dağıtıma hizmet veremiyor{ error: { code: "internal", message } }; yüklemelerde uploads_unavailable ve logoda logo_unavailable

Bir 404, bilerek "böyle bir kimlik yok" ve "bu kimlik size ait değil" durumları için aynı yanıttır. Herkese açık bir anahtara sahip olan bir çağırıcıya hangi kimliklerin mevcut olduğunu söylemek, başka bir kiracının kimlik alanı üzerinde bir arama kâhinliği (lookup oracle) sunmaktır.

SSE akışı açıldıktan sonra, POST /v1/chat arızaları bir HTTP durumu olarak değil, aynı kodlara sahip bir error olayı olarak akışın içinde bildirir; yanıt o zamana kadar zaten 200 olmuştur. Hata kodları sayfasına bakın.

POST /v1/chat

Ana iş yükünü üstlenen tek uç nokta. İstemci el sıkışmasına ek olarak message, form_submission, selection veya tool_results alanlarından tam olarak birini gönderin. text/event-stream döndürür.

AlanZorunlu muNe işe yarar
conversation_idHayırYeni bir sohbet başlatmak için bunu atlayın. Sunucu bunu üretir ve turn.start üzerinde döndürür.
messageDördünden biri{ text, detail_of? }. text 1 ila 4.000 karakterdir. detail_of ({ title, subtitle?, image_url? }), detail_pages bildiren bir derlemede, bir detay sayfasının hangi karttan açıldığını belirtir.
form_submissionDördünden biri{ form_id, values }. Her değer bir dize, bir sayı, bir boole veya en fazla 100 dizeden (her biri en fazla 500 karakter) oluşan bir dizidir. Diziler, bir multi_select seçimlerini ve POST /v1/uploads uç noktasından gelen bir upload alanının kimliklerini taşır. Yükleme kimlikleri yalnızca bu form_id değerine sahip en yeni formun upload olarak bildirdiği alanlar için geçerlidir.
selectionDördünden biriKullanıcının bu sohbetin çizdiği bir variant_picker, datetime_slots veya choice üzerinde ne seçtiği: { block_id, ids, other_text? }. block_id, bloğun hat üzerindeki id değeridir. ids, 0 ila 24 seçenek kimliği (her biri en fazla 64 karakter) tutar. Her biri, bloğun sunduğu ve available: false olmayan bir seçenek olmalıdır. variant_picker ve datetime_slots tam olarak bir kimlik alır. Tekli bir choice bir tane alır ve çoklu bir choice, min_selected ile max_selected arasında alır. skip içeren bir choice alanını atlamak için boş ids gönderin veya other içeren bir choice için other_text (1 ila 300 karakter) ile birlikte gönderin; other_text asla kimliklerle birlikte gelmez. Sunucu, seçimi çizdiği bloğa göre denetler. Seçim uymuyorsa, blok zaten yanıtlanmışsa veya surface_id değerinin daha yeni bir revizyonu onun yerini almışsa tur, yeniden denenemeyen bir invalid_request ile sona erer.
tool_resultsDördünden biri1 ila 10 sonuç, her biri { invocation_id, status, confirmed?, data?, error? }. status; success, error, declined veya timed_out değerini alır. data, 16 KB veya daha azına serileştirilmelidir ve error en fazla 1.000 karakterdir. confirmed: true olmadan bir yazma veya yıkıcı aksiyon üzerindeki bir success, reddedildi olarak kaydedilir.
attachmentsHayırBu cihazın yüklediği, POST /v1/uploads uç noktasından gelen en fazla 4 kimlik. Bu cihaza ait olmayan kimlikler sessizce atılır.
turn_idHayırTur başına bir kez ürettiğiniz ve yeniden denediğinizde değiştirmeden yeniden gönderdiğiniz bir uuid. Sunucu, kullanıcının mesajını (app_id, turn_id) başına en fazla bir kez yazar; böylece kesilen bir akıştan sonra yapılan bir yeniden deneme ne mesajı yineler ne de bunun için iki kez faturalandırır. Bilerek sohbet kapsamlı değil, uygulama kapsamlıdır: conversation_id sunucuda üretilir ve size yalnızca turn.start üzerinde ulaşır; bu nedenle bundan önce kesilen bir akış sizi belirtecek bir sohbet olmadan bırakır — ki bu tam olarak tekilleştirmeye değer durumdur. turn_id alanını atlarsanız her yeniden deneme yeni bir tur olarak sayılır.
userHayırBu turda uygulamanızda kimin oturum açtığı: { id, hmac? } veya kimse açmadığında null. Hangi cihaz göndermiş olursa olsun tur o kişiye gider ve başkasına ait bir sohbete devam edilmez — yenisi açılır. null, turu daha önce cihazı kimin kullandığına asla bağlamaz, cihazın anonim kaydına yerleştirir. hmac, /v1/identify uç noktasının aldığı imzanın aynısıdır; kaydı imzalanmış bir kişi yalnızca imzalı turları alır ve imzasız bir tur anonim olarak sunulur. Alanı tamamen atlarsanız sunucu, cihazın /v1/identify eşlemesine geri döner; 0.13.0 öncesindeki Flutter SDK bu şekilde çalışır.
clientEvetYetenek el sıkışması: aşağıda açıklanan { protocol, sdk, catalog_version, components, manifest_hash?, locale?, languages?, capabilities?, actions? }. Sunucu, modelin araç setini kataloğunun ve components alanınızın kesişiminden oluşturur; böylece eski bir derlemeye asla çizemeyeceği bir blok sunulmaz.
contextHayırGüvenilmeyen veri olarak ele alınan ve asla talimat olarak kabul edilmeyen { app_state?, current_screen?, open_forms? }. app_state, 8 KB veya daha azına serileştirilmelidir ve current_screen en fazla 120 karakterdir. open_forms, form_update bildiren bir derlemenin gönderdiği, gönderilmemiş en fazla 3 formu ({ form_id, values, edited }) tutar. edited, kullanıcının değiştirdiği ve modelin üzerine yazmaması söylenen alanları belirtir.
curl -N https://api.rendel.ai/v1/chat \
  -H "X-Rendel-Key: rd_pk_test_..." \
  -H "X-Rendel-Device: 4f3c1a0b9d2e8f7a6b5c4d3e2f1a0b9c" \
  -H "Content-Type: application/json" \
  -d '{
    "message": {"text": "Where is my order 1042?"},
    "turn_id": "3f1c2b90-8e4d-4a71-9c15-2b7e0a4d6f83",
    "client": {
      "protocol": 1,
      "sdk": "web/0.21.0",
      "catalog_version": "2026-09.a",
      "components": ["text", "quick_replies", "order_tracker", "confirm_card"],
      "actions": ["reply", "open_url", "navigate", "call", "copy", "add_to_calendar"],
      "capabilities": ["answer_pages", "detail_pages"]
    }
  }'

İstemci el sıkışması

AlanNe olduğu
protocol1.
sdkweb/0.21.0 gibi, istemciniz ve sürümü. En fazla 60 karakter.
catalog_version2026-09.a gibi, derlemenin temel alındığı katalog.
componentsHer biri isteğe bağlı olarak name@N (örneğin form@2) biçiminde, 1 ila 96 ad. Yalın bir ad, sürüm 1 anlamına gelir. Bilinmeyen adlar reddedilmez, yok sayılır. confirm_card dışında bilinen en az bir bileşen gereklidir. Bir sürüm son eki bugün kabul edilir ancak sunucunun gönderdiğini henüz değiştirmez; @2 bildirmek, bir derlemeyi daha sonraki bir sunucu için hazırlar.
manifest_hashPOST /v1/apps/manifest çağrısının döndürdüğü hash.
localeCihazın dili (BCP-47). Sunucu kendi cümlelerini (hatalar, onay şablonları) bu dilde kurar ve kullanıcı başka bir dilde yazmadığı sürece Rendel, languages ayarlandığında bunların arasından seçilen dilde yanıt verir.
languagesTercih sırasına göre en fazla 12 dil etiketi.
capabilitiesform_update, surface_update, answer_pages, detail_pages, notices; bilinmeyenler yok sayılır.
actionsBu derlemenin yürüttüğü kontrol türleri: reply, open_url, navigate, call, copy, add_to_calendar. Belirtilmezse sunucu yalnızca reply ve open_url olduğunu varsayar ve başka bir tür taşıyan bir blok, kendi fallback_text değerinden oluşan bir metin bloğu olarak iletilir. screens yalnızca navigate bildirildiğinde ve manifest rotalar içerdiğinde sunulur; contact ise yalnızca yönetim paneli iletişim kanallarını listelediğinde sunulur.

Akış olayları

Her olay v: 1 ve monotonik bir seq taşır.

OlayAlanlarAnlamı
turn.startconversation_id, message_id, model, request_idAsistan turu başlar. message_id, bu turun kaydedildiği satırın kimliğidir — cevabı değerlendirmek için geri gönderdiğiniz şeydir.
turn.statusstep, action?Okuyucu beklerken turun ne yaptığı. action, aksiyonlarınızdan birini (action içinde belirtilen) çağırmaya başladığı anlamına gelir; composing, cevabı çizmeye başladığı anlamına gelir. İlerleme göstermiyorsanız yok sayın.
block.startindex, id, block_typeBir bileşen duyurulur; iskeletini çizin.
block.deltaindex, text_deltaBir text bloğu için akan metin.
block.readyindex, blockDoğrulanmış blok; iskeleti doldurun.
action.executeinvocation_id, name, params, timeout_msBu kayıtlı okuma aksiyonunu çalıştırın ve sonucu geri gönderin.
turn.endstatus, pending, usage?, billable?, remaining?completed, awaiting_tool_results, awaiting_confirmation veya error. usage, bu turun input_tokens, output_tokens ve cache_read_tokens değerlerini taşır. remaining ({ count, hint }, notices bildiren bir istemciye), kişinin uygulamanın kullanım limiti kapsamında bir sorusu kaldığını belirtir: bir sonrakine kadar sessizce hint ("Bugün 1 sorunuz kaldı") gösterin.
errorcode, message, retryableTürü belirtilmiş başarısızlık.
noticekind, message, hint, until, actionAsistan bilerek yanıt vermeyecektir: limit (kişinin kullanım limiti) veya paused (harcama limiti, kullanım bakiyesi veya günlük tavan). limit için cevabın gittiği yere message çizin, until (ISO 8601) tarihine kadar yazma alanını hint ("Yarın tekrar bekleriz") ile devre dışı bırakın ve action ({ label, url } veya null) öğesini bir bağlantı olarak sunun. paused için hiçbir şey göstermeyin: soruyu bırakın, asistanı kapatın ve GET /v1/apps/config tekrar available diyene kadar giriş yolunu gizleyin. Yalnızca notices bildiren bir istemciye gönderilir; diğerleri aynı cümleyle bir error alır. Bir başarısızlık değildir: turn.end, completed ile devam eder.
ping—Her 15 saniyede bir canlı tutma (keep-alive). Bunu filtrelemeyin: boşta kalma zaman aşımınız bununla sıfırlanmalıdır, aksi takdirde uzun düşünen bir tur boşta göründüğü için kesilir.

turn.end bekleyen bir durum bildirdiğinde, bekleyen çağrılar için tool_results taşıyan bir devam POST /v1/chat isteğiyle yanıt verin.

GET /v1/apps/config

Henüz init() çağırmış bir cihaz için Rendel'in yayınlanmış görünümü ve açılış yüzeyi. ETag ile önbelleğe alınır.

Buradaki her şey tasarım gereği herkese açıktır; yayınlanabilir bir anahtar bunu okuyabilir ve yayınlanabilir bir anahtar ikili dosyanızda yer alır.

Yanıt 200

{
  "channel": "published",
  "version": 7,
  "updated_at": "2026-09-01T10:12:04.000Z",
  "config": {
    "theme": { "accent": "#2E40EA", "radius": { "card": 16 } },
    "copilot": { "assistantName": "Ada", "launcherLabel": "Ask", "suggestions": ["Where is my order?"] }
  },
  "available": true
}
AlanNe işe yarar
channelCanlı anahtar için published, test anahtarı için draft. Bir test anahtarındaki kendi uygulamanız önizleme cihazının kendisidir; uyumlu tutulacak ikinci bir şey yoktur.
versionYayınlanan sürüm numarası veya hiçbir şey yayınlanmadığında null.
updated_atNe zaman yayınlandığı. Bilgi amaçlı taşınır; ETag değerini belirlemez.
configYük verisi veya {}. Boş bir yapılandırma, "kodun init() fonksiyonuna ilettiği her şeyi koru" anlamına gelir.
availableŞimdi yeni bir sohbetin başlayıp başlayamayacağı. Organizasyonun kullanımı duraklatıldığında (kullanım bakiyesi harcandığında, harcama limitine ulaşıldığında, bir günlük tavanda) false; tekrar true olana kadar giriş yolunu gizleyin. ETag'in bir parçasıdır.
unavailable_reasonavailable: false olduğunda günlükleriniz için: credits, budget, daily_ceiling veya spend_ceiling. Bunu kullanıcıya asla göstermeyin.

Yanıtlar Vary: X-Rendel-Key, X-NC-Key taşır — 200 üzerinde olduğu gibi 401 ve 403 üzerinde de; çünkü gövde tamamen bir istek başlığına bağlıdır ve yalnızca URL üzerinden anahtarlanan bir önbellek, bir kiracının markasını soran bir sonraki cihaza teslim eder.

Çıkışta doğrulamadan geçemeyen bir satır, SDK'nın okumaya çalışabileceği bir şey yerine {} olarak sunulur.

DurumNe zaman
200Bir yük verisi veya hiçbir şey yayınlanmadığında {}.
304If-None-Match değeriniz eşleşiyor. Gövde yok.
401Bilinmeyen veya iptal edilmiş anahtar.
403{ error: { code: "app_suspended" } }
429İki grup: cihaz başına 12/dakika ve uygulama başına 600/dakika. Uygulama genelindeki grup, /v1/chat uç noktasının paylaştığı bağlantı havuzunu korur ve bir çağırıcı her istekte X-Rendel-Device değerini değiştirdiğinde de geçerliliğini koruyan gruptur.

POST /v1/apps/manifest

Aksiyon manifestinizin idempotent yüklemesi. Snapshot'lar değiştirilemezdir, (app, hash) ile anahtarlanır; aynı manifesti iki kez göndermek tek bir satırı etkiler.

İstek

{
  "manifest": {
    "version": 1,
    "actions": [ … ],
    "routes": [
      {
        "name": "order_detail",
        "title": "Order",
        "description": "One order's details",
        "params": { "order_id": { "type": "string", "required": true, "fromActions": true } }
      }
    ]
  },
  "sdk": "flutter/0.44.0"
}

routes (isteğe bağlı, en fazla 50), navigate aksiyonunun açabileceği, registerRoute ile kaydedilmiş ekranlardır. name snake_case biçimindedir, en fazla 64 karakterdir. title (en fazla 60 karakter) kartın gösterdiği şeydir ve siz yazarsınız. description (en fazla 300 karakter) modele ekranı ne zaman kullanacağını söyler. params en fazla 8 parametre alır; her biri string, number veya boolean ve isteğe bağlı olarak required olabilir. fromActions olarak işaretlenmiş bir parametre, aksiyonlarınızdan birinin bu sohbette döndürdüğü bir değeri taşımalıdır. Rotası olmayan bir derleme alanı atlar ve karması değişmez.

Yanıt 200

{ "manifest_hash": "9b2f…" }

Bu karmayı her sohbet isteğinde client.manifest_hash olarak gönderin. Sunucunun görmediği bir karma, hiçbir aksiyon olmadan sunulmak yerine turu manifest_unknown ile sonlandırır — boş bir aksiyon seti, modelin uygulamanızın kesinlikle yapabileceği bir şey hakkında "Bunu yapamam" demesine yol açar.

Yanıt 400 aksiyonu ve alanı belirtir:

{
  "error": {
    "code": "invalid_request",
    "message": "Invalid action manifest: actions.1.name — snake_case action names (+2 more)",
    "details": [
      { "path": "actions.1.name", "message": "snake_case action names" },
      { "path": "actions.3.nc.timeoutMs", "message": "Too big: expected number to be <=120000" }
    ]
  }
}

details en fazla on iki sorun taşır. path, gönderdiğiniz belgenin içindeki konumdur, böylece kendi kaynak kodunuzda grep ile taranabilir.

POST /v1/identify

Cihazı bilinen bir kullanıcıya bağlar, niteliklerini kaydeder ve cihazın anonim geçmişini onların üzerine taşır. Flutter 0.13.0 sürümünden itibaren ve web'de başından beri, turların kendisi kimin oturum açtığını söyler (POST /v1/chat üzerinde user); bu çağrı yine de nitelikleri taşır.

İstek

AlanZorunlu muNe işe yarar
external_user_idEvetBu kişi için kimliğiniz, 1–128 karakter.
traitsHayırRendel'in onlar hakkında bilmesini istediğiniz herhangi bir şey. Veri olarak ele alınır, asla talimat olarak kabul edilmez.
user_hmacDoğrulama açıkkenSizin arka ucunuzda hesaplanan küçük harfli onaltılık HMAC_SHA256(external_user_id, app identity secret). Gizli anahtar (secret) asla uygulamanıza girmez.

Yanıt 200: { "end_user_id": "…", "verified": true }

verified, çağrının tüm amacıdır. Nitelikler yalnızca çağırıcı kim olduğunu kanıtladığında veya kayıt ilk başta hiç doğrulanmadığında taşınır — aksi takdirde yayınlanabilir anahtarınızı elinde tutan herhangi biri, doğrulanmış rozeti üzerinde kalırken doğrulanmış bir kullanıcının profilini yeniden yazabilirdi.

DurumNe zaman
400Hatalı biçimlendirilmiş gövde.
403Uygulama doğrulama gerektiriyor ve geçerli bir user_hmac sunulmadı.
429Uygulamanızın dakika başına mesaj limitinde, cihaz başına istek limiti aşıldı.

POST /v1/invocations/:id/confirm

Kullanıcının bir onay kartına verdiği, sunucunun kaydettiği yanıt. Butona basıldığı anda ve işleyiciniz çalışmadan önce çağırın, böylece kayıt işleyicinin ne yaptığından bağımsız olarak var olur. X-Rendel-Device zorunludur.

İstek: { "decision": "confirm" } veya { "decision": "decline" }

Yanıt 200: { "status": "confirmed" }, { "status": "declined" } veya { "status": "expired" }

İkinci bir çağrı, kaydedilen yanıtla birlikte { "status": "…", "already_answered": true } döndürür. İlk yanıt geçerlidir: dengesiz bir bağlantı üzerinden çift dokunma tek bir satırı bir kez değiştirir ve bir ret, bir onayın üzerine yazamaz.

DurumNe zaman
400X-Rendel-Device yok, hatalı biçimlendirilmiş bir karar veya riski read olan bir çağrı — bir okuma aksiyonunun verecek onayı yoktur.
404Böyle bir çağrı yok, bu uygulamaya ait değil veya çağıran cihaz sohbete sahip değil. Üçü için tek bir yanıt: yayınlanabilir anahtar ikili dosyanızda yer alır, bu nedenle onu elinde tutmak hiçbir şeyin kanıtı değildir.
429Cihaz başına istek limiti aşıldı.

Bu çağrının zorunlu olup olmadığı uygulama başınadır. Varsayılan olarak eski sözleşme hâlâ geçerlidir — confirmed: true taşıyan bir sonuç kabul edilir — çünkü bu uç noktadan önce gelen bir SDK bunu asla çağırmaz. Settings → Security → Request verification → Record confirmations on the server ayarını açın ve sunucunun kendi kaydı geçerli olan tek şey haline gelsin. Güvenlik özeti sayfasına bakın.

POST /v1/invocations/:id/edit

Kullanıcının yanıtlamadan önce bir onay kartında değiştirdiği bir değer. Yalnızca aksiyonun düzenlenebilir olarak işaretlediği parametreler değiştirilebilir (bir aksiyonun manifest içindeki nc.editable alanı, her iki SDK'da editable ile veya yönetim panelindeki bir aksiyonda Kart üzerinde değiştirilebilir ile ayarlanır). Sunucu, değişikliği önerilen parametrelerle birleştirir, tüm çağrıyı tıpkı modelinkini kontrol ettiği gibi aksiyonun şemasına göre kontrol eder, yeni değerleri yürütme için saklar ve kartı bunlarla yeniden çizer. Başlıklar /confirm ile aynıdır: X-Rendel-Key (veya X-NC-Key) ve zorunlu olan X-Rendel-Device (veya X-NC-Device).

İstek: { "params": { "quantity": 3 } }

Yanıt 200: Yeniden çizilen onay kartının özellikleri olarak { "card": { … } }. Eskisinin yerine bunu çizin. Sonrasında onaylamak, aksiyonu değiştirilen değerlerle çalıştırır.

Yanıt 422 reddedilen her değeri belirtir:

{
  "error": {
    "code": "invalid_params",
    "message": "\"quantity\" must be <= 10",
    "fields": { "quantity": "\"quantity\" must be <= 10" }
  }
}

Aksiyonun düzenlenebilir olarak işaretlemediği bir parametre, "This cannot be changed on the card." ifadesiyle aynı şekilde reddedilir.

DurumNe zaman
400X-Rendel-Device yok veya { params: { … } } olmayan bir gövde.
404Böyle bir çağrı yok, bu uygulamaya ait değil, bir read aksiyonu veya çağıran cihaz sohbete sahip değil. Hepsi için /confirm ile aynı tek yanıt.
409Kart zaten yanıtlandı veya süresi doldu. status şu an ne olduğunu taşır.
422Değiştirilen bir değer aksiyonun kontrollerinden geçemedi veya kart üzerinde değiştirilemez.
429Cihaz başına istek limiti aşıldı.

POST /v1/feedback

Tek bir asistan turunda tek bir başparmak işareti. X-Rendel-Device zorunludur.

İstek

AlanZorunlu muNe işe yarar
message_idEvetO turun turn.start olayından alınan message_id.
ratingEvet1 veya -1.
reasonHayırwrong, incomplete, not_what_i_asked, unclear veya other değerlerinden biri. Başka herhangi bir değer atılır ve değerlendirme yine de kaydedilir; böylece bir son kullanıcının yazdığı hiçbir serbest metin saklanmaz.

Yanıt 200: { "ok": true }

(message, device) ile anahtarlanır: ikinci bir çağrı bir oy eklemek yerine değerlendirmeyi değiştirir. 404, hem "böyle bir tur yok" hem de "bu tur size ait değil" durumlarını kapsar.

POST /v1/ratings

Model turu olmadan kaydedilen bir rating bloğunun yanıtı. X-Rendel-Device zorunludur.

İstek

AlanZorunlu muNe işe yarar
message_idEvetO turun turn.start olayından alınan message_id.
block_idEvetDeğerlendirme bloğunun id değeri.
scoreEvetBloğun scale değerine göre denetlenen bir tam sayı: stars_5 1 ila 5 alır, thumbs 0 veya 1 alır (/v1/feedback uç noktasının 1/-1 değeri değil), nps_11 0 ila 10 alır.
commentHayırEn fazla 500 karakter, bir mesaj gibi gizlenir (redacted).

Yanıt 200: { "ok": true }

Yanıtlar (message, block, device) ile anahtarlanır: ikinci bir çağrı puanı değiştirir ve yeni bir tane göndermedikçe önceki yorumu korur.

DurumNe zaman
400Cihaz başlığı yok, hatalı biçimlendirilmiş gövde veya bloğun ölçeği dışında bir puan.
404Bilinmeyen cihaz, tur veya blok; hepsi için tek bir yanıt.
429Uygulamanızın dakika başına mesaj limitinde, cihaz başına istek limiti aşıldı.

POST /v1/uploads

Bir kullanıcının Rendel'e verdiği, onu taşıyan turdan önce yüklenen tek bir dosya. Gövde, dosyanın baytlarıdır ve başka bir şey içermez (multipart yok). Content-Type; image/png, image/jpeg, image/webp, image/gif, application/pdf veya text/plain türlerinden biridir, en fazla 20 MB. X-Rendel-Device zorunludur. Dosya o cihaza aittir ve başka bir cihazdan kimliğini belirten bir tur, dosya olmadan yanıtlanır.

Yanıt 201: { "id": "…", "media_type": "image/png", "bytes": 48213 }

DurumNe zaman
400Cihaz başlığı yok veya boş bir gövde.
403app_suspended veya origin_not_allowed.
413payload_too_large: 20 MB üzeri.
415unsupported_media_type.
429Retry-After: 5 ile cihaz başına dakika başına 20.
502upload_failed: depolama dosyayı reddetti. Yeniden deneyin.
503uploads_unavailable.

Kimliği POST /v1/chat üzerinde attachments içinde (tur başına en fazla 4) veya bir formun upload alanının değeri olarak gönderin. Bir dosya modelin önüne yalnızca onu taşıyan turda gelir ve sonraki geçmişte yeniden oynatılmaz. Bir form, yalnızca yönetim panelinde (Settings → Keys & environments) Files in forms açıldıktan sonra dosya isteyebilir.

Yapılandırmanın belirttiği logo: test anahtarı için taslak, canlı anahtar için yayınlanmış olan. Yapılandırmadaki logoAssetId değerini izleyen /v1/apps/logo?v= olarak çağırın. v önbellek anahtarı işlevi görür ve yanıt bir yıl boyunca sabittir (immutable).

DurumNe zaman
200Görsel.
403app_suspended.
404no_logo: yapılandırma hiçbir şey belirtmiyor veya depolama artık buna sahip değil.
429Cihaz başına dakika başına 12 ve uygulama başına 600.
503logo_unavailable.

POST /v1/pairings/claim

pair fonksiyonunun çağırdığı uç nokta. İstek: Yönetim panelinin gösterdiği şekilde { "code": "K7Q2-M9XD" }. X-Rendel-Device zorunludur. Yalnızca test anahtarları.

Yanıt 200: ends_at eşleştirmenin ne zaman biteceği olmak üzere { "paired": true, "ends_at": "…" }.

DurumNe zaman
400Cihaz başlığı yok veya hatalı biçimlendirilmiş gövde.
403Canlı anahtarda pairing_test_only veya uygulama askıya alındığında quota_exceeded.
404pairing_not_found: yanlış, kullanılmış veya süresi dolmuş kod; hepsi için tek bir yanıt.
429Cihaz başına dakika başına 5 ve uygulama başına 30.

Bir test uygulamasını eşleştirin bölümüne bakın.

GET /v1/conversations/:id/messages

Geçmiş ve kesilen bir akıştan sonra yakınsama. X-Rendel-Device gerektirir (onsuz 400 invalid_request): bir sohbeti yalnızca onu tutan cihaz okur.

SorguVarsayılanNe işe yarar
limit50En fazla 200 ile sınırlandırılmıştır.

Yanıt 200

{
  "conversation_id": "…",
  "messages": [
    { "id": "…", "role": "user", "blocks": [ … ], "created_at": "…" }
  ]
}

Bloklar yer tutucu biçiminde saklanır ve çıkışta geri yüklenir, böylece kendi geçmişini isteyen cihaz, kullanıcısının yazdığı değerleri alır. Canlı bir anahtar bir test ortamı sohbetini okuyamaz ve bunun tersi de geçerlidir; başka bir uygulamadan veya başka bir cihazdan gelen bir anahtar, hata yerine boş bir liste alır çünkü ikisi de aynı yanıttır.

POST /v1/events

Toplu SDK telemetrisi. Bir olay türü tutulur: Yönetim panelinin Screens sayfasının saydığı, bir cevaptaki karttan açılan uygulamanın bir ekranı olan screen_open. Başka herhangi bir tür kabul edilir ve atılır; böylece daha yeni bir SDK daha fazlasını gönderdiği için asla reddedilmez. Faturalandırma ve kullanım sunucu kaynaklıdır ve bu uç noktaya asla güvenmez.

X-Rendel-Device gönderin; cihazı olmayan bir açılış atılır.

{
  "events": [
    { "type": "screen_open", "message_id": "7b0c3a52-…", "block_id": "blk_65475c9e", "route": "orders" }
  ]
}
AlanTürNotlar
eventsdizi, 50'ye kadarHer olay tek başına okunur; hatalı biçimlendirilmiş bir olay atlanır.
type"screen_open"
message_iduuidturn.start olayından kartın içinde bulunduğu cevap.
block_idstringKartın blok kimliği.
routestringAçılan kayıtlı rota.

Bir açılış yalnızca o cevap uygulamanıza ait olduğunda ve içindeki o blok route hedefine bir navigate taşıdığında kaydedilir; başka her şey bir hata olmadan atılır. Aynı karta ikinci bir dokunuş ikinci bir kişi değil, bir dokunuş olarak sayılır. Bir gruptan en fazla 10 açılış okunur ve bir cihaz, sohbette olduğu gibi sınırlandırılır.

Yanıt 204, boş.