Summary and recommendation
Jasper exposes user lifecycle management exclusively through SCIM 2.0 at https://api.jasper.ai/scim/v2. The public content API (api.jasper.ai/v1) handles generation workflows, not identity operations - these are entirely separate surfaces with separate auth tokens.
SCIM is available on Business and Enterprise plans only; SSO (SAML) must be active before SCIM can be enabled, and attempting to activate SCIM without SSO will fail silently or with an error depending on the admin UI state.
Authentication uses a single long-lived bearer token generated once in Jasper Admin → Security → SCIM Provisioning. No token rotation mechanism is publicly documented; if the token is lost or compromised, a new one must be regenerated and every IdP integration updated.
Officially supported IdPs are Okta and Microsoft Entra ID - other IdPs are not documented and carry integration risk.
API quick reference
| Has user API | Yes |
| Auth method | API Key (Bearer token) for content API; SCIM uses a separate long-lived bearer token generated in Jasper admin settings |
| Base URL | Official docs |
| SCIM available | Yes |
| SCIM plan required | Business or Enterprise (SSO must be configured first) |
Authentication
Auth method: API Key (Bearer token) for content API; SCIM uses a separate long-lived bearer token generated in Jasper admin settings
Setup steps
- For content API: Navigate to Jasper Settings → API → Generate API Key; pass as Authorization: Bearer
header. - For SCIM: Navigate to Jasper Admin → Security → SCIM Provisioning; enable SCIM and copy the generated SCIM bearer token.
- Configure your IdP (Okta or Entra ID) with the SCIM base URL and bearer token.
- Assign users/groups in the IdP to trigger provisioning to Jasper.
User object / data model
| Field | Type | Description | On create | On update | Notes |
|---|---|---|---|---|---|
| id | string | SCIM resource identifier assigned by Jasper | server-assigned | immutable | Returned in SCIM responses; used for PATCH/PUT/DELETE operations |
| userName | string | User's email address; used as unique identifier | required | supported | Must be a valid email; maps to Jasper account email |
| name.givenName | string | User's first name | optional | supported | Part of SCIM name complex attribute |
| name.familyName | string | User's last name | optional | supported | Part of SCIM name complex attribute |
| emails | array | List of email objects; primary email used for account | required | supported | Set primary: true on the main email entry |
| active | boolean | Whether the user account is active | optional (defaults true) | supported | Setting to false deactivates/deprovisions the user in Jasper |
| externalId | string | Identifier from the IdP for correlation | optional | supported | Set by IdP; used to correlate SCIM records |
| groups | array | Groups the user belongs to | read-only in user response | managed via Group endpoints | Group membership drives Jasper workspace/team assignment |
Core endpoints
List Users
- Method: GET
- URL:
https://api.jasper.ai/scim/v2/Users - Watch out for: Filter support may be limited; test filter expressions against your Jasper instance before relying on them in automation.
Request example
GET /scim/v2/Users?filter=userName eq "user@example.com"
Authorization: Bearer <scim_token>
Content-Type: application/scim+json
Response example
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
"totalResults": 1,
"Resources": [{
"id": "abc123",
"userName": "user@example.com",
"active": true
}]
}
Get User
- Method: GET
- URL:
https://api.jasper.ai/scim/v2/Users/{id} - Watch out for: SCIM ID is Jasper-internal; store it after provisioning for subsequent operations.
Request example
GET /scim/v2/Users/abc123
Authorization: Bearer <scim_token>
Response example
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"id": "abc123",
"userName": "user@example.com",
"active": true,
"name": {"givenName": "Jane", "familyName": "Doe"}
}
Create User
- Method: POST
- URL:
https://api.jasper.ai/scim/v2/Users - Watch out for: User receives an invitation email from Jasper upon provisioning; seat consumption begins immediately.
Request example
POST /scim/v2/Users
Authorization: Bearer <scim_token>
Content-Type: application/scim+json
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"userName": "newuser@example.com",
"name": {"givenName": "John", "familyName": "Smith"},
"active": true
}
Response example
{
"id": "xyz789",
"userName": "newuser@example.com",
"active": true
}
Update User (partial)
- Method: PATCH
- URL:
https://api.jasper.ai/scim/v2/Users/{id} - Watch out for: Setting active=false deactivates the user but may not immediately free the seat depending on billing cycle.
Request example
PATCH /scim/v2/Users/xyz789
Authorization: Bearer <scim_token>
Content-Type: application/scim+json
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [{"op": "replace", "path": "active", "value": false}]
}
Response example
{
"id": "xyz789",
"userName": "newuser@example.com",
"active": false
}
Delete User
- Method: DELETE
- URL:
https://api.jasper.ai/scim/v2/Users/{id} - Watch out for: Deletion is typically handled via active=false (deprovision) in IdP-driven flows; hard DELETE behavior should be verified with Jasper support.
Request example
DELETE /scim/v2/Users/xyz789
Authorization: Bearer <scim_token>
Response example
HTTP 204 No Content
List Groups
- Method: GET
- URL:
https://api.jasper.ai/scim/v2/Groups - Watch out for: Groups in Jasper map to teams/workspaces; group provisioning availability depends on plan and IdP configuration.
Request example
GET /scim/v2/Groups
Authorization: Bearer <scim_token>
Response example
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
"totalResults": 2,
"Resources": [{"id": "grp1", "displayName": "Marketing"}]
}
Create Group
- Method: POST
- URL:
https://api.jasper.ai/scim/v2/Groups - Watch out for: Group support scope (create/update/delete) should be confirmed with Jasper; IdP-pushed groups are the primary supported flow.
Request example
POST /scim/v2/Groups
Authorization: Bearer <scim_token>
Content-Type: application/scim+json
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"displayName": "Sales Team",
"members": [{"value": "abc123"}]
}
Response example
{
"id": "grp2",
"displayName": "Sales Team",
"members": [{"value": "abc123"}]
}
Rate limits, pagination, and events
- Rate limits: Rate limits for the Jasper content API are not publicly documented in detail. SCIM provisioning rate limits are not published.
- Rate-limit headers: Unknown
- Retry-After header: Unknown
- Rate-limit notes: No official rate limit figures published as of research date. Contact Jasper support for enterprise rate limit details.
- Pagination method: none
- Default page size: 0
- Max page size: 0
- Pagination pointer: Not documented
| Plan | Limit | Concurrent |
|---|---|---|
| Creator | Not publicly documented | 0 |
| Pro | Not publicly documented | 0 |
| Business/Enterprise | Not publicly documented | 0 |
- Webhooks available: No
- Webhook notes: No publicly documented webhook system for user lifecycle events in Jasper as of research date.
- Alternative event strategy: Use SCIM provisioning via IdP (Okta, Entra ID) for automated user lifecycle management; poll SCIM /Users endpoint for state changes if needed.
SCIM API status
SCIM available: Yes
SCIM version: 2.0
Plan required: Business or Enterprise (SSO must be configured first)
Endpoint: https://api.jasper.ai/scim/v2
Supported operations: GET /Users, GET /Users/{id}, POST /Users, PATCH /Users/{id}, DELETE /Users/{id}, GET /Groups, POST /Groups, PATCH /Groups/{id}
Limitations:
- SSO (SAML) must be enabled before SCIM can be activated.
- SCIM bearer token is a single long-lived token generated in admin UI; no rotation mechanism documented.
- Supported IdPs are Okta and Microsoft Entra ID; other IdPs not officially documented.
- Group provisioning scope and behavior not fully documented publicly.
- SCIM filter query support extent is not officially documented.
- Available on Business plan (10+ seats, custom pricing) and Enterprise; not available on Creator or Pro plans.
Common scenarios
The three primary automation scenarios are provisioning via Okta, deprovisioning departing employees, and group-push for workspace assignment.
For provisioning, the IdP sends POST /scim/v2/Users; Jasper creates the account and fires an invitation email, with seat billing starting immediately - bulk provisioning against a contract minimum should be validated before execution.
For deprovisioning, the IdP sends PATCH /scim/v2/Users/{id} with active=false; hard DELETE behavior and its seat-release timing are not clearly documented and should be confirmed with the Jasper account team before relying on it in automated offboarding flows.
Group push maps IdP groups to Jasper teams or workspaces via POST /scim/v2/Groups, but the group-to-workspace mapping behavior is not fully documented publicly. SCIM filter query support extent is also undocumented - test filter expressions against your instance before building automation that depends on them. The SCIM ID assigned by Jasper is internal; store it after initial provisioning for all subsequent PATCH and DELETE operations.
Provision new employee via Okta
- In Jasper Admin → Security, enable SSO (SAML) with Okta.
- Enable SCIM Provisioning and copy the generated bearer token.
- In Okta, configure the Jasper SCIM app with base URL https://api.jasper.ai/scim/v2 and the bearer token.
- Assign the new employee to the Jasper app in Okta.
- Okta sends POST /scim/v2/Users to Jasper; user receives invite email and is active in Jasper.
Watch out for: User is billed as a seat immediately upon provisioning; ensure seat count aligns with contract before bulk provisioning.
Deprovision departing employee
- In Okta (or Entra ID), unassign the user from the Jasper application or deactivate the user.
- IdP sends PATCH /scim/v2/Users/{id} with active=false to Jasper.
- Jasper deactivates the user account, revoking access.
- Verify deactivation by checking user status in Jasper Admin → Members.
Watch out for: Deactivation (active=false) vs. hard DELETE may have different seat-release timing; confirm billing behavior with Jasper support.
Assign users to a team/workspace via group push
- Create a group in Okta or Entra ID corresponding to a Jasper team (e.g., 'Marketing').
- Add users to the group in the IdP.
- Configure group push in the IdP SCIM app to sync the group to Jasper.
- IdP sends POST /scim/v2/Groups with members list; Jasper creates or maps the group to a workspace.
- Verify group membership in Jasper Admin → Teams.
Watch out for: Group-to-workspace mapping behavior in Jasper is not fully documented; test with a pilot group before rolling out broadly.
Why building this yourself is a trap
The identity graph risk with Jasper's SCIM implementation is concentrated in three areas. First, the single long-lived bearer token is a credential management liability - there is no documented rotation path, so token hygiene depends entirely on the operator.
Second, the active=false deactivation path and hard DELETE are not clearly differentiated in terms of seat release, meaning your identity graph may show a user as deprovisioned while Jasper continues billing the seat through the contract cycle. Third, role assignment (Admin vs.
Member) has no SCIM attribute mapping documented publicly - group push is the only IdP-driven mechanism for workspace assignment, and its behavior is partially undocumented.
Teams building an identity graph over Jasper should treat SCIM group membership as the authoritative signal for workspace access, poll GET /scim/v2/Users for active-state reconciliation, and maintain a side-channel confirmation step with Jasper billing for any deprovisioning event that should release a seat.
Automate Jasper workflows without one-off scripts
Stitchflow builds and maintains end-to-end IT automation across your SaaS stack, including apps without APIs. Built for exactly how your company works, with human approvals where they matter.