{
  "name": "BugPoint API",
  "version": "1.0.0",
  "description": "A project collaboration platform with magic link authentication and Atlassian integration",
  "schemas": {
    "project": {
      "id": "string",
      "name": "string",
      "siteUrl": "string",
      "createdAt": "string (ISO date)",
      "ownerId": "string",
      "jiraProjectKey": "string | null",
      "jiraIssueTypeId": "string | null",
      "jiraIssueTypeName": "string | null"
    },
    "projectMember": {
      "id": "string",
      "userId": "string",
      "email": "string",
      "name": "string",
      "role": "\"owner\" | \"member\"",
      "joinedAt": "string (ISO date)"
    },
    "issue": {
      "id": "string",
      "projectId": "string",
      "title": "string",
      "description": "string | null",
      "status": "string",
      "createdAt": "string (ISO date)"
    }
  },
  "endpoints": {
    "authentication": {
      "POST /api/register": "Register user with email (sends magic link). Body: { email, magicLinkUrl? }",
      "POST /api/verify": "Verify magic link token and login. Body: { token }",
      "GET /api/me": "Get current user session",
      "POST /api/logout": "Logout and destroy session",
      "GET /logout": "Logout and destroy session (browser-friendly)"
    },
    "projects": {
      "POST /api/projects": "Create new project",
      "GET /api/projects": "List all user's projects (owned + member)",
      "GET /api/projects/:id": "Get project details (owner/member access)",
      "DELETE /api/projects/:id": "Delete project (owner only)",
      "GET /api/projects/:id/members": "List project members (includes owner with role: \"owner\")",
      "DELETE /api/projects/:id/members/:memberId": "Remove project member (owner only)",
      "PATCH /api/projects/:id/jira-config": "Configure default Jira project and issue type for project"
    },
    "issues": {
      "POST /api/issues": "Create issue (database-first, publishes to Jira in background)",
      "GET /api/issues/:id": "Get issue details with status and Jira data",
      "PATCH /api/issues/:id": "Update issue fields or status",
      "GET /api/projects/:id/issues": "List all issues for a project",
      "GET /api/projects/:id/events": "Server-Sent Events (SSE) stream for real-time issue publishing notifications"
    },
    "invitations": {
      "POST /api/projects/:id/invitations": "Send project invitation (owner only). Body: { email: string, role?: \"member\", acceptUrl?: string (frontend URL for invitation link, must match allowed domains) }",
      "DELETE /api/projects/:id/invitations/:invitationId": "Revoke a pending invitation (owner only)",
      "GET /accept-invitation": "Accept invitation (one-click join). Query: { token: string }"
    },
    "integrations": {
      "GET /api/projects/:id/integrations": "List project integrations",
      "POST /api/projects/:id/integrations/atlassian/connect": "Get Atlassian OAuth authorization URL. Body: { redirectUrl: string (required, http/https) }. Response: { success, authorizationUrl, state, redirectUrl }",
      "GET /auth/atlassian/callback": "Atlassian OAuth callback",
      "GET /api/projects/:id/integrations/atlassian/listProjects": "List Jira projects for integration",
      "GET /api/projects/:id/integrations/atlassian/getIssueTypes": "Get issue types for Jira project",
      "POST /api/projects/:id/integrations/atlassian/createIssue": "Create issue in Jira project",
      "DELETE /api/projects/:projectId/integrations/:integrationId": "Disconnect integration"
    },
    "demo": {
      "GET /demo": "Interactive API demo page"
    }
  }
}