Reference

Admin API

Retry admin API calls safely with idempotency keys.

For: Developers calling the admin API.

The admin API (oz0.admin.v1.AdminService, over Connect on the management port) is what the console and the CLI call. A call that changes something may have been applied even when its answer was lost on the way back. To retry such a call safely, send the same Idempotency-Key header with the same request:

  • The header: 1 to 128 visible ASCII characters (no spaces), such as a UUID. Anything else is refused with invalid_argument. A new call takes a new key; a retry reuses the first call's.
  • The same key and request within 24 hours gets the first call's answer again, without the call running again; the answer carries the header Idempotency-Replayed: true.
  • The same key with another request (or another method) is refused with already_exists and an oz0.runtime.v1.IdConflict detail whose reason is oz0_id_conflict.
  • While the first call still runs, a second one is refused with aborted (reason oz0_id_pending): try again in a moment with the same key.
  • What is kept: a success, and an error the same request would meet again (invalid_argument, not_found, already_exists, failed_precondition, out_of_range, unimplemented). A failure a retry may get past (unavailable, internal, deadline_exceeded, a permission not yet given) is not kept, so the retry runs the call.
  • Keys are per caller: another person's call under the same key is that person's own, and a call the server refuses for its caller keeps nothing.

Access is checked again

Before a kept answer is given again, the server checks your current permission for the method. If you lost it, you get the permission_denied a fresh call gets, without the answer; given the access back within the 24 hours, the same retry gets the first answer. A retry of your own password change is yours whatever your cluster role. A method that declares no access to ask again (RenewOperatorCertificate) is not replayed: the retry gets failed_precondition, and a new key makes a new call.

Stored credentials

An answer that carries a new key, token, password or code is kept sealed with a key derived from your Idempotency-Key, which the server does not store: a copy of the database does not reveal it.

oz0, the SDKs and the console send a key on every call that takes one and retry unavailable with it. A call that takes no header ignores it. Job starts on the runtime API work the same way through their job ID; see the runtime API.

Calls that take the header

Call
AddIncidentNoteTakes Idempotency-Key
AllowlistCommandTakes Idempotency-Key
ContestDecisionTakes Idempotency-Key
OpenIncidentTakes Idempotency-Key
RecordProvisioningEventTakes Idempotency-Key
RenewOperatorCertificateTakes Idempotency-Key
RequestBudgetTakes Idempotency-Key
RollbackSecretTakes Idempotency-Key
RotateEvidenceKeyTakes Idempotency-Key
RotateTenantOIDCTakes Idempotency-Key
RotateTenantPayloadKeyTakes Idempotency-Key
StartComparisonTakes Idempotency-Key
StartContinuationTakes Idempotency-Key
StartReplayTakes Idempotency-Key
StartRolloutTakes Idempotency-Key
TestNotificationRuleTakes Idempotency-Key
CreateAPIKeyTakes Idempotency-Key; the kept answer is sealed
CreateAppTakes Idempotency-Key; the kept answer is sealed
CreateChannelLinkCodeTakes Idempotency-Key; the kept answer is sealed
CreateJoinTokenTakes Idempotency-Key; the kept answer is sealed
CreateUserTakes Idempotency-Key; the kept answer is sealed
SetUserPasswordTakes Idempotency-Key; the kept answer is sealed

Calls that need no header

Calls that only read take none and are not listed. These change something and are safe to send again as they are:

