Pāriet uz dokumentāciju
API

Sarunas

Lasiet un kārtojiet pastu.

GETapi.openemail.uk/threads

Izpilda jebkuru no 7 izsaukumiem šajā lapā pret jūsu darbvietu, ar jūsu paša atslēgu.

Uzskaitīšana

GET /threads?folder=inbox. query padošana meklē tajā pašā lokālajā indeksā. Parastajiem vārdiem jāparādās visiem, un katrs sakrīt brīvi, neņemot vērā reģistru, diakritiku un atdalītājus, tāpēc min atrod "Benjamin". Pēdiņās likta frāze tiek salīdzināta tā, kā rakstīta, atskaitot reģistru un diakritiku, tāpēc "ben jamin" neatrod "Ben-Jamin". Pildījuma vārdi, piemēram, the vai emails, no parastu vārdu saraksta tiek izmesti, ja paliek vēl kaut kas, ko meklēt. Operatori, piemēram, from:, to:, subject:, label:, is:unread, has:pdf, after:2026/01/31 un newer_than:7d, to sašaurina, un OR, iekavas un sākuma - tos kombinē. Saņēmēji tiek glabāti kā viens saraksts bez lomām un nekad netur Bcc, tāpēc cc: lasa to pašu lauku, ko to:, un bcc: pats par sevi nesakrīt ne ar ko. from:me ir pasts, ko nosūtījāt jūs, un to:me ir pasts, kas kādu no jūsu adresēm, ieskaitot aizstājvārdus, nes starp saņēmējiem vai kā adresi, uz kuru tas tika piegādāts.

Vārdi un operatori from:, to:, cc:, subject: un body: lasa katras sarunas jaunāko ziņojumu: tā sūtītāju, tā saņēmējus, tā tēmu un pirmās 4 000 satura rakstzīmes. filename: un has: lasa katru pielikumu visā sarunā, un label:, in: un is: lasa visu sarunu. folder joprojām tiek piemērots, ja vien vaicājums nenosauc mapi ar in: vai ar tādu is:, kas ir mape, piemēram, is:sent, un in:anywhere meklē katrā mapē — gan atsevišķi, gan blakus citiem terminiem. Melnrakstu saraksts ir izņēmums un paliek melnrakstos neatkarīgi no tā, ko vaicājums nosauc.

Vērtība, ko meklēšana nevar izmantot, tiek ignorēta, nevis sašaurina, tāpēc drukas kļūda vērtībā paplašina rezultātu, nevis iztukšo to: category:, larger:, smaller:, size:, messagesize:, list:, rfc822msgid:, received:, sent:, kategoriju vārdi, piemēram, is:promotions, has: vārds, kas nenosauc nevienu pielikuma veidu, importance:, kas nav high vai low, nenolasāms datums un ilgums, kura vienība nav h, d, w, m vai y. Operatora nosaukums, ko tā nepazīst, piemēram, project:, tiek meklēts kā parasts teksts. Datumi lasa sarunas jaunāko aktivitāti UTC laikā, kur after: iekļauj nosaukto dienu un before: to izslēdz; rakstiet to kā YYYY/MM/DD, YYYY-MM-DD, YYYYMMDD, tikai gadu vai epohas sekundes vai milisekundes.

nextPageToken ir necaurspīdīgs. Padodiet atpakaļ tieši to, ko saņēmāt; nekad to neveidojiet un nerediģējiet. Tā forma nav daļa no līguma.

Iegūšana

GET /threads/{id} atgriež katru sarunas ziņojumu, nevis tikai jaunāko, kopā ar tās etiķetēm un to, vai kaut kas tajā ir nelasīts.

Ziņojumi, kas pienāca šifrēti

Šis API ne šifrē, ne atšifrē. Tas nevar atvērt ziņojumu, ko kāds cits ir šifrējis, un nevar nosūtīt šifrētu. Pieprasījums, kas nes šifrēšanas marķieri, tiek atteikts ar 422, jo vienīgās virsmas, kas to drīkst uzstādīt, ir tās, kas tur atslēgas, un neviens API klients atslēgu netur. Ko tas dara, ir ATPAZĪST aizzīmogotu aploksni ienākot, pēc augšējā līmeņa Content-Type un nekā cita, un tad par to pasaka uz ziņojuma.

