Belgelere geç
API

Konuşmalar

Postayı okuyun ve düzenleyin.

GETapi.openemail.uk/threads

Bu sayfadaki 7 çağrının herhangi birini kendi anahtarınızla çalışma alanınıza karşı çalıştırır.

Listeleme

GET /threads?folder=inbox. query geçmek aynı yerel indekste arama yapar. Düz sözcüklerin hepsi geçmelidir ve her biri büyük/küçük harfi, aksanları ve ayırıcıları yok sayarak gevşek eşleşir; böylece min "Benjamin"i bulur. Tırnak içindeki bir ifade, büyük/küçük harf ve aksanlar dışında yazıldığı gibi eşleşir; dolayısıyla "ben jamin" "Ben-Jamin"i bulmaz. the ya da emails gibi dolgu sözcükleri, aranacak başka bir şey kaldığında düz sözcük listesinden çıkarılır. from:, to:, subject:, label:, is:unread, has:pdf, after:2026/01/31 ve newer_than:7d gibi işleçler aramayı daraltır; OR, parantezler ve baştaki bir - ise bunları birleştirir. Alıcılar roller olmadan tek bir liste olarak saklanır ve asla Bcc tutmaz; dolayısıyla cc: to: ile aynı alanı okur ve bcc: kendine ait hiçbir şeyle eşleşmez. from:me sizin gönderdiğiniz postadır; to:me ise alıcıları arasında ya da teslim edildiği adres olarak, takma adlar dahil kendi adreslerinizden birini taşıyan postadır.

Sözcükler ve from:, to:, cc:, subject: ve body: işleçleri her konuşmadaki en yeni mesajı okur: göndereni, alıcılarını, konusunu ve gövdesinin ilk 4.000 karakterini. filename: ve has: tüm konuşmadaki her eki okur; label:, in: ve is: ise tüm konuşmayı okur. Sorgu in: ile ya da is:sent gibi klasör belirten bir is: ile bir klasör adlandırmadıkça folder geçerli kalır; in:anywhere ise tek başına da başka terimlerin yanında da her klasörde arar. Taslak listeleme bunun istisnasıdır ve sorgu ne adlandırırsa adlandırsın taslaklarda kalır.

Aramanın kullanamadığı bir değer daraltmak yerine yok sayılır; böylece bir değerdeki yazım hatası sonucu boşaltmak yerine genişletir: category:, larger:, smaller:, size:, messagesize:, list:, rfc822msgid:, received:, sent:, is:promotions gibi kategori sözcükleri, hiçbir ek türünü adlandırmayan bir has: sözcüğü, high ya da low dışında bir importance:, okunamayan bir tarih ve birimi h, d, w, m ya da y olmayan bir süre. Bilmediği bir işleç adı, örneğin project:, düz metin olarak aranır. Tarihler konuşmadaki en yeni etkinliği UTC olarak okur; after: adlandırdığı günü dahil eder, before: ise hariç tutar. Bir tarihi YYYY/MM/DD, YYYY-MM-DD, YYYYMMDD, yalnız bir yıl ya da epoch saniyesi veya milisaniyesi olarak yazın.

nextPageToken opaktır. Size verilenin tam olarak aynısını geri geçin; asla bir tane üretmeyin ya da düzenlemeyin. Biçimi sözleşmenin parçası değildir.

Getirme

GET /threads/{id}, yalnızca en yenisini değil, konuşmadaki her mesajı, etiketleriyle ve içinde okunmamış bir şey olup olmadığıyla birlikte döndürür.

Şifreli gelen mesajlar

Bu API ne şifreler ne de şifre çözer. Başkasının şifrelediği bir mesajı açamaz ve şifrelenmiş bir mesaj gönderemez. Şifreleme işareti taşıyan bir istek 422 ile reddedilir; çünkü böyle bir işareti yalnızca anahtarları elinde tutan yüzeyler koyabilir ve hiçbir API istemcisi anahtar tutmaz. Yaptığı şey, girişte mühürlü bir zarfı üst düzey Content-Type üzerinden, başka hiçbir şeye bakmadan TANIMAK ve bunu mesajda belirtmektir.

