Workspace Management Create, configure, and manage workspaces within organizations. Control members, assets, shares, and AI intelligence settings.

Base URL: https://api.fast.io/current/ Auth: Bearer {jwt_token} IDs: 20-digit numeric strings

Workspaces are shared project spaces within an organization. They support file versioning, search, AI chat, and member management. Most workspace endpoints also accept the workspace's folder_name (e.g., my-project) in place of the numeric ID.

Endpoint Summary

Workspace CRUD

MethodEndpointDescription
POST/current/org/{org_id}/create/workspace/Create a workspace
GET/current/workspace/{workspace_id}/details/Get workspace details
POST/current/workspace/{workspace_id}/update/Update workspace settings
DELETE/current/workspace/{workspace_id}/delete/Delete (close) a workspace
POST/current/workspace/{workspace_id}/archive/Archive a workspace
POST/current/workspace/{workspace_id}/unarchive/Unarchive a workspace

Assets

MethodEndpointDescription
GET/current/workspace/assets/List available asset types
GET/current/workspace/{workspace_id}/assets/List workspace assets
POST/current/workspace/{workspace_id}/assets/{asset_name}/Upload/set asset
DELETE/current/workspace/{workspace_id}/assets/{asset_name}/Delete asset
GET/current/workspace/{workspace_id}/assets/{asset_name}/read/Download asset binary
GET/current/workspace/{workspace_id}/assets/{asset_name}/read/Get asset metadata headers (HEAD)

Members

MethodEndpointDescription
POST/current/workspace/{workspace_id}/members/{email_or_user_id}/Add member or send invitation
DELETE/current/workspace/{workspace_id}/members/{user_id}/Remove a member
GET/current/workspace/{workspace_id}/members/list/List all members
POST/current/workspace/{workspace_id}/members/join/Self-join by org membership
POST/current/workspace/{workspace_id}/members/join/{invitation_key}/{action}/Join via invitation
DELETE/current/workspace/{workspace_id}/member/Leave workspace (self)
GET/current/workspace/{workspace_id}/member/{member_id}/details/Get member details
POST/current/workspace/{workspace_id}/member/{member_id}/update/Update member role
GET/current/workspace/{workspace_id}/member/{member_id}/transfer_ownership/Transfer ownership

Invitations

MethodEndpointDescription
GET/current/workspace/{workspace_id}/members/invitations/list/List all invitations
GET/current/workspace/{workspace_id}/members/invitations/list/{state}/List invitations by state
POST/current/workspace/{workspace_id}/members/invitation/{invitation_id}/Update an invitation
DELETE/current/workspace/{workspace_id}/members/invitation/{invitation_id}/Delete an invitation

Shares (in workspace context)

MethodEndpointDescription
POST/current/workspace/{workspace_id}/create/share/Create a share
GET/current/workspace/{workspace_id}/list/shares/List shares
POST/current/workspace/{workspace_id}/import/share/{share_id}/Import a user-owned share

Cloud Import

MethodEndpointDescription
POST/current/workspace/{workspace_id}/cloud-import/enable/Enable cloud import
POST/current/workspace/{workspace_id}/cloud-import/disable/Disable cloud import

Workflow

MethodEndpointDescription
POST/current/workspace/{workspace_id}/workflow/enable/Enable workflow features
POST/current/workspace/{workspace_id}/workflow/disable/Disable workflow features

Task Lists (Workflow)

MethodEndpointDescription
GET/current/workspace/{workspace_id}/tasks/List task lists
POST/current/workspace/{workspace_id}/tasks/create/Create a task list
POST/current/workspace/{workspace_id}/tasks/reorder/Reorder task lists

Todos (Workflow)

MethodEndpointDescription
GET/current/workspace/{workspace_id}/todos/List todo items
POST/current/workspace/{workspace_id}/todos/create/Create a todo item
POST/current/workspace/{workspace_id}/todos/bulk-toggle/Bulk toggle todo done status

Approvals (Workflow)

MethodEndpointDescription
GET/current/workspace/{workspace_id}/approvals/List approvals

Discovery

MethodEndpointDescription
GET/current/workspaces/all/List all accessible workspaces
GET/current/workspaces/available/List joinable workspaces
GET/current/workspaces/check/name/{name}/Check folder name availability
GET/current/org/{org_id}/list/workspaces/List workspaces in an org

Field Constraints

FieldConstraint
folder_nameRegex ^[\p{L}\p{N}-]+$ (letters, numbers, hyphens). Must be globally unique.
name2–100 characters, string
description10–1000 characters, string (optional)
title (shares)2–80 characters
custom_name (shares)10–100 characters, URL-friendly

Permission Values

perm_join — who can self-join from the parent org

ValueDescription
'Member or above'Any org member can join (default)
'Admin or above'Only org admins and owners
'Only Org Owners'Only org owners

perm_member_manage — who can manage workspace members

ValueDescription
'Member or above'Any workspace member can manage (default)
'Admin or above'Only workspace admins and owners

Permission Levels (numeric hierarchy)

LevelNumericDescription
Owner1000Full control; one per workspace
Admin500Administrative access
Member100Standard member
Guest50Limited guest access
View20Read-only access

Intelligence Setting

The intelligence boolean on a workspace controls whether uploaded files are automatically indexed for RAG (retrieval-augmented generation).

Workspace CRUD

Create Workspace

POST /current/org/{org_id}/create/workspace/

Creates a new workspace within an organization. The authenticated user becomes the workspace owner.

Auth: JWT required. Org membership (Member or above) required.
Rate Limits: 1/3s, 2/10s, 5/60s, 20/hr, 100/day (per org)

Path Parameters

ParameterTypeRequiredDescription
{org_id}stringYes20-digit numeric organization ID

Request Parameters

NameTypeRequiredConstraintsDescription
folder_namestringYesRegex ^[\p{L}\p{N}-]+$, globally uniqueURL-safe identifier used in workspace URLs
namestringYes2–100 chars, non-blankDisplay name
perm_joinstringYesSee Permission ValuesWho can self-join from the org
perm_member_managestringYesSee Permission ValuesWho can manage workspace members
intelligencestringYes"true" or "false"Enable AI indexing. Defaults to "true" for agent accounts.
descriptionstring10–1000 charsWorkspace description
accent_colorstring (JSON)Valid JSONAccent color styling
background_color1string (JSON)Valid JSONBackground color 1 styling
background_color2string (JSON)Valid JSONBackground color 2 styling

Example

curl -X POST "https://api.fast.io/current/org/10000000000000000001/create/workspace/" \
  -H "Authorization: Bearer {jwt_token}" \
  -d "folder_name=engineering" \
  -d "name=Engineering Team" \
  -d "description=Main engineering workspace for the team" \
  -d "perm_join=Member or above" \
  -d "perm_member_manage=Admin or above" \
  -d "intelligence=true"

Response (200 OK)

{
  "result": "yes",
  "response": {
    "workspace": {
      "id": "12345678901234567890",
      "folder_name": "engineering"
    }
  },
  "current_api_version": "1.0"
}

Response Fields

FieldTypeDescription
response.workspace.idstring20-digit numeric workspace profile ID
response.workspace.folder_namestringThe URL-safe folder name that was set

Access Levels

RoleAccess
Org OwnerCan create workspaces
Org AdminCan create workspaces
Org MemberCan create workspaces

Error Responses

