Platform Discovery CLI

Inspect platform metadata, pricing, API-key health, and old share links from the CLI.

Use this page to read the discovery manifest, the live prices, and your key's health from the CLI.

tutorflow platform manifest

Read the public agent discovery manifest at /v1/platform/.well-known/agent.json. It needs no API key:

bash
tutorflow platform manifest

The manifest is useful for agents that need to discover supported platform capabilities before deciding which command or API workflow to run.

Example JSON response:

JSON
{
  "schema": "https://tutorflow.io/agent-manifest/v3",
  "name": "TutorFlow Agent Platform",
  "baseUrl": "https://api.tutorflow.io/v1/content",
  "accountBaseUrl": "https://api.tutorflow.io/v1/platform/agent",
  "auth": {
    "type": "bearer",
    "header": "Authorization",
    "prefix": "tf_content_",
    "testPrefix": "tf_content_test_"
  },
  "registration": {
    "endpoint": "/v1/platform/agent/register",
    "method": "POST",
    "requiredFields": ["name", "slug"],
    "optionalFields": ["email", "agentIdentity"],
    "returns": ["contentApiKey", "defaultClassroomId", "contentApiBaseUrl"]
  },
  "services": ["course", "module", "test", "slide", "video", "game", "evaluation"],
  "capabilities": {
    "evaluation": {
      "endpoint": "POST /v1/content/classrooms/{classroomId}/evaluations",
      "unit": "request",
      "unitPriceUsd": 0.02
    },
    "slide": {
      "endpoint": "POST /v1/content/classrooms/{classroomId}/slides/generate",
      "unit": "text page",
      "unitPriceUsd": 0.02,
      "imagePagePriceUsd": 0.06
    },
    "video": {
      "endpoint": "POST /v1/content/classrooms/{classroomId}/videos",
      "unit": "video",
      "unitPriceUsd": 0
    }
  },
  "addOns": {
    "video_narration": {
      "endpoint": "POST /v1/content/classrooms/{classroomId}/videos/{id}/narration",
      "unit": "scene",
      "unitPriceUsd": 0.02
    },
    "video_render": {
      "endpoint": "POST /v1/content/classrooms/{classroomId}/videos/{id}/render",
      "unit": "render",
      "unitPriceUsd": 0.1
    }
  },
  "trial": {
    "creditsUsd": 1,
    "credits": 50,
    "centsPerCredit": 2,
    "emailVerificationRequiredForTrial": false,
    "emailVerificationRequiredForBilling": true
  },
  "pricing": {
    "endpoint": "/v1/platform/pricing-catalog",
    "currency": "USD",
    "model": "per_unit"
  },
  "docs": "https://tutorflow.io/agent-platform/docs",
  "health": "/v1/platform/health"
}

The manifest is abridged here. Content work points at the Content API: replace {classroomId} with your defaultClassroomId.

tutorflow platform pricing

Read the public pricing catalog at /v1/platform/pricing-catalog. It needs no API key:

bash
tutorflow platform pricing

Use this before generating content or submitting evaluations when an agent needs to estimate cost or present pricing context to an operator.

Example JSON response:

JSON
[
  {
    "category": "evaluation",
    "tier": "default",
    "catalogKey": "evaluation.default",
    "amountUsd": 0.02,
    "baseUsd": 0,
    "unitCredits": 1,
    "baseCredits": 0,
    "unit": "request",
    "description": "POST /evaluations: per graded answer.",
    "currency": "USD",
    "source": "organization_credit_amount_v3",
    "stripeLookupKey": "platform-agent-credits-usd-metered",
    "stripeMeterEventName": "agent_credits",
    "isActive": true
  },
  {
    "category": "slide",
    "tier": "default",
    "catalogKey": "slide.default",
    "amountUsd": 0.02,
    "baseUsd": 0,
    "unitCredits": 1,
    "baseCredits": 0,
    "unit": "text page",
    "description": "POST /slides/generate: per text page. Page 1 and every fourth page after it (1, 5, 9, ...) are image pages, priced as slide_image.",
    "currency": "USD",
    "source": "organization_credit_amount_v3",
    "stripeLookupKey": "platform-agent-credits-usd-metered",
    "stripeMeterEventName": "agent_credits",
    "isActive": true
  }
]

The response is abridged to two of its nine entries. Prices are credits at 2 US cents each. See Pricing and Billing.

tutorflow platform health

Check whether the API accepts the active key. It calls GET /v1/platform/health, which takes a live tf_content_ key with full access or a legacy tf_platform_ key, and works even when the balance is empty:

bash
tutorflow platform health

This command requires authentication. It is the fastest smoke test after setting TUTORFLOW_API_KEY or running tutorflow auth login.

Example JSON response:

JSON
{
  "status": "ok",
  "organizationId": "org_2d8b1a3f"
}

Agent-Friendly Smoke Test

For CI or agent bootstrapping, combine JSON mode with platform health:

bash
TUTORFLOW_API_KEY="tf_content_..." tutorflow --json platform health

A successful command exits with status 0. Authentication and network failures exit with status 1 and write a JSON error to stderr in JSON mode. To check a test key, run tutorflow --json classroom list instead: account routes and platform health refuse test keys.

tutorflow platform share-redirect

Resolve a share link of the removed Platform content routes to the classroom page that replaced it:

bash
tutorflow platform share-redirect <shareToken>

It calls GET /v1/platform/share-redirects/{shareToken}, needs no API key, and prints the API response as returned. The route allows 60 requests per minute per IP.