Saltar para a documentação
CLI

Scripts

Saída JSON, fluxos, códigos de saída, variáveis de ambiente, e execução sem supervisão ou em CI.

Saída JSON

Com --json, stdout contém só JSON, indentado com dois espaços, enquanto as notas e o progresso ficam em stderr, e nada pede entrada. Uma lista mostra { items, hasMore, nextCursor }, um objeto da API é mostrado tal como a API o devolveu, e um comando escrito à mão mostra o objeto que a sua ajuda descreve.

Terminal
openemail whoami --json | jq -r .workspaceIdopenemail emails list --status failed --json | jq -r ".items[].id"

Um erro vai para stderr como uma única linha de JSON, e o código de saída é o que uma pessoa receberia:

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}}
CampoO que contém
typeO tipo de erro da API, ou cli_error, network_error ou internal_error para uma falha dentro da CLI
codeUm código estável como insufficient_scope, not_signed_in ou unknown_flag
messageO que correu mal, numa frase
hint, nextO que tentar, e o comando a executar a seguir, ou null
status, requestId, param, docUrlDa API quando o erro veio dela, caso contrário null
exitCodeO código de saída com que o processo termina

Fluxos

Parte da saída é um fluxo de objetos JSON, um por linha, para que um pipeline trate cada item assim que chega:

  • Uma lista de recursos com --all quando stdout não é um terminal, ou com --ndjson. --max <n> para depois desse número de itens.
  • openemail temp watch --json, uma linha por mensagem nova.
  • openemail mcp serve, uma mensagem JSON-RPC por linha em cada sentido.
Terminal
openemail contacts list --all > contacts.ndjsonopenemail emails list --status failed --all --max 500 | jq -r .id

Códigos de saída

CódigoSignificado
0Concluído
1Uma falha inesperada, um erro do servidor ou um envio que falhou
2Um erro de utilização: um argumento errado, um comando ou uma opção desconhecidos, um valor ou uma confirmação que não pôde ser pedida, ou uma origem ou um caminho para os quais a CLI não envia uma credencial
3Sem sessão iniciada, ou o início de sessão foi recusado, expirou ou terminou enquanto o comando corria
4Não permitido: falta um scope ou uma permissão, um código de verificação que não pôde ser pedido ou está em pausa, ou uma chave de API onde é preciso um início de sessão no navegador
5Não encontrado
6Um conflito com o estado atual
7A entrada era inválida
8Limite de pedidos atingido, ou a quota de IA está esgotada
9A rede falhou ou excedeu o tempo
10Cancelado: recusou uma confirmação ou um pedido
130, 143Parado com Ctrl+C, ou por SIGTERM

Variáveis de ambiente

VariávelO que faz
OPENEMAIL_API_KEYUma chave de API a usar em vez de qualquer perfil guardado
OPENEMAIL_PROFILEO perfil guardado a usar
OPENEMAIL_BASE_URLA origem da API para OPENEMAIL_API_KEY, --api-key e comandos que não enviam credenciais. Um início de sessão guardado só vai para a API em que iniciou sessão
OPENEMAIL_APP_URLA origem da aplicação web, para o início de sessão, open e as ligações para a documentação
OPENEMAIL_CONFIG_DIROnde ficam os perfis e os tokens de caixa, ~/.openemail se não estiver definida
OPENEMAIL_NO_UPDATE_CHECKNunca procurar no npm uma versão mais recente. OPENEMAIL_DISABLE_UPDATE_NOTICE faz o mesmo
NO_COLOR, FORCE_COLOR=0Sem cor
CINunca perguntar, nunca abrir um navegador, nunca procurar atualizações. A maioria dos serviços de CI é reconhecida sem ela
VISUAL, EDITORO editor que send e reply abrem para um corpo

Execuções sem supervisão

A CLI só pergunta quando stdin e stdout são ambos terminais, e não se aplica nenhum de --json, --no-input ou CI. Caso contrário:

  • Um valor obrigatório em falta para com o código de saída 2 e indica a opção a passar.
  • Um comando destrutivo para com Refusing to run unattended. Pass --yes to confirm. e o código de saída 2, a menos que passe --yes.
  • Uma alteração que precisa de um código de verificação para com o código de saída 4, porque ninguém o pode escrever. Use uma chave de API, ou execute primeiro openemail verify.

Em CI

Dê ao trabalho uma chave de API só com os scopes de que precisa, guarde-a num segredo e deixe OPENEMAIL_API_KEY transportá-la. Nada é guardado, nada pede entrada e não corre nenhuma verificação de atualizações.

.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 }}"
Esperar por um email de registo
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
Falhar em envios falhados
failed=$(openemail emails list --status failed --json | jq ".items | length")test "$failed" -eq 0

Passe --idempotency-key num envio que um pipeline possa repetir, e derive-a do que tornou o envio necessário, como um id de execução. Repetir o passo devolve então o primeiro envio em vez de enviar duas vezes.

A sua caixa de entrada,
nos seus termos.

Infraestrutura de email para empresas, IA, agentes e correio pessoal. Feita para escala, privacidade e controlo. Tudo o que o email devia ter tido desde o primeiro dia.

OpenEmail

Infraestrutura de email para empresas, IA, agentes e correio pessoal. Feita para escala, privacidade e controlo. Tudo o que o email devia ter tido desde o primeiro dia.

© 2026 OpenEmail. Todos os direitos reservados.