दस्तावेज़ पर जाएँ
CLI

स्क्रिप्टिंग

JSON आउटपुट, स्ट्रीम, एग्ज़िट कोड, एनवायरनमेंट वेरिएबल, और बिना निगरानी या CI में चलाना।

JSON आउटपुट

--json के साथ stdout में सिर्फ़ JSON होता है, दो स्पेस की इंडेंटेशन के साथ, नोट और प्रगति stderr पर रहते हैं, और कुछ भी पूछा नहीं जाता। सूची { items, hasMore, nextCursor } प्रिंट करती है, API ऑब्जेक्ट वैसा ही प्रिंट होता है जैसा API ने लौटाया, और हाथ से लिखी कमांड वह ऑब्जेक्ट प्रिंट करती है जिसका वर्णन उसकी मदद में है।

टर्मिनल
openemail whoami --json | jq -r .workspaceIdopenemail emails list --status failed --json | jq -r ".items[].id"

एरर stderr पर JSON की एक लाइन के रूप में जाता है, और एग्ज़िट कोड वही होता है जो किसी व्यक्ति को मिलता:

stderr
{"error":{"type":"permission_error","code":"insufficient_scope","message":"This API key does not have the domains:write scope.","hint":"The credential is missing a scope this call needs. Use a key that has it, or sign in again with openemail login.","next":null,"status":403,"requestId":"req_7Hc2kQ","param":null,"docUrl":"https://openemail.uk/docs/api/errors#insufficient_scope","exitCode":4}}
फ़ील्डइसमें क्या है
typeAPI एरर टाइप, या CLI के अंदर की विफलता के लिए cli_error, network_error या internal_error
codeएक स्थिर कोड, जैसे insufficient_scope, not_signed_in या unknown_flag
messageक्या ग़लत हुआ, एक वाक्य में
hint, nextक्या आज़माएँ, और आगे कौन-सी कमांड चलाएँ, या null
status, requestId, param, docUrlAPI से, जब एरर वहीं से आया हो, वरना null
exitCodeवह एग्ज़िट कोड जिसके साथ प्रोसेस ख़त्म होता है

स्ट्रीम

कुछ आउटपुट JSON ऑब्जेक्ट की स्ट्रीम होता है, हर लाइन में एक, ताकि पाइपलाइन हर आइटम को आते ही संभाल सके:

  • रिसोर्स सूची --all के साथ जब stdout टर्मिनल न हो, या --ndjson के साथ। --max <n> उतने आइटम के बाद रुकता है।
  • openemail temp watch --json, हर नए संदेश के लिए एक लाइन।
  • openemail mcp serve, दोनों दिशाओं में हर लाइन में एक JSON-RPC संदेश।
टर्मिनल
openemail contacts list --all > contacts.ndjsonopenemail emails list --status failed --all --max 500 | jq -r .id

एग्ज़िट कोड

कोडअर्थ
0हो गया
1अप्रत्याशित विफलता, सर्वर एरर, या असफल भेजना
2उपयोग की ग़लती: ग़लत आर्ग्युमेंट, अनजानी कमांड या फ़्लैग, ऐसी वैल्यू या पुष्टि जो पूछी न जा सकी, या ऐसा ओरिजिन या पाथ जिस पर CLI क्रेडेंशियल नहीं भेजेगी
3साइन इन नहीं है, या साइन-इन अस्वीकार हुआ, उसकी अवधि ख़त्म हो गई या कमांड चलते समय साइन आउट हो गया
4अनुमति नहीं: कोई स्कोप या अनुमति कम है, ऐसा सत्यापन कोड जो पूछा न जा सका या रुका हुआ है, या API कुंजी वहाँ जहाँ ब्राउज़र साइन-इन चाहिए
5नहीं मिला
6मौजूदा स्थिति से टकराव
7इनपुट अमान्य था
8रेट लिमिट लगी, या AI कोटा ख़त्म हो गया
9नेटवर्क विफल हुआ या टाइम आउट हो गया
10रद्द: आपने कोई पुष्टि या प्रॉम्प्ट अस्वीकार किया
130, 143Ctrl+C से, या SIGTERM से रोका गया

एनवायरनमेंट वेरिएबल

