> ## Documentation Index
> Fetch the complete documentation index at: https://docs.neo.projectdiscovery.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Accept invitation

> Accept a pending team invitation.



## OpenAPI

````yaml /openapi/neo.public.openapi.json post /api/v1/teams/invitations/accept
openapi: 3.1.0
info:
  contact:
    name: ProjectDiscovery
    url: https://neo.projectdiscovery.io
  description: Neo API Server - Security agent orchestration platform
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0
  title: Neo API
  version: 1.0.0
servers:
  - description: Production
    url: https://neo.api.projectdiscovery.io
  - description: Development
    url: https://neo.api.dev.projectdiscovery.io
  - description: Local development
    url: http://localhost:8080
security: []
tags:
  - description: Task execution and management
    name: Tasks
  - description: Agent listing and management
    name: Agents
  - description: Public agent directory
    name: Agent Directory
  - description: User file storage management
    name: Files
  - description: User working memory management
    name: Memory
  - description: Scheduled and recurring task management
    name: Schedules
  - description: Knowledge base and semantic search
    name: Knowledge
  - description: Encrypted user credentials and API keys
    name: Secrets
  - description: Neo API key management for programmatic access
    name: API Keys
  - description: User profile and account information
    name: User
  - description: Task and LLM usage tracking
    name: Usage
  - description: Bring Your Own Key provider management
    name: BYOK
  - description: Connect personal AI provider accounts and select them as a model source
    name: AI Connections
  - description: Model discovery and capabilities
    name: Models
  - description: Third-party integrations
    name: Integrations
  - description: Skill knowledge documents for agent prompts
    name: Skills
  - description: User-authored tools and toolkit management
    name: Dynamic Tools
  - description: Team management and member invitations
    name: Teams
  - description: Prompt library management and discovery
    name: Prompts
  - description: Slack bot integration for workspace installation and OAuth
    name: Slack
  - description: GitHub integration for PR reviews and repository management
    name: GitHub
  - description: Vulnerability issue tracking and management
    name: Issues
  - description: Subscription billing and plans
    name: Billing
  - description: Project management and member assignments
    name: Projects
  - description: SSH key pair generation and management for remote server access
    name: SSH Keys
  - description: Codebase structural analysis and mapping
    name: Codemaps
  - description: AI-generated codebase documentation and security analysis
    name: CodeWiki
  - description: Captured HTTP traffic query and replay
    name: Network Events
  - description: User and team API activity metadata
    name: Audit Logs
  - description: Vulnerability triage for HackerOne, GitHub, and Security Inbox
    name: Triage
paths:
  /api/v1/teams/invitations/accept:
    post:
      tags:
        - Teams
      summary: Accept invitation
      description: Accept a pending team invitation.
      operationId: post-v1-teams-invitations-accept
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AcceptInvitationRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AcceptInvitationResponse'
          description: Invitation accepted
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Unauthorized
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Invitation not found
      security:
        - BearerAuth: []
        - ApiKeyAuth: []
