Xentree Docs
StatusMy Xentree
StatusMy Xentree
  1. Documentation
  • Documentation
    • Introduction
    • Quickstart
    • Authentication
    • Conversations
    • Knowledge Base
    • Organizations
    • Custom Domains
    • Admin Stats and Members
    • Profile & Analytics
    • Xentree English
    • Xentree Live
    • Skills Connector
    • Integration Tokens
    • API Keys
    • Webhooks
    • Subscriptions and Entitlements
    • Errors and Limits
  • API Reference
    • Authentication
      • Register a new user
      • Log in and get an access token
      • Refresh an access token
      • Log out the current user
      • Get the current authenticated user
      • Update the current authenticated user
    • Conversations
      • List available AI providers
      • Generate an AI response
      • List conversations for the current user
      • Create a conversation
      • Delete a conversation
      • Get messages for a conversation
      • Start a conversation session
      • Update session activity
      • End a conversation session
      • Get current session status
      • Search indexed user content
      • Search infrastructure status
      • Rebuild search index
      • List notes
      • Create a note
      • Update a note
      • Delete a note
    • Knowledge Base
      • Search the knowledge base
      • List documents
      • Upload document
      • Query knowledge
    • Organizations
      • List organizations for the current user
      • Create an organization
      • Get organization details
      • Update organization details
      • Delete an organization
      • List organization members
      • Add a member to an organization
      • Update a member's role
      • Comprehensive member update (role, organization, team)
      • Remove a member from an organization
    • Custom Domains
      • Configure organization custom domain
      • Get organization custom-domain status
    • Admin Stats & Members
      • Engagement dashboard
      • Engagement member detail
      • Progress KPI cards
      • List learning objectives
      • Create learning objective
      • Archive learning objective
      • Suggest learning objectives (with draft)
      • Progress members table
      • Impact KPI cards
      • List learning targets
      • Create or update learning target
      • Suggest learning targets
      • Export admin stats report as PDF
      • Export admin stats report as XLSX
    • Profile & Analytics
      • Get my XP profile
      • Get a user's public profile
      • Get streak status
      • Get weekly XP activity
      • Get learning pulse (365-day heatmap)
      • Get daily quests
      • Get learning time analytics
    • Xentree English
      • List XEL modules with user progress
      • Get XEL module details
      • Start an XEL module
      • Complete an XEL module
      • Regenerate a task variant
      • Get current XPI breakdown
      • Get XPI history
      • Start a learning session
      • End a learning session
      • Save a transcript entry
      • Get transcripts for a session
      • Submit a learning task response
      • Run AI evaluation for speaking or writing
      • Get the XEL dashboard overview
    • Xentree Live
      • Get remaining Xentree Live quota
      • Start a live session
      • Update an active live session heartbeat
      • End a live session
      • Update the user nickname used in Xentree Live
      • List live transcripts for the current user
      • Save live session transcripts
      • Get a single live transcript
    • Skills Connector
      • List active integrations for the current user
      • Start the Google Calendar OAuth flow
    • Integration Tokens
      • Issue user- or organization-scoped RS256 integration grant token
      • Verify integration token signature and subject claims
      • Revoke integration token by token or jti
      • Rotate integration grant and optionally revoke previous token
      • Get active JWKS material for an integration subject
      • Get active integration key fingerprints for a subject
      • Admin observability for integration token revocations
    • API Keys
      • List API keys
      • Create an API key
      • Delete an API key
    • Health
      • Health check
      • Detailed health check
    • Xentree Connect
      • List Connect Clients
      • Create Connect Client
      • Get Connect Client
      • Update Connect Client
      • List Connected People
      • Toggle Connect Client Active
      • Get Consent Context
      • Deprovision Connect Member
      • Launch Connect
      • Revoke Own Connect Binding
      • Revoke Organization Connect Binding
      • Claim Connect Session
    • Organization Webhooks
      • Create Webhook
      • List Webhooks
      • Get Webhook
      • Update Webhook
      • Delete Webhook
      • List Deliveries
      • Get Delivery
      • Rotate Webhook Secret
      • Send Test Ping
    • Skill Vault
      • List Skills
      • Create Skill
      • Get Active Organization
      • Set Active Organization
      • Clear Active Organization
      • Create Skill Export
      • Download Skill Export
      • Get Skill Summary
      • Get Skill
      • Update Skill
      • Archive Skill
      • Download Skill Md
      • List Skill Grants
      • Grant Skill To Organization
      • Revoke Skill Organization Grant
    • Subscriptions
      • Get My Limits
      • Get My Subscription
      • Get My Usage
  • Schemas
    • Error
    • ConfigureCustomDomainRequest
    • SimpleDetailResponse
    • CustomDomainStatus
    • HealthLivenessResponse
    • HealthDetailedResponse
    • HealthDetailedServices
    • DatabaseHealthStatus
    • DatabasePoolStatus
    • TokenResponse
    • DatabaseConnectionStats
    • UserProfile
    • SimpleMessageResponse
    • LogoutResponse
    • ChatRequest
    • ChatResponse
    • ConversationCreateRequest
    • ConversationResponse
    • CoreSearchConversationResult
    • CoreSearchMessageResult
    • CoreSearchResponse
    • TypesenseReindexRequest
    • TypesenseStatusResponse
    • NoteCreate
    • NoteUpdate
    • NoteResponse
    • CoreConversationSessionStartResponse
    • CoreConversationSessionActivityResponse
    • CoreConversationSessionEndResponse
    • CoreConversationSessionStatusResponse
    • AdminStatsProgressMemberRow
    • TenantResponse
    • AdminStatsProgressMembersResponse
    • AdminStatsOrganizationSummary
    • AdminStatsDateRangeSummary
    • AdminStatsKPIStat
    • AdminStatsPulseDay
    • AdminStatsPulseSummary
    • AdminStatsTeamPulse
    • AdminStatsTrendPoint
    • AdminStatsDistributionBucket
    • AdminStatsCohortRetentionCell
    • AdminStatsCohortRetentionRow
    • AdminStatsDashboardResponse
    • AdminStatsCohortAnalyticsRow
    • AdminStatsUserDetailResponse
    • AdminStatsCohortRetentionAnalytics
    • AdminStatsCohortRetentionResponse
    • AdminStatsMemberActivityRow
    • AdminStatsAffiliation
    • AdminStatsMemberDirectoryRow
    • AdminStatsMutationResponse
    • ProgressKPIItem
    • ProgressObjectiveResponse
    • ProgressKPIResponse
    • ProgressKeyResultPayload
    • ProgressObjectiveCreateRequest
    • ProgressObjectiveSuggestRequest
    • ProgressObjectiveKeyResult
    • ProgressObjectiveSuggestedItem
    • ProgressMembersResponse
    • ProgressObjectiveSuggestResponse
    • ProgressTrendResponse
    • ProgressMemberAttempt
    • ProgressMemberSession
    • ProgressMemberRow
    • ProgressDistributionBucket
    • ProgressDistributionResponse
    • ImpactKPIItem
    • ImpactKPIResponse
    • ImpactTrendResponse
    • ImpactLevelItem
    • ImpactLevelProgressionResponse
    • LearningTargetResponse
    • ImpactTeamBreakdownItem
    • ImpactTeamBreakdownResponse
    • ImpactTopPerformerItem
    • ImpactTopPerformersResponse
    • LearningTargetCreateRequest
    • LearningTargetListResponse
    • KnowledgeSearchResponse
    • LearningTargetSuggestResponse
    • RagDocument
    • LVIWeightResponse
    • LVIWeightUpdateRequest
    • IntegrationOut
    • KnowledgeSearchRequest
    • KnowledgeSearchResultItem
    • RagUploadResponse
    • RagQueryRequest
    • RagQueryResponse
    • LiveStartSessionRequest
    • OrganizationResponse
    • LiveSessionResponse
    • LiveQuotaResponse
    • TranscriptTurn
    • XELTaskSubmissionRequest
    • SaveLiveTranscriptsRequest
    • OrganizationCreateRequest
    • MemberResponse
    • XELModuleSummary
    • XELModuleDetail
    • XELTaskSubmissionResponse
    • XELEvaluationResponse
    • XELDashboardResponse
    • XELModuleStartResponse
    • XELSessionStartRequest
    • XELModuleCompleteResponse
    • XELTaskRegenerateRequest
    • XELTaskRegenerateResponse
    • XELXpiResponse
    • XELXpiHistoryItem
    • XELSessionStartResponse
    • XELSessionEndRequest
    • XELSessionEndResponse
    • XELTranscriptSaveRequest
    • XELTranscriptSaveResponse
    • XELTranscriptItem
    • LiveSessionEndResponse
    • LiveSessionHeartbeatResponse
    • LiveNicknameResponse
    • LiveTranscriptSaveResponse
    • LiveTranscriptListItem
    • LiveTranscriptListResponse
    • LiveTranscriptDetailResponse
    • XPProfileResponse
    • PublicXPProfileResponse
    • StreakStatusResponse
    • WeeklyActivityResponse
    • LearningPulseDayEntry
    • APIKeyResponse
    • LearningPulseResponse
    • IntegrationGrantRequest
    • QuestItem
    • IntegrationGrantResponse
    • QuestsResponse
    • IntegrationVerifyRequest
    • LearningTimeAnalyticsResponse
    • IntegrationVerifyResponse
    • APIKeyCreateRequest
    • IntegrationRevokeRequest
    • IntegrationRevokeResponse
    • IntegrationJWKSResponse
    • IntegrationFingerprintResponse
    • ConnectClientResponse
    • ConnectClientCreateRequest
    • IntegrationRotateRequest
    • ConnectClientUpdateRequest
    • IntegrationRotateResponse
    • ConnectedPersonResponse
    • WebhookCreate
    • WebhookCreated
    • IntegrationTokenRevocationItem
    • WebhookOut
    • WebhookUpdate
    • DeliveryPage
    • WebhookDeliveryOut
    • WebhookDeliveryDetail
    • TestPingAccepted
    • SkillMarkdownInput
    • ActiveOrganizationInput
    • GrantInput
    • ConsentContextRequest
    • Body_deprovision_connect_member_connect_v1_deprovision__client_id__post
    • Body_launch_connect_connect_v1_launch__client_id__post
    • SessionClaimRequest
  1. Documentation