वेरिएबलयह क्या करता है
OPENEMAIL_API_KEYकिसी भी सहेजी प्रोफ़ाइल की जगह इस्तेमाल होने वाली API कुंजी
OPENEMAIL_PROFILEइस्तेमाल होने वाली सहेजी प्रोफ़ाइल
OPENEMAIL_BASE_URLOPENEMAIL_API_KEY, --api-key और कोई क्रेडेंशियल न भेजने वाली कमांड के लिए API ओरिजिन। सहेजा गया साइन-इन सिर्फ़ उसी API पर जाता है जिसमें उसने साइन इन किया
OPENEMAIL_APP_URLवेब ऐप ओरिजिन, साइन-इन, open और डॉक्यूमेंटेशन लिंक के लिए
OPENEMAIL_CONFIG_DIRप्रोफ़ाइल और इनबॉक्स टोकन कहाँ रखे जाते हैं, सेट न हो तो ~/.openemail
OPENEMAIL_NO_UPDATE_CHECKnpm पर कभी नई रिलीज़ न देखें। OPENEMAIL_DISABLE_UPDATE_NOTICE भी यही करता है
NO_COLOR, FORCE_COLOR=0कोई रंग नहीं
CIकभी प्रॉम्प्ट न करें, कभी ब्राउज़र न खोलें, कभी अपडेट न देखें। ज़्यादातर CI सेवाएँ इसके बिना भी पहचानी जाती हैं
VISUAL, EDITORवह एडिटर जो send और reply बॉडी के लिए खोलते हैं

बिना निगरानी के चलाना

CLI सिर्फ़ तब प्रॉम्प्ट करती है जब stdin और stdout दोनों टर्मिनल हों, और --json, --no-input या CI में से कोई लागू न हो। वरना:

  • कोई ज़रूरी वैल्यू न हो तो एग्ज़िट कोड 2 के साथ रुकता है और देने वाला फ़्लैग बताता है।
  • विनाशकारी कमांड Refusing to run unattended. Pass --yes to confirm. और एग्ज़िट कोड 2 के साथ रुकती है, जब तक आप --yes न दें।
  • जिस बदलाव को सत्यापन कोड चाहिए वह एग्ज़िट कोड 4 के साथ रुकता है, क्योंकि उसे कोई टाइप नहीं कर सकता। API कुंजी इस्तेमाल करें, या पहले openemail verify चलाएँ।

CI में

जॉब को सिर्फ़ ज़रूरी स्कोप वाली API कुंजी दें, उसे किसी सीक्रेट में रखें, और OPENEMAIL_API_KEY को उसे ले जाने दें। कुछ सहेजा नहीं जाता, कुछ पूछा नहीं जाता, और कोई अपडेट जाँच नहीं चलती।

.github/workflows/deploy.yml
- name: Tell the team  env:    OPENEMAIL_API_KEY: ${{ secrets.OPENEMAIL_API_KEY }}  run: |    npx -y @openemail/[email protected] send \      --from [email protected] \      --to [email protected] \      --subject "Deployed ${{ github.sha }}" \      --text "Build ${{ github.run_number }} is live." \      --idempotency-key "deploy-${{ github.run_id }}"
साइन-अप ईमेल का इंतज़ार करें
ADDRESS=$(npx -y @openemail/[email protected] temp new --ttl 15)./signup-test.sh "$ADDRESS"npx -y @openemail/[email protected] temp watch --first --json | jq -r .snippetnpx -y @openemail/[email protected] temp delete --yes
असफल भेजने पर विफल हों
failed=$(openemail emails list --status failed --json | jq ".items | length")test "$failed" -eq 0

जिस भेजने को पाइपलाइन दोबारा आज़मा सकती है, उस पर --idempotency-key दें, और उसे उस चीज़ से बनाएँ जिसने भेजना ज़रूरी बनाया, जैसे रन ID। तब चरण दोबारा चलाने पर दो बार मेल भेजने के बजाय पहला भेजा हुआ लौटता है।

आपका इनबॉक्स,
आपकी अपनी शर्तों पर।

व्यवसायों, AI, एजेंट और निजी ईमेल के लिए ईमेल इन्फ़्रास्ट्रक्चर। स्केल, निजता और नियंत्रण के लिए बना। वह सब जो ईमेल में पहले दिन से होना चाहिए था।

OpenEmail

व्यवसायों, AI, एजेंट और निजी ईमेल के लिए ईमेल इन्फ़्रास्ट्रक्चर। स्केल, निजता और नियंत्रण के लिए बना। वह सब जो ईमेल में पहले दिन से होना चाहिए था।

© 2026 OpenEmail. सर्वाधिकार सुरक्षित।