Error CodeHTTP StatusMessageCause
APP_FEATURE_LIMIT403Workspace creation is not available on your current plan.Feature disabled on billing plan
APP_FEATURE_LIMIT403You have reached your workspace creation limit.Workspace count limit exceeded
APP_NOT_ACCEPTABLE406The supplied workspace folder name is already in use.Duplicate folder_name
APP_ERROR_INPUT_INVALID400An invalid workspace folder name was supplied.Invalid folder_name format
APP_ERROR_INPUT_INVALID400An invalid configuration was supplied...Metadata validation failure
APP_ERROR_UPDATE_ERROR500There was an internal error processing your create request.Internal failure

Get Workspace Details

GET /current/workspace/{workspace_id}/details/

Returns full workspace details including settings, permissions, owner, intelligence state, and branding.

Auth: JWT required. Workspace membership required (View or above).

Path Parameters

ParameterTypeRequiredDescription
{workspace_id}stringYes20-digit numeric workspace ID or folder_name

Example

curl -X GET "https://api.fast.io/current/workspace/12345678901234567890/details/" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "response": {
    "workspace": {
      "id": "12345678901234567890",
      "name": "Engineering Team",
      "folder_name": "engineering",
      "description": "Main engineering workspace",
      "accent_color": "#0066CC",
      "logo": "https://assets.fast.io/12345678901234567890/logo.png",
      "closed": false,
      "archived": false,
      "perm_join": "Member or above",
      "perm_member_manage": "Admin or above",
      "created": "2023-01-15 10:30:00",
      "updated": "2024-01-20 14:45:00",
      "user_status": "joined",
      "org_domain": "acme-corp"
    }
  },
  "current_api_version": "1.0"
}

Response Fields

FieldTypeDescription
response.workspace.idstring20-digit workspace profile ID
response.workspace.namestringDisplay name
response.workspace.folder_namestringURL-safe folder identifier
response.workspace.descriptionstring or nullWorkspace description
response.workspace.accent_colorstring or nullBrand accent color
response.workspace.logostring or nullLogo asset URL
response.workspace.closedbooleanWhether workspace is closed (soft-deleted)
response.workspace.archivedbooleanWhether workspace is archived
response.workspace.perm_joinstringWho can join
response.workspace.perm_member_managestringWho can manage members
response.workspace.createdstringCreation timestamp
response.workspace.updatedstringLast update timestamp
response.workspace.user_statusstringCurrent user's membership status ("joined", "invited", "available")
response.workspace.org_domainstringParent organization domain

Access Levels

RoleFields Returned
OwnerAll fields including intelligence, storage, platform details
AdminAll fields including intelligence, storage, platform details
MemberCore workspace fields
ViewBasic workspace information

Error Responses

Error CodeHTTP StatusMessageCause
APP_AUTH_INVALID401Authentication requiredMissing or invalid JWT
APP_NOT_FOUND404Workspace not foundInvalid ID or no access

Update Workspace

POST /current/workspace/{workspace_id}/update/

Updates workspace configuration. All fields are optional; only provided fields are updated.

Auth: JWT required. Admin or Owner required.
Rate Limits: 1/3s, 5/10s, 20/60s, 100/hr (per org)

Path Parameters

ParameterTypeRequiredDescription
{workspace_id}stringYes20-digit numeric workspace ID

Request Parameters (all optional)

NameTypeConstraintsDescription
folder_namestringRegex ^[\p{L}\p{N}-]+$, uniqueURL-safe identifier
namestring2–100 chars. Send "null" to clear.Display name
descriptionstring10–1000 chars. Send "null" or "" to clear.Description
perm_joinstringSee Permission ValuesWho can self-join
perm_member_managestringSee Permission ValuesWho can manage members
intelligencestring"true" or "false". Cannot re-enable once disabled.AI indexing toggle
accent_colorstring (JSON)Valid JSON. Send "null" to clear.Accent color
background_color1string (JSON)Valid JSON. Send "null" to clear.Background color 1
background_color2string (JSON)Valid JSON. Send "null" to clear.Background color 2
owner_definedstring (JSON)Valid JSON. Send "null" or "" to clear.Custom owner-defined properties

Example

curl -X POST "https://api.fast.io/current/workspace/12345678901234567890/update/" \
  -H "Authorization: Bearer {jwt_token}" \
  -d "name=Updated Workspace Name" \
  -d "description=New description for the workspace" \
  -d "perm_join=Admin or above"

Response (200 OK)