Subscriptions and Entitlements

These read-only endpoints tell your application which plan a user is on, what that plan allows, and how much of the monthly allowance has been used. All three require a bearer token (the signed-in user) and return data for that user only.

Endpoints#

MethodPathPurpose
GET/api/subscriptions/meEffective plan, entitlements, and subscription state
GET/api/subscriptions/limitsWhat the plan allows. null means unlimited
GET/api/subscriptions/usageUsage in the current calendar month (UTC)
Limits and usage are what the backend enforces, so you can use them to show quota UI before a request is rejected.

GET /api/subscriptions/me#

{
  "plan": "team",
  "entitlements": { },
  "subscription_status": "active",
  "current_period_end": "2026-11-13T00:00:00+00:00",
  "last_plan_code": "team",
  "last_cycle": "monthly",
  "team_licenses": 12,
  "team_min_licenses": 10,
  "queued_subscription": {
    "id": "…",
    "plan_code": "team",
    "cycle": "annual",
    "starts_at": "2026-11-13T00:00:00+00:00",
    "ends_at": "2027-11-13T00:00:00+00:00"
  }
}
plan is the plan currently in effect. Users without an active paid subscription are on basic.
subscription_status is active, canceled, expired, or null if the user has never subscribed.
queued_subscription appears only when a renewal or plan change is scheduled to start after the current period.
team_licenses and team_min_licenses are described under Seats and licenses.

