API Reference

Complete reference for all TutorFlow Agent Platform endpoints.

Base URL

https://api.tutorflow.io/v1/platform

Authentication

External endpoints require a valid Platform API key passed via the Authorization header. Internal management endpoints are authenticated through TutorFlow admin auth. See Authentication for details.

Endpoints Overview

Evaluations (API Key required)

MethodEndpointDescription
POST/evaluationsCreate an evaluation request
GET/evaluations/:idGet evaluation result
GET/evaluations/:id/files/:field/:indexDownload evaluation files
GET/evaluationsList evaluation requests. Supports learnerId filter

Learners (API Key required)

MethodEndpointDescription
GET/learnersList learners with aggregate evaluation stats
GET/learners/:learnerIdGet learner profile with per-concept mastery summaries

Courses (API Key required)

MethodEndpointDescription
POST/coursesCreate a course generation request
GET/courses/:idGet course by ID
GET/coursesList course requests
POST/courses/:id/edit-tokenGenerate an edit token for a course
GET/courses/public/:shareTokenGet public course by share token
GET/courses/public/:shareToken/fullGet full public course with lessons
GET/courses/public/:shareToken/lessons/:sequenceGet public lesson by sequence
GET/courses/edit/:editTokenGet course by edit token
GET/courses/edit/:editToken/fullGet full course with lessons
GET/courses/edit/:editToken/lessons/:sequenceGet lesson by edit token
PATCH/courses/edit/:editToken/lessons/:sequenceUpdate lesson by edit token
PATCH/courses/edit/:editTokenUpdate course by edit token
POST/courses/edit/:editToken/lessonsAdd a new lesson to a course
POST/courses/edit/:editToken/infer-typeInfer best lesson type from title/context

Tests (API Key required)

MethodEndpointDescription
POST/testsCreate a test generation request
GET/tests/:idGet test by ID
GET/testsList test requests
POST/tests/:id/edit-tokenGenerate an edit token for a test
GET/tests/:id/submissionsList submissions for a test
GET/tests/public/:shareTokenGet public test by share token
GET/tests/public/:shareToken/fullGet full public test with items and answers
GET/tests/public/:shareToken/items/:sequenceGet public item by sequence
GET/tests/public/:shareToken/takeGet test for taking (no answers)
POST/tests/public/:shareToken/submissionsStart a test submission
PATCH/tests/submissions/:submissionTokenSave or finalize submission answers
GET/tests/submissions/:submissionToken/resultGet a finalized submission result
GET/tests/edit/:editTokenGet test by edit token
GET/tests/edit/:editToken/fullGet full test with items by edit token
GET/tests/edit/:editToken/items/:sequenceGet item by edit token
PATCH/tests/edit/:editTokenUpdate test by edit token
PATCH/tests/edit/:editToken/items/:sequenceUpdate item by edit token

Agent Self-Service

MethodEndpointAuthDescription
GET/.well-known/agent.jsonNoneService discovery manifest
POST/agent/registerNone (IP throttled)Self-service registration
GET/agent/verify-email?token=NoneVerify workspace email
POST/agent/verify-email/resendAPI KeyResend verification email
POST/agent/billing/sessionAPI KeyGet checkout page URL for credit purchase
GET/agent/billing/statusAPI KeyBilling status and payment method info
GET/agent/accountAPI KeyWorkspace info and credit balance
GET/agent/checkout?token=NoneValidate a billing checkout token
POST/agent/checkoutNoneCreate Stripe session from checkout token

LTI 1.3 Integration

MethodEndpointAuthDescription
POST/lti/registrationsAPI KeyCreate an LTI registration
GET/lti/registrationsAPI KeyList LTI registrations
GET/lti/registrations/:idAPI KeyGet an LTI registration
PUT/lti/registrations/:idAPI KeyUpdate an LTI registration
DELETE/lti/registrations/:idAPI KeyDelete an LTI registration
GET/lti/loginNoneOIDC login initiation (called by LMS)
POST/lti/launchNoneLaunch callback (called by LMS)
POST/lti/deep-linking/responseNoneDeep linking response callback
GET/lti/.well-known/jwks.jsonNonePublic JWKS endpoint

Health

MethodEndpointAuthDescription
GET/healthAPI KeyHealth check (validates API key)

MCP

