Manage Workspaces

Create and manage platform workspaces for API access.

Internal management API. These endpoints are authenticated via TutorFlow admin auth in the current MVP, not via Platform API keys.

POST /v1/platform/workspaces

Create a new platform workspace.

Example Request

curl -X POST https://api.tutorflow.io/v1/platform/workspaces \
  -H "Authorization: Bearer tf_platform_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My EdTech Company",
    "slug": "my-edtech",
    "email": "admin@myedtech.com",
    "planCode": null,
    "billingMode": "internal_invoice",
    "stripeCustomerId": "cus_test_123"
  }'

Response

{
  "id": "uuid",
  "name": "My EdTech Company",
  "slug": "my-edtech",
  "email": "admin@myedtech.com",
  "status": "ACTIVE",
  "creditBalance": 0,
  "planCode": null,
  "billingMode": "internal_invoice",
  "stripeCustomerId": "cus_test_123",
  "stripeSubscriptionId": null,
  "stripeSubscriptionItemIdFast": null,
  "stripeSubscriptionItemIdStandard": null,
  "stripeSubscriptionItemIdAdvanced": null,
  "rateLimitPerMinute": 1000,
  "createdAt": "2025-01-15T10:00:00Z"
}

GET /v1/platform/workspaces

List all workspaces you have access to.

Example Request

curl https://api.tutorflow.io/v1/platform/workspaces \
  -H "Authorization: Bearer tf_platform_..."

Response

[
  {
    "id": "uuid",
    "name": "My EdTech Company",
    "slug": "my-edtech",
    "email": "admin@myedtech.com",
    "status": "ACTIVE",
    "creditBalance": 0,
    "createdAt": "2025-01-15T10:00:00Z"
  }
]

GET /v1/platform/workspaces/:id

Get details of a specific workspace.

Example Request

curl https://api.tutorflow.io/v1/platform/workspaces/WORKSPACE_ID \
  -H "Authorization: Bearer tf_platform_..."

Response

Returns the full workspace object (same schema as the POST response above).

PATCH /v1/platform/workspaces/:id

Update workspace details.

Example Request

curl -X PATCH https://api.tutorflow.io/v1/platform/workspaces/WORKSPACE_ID \
  -H "Authorization: Bearer tf_platform_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Updated Company Name",
    "email": "new@email.com",
    "planCode": "standard",
    "billingMode": "stripe_metered",
    "stripeCustomerId": "cus_test_123",
    "stripeSubscriptionId": "sub_test_123",
    "stripeSubscriptionItemIdFast": "si_fast_123",
    "stripeSubscriptionItemIdStandard": "si_standard_123",
    "stripeSubscriptionItemIdAdvanced": "si_advanced_123"
  }'

Billing Fields

  • billingMode: internal_invoice or stripe_metered
  • stripeCustomerId: Stripe customer used for invoicing or meter reporting
  • stripeSubscriptionId: optional Stripe subscription backing metered billing
  • stripeSubscriptionItemIdFast: optional Stripe subscription item for the fast tier
  • stripeSubscriptionItemIdStandard: optional Stripe subscription item for the standard tier
  • stripeSubscriptionItemIdAdvanced: optional Stripe subscription item for the advanced tier

Response

Returns the full updated workspace object.

POST /v1/platform/workspaces/:id/credits

Add credits to a workspace's balance.

Credits are the internal billing ledger for the current MVP. Public pricing is exposed as per-evaluation pricing, while the backend uses credits to support included usage and future plan variations.

Example Request

curl -X POST https://api.tutorflow.io/v1/platform/workspaces/WORKSPACE_ID/credits \
  -H "Authorization: Bearer tf_platform_..." \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 1000,
    "note": "Monthly credit top-up"
  }'

Response

{
  "id": "uuid",
  "creditBalance": 1000
}

POST /v1/platform/workspaces/:id/suspend

Suspend a workspace. All API keys will stop working.

Example Request

curl -X POST https://api.tutorflow.io/v1/platform/workspaces/WORKSPACE_ID/suspend \
  -H "Authorization: Bearer tf_platform_..."

Response

{
  "id": "uuid",
  "status": "SUSPENDED"
}

POST /v1/platform/workspaces/:id/activate

Reactivate a suspended workspace.

Example Request

curl -X POST https://api.tutorflow.io/v1/platform/workspaces/WORKSPACE_ID/activate \
  -H "Authorization: Bearer tf_platform_..."

Response

{
  "id": "uuid",
  "status": "ACTIVE"
}

POST /v1/platform/workspaces/:id/link

Link a platform workspace to an existing TutorFlow organization. This enables shared billing and unified management.

Example Request

curl -X POST https://api.tutorflow.io/v1/platform/workspaces/WORKSPACE_ID/link \
  -H "Authorization: Bearer tf_platform_..." \
  -H "Content-Type: application/json" \
  -d '{
    "organizationId": "existing-org-uuid"
  }'

Note: organizationId here refers to the TutorFlow organization being linked to, not the workspace itself.

Response

{
  "id": "uuid",
  "organizationId": "existing-org-uuid",
  "status": "ACTIVE"
}