components:
  schemas:
    AcceptInvitationRequest:
      properties:
        invite_token:
          description: Secure invitation token received in the invite email
          minLength: 1
          type: string
      required:
        - invite_token
      type: object
    AcceptInvitationResponse:
      properties:
        member:
          $ref: '#/components/schemas/TeamMember'
        team:
          $ref: '#/components/schemas/Team'
      required:
        - team
        - member
      type: object
    ErrorResponse:
      properties:
        code:
          description: >
            Stable machine-readable error code — branch on this rather than

            matching the human `error`/`message` strings. `access_restricted`

            (HTTP 403) denies hosted Neo access under the access policy. On team

            invitations, param=email identifies a restricted recipient rather

            than the caller; show the error without redirecting the caller.
            Domain codes include

            `user_spending_cap_reached`, `project_spending_cap_reached`, and

            `insufficient_neo_credits`; Free/usage codes include

            `free_grant_challenge_required`, `free_usage_exhausted`,

            `free_task_budget_exhausted`, `model_not_available_on_free`,

            `sandbox_not_available_on_free` (cloud sandbox surfaces are not

            available on the Free plan; task files remain available from the

            task), `free_cannot_continue_managed_task` (a task that ran on the

            standard cloud sandbox cannot be continued on the Free plan; start

            a new task), `free_origin_not_supported` (integration-originated

            tasks are not available on the Free plan),

            `weekly_usage_limit_reached`, `billing_period_usage_limit_reached`,

            `topup_required`, `subscription_required`, and

            `isolated_workspace_purged`. Otherwise it mirrors the error kind

            (e.g. `forbidden`, `invalid_request`, `not_exists`,
            `already_exists`).
          example: user_spending_cap_reached
          type: string
        error:
          example: Bad request
          type: string
        error_id:
          description: Correlation id for a specific error instance, when present.
          type: string
        kind:
          description: Coarse error category (e.g. "forbidden request", "invalid request").
          example: forbidden request
          type: string
        message:
          description: |
            Human-readable detail (the kind prefixed to the error). For display,
            not for branching.
          type: string
        param:
          description: >-
            Field rejected by the policy; email for a restricted invite
            recipient.
          type: string
        turnstile_site_key:
          description: |
            Public Cloudflare Turnstile site key returned only with
            `free_grant_challenge_required`, so the client can complete the
            invisible verification before retrying the request.
          type: string
      required:
        - error
      type: object
    TeamMember:
      properties:
        accepted_at:
          description: When the invitation was accepted
          format: date-time
          nullable: true
          type: string
        billable:
          description: >-
            Whether this member consumes a paid subscription seat. false =
            non-premium (no seat, no credit access).
          type: boolean
        cap:
          allOf:
            - $ref: '#/components/schemas/SpendingCapStatus'
          description: >-
            Effective spending-cap status (source/limit/used/remaining). Null
            when the team isn't on a spend-controls plan. RBAC: admins see every
            member's cap; a non-admin sees their own and null for other members.
          nullable: true
        created_at:
          description: When the team member record was created
          format: date-time
          type: string
        email:
          description: Member email
          format: email
          type: string
        id:
          description: Member ID
          format: uuid
          type: string
        invited_at:
          description: When the invitation was sent
          format: date-time
          type: string
        invited_by:
          description: >-
            Email of the user who invited this member (null if inviter was
            deleted)
          format: email
          nullable: true
          type: string
        project_access:
          $ref: '#/components/schemas/ProjectAccess'
        role:
          $ref: '#/components/schemas/TeamMemberRole'
        status:
          $ref: '#/components/schemas/TeamMemberStatus'
        updated_at:
          description: When the team member record was last updated
          format: date-time
          type: string
      required:
        - id
        - email
        - role
        - status
        - invited_at
      type: object
    Team:
      properties:
        auto_join_enabled:
          description: Whether auto-join is enabled for users with matching email domain
          type: boolean
        branding:
          allOf:
            - $ref: '#/components/schemas/TeamBranding'
          description: >-
            Brand overrides applied to Canvas PDF exports. Null when the team
            hasn't configured branding; PDFs fall back to the default `neo by
            Projectdiscovery` wordmark.
          nullable: true
        created_at:
          format: date-time
          type: string
        default_spending_cap_credits:
          description: >-
            Team-wide default spending cap in credits applied to members without
            an explicit override. Null if unset. Admin-only — scrubbed (null)
            for non-admin callers. Written via PATCH
            /teams/default-spending-cap.
          format: float
          nullable: true
          type: number
        id:
          description: Team ID (short UUID)
          type: string
        is_domain_verified:
          description: >-
            Whether the team domain is a verified non-public domain (e.g.,
            company domain like projectdiscovery.io). False for public email
            providers like gmail.com, yahoo.com
          type: boolean
        max_members:
          description: Maximum allowed members
          minimum: 1
          type: integer
        member_count:
          description: Current number of members (accepted and auto_joined)
          minimum: 0
          type: integer
        name:
          description: Team name
          maxLength: 128
          minLength: 1
          type: string
        updated_at:
          format: date-time
          type: string
        webhook_secret_name:
          description: >-
            Name of a team owner secret used as a Bearer token when calling the
            webhook.
          nullable: true
          type: string
        webhook_url:
          description: Webhook URL for webhook-mode task completion notifications.
          format: uri
          nullable: true
          type: string
      required:
        - id
        - name
        - member_count
        - max_members
        - created_at
        - updated_at
      type: object
    SpendingCapStatus:
      properties:
        limit:
          description: Effective cap in credits. null when source is "none".
          format: float
          nullable: true
          type: number
        remaining:
          description: limit − used, clamped ≥ 0. null when source is "none".
          format: float
          nullable: true
          type: number
        source:
          description: >-
            What the effective limit comes from — an explicit per-member
            override, the team-wide default, or none (bounded only by the team
            pool / not on a spend-controls plan).
          enum:
            - override
            - global_default
            - none
          type: string
        used:
          description: Credits spent in the current cap window.
          format: float
          type: number
      required:
        - source
      type: object
    ProjectAccess:
      description: >-
        Project access scope for a team member. 'all' grants access to every
        shared team project, current and future. 'restricted' grants access only
        to projects the member is explicitly added to. Admins always have 'all'
        access.
      enum:
        - all
        - restricted
      type: string
    TeamMemberRole:
      description: >-
        Role of a team member (admin=full access, member=write access,
        viewer=read-only)
      enum:
        - admin
        - member
        - viewer
      type: string
    TeamMemberStatus:
      description: >-
        Status of a team member (pending=invited, accepted=accepted invite,
        auto_joined=joined via domain auto-join)
      enum:
        - pending
        - accepted
        - auto_joined
      type: string
    TeamBranding:
      description: >-
        Per-team branding overrides for Canvas PDF exports. Mirrors the
        renderer's `BrandInfo` shape (neo-ui canvas-export-pdf.tsx). Every field
        is optional; the renderer falls back to the default Neo wordmark for
        fields that are unset.
      properties:
        logo_url:
          description: >-
            HTTPS URL of a custom raster logo. PNG or JPEG only — SVG is not
            supported by the PDF renderer. The URL is SSRF-validated at write
            time: `http://`, userinfo, and any hostname that resolves to a
            private/loopback/link-local/multicast/cloud-metadata IP is rejected.
            Empty string clears the logo.
          format: uri
          maxLength: 2048
          nullable: true
          type: string
        name:
          description: >-
            Display name set in Young Serif (the primary tier of the wordmark).
            Empty string clears the name and reverts to the default Neo
            wordmark. Control characters are rejected.
          maxLength: 64
          nullable: true
          type: string
        tagline:
          description: >-
            Short subtitle next to the name (e.g. "by Acme"). Null leaves the
            default `by Projectdiscovery` tagline; explicit empty string hides
            the tagline entirely. Control characters are rejected.
          maxLength: 96
          nullable: true
          type: string
      type: object
  securitySchemes:
    BearerAuth:
      bearerFormat: JWT
      description: JWT authentication token
      scheme: bearer
      type: http
    ApiKeyAuth:
      description: Neo API key (neo_sk_* prefix)
      in: header
      name: X-Api-Key
      type: apiKey

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.