OpenEmail artık anahtar tutuyor ve hangi yarısını, nerede tuttuğu konusunda net olmakta yarar var. Bir posta kutusu sahibi tarayıcısında bir OpenPGP kimliği üretir ve AÇIK anahtarı, oturum açmış diğer OpenEmail göndericilerinin çözümleyebileceği bir dizine yayımlar. Özel yarısı o tarayıcıda üretilir, buraya asla gönderilmez ve asla kurtarılamaz; dolayısıyla bu API'deki hiçbir şey hiçbir şeyin şifresini çözemez ve hiçbir destek talebi, mahkeme celbi ya da bizdeki yedek, bunu yapabilecek bir anahtar üretemez. Web uygulaması, anahtar okuyucunun tarayıcısındayken artık bir PGP/MIME ya da satır içi PGP mesajını AÇABİLİR; ama bu şifre çözme sekmede olur ve düz metni asla geri yazılmaz: saklanan mesaj şifreli metin olarak kalır ve bu API'den gelen hiçbir yanıt açılmış metni taşımaz. Uygulama artık yeni bir mesajı tarayıcıda mühürleyip gönderebilir: oluşturucu, alıcıların yayımlanmış anahtarlarına şifreler ve posta PGP/MIME olarak çıkar. Bu API hâlâ hiçbir şeyi mühürleyemez, dolayısıyla aşağıdaki alan hem başkasının şifrelediği postayı hem de bir OpenEmail sekmesinde mühürlenmiş postayı tanımlar.

Alternatifin ne olduğu düşünülünce bu, bir alana değer. Mühürlü bir mesaj okunabilir bir gövde saklamaz, dolayısıyla decodedBody "" olarak döner ki gerçekten içeriği olmayan bir mesajla aynı baytlardır. encryption, bir mesaja göre işlem yapmadan önce ikisini ayırt etmenizi sağlayan şeydir ve bir doğrulama değil, zarf hakkında bir ifadedir: bir mesajın mühürlü olduğunu görmek, onu açmış olmakla aynı şey değildir.

Yanıt
{    "object": "thread",    "id": "thread_2f9b…",    "messages": [      {        "id": "msg_7c41…",        "subject": "Q3 numbers",        "decodedBody": "",        "encryption": {          "format": "pgp-mime",          "detectedAt": "2026-08-30T09:14:22.117Z",          "rawRetained": false,          "parts": [            { "index": 0, "attachmentId": "msg_7c41…-0", "role": "version" },            { "index": 1, "attachmentId": "msg_7c41…-1", "role": "ciphertext" }          ]        }      }    ]  }

encryption