{
  "result": "yes",
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_FORBIDDEN403Permission deniedUser is not admin or owner
APP_ERROR_INPUT_INVALID400An invalid workspace folder name was supplied.Invalid folder_name
APP_NOT_ACCEPTABLE406The supplied workspace folder name is already in use.Duplicate folder_name
APP_ERROR_INPUT_INVALID400Intelligence cannot be enabled once it has been disabled...Attempted to re-enable intelligence
APP_ERROR_INPUT_INVALID400An invalid configuration was supplied...Metadata validation failure
APP_ERROR_UPDATE_ERROR500There was an internal error processing your update request.Internal failure

If no fields have changed, returns 200 OK without making changes. JSON fields are decoded server-side; send valid JSON strings.


Delete Workspace

DELETE /current/workspace/{workspace_id}/delete/?confirm={folder_name_or_id}

Permanently close (soft-delete) a workspace. Enters a retention period before final purge.

Auth: JWT required. Owner only. 2FA required.
Rate Limits: 1/3s, 2/10s, 5/60s, 20/hr, 100/day (per org)

Path Parameters

ParameterTypeRequiredDescription
{workspace_id}stringYes20-digit numeric workspace ID

Query Parameters

ParameterTypeRequiredDescription
confirmstringYesMust match the workspace's folder_name (case-insensitive) or numeric id. Safety confirmation.

Example

curl -X DELETE "https://api.fast.io/current/workspace/12345678901234567890/delete/?confirm=engineering" \
  -H "Authorization: Bearer {jwt_token}"

Response (202 Accepted)

{
  "result": "yes",
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_FORBIDDEN403Permission deniedUser is not the workspace owner
APP_ERROR_INPUT_INVALID400The confirm field provided does not match.Confirmation does not match folder name or ID
APP_ERROR_UPDATE_ERROR500There was an internal error processing your request.Internal failure

Archive Workspace

POST /current/workspace/{workspace_id}/archive/

Archives a workspace. Archived workspaces are hidden from default listings.

Auth: JWT required. Admin or Owner required. 2FA required.
Rate Limits: 1/3s, 2/10s, 5/60s, 20/hr, 100/day (per org)

Example

curl -X POST "https://api.fast.io/current/workspace/12345678901234567890/archive/" \
  -H "Authorization: Bearer {jwt_token}"

Response (202 Accepted)

{
  "result": "yes",
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_FORBIDDEN403Permission deniedNot admin or owner
APP_ERROR_UPDATE_ERROR400The workspace is already archived.Already archived

Unarchive Workspace

POST /current/workspace/{workspace_id}/unarchive/

Restores an archived workspace to active status.

Auth: JWT required. Admin or Owner required. 2FA required.
Rate Limits: 50/5min, 300/hr, 500/day (per org)

Example

curl -X POST "https://api.fast.io/current/workspace/12345678901234567890/unarchive/" \
  -H "Authorization: Bearer {jwt_token}"

Response (202 Accepted)

{
  "result": "yes",
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_FORBIDDEN403Permission deniedNot admin or owner
APP_ERROR_UPDATE_ERROR400The workspace is not archived. It cannot be unarchived.Not currently archived

Workspace Assets

List Available Asset Types

GET /current/workspace/assets/

Returns available workspace asset metadata types (e.g., logo).

Auth: JWT required.

Example

curl -X GET "https://api.fast.io/current/workspace/assets/" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "response": {
    "assets": [
      {
        "name": "logo",
        "type": "image",
        "max_size": 5242880,
        "accepted_formats": ["image/png", "image/jpeg", "image/svg+xml"]
      }
    ]
  },
  "current_api_version": "1.0"
}

List Workspace Assets

GET /current/workspace/{workspace_id}/assets/

Returns assets currently set on the workspace.

Auth: JWT required. Owner only. 2FA required.

Example

curl -X GET "https://api.fast.io/current/workspace/12345678901234567890/assets/" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "response": {
    "assets": {
      "logo": {
        "url": "https://assets.fast.io/12345678901234567890/logo.png",
        "size": 102400,
        "content_type": "image/png"
      }
    }
  },
  "current_api_version": "1.0"
}

Upload/Set Workspace Asset

POST /current/workspace/{workspace_id}/assets/{asset_name}/

Upload or replace an asset. Sent as multipart/form-data.

Auth: JWT required. Admin or Owner required.

Path Parameters

ParameterTypeRequiredDescription
{workspace_id}stringYes20-digit numeric workspace ID
{asset_name}stringYesName of the asset (e.g., logo)

Request Body (multipart/form-data)

FieldTypeRequiredDescription
filefileYesThe asset file to upload
metadatastring (JSON array)Optional metadata for the asset

Example

curl -X POST "https://api.fast.io/current/workspace/12345678901234567890/assets/logo/" \
  -H "Authorization: Bearer {jwt_token}" \
  -F "file=@/path/to/logo.png" \
  -F "metadata={}"

Response (200 OK)

{
  "result": "yes",
  "response": {
    "asset": {
      "name": "logo",
      "url": "https://assets.fast.io/12345678901234567890/logo.png"
    }
  },
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_POST_FILE_MISSING400Asset upload missingNo file in request
APP_ERROR_INPUT_INVALID400metadata invalidInvalid metadata format

Delete Workspace Asset

DELETE /current/workspace/{workspace_id}/assets/{asset_name}/

Delete a specific asset from a workspace.

Auth: JWT required. Admin or Owner required.

Example

curl -X DELETE "https://api.fast.io/current/workspace/12345678901234567890/assets/logo/" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "current_api_version": "1.0"
}

Read Asset Binary

GET / HEAD /current/workspace/{workspace_id}/assets/{asset_name}/read/

GET returns raw binary data. HEAD returns metadata headers only (Content-Type, Content-Length).

Auth: JWT required. Any workspace member. 2FA required.

Example

# Download asset
curl -X GET "https://api.fast.io/current/workspace/12345678901234567890/assets/logo/read/" \
  -H "Authorization: Bearer {jwt_token}" \
  --output logo.png

# Get metadata headers only
curl -I "https://api.fast.io/current/workspace/12345678901234567890/assets/logo/read/" \
  -H "Authorization: Bearer {jwt_token}"

Response: Raw binary content with appropriate Content-Type header (not JSON).

Workspace Members

Add or Invite a Member

POST /current/workspace/{workspace_id}/members/{email_or_user_id}/

Add an existing user directly by user ID, or send an invitation by email address.

Auth: JWT required. Permission depends on workspace perm_member_manage setting.
Rate Limits: 10/3s, 25/10s, 50/60s, 100/hr, 1000/day

Path Parameters

ParameterTypeRequiredDescription
{workspace_id}stringYes20-digit numeric workspace ID
{email_or_user_id}stringYes20-digit user ID (direct add) or email address (invitation)

Request Parameters (adding by user ID)

NameTypeRequiredDescription
permissionsstring"admin", "member", or "guest". Cannot be "owner".
notificationsstringNotification preference
expiresstringMembership expiration (ISO 8601)
force_notificationbooleanForce notification email to existing user

Request Parameters (inviting by email)

NameTypeRequiredDescription
permissionsstring"admin", "member", or "guest". Cannot be "owner".
messagestringCustom message in invitation email
invitation_expiresstringInvitation expiration (ISO 8601)

Examples

# Add existing user by ID
curl -X POST "https://api.fast.io/current/workspace/12345678901234567890/members/98765432109876543210/" \
  -H "Authorization: Bearer {jwt_token}" \
  -d "permissions=member"

# Invite by email
curl -X POST "https://api.fast.io/current/workspace/12345678901234567890/members/newuser@example.com/" \
  -H "Authorization: Bearer {jwt_token}" \
  -d "permissions=member" \
  -d "message=Welcome to the project!"

Response — Direct Add (200 OK)

{
  "result": "yes",
  "current_api_version": "1.0"
}

Response — Invitation Sent (200 OK)

{
  "result": "yes",
  "response": {
    "invitation": {
      "id": "12345678901234567890",
      "inviter": "John Doe",
      "invitee_email": "newuser@example.com",
      "entity_type": "workspace",
      "state": "pending",
      "created": "2025-01-15 10:30:00",
      "expires": "2025-02-15 10:30:00"
    }
  },
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_CANNOT_ADD_AS_OWNER400Adding a member as an owner is not allowedAttempted owner-level permission
APP_EXCEEDED_LIMIT400VariesWorkspace or org member limit reached
APP_DENIED403Insufficient org permissions to invite to this workspace.Lacks org-level permission
APP_FORBIDDEN403Insufficient permissionsBelow workspace perm_member_manage level

Adding a user to a workspace may also auto-add them to the parent organization if the workspace is configured for automatic org membership.


Remove a Member

DELETE /current/workspace/{workspace_id}/members/{user_id}/

Removes a member from the workspace. Cannot remove the workspace owner.

Auth: JWT required. Permission depends on perm_member_manage.
Rate Limits: 1/3s, 2/10s, 5/60s, 20/hr, 100/day

Example

curl -X DELETE "https://api.fast.io/current/workspace/12345678901234567890/members/98765432109876543210/" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_ERROR_INPUT_INVALID400Cannot remove the ownerAttempted to remove workspace owner
APP_FORBIDDEN403Insufficient permissionsBelow required permission level

Removing a member cascades removal into all shares within the workspace.


List Workspace Members

GET /current/workspace/{workspace_id}/members/list/

Lists all members with their permissions, notification preferences, and membership metadata.

Auth: JWT required. Any workspace member.
Rate Limits: 20/3s, 50/10s, 200/60s, 500/hr, 10000/day

Example

curl -X GET "https://api.fast.io/current/workspace/12345678901234567890/members/list/" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "response": {
    "users": [
      {
        "id": "12345678901234567890",
        "account_type": "human",
        "email_address": "owner@example.com",
        "first_name": "Alice",
        "last_name": "Johnson",
        "permissions": "owner",
        "invite": "accepted",
        "notify": "Email me",
        "expires": null
      },
      {
        "id": "98765432109876543210",
        "account_type": "agent",
        "email_address": "bot@example.com",
        "first_name": "Sync",
        "last_name": "Bot",
        "permissions": "member",
        "invite": "accepted",
        "notify": "Notify me in app",
        "expires": "2025-12-31 23:59:59"
      }
    ]
  },
  "current_api_version": "1.0"
}

Response Fields

FieldTypeDescription
usersarrayArray of member objects
users[].idstring20-digit user profile ID
users[].account_typestring"human" or "agent"
users[].email_addressstringMember's email address
users[].first_namestringFirst name
users[].last_namestringLast name
users[].permissionsstringRole: "owner", "admin", "member", "guest"
users[].invitestringInvitation status
users[].notifystringNotification preference
users[].expiresstring or nullMembership expiration or null for permanent

Leave Workspace (Self)

DELETE /current/workspace/{workspace_id}/member/

Removes the authenticated user from the workspace. Owners cannot leave; they must transfer ownership first.

Auth: JWT required.

Example

curl -X DELETE "https://api.fast.io/current/workspace/12345678901234567890/member/" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_ERROR_INPUT_INVALID400You cannot leave a workspace you are the owner of, transfer ownership or close workspace.User is the owner
APP_ERROR_INPUT_INVALID400You cannot leave an workspace you are not a member of.Not a member

Get Member Details

GET /current/workspace/{workspace_id}/member/{member_id}/details/

Returns membership details for a specific user.

Auth: JWT required. Any workspace member.
Rate Limits: 200/3s, 500/10s, 750/60s, 1000/hr, 2500/day

Example

curl -X GET "https://api.fast.io/current/workspace/12345678901234567890/member/98765432109876543210/details/" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "response": {
    "member": {
      "id": "98765432109876543210",
      "account_type": "human",
      "email_address": "user@example.com",
      "first_name": "Jane",
      "last_name": "Smith",
      "permissions": "member",
      "invite": "accepted",
      "notify": "Notify me in app",
      "expires": null
    }
  },
  "current_api_version": "1.0"
}

Response Fields

FieldTypeDescription
member.idstring20-digit user profile ID
member.account_typestring"human" or "agent"
member.email_addressstringEmail address
member.first_namestringFirst name
member.last_namestringLast name
member.permissionsstringPermission level name
member.invitestringInvitation status
member.notifystringNotification preference
member.expiresstring or nullMembership expiration or null

Error Responses

Error CodeHTTP StatusMessageCause
APP_ERROR_INPUT_INVALID400The membership you specified does not exist.User is not a member

Update a Member

POST /current/workspace/{workspace_id}/member/{member_id}/update/

Updates a member's role, notification preferences, or expiration.

Auth: JWT required. Permission depends on perm_member_manage.
Rate Limits: 10/3s, 25/10s, 50/60s, 100/hr, 1000/day

Request Parameters (all optional)

NameTypeDescription
permissionsstringNew role: "admin", "member", "guest"
notificationsstringNotification preference
expiresstringMembership expiration (ISO 8601)

Example

curl -X POST "https://api.fast.io/current/workspace/12345678901234567890/member/98765432109876543210/update/" \
  -H "Authorization: Bearer {jwt_token}" \
  -d "permissions=admin"

Response (200 OK)

{
  "result": "yes",
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_ERROR_INPUT_INVALID400The membership you specified does not exist.Target is not a member
APP_FORBIDDEN403Insufficient permissionsBelow required permission level

Users cannot escalate permissions beyond their own level.


Transfer Workspace Ownership

GET /current/workspace/{workspace_id}/member/{member_id}/transfer_ownership/

Transfers ownership to another member. Current owner is demoted to admin.

Auth: JWT required. Owner only.
Rate Limits: 10/3s, 25/10s, 50/60s, 100/hr, 1000/day

Example

curl -X GET "https://api.fast.io/current/workspace/12345678901234567890/member/98765432109876543210/transfer_ownership/" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_ERROR_INPUT_INVALID400You cannot transfer ownership to yourself.Target is self
APP_ERROR_INPUT_INVALID400The membership you specified does not exist.Target is not a workspace member
APP_ERROR_INPUT_INVALID400Member is already an owner.Target is already owner
APP_ERROR_INPUT_INVALID400The new owner must be a member of the parent organization.Target not in parent org
APP_ERROR_UPDATE_ERROR500Failed to update owner of the workspace.Internal failure
APP_FORBIDDEN403Insufficient permissionsNot the workspace owner

Join Workspace

POST /current/workspace/{workspace_id}/members/join/

Self-join a workspace based on org membership. Subject to the workspace's perm_join setting.

Auth: JWT required.
Rate Limits: 10/3s, 25/10s, 50/60s, 100/hr, 1000/day

Request Parameters

NameTypeRequiredDescription
notificationsstringNotification preference

Example

curl -X POST "https://api.fast.io/current/workspace/12345678901234567890/members/join/" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_DENIED403You do not have the appropriate permissions to join this workspace.User's org role does not meet perm_join
APP_EXCEEDED_LIMIT400VariesWorkspace member limit reached

Self-joining members are assigned the member role. Only notification preferences are accepted. Self-joined memberships do not expire.


Join Workspace via Invitation

POST /current/workspace/{workspace_id}/members/join/{invitation_key}/{action}/

Join or decline a workspace invitation.

Auth: JWT required.
Rate Limits: 10/3s, 25/10s, 50/60s, 100/hr, 1000/day

Path Parameters

ParameterTypeRequiredDescription
{invitation_key}stringYesUnique invitation key
{action}string"accept" (default) or "decline"

Example

curl -X POST "https://api.fast.io/current/workspace/12345678901234567890/members/join/abc123def456/accept/" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_INTERNAL_ERROR500Failed to get invitation.Invalid or expired invitation key
APP_DENIED403The inviter no longer has appropriate permissions...Inviter lost management permissions
APP_EXCEEDED_LIMIT400VariesMember limit reached

The system validates the inviter still has sufficient permissions at acceptance time. Accepting may also auto-add the user to the parent organization.

Workspace Invitations

List Workspace Invitations

GET /current/workspace/{workspace_id}/members/invitations/list/

Returns all invitations for the workspace.

Auth: JWT required. Any workspace member.
Rate Limits: 10/3s, 25/10s, 50/60s, 100/hr, 1000/day

Example

curl -X GET "https://api.fast.io/current/workspace/12345678901234567890/members/invitations/list/" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "response": {
    "invitations": [
      {
        "id": "12345678901234567890",
        "inviter": "Alice Johnson",
        "invitee_email": "newuser@example.com",
        "invitee_uid": null,
        "accepted_uid": null,
        "entity_type": "workspace",
        "workspace": {
          "id": "98765432109876543210",
          "name": "Project Alpha"
        },
        "state": "pending",
        "created": "2025-01-15 10:30:00",
        "updated": "2025-01-15 10:30:00",
        "expires": "2025-02-15 10:30:00"
      }
    ]
  },
  "current_api_version": "1.0"
}

Response Fields

FieldTypeDescription
invitationsarrayArray of invitation objects
invitations[].idstringInvitation ID
invitations[].inviterstringDisplay name of inviting user
invitations[].invitee_emailstringEmail the invitation was sent to
invitations[].invitee_uidstring or nullUser ID of invitee (if they exist in the system)
invitations[].accepted_uidstring or nullUser ID of acceptor (if accepted)
invitations[].entity_typestringAlways "workspace"
invitations[].workspaceobjectWorkspace details (id, name)
invitations[].statestring"pending", "accepted", "declined", "expired", "revoked"
invitations[].createdstringCreation timestamp
invitations[].updatedstringLast update timestamp
invitations[].expiresstring or nullExpiration timestamp

List Invitations by State

GET /current/workspace/{workspace_id}/members/invitations/list/{state}/

Filter invitations by state.

Auth: JWT required. Any workspace member.

Path Parameters

ParameterTypeRequiredDescription
{state}stringYes"pending", "accepted", "declined", "expired", "revoked"

Example

curl -X GET "https://api.fast.io/current/workspace/12345678901234567890/members/invitations/list/pending/" \
  -H "Authorization: Bearer {jwt_token}"

Response: Same format as List Workspace Invitations, filtered by state.

Error Responses

Error CodeHTTP StatusMessageCause
APP_ERROR_INPUT_INVALID400An invalid invitation state was supplied.Unrecognized state

Update an Invitation

POST /current/workspace/{workspace_id}/members/invitation/{invitation_id}/

Update an existing invitation. The {invitation_id} can be the numeric ID or the invitee's email address.

Auth: JWT required. Permission depends on perm_member_manage.
Rate Limits: 10/60s, 20/600s, 30/hr

Request Parameters (all optional)

NameTypeDescription
statestringNew state: "pending", "accepted", "declined", "expired", "revoked"
permissionsstringUpdated permission level for membership
expiresstringUpdated membership expiration (ISO 8601)

Examples

# Revoke by ID
curl -X POST "https://api.fast.io/current/workspace/12345678901234567890/members/invitation/11111111111111111111/" \
  -H "Authorization: Bearer {jwt_token}" \
  -d "state=revoked"

# Update by email
curl -X POST "https://api.fast.io/current/workspace/12345678901234567890/members/invitation/user@example.com/" \
  -H "Authorization: Bearer {jwt_token}" \
  -d "permissions=admin"

Response (200 OK)

{
  "result": "yes",
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_ERROR_INPUT_INVALID400An invalid invitation ID or email was supplied.Malformed identifier
APP_ERROR_INPUT_INVALID400Invitation not found.No matching invitation
APP_ERROR_INPUT_INVALID400An invalid state was supplied.Unrecognized state
APP_UPDATE_FAILED500Failed to update invitation.Internal failure
APP_FORBIDDEN403Insufficient permissionsBelow required permission level

Delete an Invitation

DELETE /current/workspace/{workspace_id}/members/invitation/{invitation_id}/

Delete (revoke) an invitation. The {invitation_id} can be the numeric ID or the invitee's email.

Auth: JWT required. Permission depends on perm_member_manage.
Rate Limits: 10/60s, 20/600s, 30/hr

Example

curl -X DELETE "https://api.fast.io/current/workspace/12345678901234567890/members/invitation/11111111111111111111/" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_ERROR_INPUT_INVALID400An invalid invitation ID or email was supplied.Malformed identifier
APP_ERROR_INPUT_INVALID400Invitation not found.No matching invitation
APP_DELETE_FAILED500Failed to delete invitation.Internal failure
APP_FORBIDDEN403Insufficient permissionsBelow required permission level

Creating Shares from Workspaces

Create Share

POST /current/workspace/{workspace_id}/create/share/

Create a new share within a workspace. Shares can use independent storage (isolated portal) or a workspace folder as their storage root (live folder share).

Auth: JWT required. Admin or Owner required.
Rate Limits: 5/3s, 15/10s, 30/60s, 50/hr, 250/day (per workspace)

For full share management documentation, see Shares reference.

Required Parameters

NameTypeConstraintsDescription
intelligencestring"true" or "false"Enable AI features for the share
share_typestring"send", "receive", "exchange"Type of share
access_optionsstringSee access options belowAccess control setting
invitestring"owners" or "guests"Who can manage invitations

Optional Parameters

NameTypeConstraintsDescription
storage_modestring"independent" (default) or "workspace_folder"Storage isolation mode
folder_node_idstringValid OpaqueIdExisting workspace folder (for workspace_folder mode)
create_folderstring"true" or "false"Create new folder (for workspace_folder mode)
folder_namestringName for new folder (defaults to "Shared Folder")
titlestring2–80 charsDisplay title
descriptionstring10–500 charsShare description
custom_namestring10–100 chars, URL-friendlyCustom URL name. Auto-generated if omitted.
passwordstring4–128 charsPassword protection (Send type only, requires "Anyone with the link" access)
expiresstringdatetimeExpiration date (portals only, not for workspace folder shares)
notifystring"never", "notify_on_file_received", "notify_on_file_sent_or_received"Notification preference
comments_enabledstring"true" or "false"Enable comments
download_enabledstring"true" or "false"Enable downloads
guest_chat_enabledstring"true" or "false"Enable guest AI chat
accent_colorstring (JSON)Valid JSONAccent color
background_color1string (JSON)Valid JSONBackground color 1
background_color2string (JSON)Valid JSONBackground color 2
owner_definedstring (JSON)Valid JSONCustom properties

Access Options (access_options)

ValueDescription
'Only members of the Share or Workspace'Most restrictive (default)
'Members of the Share, Workspace or Org'Includes org members
'Anyone with a registered account'Any authenticated user
'Anyone with the link'Least restrictive; allows password. Not available for Receive/Exchange types.

Example

curl -X POST "https://api.fast.io/current/workspace/12345678901234567890/create/share/" \
  -H "Authorization: Bearer {jwt_token}" \
  -d "title=Client Deliverables" \
  -d "share_type=send" \
  -d "intelligence=true" \
  -d "access_options=Anyone with a registered account" \
  -d "invite=owners"

Response (200 OK)

{
  "result": "yes",
  "response": {
    "share": {
      "id": "98765432109876543210",
      "custom_name": "abc123opaque",
      "storage_mode": "independent"
    }
  },
  "current_api_version": "1.0"
}

Response — Workspace Folder Share

{
  "result": "yes",
  "response": {
    "share": {
      "id": "98765432109876543210",
      "custom_name": "def456opaque",
      "storage_mode": "workspace_folder",
      "folder_node_id": "abc123def456"
    }
  },
  "current_api_version": "1.0"
}

Response Fields

FieldTypeDescription
response.share.idstring20-digit share profile ID
response.share.custom_namestringURL name (custom or auto-generated)
response.share.storage_modestring"independent" or "workspace_folder"
response.share.folder_node_idstring(Workspace folder shares only) Folder node ID

Error Responses

Error CodeHTTP StatusMessageCause
APP_FEATURE_LIMIT403The organization has reached its share creation limit...Plan share limit exceeded
APP_NOT_ACCEPTABLE406The supplied share custom name is already in use.Duplicate custom_name
APP_ERROR_INPUT_INVALID400An invalid share custom name was supplied.Invalid custom_name format
APP_ERROR_INPUT_INVALID400Workspace folder shares cannot have an expiration date.expires set on workspace folder share
APP_ERROR_INPUT_INVALID400Receive and Exchange shares cannot have "Anyone" access option.Invalid access/type combination
APP_ERROR_INPUT_INVALID400Password can only be set for shares with "Anyone" access option.Password on non-public share
APP_NOT_ACCEPTABLE406This folder has already been shared.Folder already has a share
APP_CONFLICT409Unable to process share creation request due to concurrent operation.Concurrent folder share creation

List Shares in Workspace

GET /current/workspace/{workspace_id}/list/shares/

Lists all shares belonging to a workspace.

Auth: JWT required. View or above.
Rate Limits: 25/60s, 800/hr, 2500/day (per workspace)

Query Parameters

NameTypeDefaultDescription
archivedstring"false""true" for archived shares, "false" for active

Example

curl -X GET "https://api.fast.io/current/workspace/12345678901234567890/list/shares/" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "response": {
    "shares": [
      {
        "id": "98765432109876543210",
        "title": "Client Deliverables",
        "share_type": "send",
        "custom_name": "client-deliverables",
        "archived": false,
        "closed": false
      }
    ]
  },
  "current_api_version": "1.0"
}

Import Share into Workspace

POST /current/workspace/{workspace_id}/import/share/{share_id}/

Transfers a user-owned share into workspace ownership.

Auth: JWT required. Must be workspace member AND share owner.
Rate Limits: 100/60s, 500/hr, 1000/day (per workspace and user)

Path Parameters

ParameterTypeRequiredDescription
{workspace_id}stringYes20-digit workspace ID
{share_id}stringYes20-digit share ID to import

Example

curl -X POST "https://api.fast.io/current/workspace/12345678901234567890/import/share/98765432109876543210/" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "response": {
    "share": {
      "id": "98765432109876543210",
      "parent_type": "workspace",
      "parent_workspace": "12345678901234567890"
    }
  },
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_ERROR_INPUT_INVALID400This share is not owned by you and cannot be imported.Share parent is not the current user
APP_AUTH_INVALID401You must be the owner of the share to import it to a workspace.Not the share owner
APP_ERROR_INPUT_INVALID400The share has multiple owners...Remove other owners first
APP_FEATURE_LIMIT403The workspace has reached its share limit...Plan limit exceeded

Share must be user-owned (not already in another workspace). User must be the sole owner. Multiple owners must be removed first. Archived shares are auto-unarchived during import.

Workspace Discovery

List All Workspaces

GET /current/workspaces/all/

Lists all workspaces the user has joined or can access across all organizations.

Auth: JWT required.
Rate Limits: 250/hr, 3000/day (per user)

Example

curl -X GET "https://api.fast.io/current/workspaces/all/" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "response": {
    "workspaces": [
      {
        "id": "12345678901234567890",
        "name": "Engineering Team",
        "folder_name": "engineering",
        "description": "Main engineering workspace",
        "accent_color": "#0066CC",
        "logo": "https://assets.fast.io/12345678901234567890/logo.png",
        "closed": false,
        "archived": false,
        "perm_join": "Member or above",
        "perm_member_manage": "Admin or above",
        "created": "2023-01-15 10:30:00",
        "updated": "2024-01-20 14:45:00",
        "user_status": "joined",
        "org_domain": "acme-corp"
      }
    ]
  },
  "current_api_version": "1.0"
}