Agents can also connect via the Model Context Protocol instead of calling REST endpoints directly.

TransportURL
Streamable HTTPhttps://mcp.tutorflow.io/api/mcp

Dashboard (Admin Auth required)

MethodEndpointDescription
GET/dashboard/workspacesList accessible workspaces
GET/dashboard/workspaces/:idGet workspace detail
PUT/dashboard/workspaces/:idUpdate workspace (name, slug, auto-reload)
GET/dashboard/workspaces/:id/membersList members
GET/dashboard/workspaces/:id/member-invitesList member invites
POST/dashboard/workspaces/:id/member-invitesInvite a member
POST/dashboard/workspaces/:id/member-invites/:inviteId/resendResend invite
DELETE/dashboard/workspaces/:id/member-invites/:inviteIdCancel invite
GET/dashboard/workspaces/:id/api-keysList API keys
POST/dashboard/workspaces/:id/api-keysCreate an API key
POST/dashboard/workspaces/:id/api-keys/:keyId/rotateRotate an API key
POST/dashboard/workspaces/:id/api-keys/:keyId/revokeRevoke an API key
GET/dashboard/workspaces/:id/pricing-catalogList pricing catalog
GET/dashboard/workspaces/:id/usage/summaryUsage summary
GET/dashboard/workspaces/:id/usage/detailsUsage details
GET/dashboard/workspaces/:id/billing/invoicesList invoices
GET/dashboard/workspaces/:id/billing/invoices/:invoiceIdGet invoice
GET/dashboard/workspaces/:id/billing/payment-methodGet payment method
POST/dashboard/workspaces/:id/billing/payment-method-sessionCreate payment method session
POST/dashboard/workspaces/:id/billing/purchase-creditsPurchase credits ($5–$5,000)
GET/dashboard/workspaces/:id/evaluationsList evaluations
GET/dashboard/workspaces/:id/evaluations/:evaluationIdGet evaluation
GET/dashboard/workspaces/:id/coursesList courses
GET/dashboard/workspaces/:id/courses/:courseIdGet course
GET/dashboard/workspaces/:id/webhooksList webhooks
POST/dashboard/workspaces/:id/webhooksCreate a webhook
DELETE/dashboard/workspaces/:id/webhooks/:webhookIdDelete a webhook
GET/dashboard/workspaces/:id/lti/registrationsList LTI registrations
POST/dashboard/workspaces/:id/lti/registrationsCreate LTI registration
DELETE/dashboard/workspaces/:id/lti/registrations/:regIdDelete LTI registration
GET/dashboard/workspaces/:id/lti/launchesList recent LTI launches
POST/dashboard/workspaces/:id/lti/keys/rotateRotate LTI signing key

Internal Management

MethodEndpointDescription
POST/workspacesCreate a workspace
GET/workspacesList workspaces
GET/workspaces/:idGet workspace details
PATCH/workspaces/:idUpdate workspace
POST/workspaces/:id/creditsAdd credits to workspace
POST/workspaces/:id/suspendSuspend a workspace
POST/workspaces/:id/activateReactivate a workspace
POST/workspaces/:id/linkLink workspace to TutorFlow organization
POST/workspaces/from-organizationCreate workspace from existing organization
POST/api-keysCreate an API key
GET/api-keysList API keys
POST/api-keys/:id/revokeRevoke an API key
POST/api-keys/:id/rotateRotate an API key
POST/webhooksCreate a webhook endpoint
GET/webhooksList webhook endpoints
DELETE/webhooks/:idDelete a webhook endpoint
GET/usageUsage summary
GET/usage/detailsUsage details
GET/admin/statsPlatform-wide statistics
GET/admin/stats/dailyDaily usage breakdown
GET/admin/stats/organizationsUsage ranked by organization
POST/billing/invoicesCreate billing invoice draft
POST/billing/webhooks/stripeStripe webhook handler

Response Format

All responses return JSON. Successful responses include the resource directly:

{
  "id": "uuid",
  "status": "COMPLETED",
  "evaluationType": "open_ended",
  "score": 8,
  "feedbackSummary": "Strong answer..."
}

External Platform API key error responses follow this format:

{
  "error": {
    "code": "platform_invalid_request",
    "message": "Validation failed",
    "status": 400
  }
}

Detailed References