format'pgp-mime' | 'pgp-signed' | 'pgp-inline' | 'smime-encrypted' | 'smime-signed'
Hangi zarfın geldiği. Üst düzey `Content-Type` üzerinden okunur (PGP için `protocol` parametresi, S/MIME için `smime-type`) ya da `pgp-inline` için PGP zırh başlığıyla başlayan bir gövdeden. Hiç `smime-type` taşımayan bir `pkcs7-mime` parçası `smime-encrypted` olarak okunur ki RFC 8551 varsayılan olarak onu öyle sayar.
detectedAtstring
ISO 8601, algılayıcının çalıştığı an ki mesajın buraya alındığı andır. Mesajın ne zaman ya da kim tarafından şifrelendiği hakkında hiçbir şey söylemez.
rawRetainedboolean
Özgün RFC822 baytlarının saklanıp saklanmadığı, yani mesajın bütün hâlde geri verilip verilemeyeceği. Bugün her mesajda false'tur, çünkü burada hiçbir şey henüz ham postayı saklamıyor. Yanıtta şimdiden yer alıyor ki bunun değiştiği gün, aynı zamanda saklanan her mesajın yeniden taşınması gereken gün olmasın.
partsobject[]
Bu biçimin kullandığı zarf parçaları. `encryption` varsa hep vardır ve adlandırılacak parça yoksa boştur: `pgp-inline`'ın ayrı bir parçası hiç yoktur, çünkü zırhı GÖVDENİN kendisidir ve `decodedBody` içinde gelir.
parts[].indexnumber
Bunun, özgün mesajın hangi MIME parçası olduğu; `attachments` üzerinden değil, geldikleri hâliyle parçalar üzerinden sayılır. İki liste birbirinden farklıdır ki bunun kaydedilmesinin tüm nedeni budur.
parts[].attachmentIdstring
Bu parçanın `attachments` içinde taşıdığı id, orada hiç görünüyorsa: parça indisi eklenmiş mesaj id'si. `ciphertext` parçası listelenir ve başka herhangi bir dosya gibi indirilir; `version` ve `signature` ise listenin dışında tutulur, dolayısıyla id'leri iki görünümü ilişkilendirir, başka bir işe yaramaz. Ekler uç noktası onları döndürmez.
parts[].role'version' | 'ciphertext' | 'signature'
`version` PGP/MIME denetim parçasıdır, `ciphertext` mesajdır, `signature` ayrık bir imzadır. Yalnızca `ciphertext` getirilmeye değer; diğer ikisi, eskiden çöp ek olarak görünen ve artık görünmeyen protokol mobilyasıdır.
formatNe geldiGövde
pgp-mimeBir PGP/MIME zarfı: protocol=application/pgp-encrypted ile multipart/encrypted.Mühürlü
pgp-inlineGövdenin kendisindeki zırh. Yalnızca gövde metninden okunur, böylece zırhlı bir bloğu yalnızca alıntılayan bir yanıt bununla karıştırılmaz.Mühürlü
smime-encryptedsmime-type=enveloped-data taşıyan bir S/MIME pkcs7-mime parçası ya da hiç smime-type taşımayan bir parça.Mühürlü
pgp-signedMesajın yanında ayrık bir PGP imzası: protocol=application/pgp-signature ile multipart/signed.Okunabilir
smime-signedAyrık bir S/MIME imzası: bir pkcs7-signature protokolü ya da smime-type=signed-data.Okunabilir

İmzalı, mühürlü demek değildir ve format yerine encryption alanının varlığına göre dallanmak bunu tam tersine çevirir. İmza, mesajın etrafındaki bir sarmalayıcı değil, onu kimin yazdığına dair bir iddiadır: imzalı bir mesajın gövdesi açıktır ve diğerleri gibi okunur. pgp-mime, pgp-inline ve smime-encrypted biçimlerini okunamaz, iki imzalı biçimi ise sıradan posta olarak ele alın.

Mühürlü bir mesajda ne değişir

Yalnızca üç mühürlü biçim bir şeyi değiştirir ve değişiklik bu yanıtta değil, alım sırasında olur. Gövdeyi okuyacak olan her şey, şifreli metni okuyup elde edemeyeceği bir sonucu bildirmek yerine devreden çıkar:

  • Gövde araması. Mesaj boş bir gövde parçacığıyla indekslenir; dolayısıyla gönderen, konu, adres ve etikete göre hâlâ bulunur, içindeki hiçbir şeyle bulunmaz.
  • Kimlik avı puanlayıcısının gövde geçişi. Karar yine gelir ve neyi yapamadığını söyler: risk.signals body-encrypted taşır ve risk.aiChecked false olur.
  • Yapay zekâ yazarlığı denetimi tahmin yürütmek yerine çekimser kalır: aiWritten.level unknown ve aiWritten.skipped encrypted olur.
  • Kurallardaki gövde koşulları. Zarf ve başlık koşulları tam olarak eskisi gibi çalışır; gövdeyi soran bir kural, eşleşmedi sayılmak yerine değerlendirilmedi olarak kaydedilir, çünkü "eşleşmedi" ile "okunamadı" farklı yanıtlardır.
  • Takvim daveti içe aktarımı. Davet şifreli metnin içindedir ve zarftan bir etkinlik kurmak, gerçek bir takvime yanlış bir kayıt koyardı.
  • Konuşma özetleri ve gömülü vektörler, tüm konuşma için. Mühürlü tek bir yanıt yeter. Özet, bir modelin düz metni okumasının açık metin meta veri olarak saklanmasıdır ki bu boru hattında bir gövdenin, kimsenin gövde saymadığı bir depoya sızacağı tek yerdir.

