Level 0: Register Your App
Get your app listed in TimeBack's catalog so students can discover and launch it. Registration is self-serve: sign in with Google, call one tool or REST endpoint, and walk away with credentials in the same response. No email round-trip, no business-day waits.
What Registration Provides
Registering your app makes it discoverable in TimeBack's app catalog. Once registered, students can launch your app from TimeBack App, which automatically tracks session time, detects waste time, and provides coaching insights, without any implementation required from you.
Registration also provisions everything you need to start integrating:
- An App ID (UUID) plus its canonical App URN (
urn:uuid:{App ID}) for use in Caliper events (theedAppfield) - OAuth client credentials (
clientId+clientSecret) for the client-credentials flow againstplatform.timeback.com - A draft-tier scope set so you can immediately exercise the read-only endpoints while you build
Prerequisites
- A Google account. Registration uses Google SSO; no separate TimeBack account exists.
Two Ways to Register
Both paths call the same backend; pick whichever fits your workflow.
| Path | When to use | Endpoint |
|---|---|---|
| MCP tool | You build with an AI agent (Cursor, Claude Desktop, etc.). The agent calls the tool on your behalf. | devplatform_register_app_as_draft on platform.timeback.com/mcps/developer-platform |
| REST | You build with a conventional HTTP client (curl, Postman, your backend). | POST /applications/1.0/drafts on platform.timeback.com |
Step 1: Sign In
MCP path (you build with Cursor / Claude Desktop / Claude Code / any MCP-capable agent):
Add https://platform.timeback.com/mcps/developer-platform as an MCP server in your client. The URL is an MCP server endpoint (not a browser URL) — it accepts MCP protocol calls and initiates Google SSO when your client first connects. The SSO popup your client opens is where the "sign in with Google" step actually happens.
For Cursor, in ~/.cursor/mcp.json:
{
"mcpServers": {
"timeback-developer-platform": {
"url": "https://platform.timeback.com/mcps/developer-platform"
}
}
}
For Claude Code: claude mcp add --transport http timeback-developer-platform https://platform.timeback.com/mcps/developer-platform.
On first call, your client opens a Google SSO popup. Sign in with the Google account you want associated with your App registrations — TimeBack uses your verified email to identify you and link subsequent registrations to your developer profile. If your email is already attached to a Publisher (your company or organization on the platform), the platform auto-resolves it.
REST path (curl, Postman, your backend):
You need a Cognito JWT to authenticate the POST /applications/1.0/drafts call. Today, the only documented way to obtain one is to complete the MCP-path Google SSO flow above and copy the access token your MCP client receives — the JWT is then valid as a Bearer token on the REST endpoint. A standalone OAuth Authorization Code flow for the REST path is on the roadmap.
Step 2: Register Your App
Provide three required fields (name, description, launchUrl) plus optional fields like applicationType. If you belong to more than one Publisher, pass publisherId; otherwise omit it.
REST example:
curl -X POST https://platform.timeback.com/applications/1.0/drafts \
-H "Authorization: Bearer <YOUR_SSO_JWT>" \
-H "Content-Type: application/json" \
-d '{
"name": "TrashCat",
"description": "An endless runner game that builds multiplication fact fluency through rapid-fire math drills.",
"launchUrl": "https://trashcat.learnwith.ai/lti/launch"
}'
MCP example (Cursor / Claude):
Call devplatform_register_app_as_draft with:
name: "TrashCat"
description: "An endless runner game that builds multiplication fact fluency through rapid-fire math drills."
launchUrl: "https://trashcat.learnwith.ai/lti/launch"
Step 3: Save Your Credentials
The response carries everything you need to start integrating:
{
"appUrn": "urn:uuid:53f0d94d-786d-409a-b5eb-7a6c1db8957b",
"applicationId": "53f0d94d-786d-409a-b5eb-7a6c1db8957b",
"publisherId": "11111111-2222-3333-4444-555555555555",
"productionCredentials": {
"clientId": "1a2b3c4d5e6f7g8h9i0j",
"clientSecret": "supersecret-only-shown-once",
"tokenUrl": "<value-from-registration-response>",
"scopes": ["<scope-1>", "<scope-2>", "..."]
},
"sandboxCredentials": {
"clientId": "0z9y8x7w6v5u4t3s2r1q",
"clientSecret": "sandbox-secret-only-shown-once",
"tokenUrl": "<value-from-registration-response>",
"scopes": ["<scope-1>", "<scope-2>", "..."]
},
"sandboxStatus": "provisioned"
}
sandboxStatus is provisioned when both credential sets are returned. If the sandbox fan-out is still in flight, sandboxStatus is pending and sandboxCredentials is null until the platform backfills it.
Important: The
clientSecretis returned exactly once. Capture it from this response and store it securely (a secrets manager, an environment variable, your CI vault). It cannot be retrieved again through the API; if you lose it, contact TimeBack support to rotate.
The response also includes a sandboxCredentials object with a separate clientId + clientSecret issued from the sandbox-side OAuth pool — save both pairs. See Sandbox Environment for what the sandbox provides.
Required Fields
| Field | Description | Example |
|---|---|---|
name |
Your app's display name; must be unique across the developer platform | TrashCat |
description |
One-sentence description (max 1024 chars); shown in the catalog and tools | An endless runner game that builds multiplication fact fluency through rapid-fire math drills. |
launchUrl |
URL where LTI launches POST to (full HTTPS URL, max 512 chars) | https://trashcat.learnwith.ai/lti/launch |
Optional Fields
You can include these on registration to populate the catalog richly from day one, or add them later via PUT /applications/1.0/{sourcedApplicationId} (or the manage_app MCP tool on the platform MCP at platform.timeback.com/mcp).
| Field | Description | Example |
|---|---|---|
applicationType |
Application type. Defaults to learning_app. Other values: assessment, internal. |
learning_app |
publisherId |
UUID of the Publisher this App belongs to. Omit when you belong to exactly one. | 11111111-2222-3333-4444-555555555555 |
| Logo URL | Square PNG or JPG image, max 512px | https://trashcat.learnwith.ai/images/logo.png |
| Cover Image URL | Wide cover image shown on the catalog detail view | https://trashcat.learnwith.ai/images/cover.png |
| Full Description | Detailed description (2-3 paragraphs) | TrashCat uses spaced repetition and adaptive difficulty to build automaticity with basic math facts... |
| Publisher Name | Display name for the Publisher (auto-resolved from your publisherId if not set) |
LearnWith.AI |
| Subjects | Academic subjects covered | ["Mathematics"] |
| Grade Range | Supported grades in K-12 (gradeRangeStart / gradeRangeEnd, must be provided together) |
3 / 6 |
| Language Support | Supported languages by full name | ["English", "Spanish"] |
Logo format: Must be PNG or JPG. SVG and WebP are not supported.
LTI: If you implement LTI 1.3 for seamless authentication, set the LTI fields at registration (in the optional fields above) or amend them later via PUT /applications/1.0/{sourcedApplicationId} once your launch endpoint is ready. See Level 2: LTI Launch for the field list and endpoint shape.
After Registration
Your draft App is now live in the catalog with draft-tier scopes. From here you can:
- Read the canonical roster in the sandbox env to test against realistic data — see Sandbox Environment.
- Send Caliper events from your App once Caliper scope is granted — see Level 3: Caliper Events.
- Manage students programmatically via the roster API — see Level 1: Student Onboarding.
- Implement LTI launch for seamless authentication — see Level 2: LTI Launch.
- Register webhook subscriptions to receive real-time event notifications — see Webhooks.
- Understand the draft → active lifecycle and when to request promotion — see App Lifecycle.
Next Steps
Start integrating against sandbox. The fastest path from registration to a working integration is to point your code at sandbox.platform.timeback.com with the sandbox credentials, exercise the roster and Caliper endpoints, and only switch to production once your behavior is stable. See Sandbox Environment.
Publish to TimeBack Store and earn revenue. Once your draft → active promotion is approved, list your app on store.timeback.com so parents can purchase access for their kids. See Store → Introduction for what the Store provides and how to publish.
Related Docs
Sandbox Environment
Build and test against a shared sandbox env with a canonical roster, isolated from prod.
App Lifecycle
How draft and active tiers work, and how to promote your App when you're ready for production traffic.
Authentication Guide
Exchange your clientId + clientSecret for an access token and call TimeBack APIs.
Level 1: Student Onboarding
Programmatically create and manage students, users, and agent relationships in TimeBack's roster.
Level 2: LTI Launch
Implement LTI 1.3 to enable seamless student authentication and eliminate login friction.
Level 3: Caliper Events
Send structured learning events to unlock coaching insights and unified progress analytics.
Webhooks
Receive real-time push notifications when platform events occur, instead of polling APIs.