GET /api/subscriptions/limits#

{
  "plan": "pro",
  "certificates_monthly_limit": 10,
  "pdf_monthly_limit": 20,
  "youtube_minutes_monthly_limit": null,
  "quiz_generation_monthly_limit": 50,
  "analytics_erpi": true,
  "analytics_export": true,
  "organization_create": true,
  "organization_invite": true,
  "live_monthly_limit_seconds": 36000,
  "youtube_upload_enabled": false,
  "cloudflare_stream_upload_enabled": false,
  "secure_enterprise_streaming": false,
  "private_storage_minutes": 0,
  "secure_enterprise_streaming_addon_price_idr": 50000,
  "secure_enterprise_streaming_addon_price_usd_cents": 300,
  "reset_date": "2026-11-01T00:00:00+00:00"
}
(The numbers above are illustrative. Read the real values from the endpoint.)
Any *_limit field set to null means unlimited.
reset_date is when monthly counters reset: the first day of the next calendar month, UTC.

GET /api/subscriptions/usage#

{
  "month_key": "2026-10",
  "chat_messages_count": 120,
  "certificates_issued_count": 2,
  "pdf_uploads_count": 4,
  "quiz_generations_count": 7,
  "youtube_imports_count": 35,
  "live_seconds_used": 1800
}
youtube_imports_count is measured in minutes. live_seconds_used is in seconds. Compare each counter with the matching field from /limits.
When a monthly limit is reached, the quota-protected endpoint responds with 429 and a body like:
{
  "detail": {
    "error": "…",
    "message": "Monthly pdf limit reached on the PRO plan.",
    "upgrade_required": true,
    "quota": "pdf",
    "plan": "pro",
    "limit": 20,
    "used": 20
  }
}
See Errors and Limits for the full list.

Seats and licenses#

The Team plan is sold per license (seat). A subscription has a quantity: the number of licenses purchased.
team_licenses in /me is the number of licenses currently held, including a queued renewal. It is the default quantity for the next renewal.
team_min_licenses is the fewest licenses the next renewal can buy: the number of seats in use, and never less than the Team minimum of 10.
Extra seats can be added mid-period. Each addition is recorded on its invoice as seat_addition.
Checkout and seat-purchase requests accept a quantity field.

Entitlement sources#

Some organization-level capabilities, currently Xentree Connect and custom domains, are granted by the plan or manually by Xentree. Each organization records where the grant came from:
SourceMeaning
planGranted because the organization's administrator is on a plan that includes it. It follows the plan: it is withdrawn when the plan lapses and granted again when it returns
manualGranted by Xentree support. It is kept when plan changes occur
The organization response exposes the resulting flags as connect_entitlement and custom_domain_entitlement. Without the corresponding entitlement, the related Connect and custom-domain endpoints are rejected.

AI keys (BYOK)#

AI features run on the learner's own Google Gemini API key. Plans control quotas, not AI provider spend. If a user has not connected a key, AI endpoints respond with HTTP 428 Precondition Required. See Errors and Limits.
Modified at 2026-10-13 16:08:30
Previous
Webhooks
Next
Errors and Limits
Built with