Response Fields

FieldTypeDescription
response.workspacesarrayArray of workspace objects
[].idstring20-digit workspace profile ID
[].namestringDisplay name
[].folder_namestringURL-safe folder identifier
[].descriptionstring or nullDescription
[].accent_colorstring or nullBrand accent color
[].logostring or nullLogo asset URL
[].closedbooleanWhether closed
[].archivedbooleanWhether archived
[].perm_joinstringWho can join
[].perm_member_managestringWho can manage members
[].createdstringCreation timestamp
[].updatedstringLast update timestamp
[].user_statusstring"joined", "invited", or "available"
[].org_domainstringParent organization domain

Spans all organizations the user belongs to. Workspaces from orgs without active subscriptions are filtered out.


List Available Workspaces

GET /current/workspaces/available/

Lists workspaces the user can join but has not yet joined. Useful for discovery UI.

Auth: JWT required.
Rate Limits: 500/hr, 5000/day (per user)

Example

curl -X GET "https://api.fast.io/current/workspaces/available/" \
  -H "Authorization: Bearer {jwt_token}"

Response: Same structure as List All Workspaces, but only includes un-joined workspaces.


Check Workspace Name

GET /current/workspaces/check/name/{name}/

Checks if a workspace folder name is already in use. Useful for real-time form validation.

