कुंजियाँ, सदस्य और भूमिकाएँ
API कुंजियाँ प्रबंधित करें और पढ़ें कि उन्होंने क्या किया, सदस्यों को आमंत्रित और प्रबंधित करें, भूमिकाएँ लिखें, जो क्रेडेंशियल आप इस्तेमाल कर रहे हैं उसे जाँचें, और डिस्पोज़ेबल इनबॉक्स बनाएँ।
अवलोकन
ये कमांड तय करती हैं कि कौन और क्या वर्कस्पेस तक पहुँच सकता है। openemail keys API कुंजियाँ प्रबंधित करता है और पढ़ता है कि हर एक ने क्या किया, openemail members वर्कस्पेस के लोगों और उनके आमंत्रणों को प्रबंधित करता है, और openemail roles तय करता है कि कोई सदस्य या कुंजी क्या कर सकती है। openemail me उस कुंजी या साइन-इन का ब्योरा देता है जिससे आप कॉल कर रहे हैं, और openemail languages उन भाषाओं की सूची देता है जिन्हें अनुवाद वाला भेजना स्वीकार करता है। डिस्पोज़ेबल इनबॉक्स को साइन-इन की बिल्कुल ज़रूरत नहीं: openemail temp रोज़ इस्तेमाल का तरीका है, और openemail temp-mail उसके पीछे के API की हर कॉल है। openemail api किसी भी ऐसे एंडपॉइंट तक पहुँचता है जहाँ दूसरी कमांड नहीं पहुँचतीं।
- कुंजी कमांड कुंजी ID लेती है, यानी
oe_live_के बाद के 24 hex अक्षर, जैसाkeys listदिखाता है। सदस्य कमांड अकाउंट ID लेती है,members listमेंuserId, कभी ईमेल पता नहीं। भूमिका कमांडroles listसे मिलीrole_ID लेती है, क्योंकि भूमिकाओं को नाम से नहीं ढूँढा जा सकता। - नेमस्पेस
key,member,role,languageऔरtempMailसे भी चलते हैं। सामान्य वर्ब उपनाम काम करते हैं, जैसेls,show,new,editऔरrm।membersमें, जिसके वर्बaddऔरremoveहैं,newऔरcreateसेaddचलता है, औरrm,delऔरdeleteसेremove। openemail <command> --helpहर आर्ग्युमेंट और फ़्लैग की सूची देता है, उसके टाइप, कॉल के ज़रूरी स्कोप, मेथड और पाथ, और जो लौटता है उसके साथ। वही पेज डेटा के रूप में पाने के लिए--jsonजोड़ें।
हर कमांड
| कमांड | यह क्या करता है |
|---|---|
| openemail me get | जिस API कुंजी या ब्राउज़र साइन-इन से आप कॉल कर रहे हैं, उसका ब्योरा दें: उसके स्कोप, उसकी सीमा तय करने वाली भूमिका, उसका वर्कस्पेस और वह किन पतों से भेज सकता है। किसी स्कोप की ज़रूरत नहीं |
| openemail me ping | हेल्थ चेक के लिए जाँचें कि क्रेडेंशियल से प्रमाणीकरण होता है। किसी स्कोप की ज़रूरत नहीं |
| openemail me rotate | जिस API कुंजी से आप कॉल कर रहे हैं, उसे नया सीक्रेट दें, जो एक बार दिखता है। पुष्टि माँगती है |
| openemail keys list | वर्कस्पेस की API कुंजियों की सूची, नई पहले, स्थिति, स्कोप, भूमिका, भेजने के दायरे और आख़िरी इस्तेमाल के साथ। सीक्रेट कभी नहीं |
| openemail keys get <id> | एक कुंजी पढ़ें, उसके सीक्रेट के बिना |
| openemail keys create --name <value> | एक कुंजी बनाएँ और उसका सीक्रेट एक बार token में पाएँ |
| openemail keys update <id> | कुंजी का नाम बदलें, उसके स्कोप या भेजने का दायरा बदलें, या --no-enabled और --enabled से उसे बंद और चालू करें |
| openemail keys delete <id> | रद्द की गई कुंजी को सूची से हटाएँ, उसका इतिहास रखते हुए। पुष्टि माँगती है |
| openemail keys rotate <id> | कुंजी को नया सीक्रेट दें, जो एक बार दिखता है, और पुराने को तुरंत बंद करें। पुष्टि माँगती है |
| openemail keys revoke <id> | कुंजी को हमेशा के लिए रद्द करें, वैकल्पिक --reason के साथ। पुष्टि माँगती है |
| openemail keys list-requests <id> | एक कुंजी का अनुरोध लॉग पढ़ें: मेथड, पाथ, स्थिति, एरर कोड, अवधि, IP और यूज़र एजेंट |
| openemail keys list-activity <id> | पढ़ें कि एक कुंजी के साथ क्या हुआ: बनाई गई, बदली गई, रोटेट हुई, बंद और चालू हुई, रद्द हुई, हटाई गई, और हर अस्वीकार हुई कॉल |
| openemail keys list-workspace-requests | हर उस कुंजी का अनुरोध लॉग पढ़ें जो आपको दिखती है, या --key-ids में बताई कुंजियों का |
| openemail keys list-workspace-activity | पढ़ें कि हर उस कुंजी के साथ क्या हुआ जो आपको दिखती है, या --key-ids में बताई कुंजियों के साथ |
| openemail roles list | वर्कस्पेस की भूमिकाओं की सूची, पहले से बनी भूमिकाएँ पहले, हर एक कितने सदस्यों और कुंजियों के पास है, इसके साथ |
| openemail roles get <id> | एक भूमिका पढ़ें, उसकी अनुमतियों और लाइव इस्तेमाल की गिनती के साथ |
| openemail roles create --name <value> --permissions <a,b> | एक कस्टम भूमिका बनाएँ, वैकल्पिक --description के साथ |
| openemail roles update <id> | भूमिका का नाम बदलें, उसका विवरण बदलें, या उसकी पूरी अनुमति सूची बदलें |
| openemail roles delete <id> | भूमिका हटाएँ और जिसके पास वह है उसे --reassign-to वाली भूमिका में ले जाएँ। पुष्टि माँगती है |
| openemail roles list-permissions | अनुमतियों की पूरी शब्दावली दिखाएँ, हर एक के लेबल, समूह और क्या कोई कुंजी उसे रख सकती है, इसके साथ |
| openemail members list | पहुँच रखने वाले हर व्यक्ति की सूची, मालिक पहले, उनकी भूमिका, अनुमतियों और हर एक जिन पतों और डोमेन को इस्तेमाल कर सकता है, उनके साथ |
| openemail members get <user-id> | अकाउंट ID से एक सदस्य पढ़ें |
| openemail members add --email <value> --role-id <value> | किसी को एक भूमिका के साथ आमंत्रित करें, और --address-ids, --domain-ids और --access से पतों या पूरे डोमेन के साथ |
| openemail members update <user-id> --role-id <value> | सदस्य को दूसरी भूमिका में ले जाएँ। उनके पते और डोमेन के अधिकार वैसे ही रहते हैं |
| openemail members remove <user-id> | किसी को वर्कस्पेस से निकालें, उनके हर पते के अधिकार के साथ। पुष्टि माँगती है |
| openemail members grant-address <user-id> --address-id <value> | सदस्य को एक पता दें, या उस पर उनका --access बदलें |
| openemail members revoke-address <user-id> <address-id> | सदस्य से एक पता वापस लें। पुष्टि माँगती है |
| openemail members list-invitations | वे आमंत्रण दिखाएँ जिन्हें अभी किसी ने स्वीकार नहीं किया, समय-सीमा ख़त्म हुए भी |
| openemail members revoke-invitation <invitation-id> | आमंत्रण वापस लें, ताकि उसका लिंक काम करना बंद कर दे। पुष्टि माँगती है |
| openemail members resend-invitation <invitation-id> | आमंत्रण फिर से भेजें, नए लिंक और 14 और दिनों के साथ |
| openemail languages list | अनुवाद वाले भेजने में स्वीकार होने वाली हर भाषा की सूची, उसी क्रम में जिसमें चुनने वाला मेन्यू उन्हें दिखाए। किसी स्कोप की ज़रूरत नहीं |
| openemail temp new [--name <local-part>] [--domain <domain>] [--ttl <minutes>] | एक डिस्पोज़ेबल इनबॉक्स बनाएँ और सिर्फ़ उसका पता प्रिंट करें। साइन-इन की ज़रूरत नहीं |
| openemail temp list | इस CLI के बनाए डिस्पोज़ेबल इनबॉक्स की सूची, नेटवर्क पढ़े बिना |
| openemail temp read [inbox] [message-id] | किसी इनबॉक्स की मेल की सूची दें, या एक संदेश पढ़ने लायक टेक्स्ट के रूप में प्रिंट करें |
| openemail temp watch [inbox] [--first] | हर 3 सेकंड में जाँचते हुए, हर नया संदेश आते ही प्रिंट करें |
| openemail temp delete [inbox] [--yes] | इनबॉक्स और उसकी मेल अभी हटाएँ, और उसका टोकन भूल जाएँ। पुष्टि माँगती है |
| openemail temp-mail list-domains | वे डोमेन दिखाएँ जिन पर डिस्पोज़ेबल इनबॉक्स बनाया जा सकता है। किसी क्रेडेंशियल की ज़रूरत नहीं |
| openemail temp-mail create | एक डिस्पोज़ेबल इनबॉक्स और उसका इनबॉक्स टोकन बनाएँ, जिसे CLI सहेजती है। किसी क्रेडेंशियल की ज़रूरत नहीं |
| openemail temp-mail get <inbox-id> | किसी इनबॉक्स की समय-सीमा, बचे हुए विस्तार और संदेशों की गिनती पढ़ें |
| openemail temp-mail extend <inbox-id> | समय-सीमा को एक घंटे तक और आगे बढ़ाएँ, इनबॉक्स बनने के 24 घंटे के भीतर |
| openemail temp-mail delete <inbox-id> | इनबॉक्स और उसकी मेल अभी नष्ट करें। पुष्टि माँगती है |
| openemail temp-mail list-messages <inbox-id> | संदेशों का एक पेज दिखाएँ, नए पहले, हर एक एक छोटे सादे टेक्स्ट अंश के साथ |
| openemail temp-mail get-message <inbox-id> <message-id> | एक संदेश उसकी सहेजी गई बॉडी के साथ पढ़ें, और उसे देखा हुआ चिह्नित करें |
| openemail temp-mail delete-message <inbox-id> <message-id> | एक संदेश उसकी बॉडी और अटैचमेंट के साथ हटाएँ। पुष्टि माँगती है |
| openemail temp-mail list-attachments <inbox-id> <message-id> | किसी संदेश के अटैचमेंट पढ़ें, उनके बाइट base64 के रूप में |
| openemail api <method> <path> | अपने साइन-इन, उसके सत्यापन कोड और उसकी पुष्टियों के साथ कोई भी REST एंडपॉइंट कॉल करें |
हर फ़्लैग उसकी कमांड की मदद में है, उदाहरण के लिए openemail keys create --help, openemail members add --help या openemail temp new --help।
API कुंजियाँ
कुंजियाँ पढ़ने के लिए keys:read चाहिए, और हर बदलाव के लिए keys:manage। ब्राउज़र साइन-इन को कभी keys:write या keys:manage नहीं मिलता, इसलिए कुंजियाँ बनाने, बदलने, रोटेट करने, रद्द करने और हटाने के लिए keys:manage वाली API कुंजी या वेब ऐप (openemail open api-keys) चाहिए। keys:read वाला ब्राउज़र साइन-इन सिर्फ़ वर्कस्पेस के मालिक के लिए कुंजियाँ पढ़ता है, और सदस्य का साइन-इन 403 owner_only के साथ अस्वीकार होता है।
keys create,keys rotateऔरme rotateकुंजी का सीक्रेटtokenमें एक बार प्रिंट करती हैं, और फिर CLI चेतावनी देती है कि यह फिर कभी नहीं दिखेगा। हर पढ़ने में इसकी जगहmaskedKeyदिखता है।- छोड़ दिए जाएँ तो नई कुंजी के पास सिर्फ़
emails:sendहोता है, और वह बनाने वाली कुंजी की भूमिका, भेजने का दायरा और समय-सीमा लेती है।--domain-allowlistऔर--address-allowlistतय करते हैं कि वह किन पतों से भेज सकती है, और--expires-in-minutes5 से 5,256,000 लेता है, यानी दस साल। - कोई कुंजी अपने से ज़्यादा दायरे वाली कुंजी न कभी बनाती है न उस तक पहुँचती है। स्कोप, भूमिका, समय-सीमा, मोड और भेजने का दायरा, सभी कॉल करने वाली कुंजी के भीतर होने चाहिए, वरना कॉल 403
beyond_caller_authorityके साथ अस्वीकार होती है, औरparamबताता है कि क्या ज़्यादा चौड़ा था। कुछ डोमेन या पतों तक सीमित कुंजी सिर्फ़ अपने भेजने के दायरे के भीतर की कुंजियाँ देखती है, और बाकी कोई भी 404 है। keys updateवही बदलती है जो आप भेजते हैं:--scopes,--address-allowlistऔर--domain-allowlistहर एक पूरी नई सूची लेता है, और जो फ़्लैग आप छोड़ देते हैं वह जैसा था वैसा रहता है।--no-enabledकुंजी को बंद करता है, जिससे उसके साथ हर कॉलinactive_api_keyके साथ अस्वीकार होती है, और--enabledउसे ठीक पहले जैसा लौटा देता है। यह कुंजी को ऐसे रोकता है जिसे पलटा जा सके।keys revokeहमेशा के लिए है: कुंजी को फिर कभी चालू, रोटेट या बदला नहीं जा सकता।keys deleteसिर्फ़ रद्द की गई कुंजी हटाती है, और बाकी कोई भी 409not_revokedके साथ अस्वीकार होती है। हटाई गई कुंजी का अनुरोध लॉग और गतिविधि "हटाई गई कुंजी" के नाम से बने रहते हैं।keys rotateमें कोई साझा अवधि नहीं होती, इसलिए नया सीक्रेट लौटते ही पुराना काम करना बंद कर देता है। जब यह वही कुंजी हो जिसे आपकी सहेजी प्रोफ़ाइल इस्तेमाल करती है, तो CLI नया सीक्रेट उस प्रोफ़ाइल में सहेजती है, ताकि वह काम करती रहे।OPENEMAIL_API_KEYया--api-keyसे मिली कुंजी सहेजी नहीं जा सकती, इसलिए CLI आपसे कहती है कि नया टोकन वहीं रखें जहाँ पुरानी कुंजी रखी थी।
अनुरोध लॉग किसी कुंजी की हर कॉल दर्ज करता है: मेथड, पाथ, स्थिति, एरर कोड, अवधि, IP और यूज़र एजेंट, कभी बॉडी या क्वेरी स्ट्रिंग नहीं। कुछ भी हटाया नहीं जाता, इसलिए यह कुंजी की पहली कॉल तक जाता है, और ब्राउज़र साइन-इन से की गई कॉल इसमें नहीं होतीं। गतिविधि लॉग कुंजी के हर बदलाव को दर्ज करता है, और हर उस कॉल को जिसने कुंजी दिखाई और अस्वीकार हुई, auth_failed के रूप में, और actor में यह कि हर बदलाव किसने किया।
list-requestsऔरlist-activityएक कुंजी पढ़ती हैं।list-workspace-requestsऔरlist-workspace-activityहर वह कुंजी पढ़ती हैं जो आपको दिखती है, या--key-idsमें बताई 50 तक कुंजियाँ, हटाई गई कुंजियों सहित।--sinceऔर--untilएक अवधि रखते हैं और2026-09-01T00:00:00Zजैसा ISO 8601 समय लेते हैं।--failed-onlyसिर्फ़ वे कॉल रखता है जिनका जवाब 400 या उससे ऊपर की स्थिति के साथ आया।
आपका क्रेडेंशियल, और भाषाएँ
कोई कॉल अस्वीकार होने पर सबसे पहले openemail me get चलाएँ। इसे किसी स्कोप की ज़रूरत नहीं, इसलिए कोई भी मान्य कुंजी या साइन-इन अपना ब्योरा दे सकता है।
scopesवह है जो क्रेडेंशियल अभी कर सकता है: जिन स्कोप के साथ वह बना था, उन्हें उस भूमिका से छाँटा गया जिसके तहत वह जारी हुआ, और यह हर अनुरोध पर तय होता है।grantedScopesवह है जिसके साथ वह बना था, औरroleIdभूमिका का नाम बताता है। जो स्कोपgrantedScopesमें है परscopesमें नहीं, उसे भूमिका ने हटाया है। स्कोप रखती दिखने वाली कुंजी पर 403insufficient_scopeकी यही आम वजह है, और इसका हल दूसरी कुंजी बनाना नहीं, भूमिका बदलना है।domainAllowlistऔरaddressAllowlistबताते हैं कि यह किन पतों से भेज सकता है। दोनों null का मतलब है वर्कस्पेस का कोई भी पता।- ब्राउज़र साइन-इन के साथ यह साइन-इन का ब्योरा देता है:
objectoauth_tokenहोता है,clientIdइस CLI के कनेक्टेड ऐप का नाम बताता है, औरexpiresAtआपकी मंज़ूरी ख़त्म होने का समय है, या null जब वह कभी ख़त्म न हो। me pingवही स्कोप ब्योरा देते हुएok: trueजवाब देता है, पर अनुमति सूचियों के बिना, जो हेल्थ चेक के लिए ठीक है। रद्द, समय-सीमा ख़त्म, बंद या ग़लत टाइप की गई कुंजी 401 और एग्ज़िट कोड3के साथ विफल होती है।me rotateउस कुंजी को नया सीक्रेट देता है जिससे आप कॉल कर रहे हैं। इसेkeys:writeचाहिए, जो ब्राउज़र साइन-इन के पास कभी नहीं होता, इसलिए इसे API कुंजी चाहिए। कुंजी की बाकी हर चीज़ वैसी ही रहती है, पुराना सीक्रेट तुरंत काम करना बंद कर देता है, और सहेजी प्रोफ़ाइल को नया मिल जाता है, जैसेkeys rotateमें। जवाब खो जाने पर कुंजी ऐसे सीक्रेट के साथ रह सकती है जिसे किसी ने नहीं देखा, और तब उसे वेब ऐप से नया सीक्रेट चाहिए।openemail whoamiवही जवाब लोगों के पढ़ने लायक रूप में दिखाता है।
openemail languages list पूरी भाषा तालिका एक ही जवाब में प्रिंट करता है, लगभग दो सौ पंक्तियाँ, हर भाषा के कोड, अंग्रेज़ी नाम, अपने नाम, झंडे और क्या वह दाएँ से बाएँ लिखी जाती है, इसके साथ। अनुवाद वाले भेजने के लक्ष्य के रूप में कोड, अंग्रेज़ी नाम या अपना नाम, सभी काम करते हैं। इसे साइन-इन चाहिए पर कोई स्कोप नहीं। openemail ai languages वही तालिका --search फ़्लैग के साथ प्रिंट करता है, और साइन आउट होने पर CLI के साथ आई तालिका प्रिंट करता है।
सदस्य और भूमिकाएँ
सदस्य के पास दो चीज़ें होती हैं जो कभी मिलाई नहीं जातीं। उनकी भूमिका बताती है कि वे क्या कर सकते हैं, और उनके पते और डोमेन के अधिकार बताते हैं कि किस मेल के साथ, हर अधिकार की अपनी पहुँच के साथ: member पढ़ता और भेजता है, और viewer सिर्फ़ पढ़ता है। भेजने के लिए दोनों चाहिए, इसलिए emails:send वाली भूमिका और किसी पते पर viewer अधिकार के साथ भी उस पते से भेजा नहीं जा सकता। पूरा डोमेन उस पर हर पते को कवर करता है, बाद में बने पतों को भी।
members listवर्कस्पेस के मालिक को सबसे पहले रखती है,isOwnerके निशान के साथ, इसलिए सीटें गिनते समय वह पंक्ति छोड़ दें। मालिक के पास हर अनुमति होती है और उसे न आमंत्रित किया जा सकता है, न बदला, न हटाया, और वर्कस्पेस में पहले से मौजूद किसी को फिर से आमंत्रित नहीं किया जा सकता: दोनों 422member_is_ownerहैं।- जिन लोगों के पास पते के अधिकार हैं पर जिन्हें कभी भूमिका नहीं दी गई, वे
implied: trueके साथ लौटते हैं, और उनकी भूमिका उनके अधिकारों से अनुमानित होती है।members updateउन्हें असली भूमिका देती है। members addआमंत्रण भेजती है, उस व्यक्ति को भी जिसका पहले से अकाउंट है। जब तक वे स्वीकार न करें कुछ नहीं दिया जाता, और फिर ठीक वही भूमिका, पते और डोमेन जो आमंत्रण में हैं। दस मिनट के भीतर उसी पते को फिर आमंत्रित करना 409invitation_too_soonहै, और उसके बाद यह दूसरा भेजने के बजाय इंतज़ार कर रहे आमंत्रण को ताज़ा करता है।resend-invitation14 और दिनों के लिए मान्य नया लिंक भेजती है और पुराने को रिटायर कर देती है, जिससे समय-सीमा ख़त्म हुआ आमंत्रण भी नया हो जाता है।revoke-invitationआमंत्रण वापस लेती है, और पहले से स्वीकार हुआ आमंत्रण 409invitation_acceptedहै, इसलिए इसके बजाय सदस्य को हटाएँ।members updateसिर्फ़ भूमिका बदलती है, और कुछ नहीं।grant-addressएक पता देती है या उस पर पहुँच बदलती है, इसलिए दूसरे--accessके साथ फिर चलाने पर दूसरा अधिकार नहीं जुड़ता, वही अधिकार बदल जाता है।revoke-addressएक पता वापस लेती है और बाकी छोड़ देती है। अनुमानित सदस्य का आख़िरी अधिकार रद्द करने पर वह वर्कस्पेस से हट जाता है।members removeकिसी की वर्कस्पेस तक पहुँच, उनकी सदस्यता और हर अधिकार ख़त्म करती है, औरaddressesRevokedमें बताती है कि पते के कितने अधिकार गए। उनका अकाउंट और उनकी भेजी मेल अछूते रहते हैं।
भूमिका उसके तहत जारी API कुंजियों की ऊपरी सीमा भी है। कुंजी क्या कर सकती है, यह उसके अपने स्कोप हैं जिन्हें उसकी भूमिका की अनुमतियों से छाँटा गया है, और यह हर अनुरोध पर तय होता है।
roles listपहले से बनी भूमिकाएँ सबसे पहले दिखाती है, Owner, Admin, Member, Viewer, Developer और Billing के क्रम में, फिर कस्टम भूमिकाएँ नाम से। एक वर्कस्पेस में 24 तक कस्टम भूमिकाएँ होती हैं, और उसके बादroles create422role_limit_reachedहै।- भूमिका वे अनुमतियाँ भी सहेजती है जो उसकी अनुमतियों में निहित हैं, इसलिए
templates:writetemplates:readभी सहेजता है, औरroles:writeसाथ मेंroles:readऔरmembers:readलाता है। सूची मान न लें, जवाब से वापस पढ़ें। roles update --permissionsपूरी सूची बदल देती है, इसलिए भूमिका पढ़ें, सूची बदलें और पूरी भेजें।--description nullनोट साफ़ करता है। बदलाव उस भूमिका वाले हर सदस्य और कुंजी की अगली कॉल पर लागू हो जाता है।- Owner को छोड़कर हर भूमिका का नाम बदला, उसे फिर से लिखा और हटाया जा सकता है, पहले से बनी भूमिकाएँ भी, और हटाई गई पहले से बनी भूमिका वापस नहीं आती। मालिक की भूमिका बदलाव पर 409
role_immutableऔर हटाने पर 409role_undeletableलौटाती है। - जब तक किसी सदस्य, API कुंजी या इंतज़ार कर रहे आमंत्रण के पास कोई भूमिका है,
roles deleteको उन्हें संभालने वाली भूमिका के साथ--reassign-toचाहिए, वरना यह 409role_in_useके साथ अस्वीकार होती है। रद्द कुंजियाँ भी अपनी भूमिका की ओर इशारा करती रहती हैं, इसलिए जिस भूमिका कीapiKeysगिनती 0 है उसे भी इसकी ज़रूरत पड़ सकती है। जवाबreassignedलोग औरkeysReassignedकुंजियाँ बताता है। roles list-permissionsपूरी शब्दावली दिखाती है, हर एक के लेबल और समूह के साथ। कुछ, जैसेbilling:writeऔरworkspace:manage,scope: falseके साथ लौटती हैं: भूमिका इन्हें रख सकती है, पर कोई कुंजी नहीं।
roles:write वाली कुंजी अपनी सीमा तय करने वाली भूमिका को बदलकर अगली कॉल पर ख़ुद को ज़्यादा अधिकार दे सकती है, इसलिए सिर्फ़ पढ़ने वाली कुंजियों को यह स्कोप न दें। ब्राउज़र साइन-इन के साथ members:write और roles:write तभी मिलते हैं जब मंज़ूरी कुछ डोमेन या पतों के बजाय पूरे वर्कस्पेस को कवर करे।
डिस्पोज़ेबल इनबॉक्स
डिस्पोज़ेबल इनबॉक्स को न अकाउंट चाहिए न साइन-इन। उस तक उसके अपने इनबॉक्स टोकन से पहुँचा जाता है, जो oe_inbox_ से शुरू होता है और इनबॉक्स बनने पर एक बार लौटता है। रोज़ के काम के लिए openemail temp इस्तेमाल करें, और openemail temp-mail तब जब आपको कोई ऐसा फ़ील्ड या चरण चाहिए जो temp नहीं दिखाता, जैसे बचे हुए विस्तार, विस्तार, या किसी अटैचमेंट के बाइट।
- दोनों टोकन को
~/.openemail/temp-mail.jsonमें रखते हैं, जिसे सिर्फ़ आप पढ़ सकते हैं।temp newऔरtemp-mail createउसे सहेजती हैं,temp listदोनों तरह से बने इनबॉक्स दिखाती है, और दोनों तरह का हटाना उसे भूल जाता है। जहाँ भी कोई कमांड ID माँगे, वहाँ सहेजे इनबॉक्स को उसके पते से बताया जा सकता है। - जो इनबॉक्स इस CLI ने नहीं बनाया, उसके लिए टोकन
--inbox-tokenसे दें। कोई सहेजा या दिया गया टोकन न हो, तो कमांड कुछ भी भेजे जाने से पहले एग्ज़िट कोड3के साथ रुकती है। - दोनों बनाने वाली कमांड अपने फ़्लैग के नाम अलग रखती हैं:
temp new--name,--domainऔर--ttlलेती है, औरtemp-mail create--local-part,--domainऔर--ttl-minutesलेती है। लोकल पार्ट 3 से 32 अक्षरों, अंकों, बिंदुओं, डैश या अंडरस्कोर का होता है, जो किसी अक्षर या अंक से शुरू और ख़त्म हो, औरpostmasterजैसे नाम अस्वीकार होते हैं। लीज़ 1 से 1440 मिनट की होती है, डिफ़ॉल्ट 60। - हर IP पता एक घंटे में 6 और एक दिन में 30 इनबॉक्स बना सकता है, और अगला 429
too_many_inboxesहै, एग्ज़िट कोड8। पहले से मौजूद इनबॉक्स को बढ़ाना गिना नहीं जाता, इसलिए इस सीमा का जवाबtemp-mail extendहै। temp-mail extendएक घंटे तक जोड़ता है, इनबॉक्स बनने के 24 घंटे से आगे कभी नहीं, और ज़्यादा से ज़्यादा 23 बार। जवाब सेextensionsLeftपढ़ें। 0 होने पर यह हमेशा के लिए 409extension_limitहै।temp-mail list-messagesहर पेज में 1 से 50 संदेश पढ़ती है, डिफ़ॉल्ट 50, हर एक 400 वर्णों तक के सादे टेक्स्टsnippetके साथ, जिसमें अक्सर एक बार का कोड होता है। पेज से आगे का कुछ भी छोड़ा नहीं जाता, और--allहर पेज से गुज़रता है।temp read,temp-mail get-messageयाtemp-mail list-attachmentsसे संदेश पढ़ने पर वह देखा हुआ चिह्नित होता है। 2 MB से बड़ी बॉडी काट दी जाती है, जोtruncatedबताता है, और 8 MB से बड़ा अटैचमेंट कभी रखा ही नहीं गया, इसलिए उसकाcontentnull है।- इनबॉक्स हटाने पर उसकी मेल तुरंत मिट जाती है, पर पता उसकी लीज़ ख़त्म होने के 7 दिन बाद तक आरक्षित रहता है, और उससे पहले उसे फिर माँगना 409
address_takenहै।
डिस्पोज़ेबल इनबॉक्स की मेल अनजान लोगों से आती है, ऐसे पते पर जिसे कोई भी बता सकता है। उसका भेजने वाला कभी सत्यापित नहीं होता और उसमें कुछ भी स्कैन नहीं होता, इसलिए उसके लिंक, HTML और अटैचमेंट सावधानी से संभालें।
कोई भी एंडपॉइंट, और security नेमस्पेस
openemail api <method> <path> हर दूसरी कमांड वाले ही ट्रांसपोर्ट से एक अनुरोध भेजता है, इसलिए आपकी प्रोफ़ाइल या कुंजी, टोकन का नवीनीकरण, सत्यापन कोड और पुष्टियाँ सब लागू होते हैं। अकेला पाथ एक GET है, और JSON जवाब फ़ॉर्मैट होकर प्रिंट होता है। openemail api /keys/self me get के पीछे की कॉल है।
-d,--dataबॉडी को इनलाइन JSON के रूप में,@pathसे फ़ाइल से, या-से stdin से लेता है।-q,--queryऔर-H,--headerkey=valueलेते हैं और दोहराए जा सकते हैं, और-o,--outजवाब को जैसा आया वैसा फ़ाइल में सहेजता है।DELETE, और हर वह कॉल जिसकी पुष्टि कोई रिसोर्स कमांड माँगती, जैसे कुंजी रद्द या रोटेट करना, पहले पुष्टि माँगती है, और बिना निगरानी के इसे--yesचाहिए।- विफल अनुरोध API एरर प्रिंट करता है और उससे मेल खाते कोड के साथ बाहर निकलता है।
security नेमस्पेस openemail --help में नहीं दिखता, क्योंकि उसे openemail verify चलाता है। उसके वर्ब step-up-status, begin-step-up और verify-step-up वे कॉल हैं जो verify करता है: verify --status स्थिति पढ़ता है, और verify कोड माँगता है, आपसे उसे डालने को कहता है और उसे जाँचता है। ये ब्राउज़र साइन-इन के लिए हैं। API कुंजी के साथ हर एक 400 step_up_not_applicable के साथ अस्वीकार होता है, और openemail verify बताता है कि कुंजी को कभी कोड की ज़रूरत नहीं होती।
उदाहरण
openemail keys create --name 'Billing sender' --scopes emails:send \ --domain-allowlist billing.acme.com --expires-in-minutes 129600 --json \ | jq -r .token | openemail login --with-token --profile billingopenemail whoami --profile billingइसे keys:manage वाली API कुंजी से चलाएँ, उदाहरण के लिए OPENEMAIL_API_KEY के ज़रिए। सीक्रेट जवाब से सीधे एक नई प्रोफ़ाइल में जाता है, इसलिए वह कभी स्क्रीन पर या किसी फ़ाइल में नहीं आता। कुंजी सिर्फ़ billing.acme.com से भेज सकती है, और 90 दिनों में ख़त्म हो जाती है।
openemail keys list --all | jq -r 'select(.status != "active") | [.name, .status, .lastUsedAt] | @tsv'openemail keys list-workspace-requests --failed-only --since 2026-09-26T00:00:00Z --all \ | jq -r '[.createdAt, .keyName, .status, .errorCode, .method, .path] | @tsv'id=4c1b257a66287fd113bd89d0openemail keys update "$id" --no-enabledopenemail keys list-activity "$id" --since 2026-09-27T00:00:00Z --all | jq -r 'select(.type == "auth_failed") | .createdAt'openemail keys revoke "$id" --reason 'Contractor offboarded' --yesopenemail keys delete "$id" --yesपहले कुंजी को बंद करना --enabled से पलटा जा सकता है। उसे अब भी दिखाने वाली हर कॉल अस्वीकार होती है और उसकी गतिविधि में auth_failed के रूप में दिखती है, जिससे पता चलता है कि अब भी क्या उस पर निर्भर है। रद्द करना पलटा नहीं जा सकता, और सिर्फ़ रद्द की गई कुंजी ही हटाई जा सकती है।
openemail roles list-permissions --json | jq -r '.[] | [.group, .id, .label] | @tsv'role=$(openemail roles create --name Support --permissions threads:write,emails:send,templates:read \ --description 'Answers help@ and nothing else.' --json | jq -r .id)openemail members add --email [email protected] --role-id "$role" \ --domain-ids 93542ff8-2baa-4f2f-841d-5ceaa074ab0d --access memberopenemail members list-invitationsभूमिका threads:read और emails:read के साथ भी लौटती है, क्योंकि उसकी बताई अनुमतियों में ये निहित हैं। Sam को भूमिका और पूरा डोमेन तभी मिलता है जब वे स्वीकार करते हैं। ब्राउज़र साइन-इन के साथ members add पहले सत्यापन कोड माँगती है।
old=role_8b1f4c2e9a7d3b60e5f1a2c4new=role_2c7e9a1f4b8d3e60c5a7f1b9user=$(openemail members list --all | jq -r 'select(.email == "[email protected]") | .userId')openemail members update "$user" --role-id "$new"openemail roles get "$old" --json | jq '{name, members, apiKeys}'openemail roles delete "$old" --reassign-to "$new" --dry-runopenemail roles delete "$old" --reassign-to "$new" --yesmembers और apiKeys पूछने के समय गिने जाते हैं, इसलिए ये दिखाते हैं कि हटाना किसे ले जाएगा। ड्राई रन DELETE को उसकी क्वेरी में reassignTo के साथ, भेजे बिना प्रिंट करता है। ब्राउज़र साइन-इन के साथ अपडेट और हटाना, दोनों सत्यापन कोड माँगते हैं, इसलिए जब कोई स्क्रिप्ट यह करे तो पहले openemail verify चलाएँ।
address=$(openemail temp new --ttl 15)openemail send --from [email protected] --to "$address" --subject 'Delivery check' --text 'Your code is 482913' --yesopenemail temp watch "$address" --first --json | jq -r .snippet | grep -oE '[0-9]{6}'openemail temp delete "$address" --yestemp new सिर्फ़ पता प्रिंट करता है, इसलिए वह शेल वेरिएबल में आ जाता है, और temp watch --first पहले संदेश पर रुकता है। openemail send की जगह किसी साइन-अप फ़ॉर्म में यह पता डालें, ताकि उसका पुष्टि कोड इसी तरह पकड़ सकें।
स्कोप, पुष्टि और एरर
| स्कोप | कमांड |
|---|---|
| keys:read | keys list, get, list-requests, list-activity, list-workspace-requests, list-workspace-activity |
| keys:manage | keys create, update, delete, rotate, revoke |
| keys:write | me rotate |
| roles:read | roles list, get, list-permissions |
| roles:write | roles create, update, delete |
| members:read | members list, get, list-invitations |
| members:write | members add, update, remove, grant-address, revoke-address, revoke-invitation, resend-invitation |
| कोई नहीं, किसी भी कुंजी या साइन-इन के साथ | me get, me ping, languages list |
| कोई नहीं, और साइन-इन भी नहीं | temp, temp-mail list-domains और create। बाकी temp-mail कमांड इनबॉक्स टोकन लेती हैं |
- स्कोप के बिना साइन-इन या कुंजी एग्ज़िट कोड
4के साथ रुकती है, छूटे स्कोप का नाम बताती है और उसे पाने का तरीका भी। - ये पुष्टि माँगती हैं:
keys delete,rotateऔरrevoke,me rotate,roles delete,members remove,revoke-addressऔरrevoke-invitation,temp delete, औरtemp-mail deleteऔरdelete-message। ना कहने पर वे कोड10के साथ बाहर निकलती हैं और कुछ नहीं बदलतीं। बिना निगरानी के और--yesके बिना, वे कुछ भी भेजे जाने से पहले एग्ज़िट कोड2के साथ रुकती हैं। - ब्राउज़र साइन-इन के साथ
roles updateऔरroles delete, औरmembers add,update,remove,grant-addressऔरrevoke-addressसत्यापन कोड भी माँगती हैं, जब तक इस साइन-इन ने पिछले 60 मिनट में कोई कोड सत्यापित न किया हो।--yesइसे कभी नहीं छोड़ता, और बिना निगरानी के कोई उसे टाइप नहीं कर सकता, इसलिए कमांड एग्ज़िट कोड4के साथ रुकती है। पहलेopenemail verifyचलाएँ। API कुंजी से कभी नहीं पूछा जाता। --dry-runवह अनुरोध उसकी बॉडी के साथ प्रिंट करता है जो बदलाव भेजता, और उसे भेजे या पुष्टि माँगे बिना कोड0के साथ बाहर निकलता है।- सूची एक पेज पढ़ती है।
--limit1 से 100 लेता है और इसे छोड़ने पर सर्वर 25 भेजता है, सिवायtemp-mail list-messagesके, जो 1 से 50 लेती है और 50 भेजती है।--cursorपिछले पेज काnextCursorलेता है।--allहर पेज पढ़ता है,--max <n>उतने आइटम के बाद रुकता है, और--ndjson, या पाइप में--all, हर लाइन में एक JSON ऑब्जेक्ट प्रिंट करता है।--jsonके साथ सूची एक{ items, hasMore, nextCursor }दस्तावेज़ प्रिंट करती है। roles list-permissions,languages list,temp-mail list-domainsऔरtemp-mail list-attachmentsसब कुछ एक साथ, एक सादे ऐरे के रूप में, बिना पेज के लौटाती हैं।- अस्वीकार होने पर कमांड उसकी स्थिति के कोड के साथ बाहर निकलती है: 401 के लिए
3, जैसे रद्द की गई कुंजी, 403 के लिए4, जैसेbeyond_caller_authorityयाowner_only, 404 के लिए5, 409 के लिए6, जैसेnot_revoked,role_in_useयाinvitation_too_soon, 400 या 422 के लिए7, जैसेmember_is_ownerयाrole_limit_reached, और 429 के लिए8, जैसेtoo_many_inboxes। - जो बदलाव दो बार करने पर कुछ दोहरा देगा, उसे नेटवर्क विफलता के बाद कभी दोबारा नहीं आज़माया जाता:
keys createऔरrotate,me rotate,roles createऔरdelete,members add,remove,revoke-addressऔरresend-invitation, औरtemp-mail create,extend,deleteऔरdelete-message। इनमें से किसी को फिर चलाने से पहले जाँच लें। पढ़ना, और वे बदलाव जो दो बार करने पर भी एक जैसे रहते हैं, जैसेkeys update,keys revoke,roles update,members updateऔरgrant-address, अपने आप दोबारा आज़माए जाते हैं।