Saltar para a documentação
Python

Chaves API

`keys.list`, `list_all`, `iterate`, `get`, `create`, `update`, `delete`, `rotate` e `revoke`, e os leitores do registo de pedidos e da atividade.

Todos os métodos

keys.py
from pathlib import Path from openemail import openemail key = openemail.keys.create({    'name': 'Billing sender',    'scopes': ['emails:send'],    'domainAllowlist': ['billing.acme.com'],    'expiresInMinutes': 60 * 24 * 90,}) secret = Path('.openemail-billing-key')secret.touch(mode=0o600)secret.write_text(key['token']) openemail.keys.update(key['id'], {'enabled': False}) rotated = openemail.keys.rotate(key['id'])secret.write_text(rotated['token']) openemail.keys.revoke(key['id'], {'reason': 'Replaced'})openemail.keys.delete(key['id'])

create e rotate são as únicas chamadas que devolvem um segredo, em token, uma vez. Cada leitura devolve maskedKey em vez disso. update desativa e ativa uma chave com enabled, a alternativa reversível a revoke, e delete só remove uma chave já revogada. Ler precisa de keys:read e cada alteração de keys:manage.

O cliente nunca repete create nem rotate. Uma repetição depois de uma resposta perdida criaria uma segunda chave, ou invalidaria o segredo que a primeira tentativa devolveu. update e revoke são repetidos como as leituras, porque repeti-los deixa a mesma chave, e delete não.

Nunca mais ampla do que quem chama

Uma chave nunca cria nem alcança uma chave mais ampla do que ela própria: âmbitos, função, expiração, modo e âmbito de envio têm todos de ficar dentro da chave que chama, ou a chamada é recusada com 403 beyond_caller_authority. Uma chave restrita a alguns domínios ou endereços só vê as chaves dentro do seu próprio âmbito de envio. rotate sobre a chave que chama também funciona com keys:write, como me.rotate().

A verificação adicional não se pode aplicar a uma chamada feita com uma chave, por isso keys:manage é uma credencial que cria credenciais. Dê-a apenas a uma automação que emite chaves, dê a essa chave uma função, um âmbito de envio e uma expiração, e acompanhe list_workspace_activity, onde tudo o que ela faz fica registado em seu nome.

Registo de pedidos e atividade

key_logs.py
from datetime import datetime, timedelta, timezone from openemail import openemail failures = openemail.keys.list_requests(    '4c1b257a66287fd113bd89d0',    failed_only=True,    since=datetime.now(timezone.utc) - timedelta(days=1),)for request in failures['items']:    print(request['status'], request['method'], request['path']) for change in openemail.keys.iterate_workspace_activity():    actor = change['actor']    print(change['keyName'], change['type'], actor['label'] if actor else None)

list_requests e list_activity leem uma chave, list_workspace_requests e list_workspace_activity leem todas as chaves ou as que key_ids nomeia, e cada uma tem um list_all_… e um iterate_… ao lado. Aceitam since e until, e os leitores de pedidos aceitam também failed_only.

since e until aceitam um datetime ou uma string ISO 8601. Um datetime é enviado em UTC, e um sem fuso horário é primeiro lido como hora local.

Referência