Gövdeye ihtiyaç duymayan her şey dokunulmadan kalır:

  • DMARC, DKIM ve SPF. Bunlar, şifreli metnin gizlemediği Authentication-Results üzerinden okunur; dolayısıyla şifrelenmiş bir mesaj yine de hiç yerine gerçek bir kimlik doğrulama kararı alır.
  • Konuşmaya bağlama, spam'e taşıma ve engelleme listesi: hepsi zarf ve başlık işidir.
  • Ekler. Şifreli metin parçası attachments içinde kalır, adsız geldiğinde encrypted-message.asc olarak adlandırılır ve aşağıdaki uç nokta üzerinden indirilir. Bu, web uygulamasının kendi okuyucusunun getirip tarayıcıda şifresini çözdüğü şeyin tam olarak aynısıdır; anahtar tutmayan bir API istemcisi içinse o indirme, postayı okumanın tek yolu olarak kalır. Anahtarı olan bir istemcide açın.
  • İmzalı bir mesaj bunların hiçbirini kaybetmez. Yukarıdaki denetimlerin her biri onun üzerinde çalışmaya devam eder ve hiçbir şey esirgenmez; mühürlü listenin beş değil üç biçimden oluşmasının nedeni budur.

encryption alanının yokluğu, düz metin olduğu iddiası değildir. Kimsenin bakmadığı anlamına gelir: mesaj algılamadan öncedir ya da posta kutusuna algılayıcının çalışmadığı bir yoldan ulaşmıştır. Hiçbir şey geriye dönük doldurmaz, dolayısıyla "denetlemedik" diyen bir alan asla "denetledik ve bulamadık" olarak okunmamalıdır.

İşaretleme ve etiketleme

PATCH /threads/{id}, read, addLabelIds ve removeLabelIds alır. Okundu durumu, bu ürünün desteklediği her arka uçta bir etikettir; dolayısıyla read ayarlamak ile etiketleri tek çağrıda taşımak sıralamayı belirlenebilir kılar.

PATCH
{ "read": true, "addLabelIds": ["USER_INVOICES"] }

TRASH ve SNOOZED burada label_not_directly_settable ile reddedilir. Her iki durum da yalnızca kendi etiketiyle taşınmaz (çöpe atmak klasör etiketlerini de temizler ve ertelemenin yanında saklanan bir uyanma zamanı gerekir); dolayısıyla bunları elle ayarlamak, konuşmayı uygulamanın hiç üretmediği ve kurtaramadığı bir durumda bırakır. Aşağıdaki uç noktaları kullanın.

Çöp ve erteleme

Uç noktaNe yapar
POST /threads/{id}/trashÇöp kutusuna taşır; INBOX, SPAM, SNOOZED ve ARCHIVE etiketlerini birlikte temizler.
POST /threads/{id}/snoozeGövde { "wakeAt": "…" }. Konuşmayı gizler ve geri dönüşünü zamanlar.
POST /threads/{id}/unsnoozeOnu şimdi geri getirir ve zamanlanmış dönüşü iptal eder.

Erteleme iki şey yazar: konuşmayı gizleyen etiket ve onu geri getiren kayıt. Birini diğeri olmadan yapmak, bunların etiket düzenlemesi değil birer uç nokta olmasının tam nedenidir.

Ekler

GET /threads/{id}/messages/{messageId}/attachments, her eki filename, contentType, size ve base64 olarak content ile döndürür. Saklanan baytlar bulunamadığında content boş bir dizedir, dolayısıyla çözmeden önce uzunluğunu denetleyin.

Şifreli bir zarfın tamamı burada değildir. Şifreli metin buradadır (mesajın kendisidir ve onu indirmek, bir API istemcisinin bu postayı okumasının tek yoludur); ama PGP/MIME sürüm parçası ve varsa ayrık imza listenin dışında tutulur, çünkü çöp ek olarak görünüyorlardı ve bir çağıranın onlarla yapabileceği bir şey yok. İkisi de id'lerini encryption.parts içinde korur ki bu iki görünümü ilişkilendirir; bu uç nokta onları döndürmez.