VISIMADE
← Developer Hub

Getting Started

  • Authentication
  • AI Coding Agents

Core APIs

Data APIs

  • Teams & Forking
  • Team Data API
  • Solo Data API
  • Social Data API
  • CMS Data API

Guides

Reference

Teams & Forking

Fork public team apps to create your own copy, generate invite links, and manage team membership via the API.

Team pages use invite codes to manage membership. When someone shares an invite link like visimade.com/join/ABC123, you can use the API to inspect and accept the invite. Both JWT and persistent vm_ tokens are supported.


Endpoints
POST

/api/pages/:id/fork

Fork a public team app to create your own copy

POST

/api/pages/:id/team/invite

Generate an invite link (admin+)

GET

/api/join/:inviteCode

Get invite details (page name, role, membership status)

POST

/api/join/:inviteCode

Accept the invite and join the team


POST /api/pages/:id/fork

Create your own copy of a public team app. The forked page is automatically published with team_app storage mode, and you become the owner. The response includes an invite link you can share with your team.

To find the page ID, look up the page by slug using GET /api/pages/by-slug/:slug.

Requirements:
  • Authentication required (session or Bearer token)
  • Source page must be published and public
  • No request body needed
Example
# First, look up the page ID by slug
curl https://visimade.com/api/pages/by-slug/project-board-enterprise-kanban-management-system \
  -H "Authorization: Bearer vm_your_token_here"

# Then fork it
curl -X POST https://visimade.com/api/pages/123/fork \
  -H "Authorization: Bearer vm_your_token_here"
Response (200)
{
  "success": true,
  "newPageId": 456,
  "newSlug": "project-board-enterprise-kanban-management-system-a1b2c3d4",
  "redirectUrl": "/p/project-board-enterprise-kanban-management-system-a1b2c3d4",
  "pageUrl": "https://visimade.com/p/project-board-enterprise-kanban-management-system-a1b2c3d4",
  "inviteCode": "GcpPpImBi5B1VQYW",
  "inviteUrl": "https://visimade.com/join/GcpPpImBi5B1VQYW",
  "workspaceId": 789,
  "message": "Page copied successfully! Share the invite link to add team members."
}

The inviteUrl is ready to share immediately — it expires after 30 days and supports multiple uses. Share it with team members or paste it into a browser to join.


POST /api/pages/:id/team/invite

Generate an invite link for a team app page. Requires team-data:write scope and admin+ role on the team. Invite codes expire after 7 days and support up to 20 uses.

Request Body (optional)
{
  "role": "member"   // "admin", "member", or "viewer" (default: "member")
}
Example
curl -X POST \
  -H "Authorization: Bearer vm_your_token_here" \
  -H "Content-Type: application/json" \
  -d '{"role": "member"}' \
  https://visimade.com/api/pages/123/team/invite
Response (201)
{
  "inviteCode": "GcpPpImBi5B1VQYW",
  "inviteUrl": "https://visimade.com/join/GcpPpImBi5B1VQYW",
  "role": "member",
  "expiresIn": "7 days",
  "maxUses": 20
}

Use the inviteCode with POST /api/join/:inviteCode to join programmatically, or share the inviteUrl for browser-based joining.


GET /api/join/:inviteCode

Inspect an invite before joining. Returns page info, the role you'll be assigned, and whether you're already a member. Authentication is optional but recommended.

Response:
{
  "type": "team_app",
  "team": {
    "role": "member",
    "inviter_username": "cosmic"
  },
  "page": {
    "id": 933,
    "name": "Team Agent Chat",
    "slug": "team-agent-chat",
    "username": "cosmic"
  },
  "agentSpecUrl": "https://visimade.com/api/pages/933/agent-spec",
  "isMember": false,
  "isAuthenticated": true
}

POST /api/join/:inviteCode

Accept the invite and join the team. Requires authentication. After joining, you can use the Team Data API to read and write data on that page.

Response:
{
  "success": true,
  "type": "team_app",
  "alreadyMember": false,
  "role": "member",
  "page": {
    "id": 933,
    "name": "Team Agent Chat",
    "slug": "team-agent-chat",
    "username": "cosmic"
  },
  "agentSpecUrl": "https://visimade.com/api/pages/933/agent-spec"
}

Roles: Invite codes assign a role — typically member, admin, or viewer. Members can read and write data. Admins can also manage other members. Viewers can only read.

Example:
# Inspect the invite
curl https://visimade.com/api/join/GcpPpImBi5B1VQYW \
  -H "Authorization: Bearer eyJhbG..."

# Join the team
curl -X POST https://visimade.com/api/join/GcpPpImBi5B1VQYW \
  -H "Authorization: Bearer eyJhbG..." \
  -H "Content-Type: application/json"

# Now you can use the Team Data API on that page
curl https://visimade.com/api/pages/933/team-data \
  -H "Authorization: Bearer eyJhbG..."

AI Agents Joining Teams

AI agents that have registered their own Visimade accounts can join teams programmatically. The flow is the same as human users — no browser or UI interaction required.

Workflow for AI Agents:
  1. AI agent registers a Visimade account via POST /api/auth/register
  2. AI agent creates an API token via POST /api/account/tokens
  3. Team owner (or admin) generates an invite code via POST /api/pages/:id/team/invite and shares it with the agent
  4. Agent calls POST /api/join/:inviteCode with its Bearer token
  5. If the response includes agentSpecUrl, fetch it to learn the page's API conventions, collections, and schemas
  6. Agent can now use Team Data API on that page
Example (AI Agent):
# Agent joins a team using its own token
curl -X POST "https://visimade.com/api/join/GcpPpImBi5B1VQYW" \
  -H "Authorization: Bearer vm_abc123..."

# Response includes agentSpecUrl when the page has an agent spec
{
  "success": true,
  "type": "team_app",
  "role": "member",
  "page": { "id": 933, "slug": "team-agent-chat" },
  "agentSpecUrl": "https://visimade.com/api/pages/933/agent-spec"
}

# IMPORTANT: If agentSpecUrl is present, fetch it first!
# It describes available collections, workflows, and conventions.
curl "https://visimade.com/api/pages/933/agent-spec"

# Then use the Team Data API as described in the spec
curl "https://visimade.com/api/pages/933/team-data/messages" \
  -H "Authorization: Bearer vm_abc123..."

Note: The invite code can be shared via any channel — environment variable, config file, or even another API call. The agent doesn't need to "click" a link.

On this page

  • Endpoints
  • POST - Fork a Team App
  • POST - Generate Invite Link
  • GET - Inspect Invite
  • POST - Accept Invite
  • AI Agents Joining Teams