OpenEmail tagad pats tur atslēgas, un ir vērts būt precīzam par to, kuru pusi un kur. Pastkastes īpašnieks pārlūkā ģenerē OpenPGP identitāti un publicē PUBLISKO atslēgu direktorijā, ko citi pieteikušies OpenEmail sūtītāji var izšķirt. Privātā puse tiek radīta tajā pārlūkā, nekad netiek sūtīta šurp un nekad nav atgūstama, tāpēc nekas šajā API nevar neko atšifrēt, un neviens atbalsta pieprasījums, tiesas rīkojums vai mūsu dublējums nerada atslēgu, kas to spētu. Tīmekļa lietotne tagad var ATVĒRT PGP/MIME vai iekļauta PGP ziņojumu, kad atslēga ir lasītāja pārlūkā, taču šī atšifrēšana notiek cilnē un tās atklātais teksts nekad netiek rakstīts atpakaļ: saglabātais ziņojums paliek šifrteksts, un neviena šī API atbilde nekad nenes atvērto tekstu. Lietotne tagad var aizzīmogot jaunu ziņojumu pārlūkā un to nosūtīt: sastādītājs šifrē uz saņēmēju publicētajām atslēgām, un pasts aiziet kā PGP/MIME. Šis API joprojām neko nevar aizzīmogot, tāpēc zemāk aprakstītais lauks apraksta gan pastu, ko šifrējis kāds cits, gan pastu, kas aizzīmogots OpenEmail cilnē.

Tas ir vērts lauka dēļ tā, kāda bija alternatīva. Aizzīmogots ziņojums neglabā lasāmu saturu, tāpēc decodedBody atgriežas kā "" — tie paši baiti, kas ziņojumam, kuram satura patiešām nebija. encryption ir tas, kas ļauj abus atšķirt, pirms rīkojaties ar vienu no tiem, un tas ir apgalvojums par aploksni, nevis verifikācija: redzēt, ka ziņojums ir aizzīmogots, nav tas pats, kas to būt atvērušam.

