Jaapi supports SCIM 2.0 for automated user lifecycle management. Connected to your identity provider, store accounts are created when employees join, kept in sync while they're here, and deactivated when they leave — no manual user admin.
The values you'll paste into your identity provider (Okta, Microsoft Entra, PingOne, …).
application/scim+json or application/jsonuserName (the user's email address)SCIM owns identity: who has an account, what they're called, and whether they're active. Everything a user does inside the store stays in Jaapi.
None of these are readable or writable over SCIM.
Every request carries a Bearer token in the Authorization header. Store admins create and revoke tokens in the store settings under API Tokens.
Treat tokens like passwords
A SCIM token has full access to user management on this store. It's shown once at creation — copy it straight into your IdP's credential vault. Tokens are store-specific and can't be reused across stores.
Everything lives under the base URL. The discovery endpoints (GET /ServiceProviderConfig, GET /ResourceTypes, GET /Schemas) describe the
implementation's capabilities; most IdPs call them automatically during
setup.
How SCIM attributes map onto a Jaapi user. Attributes not listed here are ignored on write.
| SCIM attribute | Maps to | Access |
|---|---|---|
id | Jaapi user UUID | Read-only |
externalId | Your system's user identifier | Read / write |
userName | Email address — unique per store | Read / write |
name.formatted | Full display name | Read / write |
name.givenName / name.familyName | First / last name | Read / write |
emails[0].value | Email address | Read / write |
active | Account status | Read / write |
meta.created / meta.lastModified | Created / last login timestamps | Read-only |
Filter on userName, externalId or active, and combine terms with and. Results are
paginated with startIndex (1-based) and count (max 1000); the response's totalResults tells you how many
pages exist.
The email domain must match the store's allowed domains. New users start without credit — admins allocate it inside Jaapi — unless we've configured an onboarding credit grant for your store.
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"userName": "jane.doe@example.com",
"name": {
"formatted": "Jane Doe",
"givenName": "Jane",
"familyName": "Doe"
},
"emails": [{ "value": "jane.doe@example.com", "type": "work", "primary": true }],
"externalId": "employee-12345",
"active": true
}Returns 201 Created with the user object and a Location header. If the user was previously deactivated, the
account is reactivated and 200 OK is returned instead.
PATCH applies partial updates in the SCIM PatchOp format (RFC 7644 section 3.5.2) — the format Microsoft Entra, Okta and most IdPs send. PUT replaces every mutable attribute at once.
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{ "op": "Replace", "path": "name.formatted", "value": "Jane Smith" },
{ "op": "Replace", "path": "active", "value": false }
]
}Supported operations: Replace, Add and Remove — on active, userName, externalId, name and its sub-attributes, emails, and emails[type eq "work"].value (used
by Entra). An operation without a path takes a partial user object as its
value.
PUT clears what you omit
A PUT request replaces all mutable fields, so leaving externalId out of the body erases the stored value. Use PATCH when you only mean to change specific fields.
Both flows are soft — order history is always retained — and both return the user's unspent credit to one of your store admins so it isn't lost. The reclaimed amount is recorded on the account.
Set active to false — the standard IdP
offboarding signal. Access ends immediately. Setting active back to true reactivates the account,
and we can configure your store to restore the reclaimed credit
automatically on reactivation — useful for rehires and leaves of
absence.
Permanent deactivation, returning 204 No Content. Credit
is reclaimed the same way.
Admin users can't be deleted over SCIM — the request returns 403. Deactivation works on any account, admins included.
Failures return a SCIM-compliant error object with a machine-readable scimType.
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"],
"status": "400",
"scimType": "invalidValue",
"detail": "Invalid user data"
}| Status | Meaning |
|---|---|
200 / 201 / 204 | Success — fetched or updated / created / deleted |
400 | Invalid request data |
401 | Missing or invalid Bearer token |
403 | Operation not allowed — e.g. deleting an admin |
404 | User not found in this store |
405 | HTTP method not allowed |
501 | Not supported: group writes (Jaapi uses a flat role model, so GET /Groups lists nothing and nothing can be created),
bulk operations, passwords (authentication runs over SSO) and
sorting (results are ordered by creation date) |
Five steps, about fifteen minutes with IdP admin access at hand.
userName, name.formatted and active. The default
mappings in Okta and Entra work as-is.Dedicated walkthroughs with the exact screens and field names for your provider.