API anahtarları
`keys->list`, `listAll`, `iterate`, `get`, `create`, `update`, `delete`, `rotate` ve `revoke`, ayrıca istek günlüğü, etkinlik ve istatistik okuyucuları.
Her yöntem
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 ve rotate, token içinde bir kez gizli değer döndüren tek çağrılardır. Her okuma bunun yerine maskedKey döndürür. update bir anahtarı enabled ile kapatıp açar; bu, revoke işleminin geri alınabilir alternatifidir. delete ise yalnızca iptal edilmiş bir anahtarı kaldırır: diğer her anahtar ConflictException olarak fırlatılan bir 409 not_revoked verir. Okuma keys:read, her değişiklik ise keys:manage gerektirir.
list bir OpenEmail\Result\Page döndürür, listAll tüm anahtarları tek bir dizi içinde döndürür, iterate ise anahtarları birer birer veren bir Generator döndürür. create ve update gövdeyi API'deki adlarıyla tek bir dizi olarak alır, revoke ise reason içeren isteğe bağlı bir dizi alır. Bir OAuth erişim tokenı bu çağrılara yalnızca uygulamayı bağlayan kişi çalışma alanının sahibiyse ulaşır. Başka herhangi birinin tokenı, errorCode değeri owner_only olan bir PermissionException alır.
Paket create ya da rotate çağrısını asla yeniden denemez. Kaybolan bir yanıttan sonraki yeniden deneme ikinci bir anahtar üretir ya da ilk denemenin döndürdüğü gizli değeri geçersiz kılardı. update ve revoke bir ağ hatasından sonra yeniden denenir, çünkü tekrarlanmaları aynı anahtarı bırakır; delete ise yeniden denenmez.
Asla çağırandan geniş değil
Bir anahtar asla kendisinden daha geniş bir anahtar oluşturmaz ya da ona ulaşmaz. Kapsamlar, rol, son kullanma tarihi, mod ve gönderim kapsamı çağıran anahtarın sınırları içinde olmalıdır; aksi hâlde çağrı errorCode değeri beyond_caller_authority olan bir PermissionException fırlatır ve param ekseni belirtir. Bazı alan adlarına ya da adreslere daraltılmış bir anahtar yalnızca kendi gönderim kapsamı içindeki anahtarları görür. Çağıran anahtar üzerindeki rotate, $client->me->rotate() gibi keys:write ile de çalışır.
Ek doğrulama bir anahtarla yapılan çağrıya uygulanamaz, bu yüzden keys:manage kimlik bilgisi üreten bir kimlik bilgisidir. Onu yalnızca anahtar üreten bir otomasyona verin, o anahtara bir rol, bir gönderim kapsamı ve bir süre verin ve yaptığı her şeyin ona kaydedildiği listWorkspaceActivity çıktısını izleyin.
İstek günlüğü ve etkinlik
$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 ve listActivity tek bir anahtarı, listWorkspaceRequests ve listWorkspaceActivity ise her anahtarı ya da bir dizi veya virgülle ayrılmış tek bir dize olarak keyIds: içinde belirtilenleri okur. Her birinin yanında listAllRequests ve iterateRequests gibi bir listAll ve bir iterate ikizi vardır. since: ve until: değerlerini bir DateTimeInterface ya da bir ISO 8601 dizesi olarak alırlar; istek okuyucuları ayrıca failedOnly: alır.
stats, anahtarların tek bir aralıkta ne yaptığını okur: gönderdikleri posta ve ona ne olduğu, reddedilen çağrılar, yaptıkları istekler ve çağırdıkları rotalar. Aynı keyIds:, since: ve until: değerlerini, ayrıca grain: ve offsetMinutes: alır; bir aralık belirtmediğinizde şu andan önceki 30 günü kapsar ve keys:read yanında emails:read gerektirir.
until: değeri since: değerinden sonra olmalıdır; aksi hâlde çağrı, errorCode değeri invalid_parameter ve param değeri until olan bir InvalidRequestException fırlatır. Bir DateTimeInterface UTC olarak gönderilir, bir dize ise yazıldığı gibi gönderilir; bu yüzden dizenin 2026-09-01T00:00:00Z gibi bir ISO 8601 zaman damgası olması gerekir.