Auth: JWT required. Org membership (Member or above) required. 2FA required.

Path Parameters

ParameterTypeRequiredDescription
{name}stringYesThe folder name to check

Example

curl -X GET "https://api.fast.io/current/workspaces/check/name/engineering/" \
  -H "Authorization: Bearer {jwt_token}"

Response — Name Available (202 Accepted)

{
  "result": "yes",
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_ERROR_INPUT_INVALID400An invalid workspace folder name was supplied.Invalid name format
APP_NOT_ACCEPTABLE406The supplied workspace folder name is already in use.Name taken
APP_FORBIDDEN403Permission deniedNot an org member

Checks globally across all workspaces, not just the current org. Returns 202 Accepted (not 200 OK) when the name is available.


List Workspaces in Org

GET /current/org/{org_id}/list/workspaces/

Lists workspaces within a specific organization. Paginated.

Auth: JWT required.
Rate Limits: Org members: 500/hr, 5000/day. External users: 100/hr, 500/day.

Path Parameters

ParameterTypeRequiredDescription
{org_id}stringYes20-digit numeric organization ID

Query Parameters

NameTypeDefaultDescription
limitinteger1001–500, items per page
offsetinteger0Items to skip
archivedstring"false""true" for archived, "false" for active

Example

curl -X GET "https://api.fast.io/current/org/10000000000000000001/list/workspaces/?limit=50&offset=0" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "response": {
    "workspaces": [
      {
        "id": "12345678901234567890",
        "folder_name": "engineering",
        "name": "Engineering Team",
        "description": "Main project workspace"
      }
    ],
    "pagination": {
      "total": 5,
      "limit": 50,
      "offset": 0,
      "has_more": false
    }
  },
  "current_api_version": "1.0"
}

