Add SSO to your app
Integrate OAuth 2.0 / OIDC. Verify user identity with your existing IdP (Okta, Azure AD, Keycloak). Layer Zoiko iD on top.
Choose your integration goal. Follow the guided walkthrough. Read the verified code sample. Connect to your first identity, authority or evidence layer. Every path is tested, documented, and ready to scale.

Filter by your integration goal, actor type, and preferred language. Each quickstart includes prerequisites, verified code samples, error scenarios, and next steps.
Integrate OAuth 2.0 / OIDC. Verify user identity with your existing IdP (Okta, Azure AD, Keycloak). Layer Zoiko iD on top.
Enroll a service, AI agent, or non-human principal. Generate API keys. Bind identity to your bot, workflow, or automation.
Grant time-limited, scoped on-behalf-of access. Define scope, purpose, and expiry. Revoke instantly when needed.
Subscribe to credential issued, revoked, mandate expired events. Build custom audit, compliance and observability workflows.
Query delegation status. Verify actor has valid mandate. Evaluate policy. Make access control decisions at request time.
Search audit logs. Filter by actor, action, time range. Export compliance evidence. Build compliance dashboards.
Check if a principal's credential is valid and not revoked.
// Verify credential validity
credential = zoiko.credentials.get(actor_id)
if credential.is_valid():
if credential.is_revoked():
return DENIED
return ALLOWED
else:
return EXPIRED
Check if an action fits the delegated mandate scope.
// Check if action is within mandate
mandate = zoiko.mandates.get(delegation_id)
if mandate.resource == requested_resource:
if requested_action in mandate.allowed_actions:
if mandate.is_within_time_bounds():
return ALLOWED
return DENIEDRespond to mandate.revoked webhook.
// Webhook handler
def on_mandate_revoked(event):
delegation_id = event.mandate_id
affected_actor = event.actor_id
# Invalidate cached state
cache.delete(f"mandate:{delegation_id}")
# Alert downstream systems
notify_services(
action="revoke_access",
actor=affected_actor,
reason=event.reason
)Code samples tested and working. Safe to copy and run. Maintained with every release.
Pseudocode or architecture guide. Illustrates patterns. Not ready to run as-is.
Coming soon. Sign up to be notified when this path launches.
Not in scope for now. Talk to our team for a custom solution.
Request sandbox access. We'll provision an isolated test environment and give you API keys.
Install the SDK for your language. Or use the CLI tool. Both are optional but make things faster.
Have our API Reference handy. Quickstarts point to specific endpoints. Reference has all the details.
def retry_with_backoff(fn, max_retries=3):
backoff_ms = 100
for attempt in range(max_retries):
try:
return fn()
except ForbiddenError as e:
if attempt < max_retries - 1:
time.sleep(backoff_ms / 1000)
backoff_ms *= 2
else:
# Final attempt failed; escalate
log_and_alert(e)Pick a quickstart above and follow along. If you hit any blockers, we're here to help.