CallWhy
AbortRolloutSets a value: twice is the same as once
AcceptNodeSets a value: twice is the same as once
AddPluginIndexHas a natural key: a second create under it is refused
AllowProvisionerInTenantSets a value: twice is the same as once
ApplyPluginConfigDecided once, by its ID and hash
ApproveChangeRequestDecided once, by its ID and hash
ApprovePluginToolsSets a value: twice is the same as once
BindCredentialSets a value: twice is the same as once
BlockNodeSets a value: twice is the same as once
CancelContinuationSets a value: twice is the same as once
CancelReplaySets a value: twice is the same as once
CancelTenantMoveSets a value: twice is the same as once
CloseIncidentSets a value: twice is the same as once
CollectArtifactsSets a value: twice is the same as once
ConfirmRegistrySets a value: twice is the same as once
CreateCandidateHas a natural key: a second create under it is refused
CreateTeamHas a natural key: a second create under it is refused
CreateTenantHas a natural key: a second create under it is refused
DecideBudgetRequestDecided once, by its ID and hash
DeleteAppSets a value: twice is the same as once
DeleteChannelBindingSets a value: twice is the same as once
DeleteInventoryItemSets a value: twice is the same as once
DeleteModelAliasSets a value: twice is the same as once
DeleteModelMapRuleSets a value: twice is the same as once
DeleteNodeSets a value: twice is the same as once
DeleteNotificationRuleSets a value: twice is the same as once
DeleteOIDCProviderSets a value: twice is the same as once
DeleteProviderSets a value: twice is the same as once
DeleteRoutineSets a value: twice is the same as once
DeleteSecretSets a value: twice is the same as once
DeleteSettingSets a value: twice is the same as once
DeleteSubjectRuleSets a value: twice is the same as once
DeleteTeamSets a value: twice is the same as once
DeleteUserSets a value: twice is the same as once
DrainNodeSets a value: twice is the same as once
EndSessionsSets a value: twice is the same as once
EraseSubjectSets a value: twice is the same as once
GrantReadsTargetSets a value: twice is the same as once
GrantUsesSets a value: twice is the same as once
ImportAdvisoriesSets a value: twice is the same as once
InstallPluginHas a natural key: a second create under it is refused
LinkIncidentSets a value: twice is the same as once
LinkTemporalCloudUserSets a value: twice is the same as once
LinkUserSets a value: twice is the same as once
MarkIncidentNotifiedSets a value: twice is the same as once
MoveTenantHas a natural key: a second create under it is refused
NameRegionSets a value: twice is the same as once
PurgeNodeSets a value: twice is the same as once
PutNotificationRuleSets a value: twice is the same as once
PutOIDCProviderSets a value: twice is the same as once
RefreshPluginIndexSets a value: twice is the same as once
RejectChangeRequestDecided once, by its ID and hash
RejectNodeSets a value: twice is the same as once
ReleaseKillSwitchSets a value: twice is the same as once
RemoveAccountSets a value: twice is the same as once
RemoveAdvisoriesSets a value: twice is the same as once
RemoveCandidateSets a value: twice is the same as once
RemoveChannelMemberSets a value: twice is the same as once
RemoveMembershipSets a value: twice is the same as once
RemoveMyChannelLinkSets a value: twice is the same as once
RemovePluginSets a value: twice is the same as once
RemovePluginIndexSets a value: twice is the same as once
RemoveProvisionerFromTenantSets a value: twice is the same as once
RemoveTeamMemberSets a value: twice is the same as once
RenewCandidateSets a value: twice is the same as once
RenewMemoryEntrySets a value: twice is the same as once
ResetUserMFASets a value: twice is the same as once
ResolveEvalFindingSets a value: twice is the same as once
RestrictSubjectSets a value: twice is the same as once
RetireInventoryItemSets a value: twice is the same as once
RetirePluginSets a value: twice is the same as once
RevokeAPIKeySets a value: twice is the same as once
RevokeJoinTokenSets a value: twice is the same as once
RevokeMCPClientSets a value: twice is the same as once
RevokeProvidesSets a value: twice is the same as once
RevokeReadsSets a value: twice is the same as once
RevokeReadsTargetSets a value: twice is the same as once
RevokeUsesSets a value: twice is the same as once
RollBackPluginConfigDecided once, by its ID and hash
SaveChannelBindingSets a value: twice is the same as once
SaveRoutineSets a value: twice is the same as once
SeedModelAliasesSets a value: twice is the same as once
SetAILabelSets a value: twice is the same as once
SetAccountActiveSets a value: twice is the same as once
SetAccountGroupsSets a value: twice is the same as once
SetAccountMembershipsSets a value: twice is the same as once
SetAgentLegalBasisSets a value: twice is the same as once
SetAgentPersonMemorySets a value: twice is the same as once
SetAssessmentFieldsSets a value: twice is the same as once
SetChannelMemberSets a value: twice is the same as once
SetDataRulesSets a value: twice is the same as once
SetDutyRulesSets a value: twice is the same as once
SetErasurePolicySets a value: twice is the same as once
SetFourEyesSets a value: twice is the same as once
SetIncidentSettingsSets a value: twice is the same as once
SetInventorySets a value: twice is the same as once
SetKeepForSets a value: twice is the same as once
SetKillSwitchSets a value: twice is the same as once
SetLabelPoliciesSets a value: twice is the same as once
SetLegalHoldSets a value: twice is the same as once
SetMCPClientPolicySets a value: twice is the same as once
SetMFAPolicySets a value: twice is the same as once
SetMailDomainsSets a value: twice is the same as once
SetMailOutsideSets a value: twice is the same as once
SetMailSenderSets a value: twice is the same as once
SetMembershipSets a value: twice is the same as once
SetMemorySettingsSets a value: twice is the same as once
SetModelAliasSets a value: twice is the same as once
SetModelCanarySets a value: twice is the same as once
SetModelMapRuleSets a value: twice is the same as once
SetModelVettingSets a value: twice is the same as once
SetMyNotificationAddressSets a value: twice is the same as once
SetNodeSandboxOptOutSets a value: twice is the same as once
SetNotifySettingsSets a value: twice is the same as once
SetOrphanPauseSets a value: twice is the same as once
SetProviderSets a value: twice is the same as once
SetPurposesSets a value: twice is the same as once
SetQualitySettingsSets a value: twice is the same as once
SetQuotaSets a value: twice is the same as once
SetRetentionSets a value: twice is the same as once
SetRoutinePausedSets a value: twice is the same as once
SetSecretSets a value: twice is the same as once
SetSecretExpirySets a value: twice is the same as once
SetSecretRemindersSets a value: twice is the same as once
SetSettingSets a value: twice is the same as once
SetSpendAlertsSets a value: twice is the same as once
SetSubjectRuleSets a value: twice is the same as once
SetTeamMemberSets a value: twice is the same as once
SetTenantAskSets a value: twice is the same as once
SetTenantBudgetSets a value: twice is the same as once
SetTenantCORSSets a value: twice is the same as once
SetTenantCacheSets a value: twice is the same as once
SetTenantChatSettingsSets a value: twice is the same as once
SetTenantEgressSets a value: twice is the same as once
SetTenantLabelsSets a value: twice is the same as once
SetTenantMaxEffortSets a value: twice is the same as once
SetTenantMoveDeadlineSets a value: twice is the same as once
SetTenantOIDCSets a value: twice is the same as once
SetTenantRegionSets a value: twice is the same as once
SetTenantRemoteSandboxSets a value: twice is the same as once
SetTenantRemovedAccountKeysSets a value: twice is the same as once
SetTenantReviewWideningSets a value: twice is the same as once
SetTenantRoleRulesSets a value: twice is the same as once
SetTenantSandboxIsolationSets a value: twice is the same as once
SetTenantSandboxLimitsSets a value: twice is the same as once
SetTenantTemporalNamespaceSets a value: twice is the same as once
SetTenantVulnerableInstallsSets a value: twice is the same as once
SetTestApprovalsSets a value: twice is the same as once
SetToolPolicySets a value: twice is the same as once
SetToolSwitchesSets a value: twice is the same as once
SetWorksCouncilSets a value: twice is the same as once
TrustPluginIndexSets a value: twice is the same as once
UnbindCredentialSets a value: twice is the same as once
UnblockNodeSets a value: twice is the same as once
UndrainNodeSets a value: twice is the same as once
UnlinkIncidentSets a value: twice is the same as once
UnlinkUserSets a value: twice is the same as once
UnretireInventoryItemSets a value: twice is the same as once
UnretirePluginSets a value: twice is the same as once
UpdateCandidateSets a value: twice is the same as once
UpdateIncidentSets a value: twice is the same as once
UpgradeNodesSets a value: twice is the same as once
UpsertAccountSets a value: twice is the same as once
Copyright © 2026