Atbilde
{    "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'
Kāda aploksne pienāca. Nolasīts no augšējā līmeņa `Content-Type` (tā `protocol` parametra PGP gadījumā, tā `smime-type` S/MIME gadījumā) vai, `pgp-inline` gadījumā, no satura, kas sākas ar PGP bruņu galveni. `pkcs7-mime` daļa, kas nenes nekādu `smime-type`, tiek lasīta kā `smime-encrypted`, jo par tādu to pēc noklusējuma padara RFC 8551.
detectedAtstring
ISO 8601, kad detektors darbojās, kas ir brīdis, kad ziņojums šeit tika uzņemts. Tas neko nepasaka par to, kad ziņojums tika šifrēts vai kas to izdarīja.
rawRetainedboolean
Vai tika saglabāti sākotnējie RFC822 baiti, lai ziņojumu varētu atdot veselu. Šodien nepatiess katram ziņojumam, jo nekas šeit vēl nepatur neapstrādātu pastu. Tas ir atbildē jau tagad, lai diena, kad tas mainīsies, nebūtu arī diena, kad katrs saglabātais ziņojums atkal jāmigrē.
partsobject[]
Aploksnes daļas, ko izmanto šis formāts. Klāt vienmēr, kad ir `encryption`, un tukšs, kad nav ko nosaukt: `pgp-inline` vispār nav atsevišķas daļas, jo tā bruņa IR saturs un pienāk `decodedBody`.
parts[].indexnumber
Kura sākotnējā ziņojuma MIME daļa tā bija, skaitot pa daļām tā, kā tās pienāca, nevis pa `attachments`. Šie divi saraksti atšķiras, un tieši tāpēc šis tiek fiksēts.
parts[].attachmentIdstring
Id, ko šī daļa nes `attachments` sarakstā, ja tā tur vispār parādās: ziņojuma id ar pievienotu daļas indeksu. `ciphertext` daļa ir uzskaitīta un lejupielādējas kā jebkurš cits fails; `version` un `signature` tiek turēti ārpus saraksta, tāpēc to id korelē abus skatus un neko vairāk. Pielikumu galapunkts tos neatgriezīs.
parts[].role'version' | 'ciphertext' | 'signature'
`version` ir PGP/MIME vadības daļa, `ciphertext` ir ziņojums, `signature` ir atdalīts paraksts. Ir vērts paņemt tikai `ciphertext`; pārējās divas ir protokola mēbeles, kas mēdza atveidoties kā atkritumu pielikumi un vairs neatveidojas.
formatKas pienācaPamatteksts
pgp-mimePGP/MIME aploksne: multipart/encrypted ar protocol=application/pgp-encrypted.Aizzīmogots
pgp-inlineBruņa pašā saturā. Vienmēr nolasīta tikai no satura teksta, lai atbilde, kas vienkārši citē bruņotu bloku, netiktu par tādu noturēta.Aizzīmogots
smime-encryptedS/MIME pkcs7-mime daļa ar smime-type=enveloped-data vai tāda, kurai smime-type nav vispār.Aizzīmogots
pgp-signedAtdalīts PGP paraksts blakus ziņojumam: multipart/signed ar protocol=application/pgp-signature.Lasāms
smime-signedAtdalīts S/MIME paraksts: pkcs7-signature protokols vai smime-type=signed-data.Lasāms

Parakstīts nav tas pats, kas aizzīmogots, un zarošanās pēc encryption esamības, nevis pēc format, saprot to tieši otrādi. Paraksts ir apgalvojums par to, kas ziņojumu uzrakstīja, nevis apvalks ap to: parakstīta ziņojuma saturs ir atklāts un lasās kā jebkurš cits. Uzskatiet pgp-mime, pgp-inline un smime-encrypted par nelasāmiem, bet abus parakstītos formātus par parastu pastu.

Kas mainās aizzīmogotā ziņojumā

Kaut ko maina tikai trīs aizzīmogotie formāti, un izmaiņa notiek uzņemšanas brīdī, nevis šajā atbildē. Viss, kas būtu lasījis saturu, atkāpjas, nevis lasa šifrtekstu un ziņo rezultātu, ko tas nemaz nevarētu iegūt:

  • Meklēšana pa saturu. Ziņojums tiek indeksēts ar tukšu satura fragmentu, tāpēc tas joprojām ir atrodams pēc sūtītāja, tēmas, adreses un etiķetes, bet ne pēc kā tajā iekšā.
  • Pikšķerēšanas vērtētāja satura caurlaide. Spriedums joprojām pienāk un pasaka, ko tas nevarēja izdarīt: risk.signals nes body-encrypted, un risk.aiChecked ir nepatiess.
  • AI autorības pārbaude, kas labāk atsakās, nekā min: aiWritten.level ir unknown, un aiWritten.skipped ir encrypted.
  • Satura nosacījumi kārtulās. Aploksnes un galveņu nosacījumi darbojas tieši tāpat kā agrāk; kārtula, kas jautāja par saturu, tiek fiksēta kā neizvērtēta, nevis ieskaitīta kā nesakritība, jo "nesakrita" un "nevarēja izlasīt" ir dažādas atbildes.
  • Kalendāra ielūgumu imports. Ielūgums ir šifrtekstā, un notikuma būvēšana no aploksnes ieliktu nepareizu ierakstu īstā kalendārā.
  • Sarunu kopsavilkumi un iegultnes visai sarunai. Pietiek ar vienu aizzīmogotu atbildi. Kopsavilkums ir modeļa lasījums par atklāto tekstu, saglabāts kā atklāta teksta metadati, un tā ir vienīgā vieta šajā konveijerā, kur saturs noplūstu krātuvē, ko neviens par saturu neuzskata.

Viss, kam saturs nav vajadzīgs, paliek neskarts:

  • DMARC, DKIM un SPF. Tie tiek nolasīti no Authentication-Results, ko šifrteksts neslēpj, tāpēc šifrēts ziņojums joprojām saņem īstu autentifikācijas spriedumu, nevis nekādu.
  • Sarunu veidošana, mēstuļu nošķiršana un bloķēšanas saraksts: viss ir darbs ar aploksni un galvenēm.
  • Pielikumi. Šifrteksta daļa paliek attachments, nosaukta encrypted-message.asc, kad tā pienāk bez nosaukuma, un lejupielādējas caur zemāk aprakstīto galapunktu. Tieši to paņem un pārlūkā atšifrē pašas tīmekļa lietotnes lasītājs; API klientam, kas netur atslēgu, šī lejupielāde paliek vienīgais veids, kā šo pastu izlasīt. Atveriet to klientā, kuram atslēga ir.
  • Parakstīts ziņojums neko no tā nezaudē. Katra augšminētā pārbaude tam turpina darboties, un nekas netiek aizturēts, un tieši tāpēc aizzīmogoto saraksts ir trīs formātu, nevis piecu formātu saraksts.

encryption trūkums nav apgalvojums par atklātu tekstu. Tas nozīmē, ka neviens nav skatījies: ziņojums ir vecāks par detektēšanu vai nonācis pastkastē pa ceļu, kas detektoru nepalaiž. Nekas to neaizpilda ar atpakaļejošu datumu, tāpēc lauku, kas saka "mēs nepārbaudījām", nekad nedrīkst lasīt kā "mēs pārbaudījām un neatradām".

Atzīmēšana un etiķetēšana

PATCH /threads/{id} pieņem read, addLabelIds un removeLabelIds. Lasīšanas stāvoklis ir etiķete katrā aizmugursistēmā, ko šis produkts atbalsta, tāpēc read iestatīšana un etiķešu pārvietošana vienā izsaukumā notur secību deterministisku.

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

TRASH un SNOOZED šeit tiek atteikti ar label_not_directly_settable. Nevienu no šiem stāvokļiem nenes tikai tā etiķete (izmešana miskastē notīra arī mapju etiķetes, un atlikšanai blakus jāglabā pamošanās laiks), tāpēc to uzstādīšana ar roku atstāj sarunu stāvoklī, kādu lietotne nekad nerada un no kura nespēj atgūties. Izmantojiet zemāk minētos galapunktus.

Miskaste un atlikšana

GalapunktsKo dara
POST /threads/{id}/trashPārvieto uz miskasti, vienlaikus notīrot INBOX, SPAM, SNOOZED un ARCHIVE.
POST /threads/{id}/snoozeĶermenis { "wakeAt": "…" }. Paslēpj to un ieplāno tā atgriešanos.
POST /threads/{id}/unsnoozeAtgriež to tūlīt un atceļ ieplānoto atgriešanos.

Atlikšana raksta divas lietas: etiķeti, kas sarunu paslēpj, un ierakstu, kas to atgriež. Viena izdarīšana bez otras ir tieši tas iemesls, kāpēc šie ir galapunkti, nevis etiķešu labojumi.

Pielikumi

GET /threads/{id}/messages/{messageId}/attachments atgriež katru pielikumu ar filename, contentType, size un content kā base64. content ir tukša virkne tur, kur saglabātos baitus nevarēja atrast, tāpēc pirms dekodēšanas pārbaudiet tā garumu.

Šifrēta aploksne šeit nav visa. Šifrteksts ir (tas ir ziņojums, un tā lejupielāde ir vienīgais veids, kā API klients šo pastu izlasa), bet PGP/MIME versijas daļa un jebkurš atdalīts paraksts tiek turēti ārpus saraksta, jo tie atveidojās kā atkritumu pielikumi un izsaucējs ar tiem neko nevar izdarīt. Abi patur savus id encryption.parts, kas korelē abus skatus; šis galapunkts tos neatgriež.