Access Levels

RoleVisibility
Org OwnerAll workspaces
Org AdminAll workspaces
Org MemberWorkspaces matching perm_join permission
External UserOnly workspaces where they are a direct member

Cloud Import

Enable Cloud Import

POST /current/workspace/{workspace_id}/cloud-import/enable/

Enables cloud import features for a workspace. If already enabled, returns success with a message indicating the current state.

Auth: JWT required. Admin or Owner required. Requires the cloud import billing feature.
Rate Limits: 1/3s, 5/10s, 20/60s, 100/hr

Path Parameters

ParameterTypeRequiredDescription
{workspace_id}stringYes20-digit numeric workspace ID or folder_name

Example

curl -X POST "https://api.fast.io/current/workspace/12345678901234567890/cloud-import/enable/" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "response": {
    "message": "Cloud import features enabled",
    "cloud_import": true
  },
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_FORBIDDEN403Permission deniedNot admin or owner
APP_FEATURE_LIMIT403Feature not availableCloud import not included in billing plan
APP_ERROR_GENERAL500Failed to enable cloud import featuresInternal failure

Disable Cloud Import

POST /current/workspace/{workspace_id}/cloud-import/disable/

Disables cloud import features for a workspace. If already disabled, returns success with a message indicating the current state.

Auth: JWT required. Admin or Owner required. Requires the cloud import billing feature.
Rate Limits: 1/3s, 5/10s, 20/60s, 100/hr

Path Parameters

ParameterTypeRequiredDescription
{workspace_id}stringYes20-digit numeric workspace ID or folder_name

Example

curl -X POST "https://api.fast.io/current/workspace/12345678901234567890/cloud-import/disable/" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "response": {
    "message": "Cloud import features disabled",
    "cloud_import": false
  },
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_FORBIDDEN403Permission deniedNot admin or owner
APP_FEATURE_LIMIT403Feature not availableCloud import not included in billing plan
APP_ERROR_GENERAL500Failed to disable cloud import featuresInternal failure

Workflow

Enable Workflow

POST /current/workspace/{workspace_id}/workflow/enable/

Enables workflow features (tasks, todos, approvals) for a workspace. If already enabled, returns success with a message indicating the current state.

Auth: JWT required. Admin or Owner required. Requires the workflow billing feature.
Rate Limits: 1/3s, 5/10s, 20/60s, 100/hr

Path Parameters

ParameterTypeRequiredDescription
{workspace_id}stringYes20-digit numeric workspace ID or folder_name

Example

curl -X POST "https://api.fast.io/current/workspace/12345678901234567890/workflow/enable/" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "response": {
    "message": "Workflow features enabled",
    "workflow": true
  },
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_FORBIDDEN403Permission deniedNot admin or owner
APP_FEATURE_LIMIT403Feature not availableWorkflow not included in billing plan
APP_ERROR_GENERAL500Failed to enable workflow featuresInternal failure

