Resources
Content Integration API Reference

Content Integration API Reference

Endpoint reference for Content API keys, source JSON expansion, result retrieval, UI export, and webhooks.

All paths are relative to https://api.tutorflow.io.

Authentication types

Auth typeUsed byHeader
Admin sessionKey management, webhook management, UI exportCookie: jwt=... or curl -b tutorflow-admin.cookies
Content API keyExpansion create, status, resultAuthorization: Bearer tf_content_...

API key endpoints

Create key

POST /v1/content/organizations/{organizationId}/api-keys

Request:

{
  "name": "external-content-test",
  "rateLimitPerMinute": 60
}

Response 201:

{
  "apiKey": "tf_content_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "keyId": "0b063e58-7e19-4787-90f0-d081c85f50d3",
  "keyPrefix": "tf_content_abc123def456",
  "name": "external-content-test",
  "rateLimitPerMinute": 60
}

List keys

GET /v1/content/organizations/{organizationId}/api-keys

Response 200 includes key metadata only. The full secret is not returned.

Rotate key

POST /v1/content/organizations/{organizationId}/api-keys/{keyId}/rotate

Response 200 returns a new one-time apiKey.

Revoke key

POST /v1/content/organizations/{organizationId}/api-keys/{keyId}/revoke

Response 200 has no body.

Expansion endpoints

Create expansion

POST /v1/content/integrations/expansions

Headers:

Authorization: Bearer tf_content_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Content-Type: application/json
Idempotency-Key: source-content-level-a1-2026-07-04

Request fields:

FieldTypeRequiredNotes
requestedOutputsstring[]NoSupported values are interactive_module, summary_video, expanded_quiz.
payloadobjectYesExisting source JSON.
sourceTypestringNoDefaults to source_json.
idempotencyKeystringNoHeader is preferred.

Response 200 returns the created job and queued output rows.

Get status

GET /v1/content/integrations/expansions/{jobId}

Response 200 returns the job and outputs. Poll until completed or failed.

Get result

GET /v1/content/integrations/expansions/{jobId}/result

Response 200 returns job, outputs, and a combined manifest.

UI-authored export

POST /v1/content/classrooms/{classroomId}/integrations/exports

Request:

{
  "lessonId": "standalone-lesson-id",
  "idempotencyKey": "standalone-lesson:standalone-lesson-id"
}

Use this endpoint when content was authored in the TutorFlow UI and needs to be synchronized to another system.

Webhook endpoints

Create webhook

POST /v1/content/organizations/{organizationId}/webhooks

Request:

{
  "url": "https://example.com/tutorflow/content-webhooks",
  "events": ["content.completed", "content.failed"]
}

Response 201 returns endpoint metadata and a one-time secret.

List webhooks

GET /v1/content/organizations/{organizationId}/webhooks

Response 200 returns endpoint metadata without the signing secret.

Delete webhook

DELETE /v1/content/organizations/{organizationId}/webhooks/{webhookId}

Response 200 has no body.

Status codes

CodeMeaning
200Request succeeded.
201Key or webhook created.
400Request body is invalid.
401Missing or invalid Content API key.
403Signed-in admin cannot manage the organization.
404Job, key, or webhook was not found.
409Idempotency or state conflict.
429Rate limit exceeded.
500Unexpected server error.