API キー
`keys->list`、`listAll`、`iterate`、`get`、`create`、`update`、`delete`、`rotate`、`revoke`、そしてリクエストログ、アクティビティ、統計の読み取り。
すべてのメソッド
use OpenEmail\Constants\ApiScopes; $key = $client->keys->create([ 'name' => 'Billing sender', 'scopes' => [ApiScopes::EMAILS_SEND], 'domainAllowlist' => ['billing.acme.com'], 'expiresInMinutes' => 60 * 24 * 90,]); file_put_contents('.openemail-billing-key', $key['token']); $client->keys->update($key['id'], ['enabled' => false]); $rotated = $client->keys->rotate($key['id']);file_put_contents('.openemail-billing-key', $rotated['token']); $client->keys->revoke($key['id'], ['reason' => 'Replaced']);$client->keys->delete($key['id']);シークレットを返すのは create と rotate だけで、token で一度だけ返します。読み取りはすべて代わりに maskedKey を返します。update は enabled でキーを無効化・有効化でき、これは revoke の元に戻せる代替です。delete は失効済みのキーしか削除しません。それ以外のキーは 409 not_revoked になり、ConflictException としてスローされます。読み取りには keys:read、変更にはすべて keys:manage が必要です。
list は OpenEmail\Result\Page を 1 つ返し、listAll はすべてのキーを 1 つの配列で返し、iterate はキーを 1 つずつ yield する Generator を返します。create と update は API の名前をキーとする 1 つの配列としてボディを受け取り、revoke は reason を持つ省略可能な配列を受け取ります。OAuth アクセストークンがこれらの呼び出しを使えるのは、アプリを接続した人がワークスペースのオーナーである場合だけです。それ以外の人のトークンは、errorCode が owner_only の PermissionException を受け取ります。
パッケージが create や rotate をリトライすることはありません。応答が失われた後にリトライすると、2 つ目のキーが発行されたり、1 回目の試行で返されたシークレットが無効になったりするからです。update と revoke は、繰り返しても同じキーが残るのでネットワーク障害の後にリトライされますが、delete はリトライされません。
呼び出し元より広くはならない
キーが自分より広いキーを作ったり、そうしたキーに触れたりすることはありません。スコープ、ロール、有効期限、モード、送信範囲のすべてが呼び出し元のキーの内側に収まらなければ、呼び出しは errorCode が beyond_caller_authority の PermissionException をスローし、param がその軸を示します。一部のドメインやアドレスに絞り込まれたキーは、自身の送信範囲内のキーしか見えません。呼び出し元のキー自身に対する rotate は、$client->me->rotate() と同じく keys:write でもできます。
再認証はキーによる呼び出しには適用できないため、keys:manage は資格情報を生み出す資格情報である。キーを発行する自動化にだけ与え、そのキーにロール・送信範囲・有効期限を設定し、その行動がすべて記録される listWorkspaceActivity を見守ること。
リクエストログとアクティビティ
$failures = $client->keys->listRequests( '4c1b257a66287fd113bd89d0', failedOnly: true, since: new \DateTimeImmutable('-1 day'),);echo count($failures), PHP_EOL; foreach ($client->keys->iterateWorkspaceActivity() as $change) { echo $change['keyName'], ' ', $change['type'], ' ', $change['actor']['label'] ?? 'system', PHP_EOL;}listRequests と listActivity は 1 つのキーを、listWorkspaceRequests と listWorkspaceActivity はすべてのキー、または keyIds: で配列かカンマ区切りの 1 つの文字列として指定したキーを読みます。それぞれに、listAllRequests と iterateRequests のように、listAll と iterate の対になるメソッドがあります。since: と until: を DateTimeInterface または ISO 8601 の文字列で受け取り、リクエストを読むものは failedOnly: も受け取ります。
stats は、ある期間内にキーが行ったことを読みます。送信したメールとその結果、拒否された呼び出し、行ったリクエスト、呼び出したルートです。同じ keyIds:、since:、until: に加えて grain: と offsetMinutes: を受け取り、期間を指定しなければ現在までの 30 日間が対象になります。keys:read に加えて emails:read が必要です。
until: は since: より後でなければならず、そうでなければ呼び出しは errorCode が invalid_parameter、param が until の InvalidRequestException をスローします。DateTimeInterface は UTC で送られ、文字列は書かれたとおりに送られるため、2026-09-01T00:00:00Z のような ISO 8601 のタイムスタンプである必要があります。