Disable Workflow

POST /current/workspace/{workspace_id}/workflow/disable/

Disables workflow features for a workspace. If already disabled, returns success with a message indicating the current state.

Auth: JWT required. Admin or Owner required. Requires the workflow billing feature.
Rate Limits: 1/3s, 5/10s, 20/60s, 100/hr

Path Parameters

ParameterTypeRequiredDescription
{workspace_id}stringYes20-digit numeric workspace ID or folder_name

Example

curl -X POST "https://api.fast.io/current/workspace/12345678901234567890/workflow/disable/" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "response": {
    "message": "Workflow features disabled",
    "workflow": false
  },
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_FORBIDDEN403Permission deniedNot admin or owner
APP_FEATURE_LIMIT403Feature not availableWorkflow not included in billing plan
APP_ERROR_GENERAL500Failed to disable workflow featuresInternal failure

Task Lists

Task lists are a workflow feature. Workflow must be enabled on the workspace before using these endpoints. All task list endpoints support Accept: text/markdown for markdown-formatted output.

List Task Lists

GET /current/workspace/{workspace_id}/tasks/

Returns all task lists for the workspace. Supports pagination and markdown output.

Auth: JWT required. View or above. Requires the workflow billing feature.

Path Parameters

ParameterTypeRequiredDescription
{workspace_id}stringYes20-digit numeric workspace ID or folder_name

Query Parameters

NameTypeDefaultDescription
limitinteger100Items per page
offsetinteger0Items to skip

Headers

HeaderValueDescription
Accepttext/markdown(Optional) Return markdown-formatted output instead of JSON

Example

curl -X GET "https://api.fast.io/current/workspace/12345678901234567890/tasks/" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "response": {
    "task_lists": [
      {
        "id": "abc123opaque",
        "profile_id": "12345678901234567890",
        "name": "Sprint Backlog",
        "description": "Current sprint items",
        "created_by": "98765432109876543210",
        "properties": {},
        "sort_order": 0,
        "created": "2026-01-15T10:30:00+00:00",
        "updated": "2026-01-20T14:45:00+00:00",
        "deleted": null
      }
    ],
    "pagination": {
      "limit": 100,
      "offset": 0,
      "total": 1
    }
  },
  "current_api_version": "1.0"
}

Response Fields

FieldTypeDescription
task_listsarrayArray of task list objects
task_lists[].idstringOpaque task list ID
task_lists[].profile_idstring20-digit workspace profile ID
task_lists[].namestringTask list name
task_lists[].descriptionstring or nullTask list description
task_lists[].created_bystring20-digit user ID of the creator
task_lists[].propertiesobjectCustom properties
task_lists[].sort_orderintegerSort order position
task_lists[].createdstringISO 8601 creation timestamp
task_lists[].updatedstringISO 8601 last update timestamp
task_lists[].deletedstring or nullISO 8601 deletion timestamp, or null
paginationobjectPagination metadata

Error Responses

Error CodeHTTP StatusMessageCause
APP_FORBIDDEN403Workflow is not enabledWorkflow not enabled on workspace
APP_ERROR_GENERAL500Failed to retrieve task listsInternal failure

Create Task List

POST /current/workspace/{workspace_id}/tasks/create/

Creates a new task list in the workspace. Request body is JSON.

Auth: JWT required. View or above. Requires the workflow billing feature.

Path Parameters

ParameterTypeRequiredDescription
{workspace_id}stringYes20-digit numeric workspace ID or folder_name

Request Body (JSON)

NameTypeRequiredDescription
namestringYesTask list name
descriptionstringTask list description
propertiesobjectCustom properties
sort_orderintegerSort order position (default: 0)

Example

curl -X POST "https://api.fast.io/current/workspace/12345678901234567890/tasks/create/" \
  -H "Authorization: Bearer {jwt_token}" \
  -H "Content-Type: application/json" \
  -d '{"name": "Sprint Backlog", "description": "Current sprint items"}'

Response (200 OK)

