OIDC Provider
Use VeraID as an OIDC provider for your own applications. OIDC Guide
Federation allows your organization to connect external identity providers (IdPs) to VeraID, enabling users to sign in with their existing corporate credentials. VeraID supports both inbound OIDC and inbound SAML federation, with automatic domain-based routing and just-in-time (JIT) user provisioning.
Connect an external OIDC-compliant identity provider (Okta, Auth0, Entra ID, Google Workspace, etc.) to VeraID.
curl -X POST https://app.veraid.io/api/v1/federation/oidc \ -H "Authorization: Bearer kd_live_your_api_key" \ -H "Content-Type: application/json" \ -d '{ "name": "Corporate Okta", "discoveryUrl": "https://company.okta.com/.well-known/openid-configuration", "clientId": "0oa1b2c3d4e5f6g7h8", "clientSecret": "okta_client_secret_value", "scopes": ["openid", "email", "profile", "groups"], "domains": ["company.com", "subsidiary.com"], "jitProvisioning": { "enabled": true, "defaultGroups": ["employees"], "defaultRoles": ["user"], "attributeMapping": { "firstName": "given_name", "lastName": "family_name", "email": "email", "department": "department", "groups": "groups" } } }'Response:
{ "id": "fed_oidc_abc123", "name": "Corporate Okta", "protocol": "oidc", "discoveryUrl": "https://company.okta.com/.well-known/openid-configuration", "domains": ["company.com", "subsidiary.com"], "status": "active", "callbackUrl": "https://app.veraid.io/api/v1/federation/oidc/fed_oidc_abc123/callback", "createdAt": "2026-03-26T10:00:00Z"}After creating the federation connection, configure the external IdP with the callback URL:
callbackUrl returned by VeraID:
https://app.veraid.io/api/v1/federation/oidc/{federationId}/callbackopenid, email, profile).Map claims from the external IdP’s ID token to VeraID user attributes:
| External Claim | VeraID Attribute | Description |
|---|---|---|
sub | externalId | Unique identifier at the external IdP |
email | email | User email address |
given_name | firstName | First name |
family_name | lastName | Last name |
groups | groups | Group memberships (if available) |
picture | avatarUrl | Profile photo URL |
Connect an external SAML 2.0 identity provider to VeraID.
curl -X POST https://app.veraid.io/api/v1/federation/saml \ -H "Authorization: Bearer kd_live_your_api_key" \ -H "Content-Type: application/json" \ -d '{ "name": "Corporate ADFS", "metadataUrl": "https://adfs.company.com/federationmetadata/2007-06/federationmetadata.xml", "domains": ["company.com"], "nameIdFormat": "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", "attributeMapping": { "email": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress", "firstName": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname", "lastName": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname", "groups": "http://schemas.xmlsoap.org/claims/Group" }, "jitProvisioning": { "enabled": true, "defaultGroups": ["employees"], "defaultRoles": ["user"] } }'If the external IdP does not expose a metadata URL, upload the metadata XML directly:
curl -X POST https://app.veraid.io/api/v1/federation/saml \ -H "Authorization: Bearer kd_live_your_api_key" \ -H "Content-Type: application/json" \ -d '{ "name": "Corporate ADFS", "metadataXml": "<EntityDescriptor xmlns=\"urn:oasis:names:tc:SAML:2.0:metadata\" entityID=\"http://adfs.company.com/adfs/services/trust\">...</EntityDescriptor>", "domains": ["company.com"], "jitProvisioning": { "enabled": true, "defaultGroups": ["employees"] } }'Response:
{ "id": "fed_saml_def456", "name": "Corporate ADFS", "protocol": "saml", "entityId": "http://adfs.company.com/adfs/services/trust", "domains": ["company.com"], "status": "active", "spMetadataUrl": "https://app.veraid.io/api/v1/federation/saml/fed_saml_def456/metadata", "acsUrl": "https://app.veraid.io/api/v1/federation/saml/fed_saml_def456/acs", "createdAt": "2026-03-26T10:00:00Z"}Configure the external SAML IdP with VeraID’s SP metadata:
https://app.veraid.io/api/v1/federation/saml/{federationId}/metadatahttps://app.veraid.io/api/v1/federation/saml/{federationId}/acshttps://app.veraid.io/api/v1/federation/saml/{federationId}emailAddressDomain routing determines which external IdP handles authentication for users from a specific email domain.
jane@company.com).company.com).company.com.Each federation connection specifies one or more domains in the domains field. A domain can only be mapped to one federation connection at a time.
# List all domain mappingscurl -X GET https://app.veraid.io/api/v1/federation/domains \ -H "Authorization: Bearer kd_live_your_api_key"Response:
{ "data": [ { "domain": "company.com", "federationId": "fed_oidc_abc123", "federationName": "Corporate Okta", "protocol": "oidc", "verified": true }, { "domain": "subsidiary.com", "federationId": "fed_oidc_abc123", "federationName": "Corporate Okta", "protocol": "oidc", "verified": true }, { "domain": "partner.com", "federationId": "fed_saml_def456", "federationName": "Partner ADFS", "protocol": "saml", "verified": true } ]}Before a domain can be used for federation routing, it must be verified:
_veraid-verification.company.com TXT "veraid-verify=abc123def456"Just-in-time (JIT) provisioning automatically creates VeraID user accounts when users authenticate through a federated IdP for the first time.
| Setting | Default | Description |
|---|---|---|
enabled | false | Enable JIT provisioning for this federation connection |
defaultGroups | [] | Groups to assign to JIT-provisioned users |
defaultRoles | ["user"] | Roles to assign to JIT-provisioned users |
attributeMapping | Standard mapping | Map external IdP attributes to VeraID fields |
updateOnLogin | false | Update user attributes from the IdP on every login |
requireEmailVerification | true | Only provision users with verified email addresses |
When updateOnLogin is enabled, VeraID updates the local user profile with the latest attributes from the external IdP on every authentication. This keeps directory data in sync without requiring SCIM:
{ "jitProvisioning": { "enabled": true, "updateOnLogin": true, "attributeMapping": { "firstName": "given_name", "lastName": "family_name", "department": "department", "groups": "groups" } }}curl -X GET https://app.veraid.io/api/v1/federation \ -H "Authorization: Bearer kd_live_your_api_key"curl -X POST https://app.veraid.io/api/v1/federation/{federationId}/test \ -H "Authorization: Bearer kd_live_your_api_key"curl -X PATCH https://app.veraid.io/api/v1/federation/{federationId} \ -H "Authorization: Bearer kd_live_your_api_key" \ -H "Content-Type: application/json" \ -d '{ "status": "disabled" }'When a federation connection is disabled, users from its mapped domains fall back to VeraID’s built-in authentication methods (password, passkey, etc.).
curl -X DELETE https://app.veraid.io/api/v1/federation/{federationId} \ -H "Authorization: Bearer kd_live_your_api_key"OIDC Provider
Use VeraID as an OIDC provider for your own applications. OIDC Guide
Conditional Access
Enforce policies based on federation source and authentication context. Conditional Access
User Directory
Manage users and groups provisioned via federation. Directory Guide