{
  "result": "yes",
  "response": {
    "task_list": {
      "id": "abc123opaque",
      "profile_id": "12345678901234567890",
      "name": "Sprint Backlog",
      "description": "Current sprint items",
      "created_by": "98765432109876543210",
      "properties": {},
      "sort_order": 0,
      "created": "2026-01-15T10:30:00+00:00",
      "updated": "2026-01-15T10:30:00+00:00",
      "deleted": null
    }
  },
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_FORBIDDEN403Workflow is not enabledWorkflow not enabled on workspace
APP_ERROR_INPUT_INVALID400Invalid task list nameName validation failed
APP_ERROR_INPUT_INVALID400Invalid descriptionDescription validation failed
APP_ERROR_INPUT_INVALID400Invalid JSON in request bodyMalformed JSON
APP_ERROR_GENERAL500Failed to create task listInternal failure

Reorder Task Lists

POST /current/workspace/{workspace_id}/tasks/reorder/

Bulk reorder task lists within a workspace. All referenced task list IDs must belong to this workspace. Request body is JSON.

Auth: JWT required. View or above. Requires the workflow billing feature.

Path Parameters

ParameterTypeRequiredDescription
{workspace_id}stringYes20-digit numeric workspace ID or folder_name

Request Body (JSON)

NameTypeRequiredDescription
orderarrayYesArray of {id, sort_order} objects
order[].idstringYesOpaque task list ID
order[].sort_orderintegerYesNew sort order position

Example

curl -X POST "https://api.fast.io/current/workspace/12345678901234567890/tasks/reorder/" \
  -H "Authorization: Bearer {jwt_token}" \
  -H "Content-Type: application/json" \
  -d '{"order": [{"id": "abc123", "sort_order": 0}, {"id": "def456", "sort_order": 1}]}'

Response (200 OK)

{
  "result": "yes",
  "response": {
    "reordered": 2,
    "profile_id": "12345678901234567890"
  },
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_FORBIDDEN403Workflow is not enabledWorkflow not enabled on workspace
APP_ERROR_INPUT_INVALID400order must be a non-empty array...Missing or empty order array
APP_ERROR_INPUT_INVALID400Each order entry must have id and sort_order fieldsMalformed order entry
APP_ERROR_INPUT_INVALID400Invalid task list ID formatInvalid opaque ID
APP_ERROR_INPUT_INVALID400Task list ID does not belong to this workspaceID not owned by workspace
APP_ERROR_GENERAL500Failed to reorder task listsInternal failure

Todos

Todos are a workflow feature. Workflow must be enabled on the workspace before using these endpoints. All todo endpoints support Accept: text/markdown for markdown-formatted output.

List Todos

GET /current/workspace/{workspace_id}/todos/

Returns all todo items for the workspace. Supports pagination and markdown output.

Auth: JWT required. View or above. Requires the workflow billing feature.

Path Parameters

ParameterTypeRequiredDescription
{workspace_id}stringYes20-digit numeric workspace ID or folder_name

Query Parameters

NameTypeDefaultDescription
limitinteger100Items per page
offsetinteger0Items to skip

Headers

HeaderValueDescription
Accepttext/markdown(Optional) Return markdown-formatted output instead of JSON

Example

curl -X GET "https://api.fast.io/current/workspace/12345678901234567890/todos/" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "response": {
    "todos": [
      {
        "id": "abc123opaque",
        "profile_id": "12345678901234567890",
        "title": "Review pull request",
        "done": 0,
        "assignee_id": "98765432109876543210",
        "sort_order": 0,
        "created_by": "98765432109876543210",
        "properties": null,
        "created": "2026-01-15T10:30:00+00:00",
        "updated": "2026-01-20T14:45:00+00:00",
        "deleted": null
      }
    ],
    "pagination": {
      "limit": 100,
      "offset": 0,
      "total": 1
    }
  },
  "current_api_version": "1.0"
}

Response Fields

FieldTypeDescription
todosarrayArray of todo item objects
todos[].idstringOpaque todo ID
todos[].profile_idstring20-digit workspace profile ID
todos[].titlestringTodo title
todos[].doneintegerCompletion status: 0 = not done, 1 = done
todos[].assignee_idstring or null20-digit user ID of the assignee, or null
todos[].sort_orderintegerSort order position
todos[].created_bystring or null20-digit user ID of the creator, or null
todos[].propertiesobject or nullCustom properties
todos[].createdstringISO 8601 creation timestamp
todos[].updatedstringISO 8601 last update timestamp
todos[].deletedstring or nullISO 8601 deletion timestamp, or null
paginationobjectPagination metadata

Error Responses

Error CodeHTTP StatusMessageCause
APP_FORBIDDEN403Workflow is not enabledWorkflow not enabled on workspace
APP_ERROR_GENERAL500Failed to retrieve todo itemsInternal failure

Create Todo

POST /current/workspace/{workspace_id}/todos/create/

Creates a new todo item in the workspace. Request body is JSON.

Auth: JWT required. View or above. Requires the workflow billing feature.

Path Parameters

ParameterTypeRequiredDescription
{workspace_id}stringYes20-digit numeric workspace ID or folder_name

Request Body (JSON)

NameTypeRequiredDescription
titlestringYesTodo title
assignee_idstring20-digit user ID to assign the todo to
sort_orderintegerSort order position (default: 0)
propertiesobjectCustom properties

Example

curl -X POST "https://api.fast.io/current/workspace/12345678901234567890/todos/create/" \
  -H "Authorization: Bearer {jwt_token}" \
  -H "Content-Type: application/json" \
  -d '{"title": "Review pull request", "assignee_id": "98765432109876543210"}'

Response (200 OK)

{
  "result": "yes",
  "response": {
    "todo": {
      "id": "abc123opaque",
      "profile_id": "12345678901234567890",
      "title": "Review pull request",
      "done": 0,
      "assignee_id": "98765432109876543210",
      "sort_order": 0,
      "created_by": "98765432109876543210",
      "properties": null,
      "created": "2026-01-15T10:30:00+00:00",
      "updated": "2026-01-15T10:30:00+00:00",
      "deleted": null
    }
  },
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_FORBIDDEN403Workflow is not enabledWorkflow not enabled on workspace
APP_ERROR_INPUT_INVALID400Invalid titleTitle validation failed
APP_ERROR_INPUT_INVALID400Invalid assignee ID formatAssignee ID is not a valid numeric ID
APP_ERROR_INPUT_INVALID400Invalid JSON in request bodyMalformed JSON
APP_ERROR_GENERAL500Failed to create todo itemInternal failure

Bulk Toggle Todos

POST /current/workspace/{workspace_id}/todos/bulk-toggle/

Sets the done status for multiple todo items at once. Request body is JSON.

Auth: JWT required. View or above. Requires the workflow billing feature.

Path Parameters

ParameterTypeRequiredDescription
{workspace_id}stringYes20-digit numeric workspace ID or folder_name

Request Body (JSON)

NameTypeRequiredDescription
todo_idsarrayYesNon-empty array of opaque todo ID strings
donebooleanYestrue to mark as done, false to mark as not done

Example

curl -X POST "https://api.fast.io/current/workspace/12345678901234567890/todos/bulk-toggle/" \
  -H "Authorization: Bearer {jwt_token}" \
  -H "Content-Type: application/json" \
  -d '{"todo_ids": ["abc123", "def456"], "done": true}'

Response (200 OK)

{
  "result": "yes",
  "response": {
    "toggled": 2,
    "done": true
  },
  "current_api_version": "1.0"
}

Error Responses

Error CodeHTTP StatusMessageCause
APP_FORBIDDEN403Workflow is not enabledWorkflow not enabled on workspace
APP_ERROR_INPUT_INVALID400todo_ids must be a non-empty arrayMissing or empty todo_ids
APP_ERROR_INPUT_INVALID400done field is required (true or false)Missing done field
APP_ERROR_INPUT_INVALID400Invalid todo ID formatInvalid opaque ID in array
APP_ERROR_GENERAL500Failed to bulk toggle todo itemsInternal failure

Approvals

Approvals are a workflow feature. Workflow must be enabled on the workspace before using this endpoint. Supports Accept: text/markdown for markdown-formatted output.

List Approvals

GET /current/workspace/{workspace_id}/approvals/

Returns approvals for the workspace. Supports optional status filtering, pagination, and markdown output.

Auth: JWT required. View or above. Requires the workflow billing feature.

Path Parameters

ParameterTypeRequiredDescription
{workspace_id}stringYes20-digit numeric workspace ID or folder_name

Query Parameters

NameTypeDefaultDescription
statusstring(none)Filter by approval status
limitinteger100Items per page
offsetinteger0Items to skip

Headers

HeaderValueDescription
Accepttext/markdown(Optional) Return markdown-formatted output instead of JSON

Example

curl -X GET "https://api.fast.io/current/workspace/12345678901234567890/approvals/?status=pending" \
  -H "Authorization: Bearer {jwt_token}"

Response (200 OK)

{
  "result": "yes",
  "response": {
    "approvals": [
      {
        "id": "abc123opaque",
        "entity_type": "file",
        "entity_id": "def456opaque",
        "profile_id": "12345678901234567890",
        "requested_by": "98765432109876543210",
        "description": "Please review this document",
        "status": "pending",
        "approver_id": "11111111111111111111",
        "resolved_by": null,
        "resolved_at": null,
        "comment": null,
        "deadline": "2026-02-01T00:00:00+00:00",
        "node_id": "ghi789opaque",
        "properties": {},
        "created": "2026-01-15T10:30:00+00:00",
        "updated": "2026-01-15T10:30:00+00:00"
      }
    ],
    "pagination": {
      "limit": 100,
      "offset": 0,
      "total": 1
    }
  },
  "current_api_version": "1.0"
}

Response Fields

FieldTypeDescription
approvalsarrayArray of approval objects
approvals[].idstringOpaque approval ID
approvals[].entity_typestringType of entity being approved
approvals[].entity_idstringOpaque ID of the entity
approvals[].profile_idstring20-digit workspace profile ID
approvals[].requested_bystring20-digit user ID of the requester
approvals[].descriptionstring or nullApproval request description
approvals[].statusstringCurrent status
approvals[].approver_idstring or null20-digit user ID of the designated approver
approvals[].resolved_bystring or null20-digit user ID of whoever resolved it
approvals[].resolved_atstring or nullISO 8601 resolution timestamp
approvals[].commentstring or nullResolution comment
approvals[].deadlinestring or nullISO 8601 deadline timestamp
approvals[].node_idstring or nullOpaque ID of the related storage node
approvals[].propertiesobject or nullCustom properties
approvals[].createdstringISO 8601 creation timestamp
approvals[].updatedstringISO 8601 last update timestamp
paginationobjectPagination metadata

Error Responses

Error CodeHTTP StatusMessageCause
APP_FORBIDDEN403Workflow is not enabledWorkflow not enabled on workspace
APP_ERROR_INPUT_INVALID400Invalid status filterUnrecognized status value
APP_ERROR_GENERAL500Failed to retrieve approvalsInternal failure
↑ Back to top