> ## 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.

# Create project

> Create a new project. The creator is automatically added as an admin member.



## OpenAPI

````yaml https://neo.api.projectdiscovery.io/api/openapi.json post /api/v1/projects
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: 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: Model discovery and capabilities
    name: Models
  - description: Third-party integrations
    name: Integrations
  - description: Skill knowledge documents for agent prompts
    name: Skills
  - 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
paths:
  /api/v1/projects:
    post:
      tags:
        - Projects
      summary: Create project
      description: >-
        Create a new project. The creator is automatically added as an admin
        member.
      operationId: post-v1-projects
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProjectRequest'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectResponse'
          description: Project created
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Unauthorized
      security:
        - BearerAuth: []
        - ApiKeyAuth: []
components:
  schemas:
    CreateProjectRequest:
      properties:
        id:
          description: |
            Optional. Client-supplied project UUID. If omitted, the server
            generates one. If a project with this id already exists, the
            request is rejected with 409.
          format: uuid
          type: string
        name:
          description: |
            Optional. Project name. If omitted or empty the server stores an
            empty name and may generate one asynchronously from the first task.
          maxLength: 128
          type: string
        settings_md:
          description: |
            Optional initial project settings markdown. Values longer than 35k
            characters are truncated by the API and suffixed with
            "[truncated] max char limit 35k".
          type: string
        tags:
          description: |
            Optional. Initial tags. Capped at 20. The agent merges additional
            tags onto this set asynchronously.
          items:
            type: string
          type: array
        type:
          default: shared
          description: |
            Optional. Workspace type, fixed at creation and cannot be changed
            later. 'shared' (default) runs in the common team workspace and is
            shared with the whole team. 'dedicated' uses an isolated, private
            workspace accessible only to invited members.
          enum:
            - shared
            - dedicated
          type: string
      type: object
    ProjectResponse:
      properties:
        project:
          $ref: '#/components/schemas/Project'
      required:
        - project
      type: object
    ErrorResponse:
      properties:
        code:
          description: >
            Stable machine-readable error code — branch on this rather than

            matching the human `error`/`message` strings. Domain codes include

            `user_spending_cap_reached`, `project_spending_cap_reached`, and

            `insufficient_neo_credits`; 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
      required:
        - error
      type: object
    Project:
      properties:
        cap_percent_used:
          description: Percent of cap consumed (0..100+). Null when no cap is set.
          format: float
          nullable: true
          type: number
        cap_used_usd:
          description: USD spend counted toward the cap. Null when no cap is set.
          format: float
          nullable: true
          type: number
        created_at:
          description: Creation timestamp
          format: date-time
          type: string
        id:
          description: Project ID
          format: uuid
          type: string
        is_owner:
          description: Whether the current user is the project owner
          type: boolean
        issue_count:
          description: Number of non-deleted issues in the project
          minimum: 0
          type: integer
        issues_by_severity:
          description: Non-deleted project issues grouped by severity
          items:
            $ref: '#/components/schemas/IssueStatEntry'
          type: array
        issues_by_status:
          description: Non-deleted project issues grouped by status
          items:
            $ref: '#/components/schemas/IssueStatEntry'
          type: array
        member_count:
          description: Number of explicit members in the project
          minimum: 0
          type: integer
        name:
          description: |
            Project name. May be empty when the project was created without a
            name (e.g. auto-created by POST /tasks); the server fills it in
            asynchronously from the first task's message.
          maxLength: 128
          type: string
        owner_email:
          description: Email of the project owner
          format: email
          type: string
        settings_md:
          description: |
            Project settings markdown. User-managed project context that agents
            read at the start of project-scoped tasks. Empty string means no
            project settings are configured. Values longer than 35k characters
            are truncated by the API and suffixed with
            "[truncated] max char limit 35k".
          type: string
        shared_team_id:
          description: Team ID used for team-wide sharing when enabled
          format: uuid
          nullable: true
          type: string
        shared_with_team:
          description: >-
            Whether all current and future accepted members of the linked team
            can access this project
          type: boolean
        spending_cap_usd:
          description: Per-project spending cap in USD. Null when no cap is set.
          format: float
          nullable: true
          type: number
        tags:
          description: >
            Project tags. Merged from agent-derived tags and user edits. Capped
            at 20.
          items:
            type: string
          type: array
        task_count:
          description: Number of tasks associated with the project
          minimum: 0
          type: integer
        type:
          description: |
            Project workspace type, fixed at creation. 'shared' uses the common
            team workspace and is visible to the whole team; 'dedicated' uses an
            isolated, private workspace accessible only to invited members.
          enum:
            - shared
            - dedicated
          type: string
        updated_at:
          description: Last update timestamp
          format: date-time
          type: string
      required:
        - id
        - name
        - owner_email
        - member_count
        - task_count
        - tags
        - settings_md
        - type
        - shared_with_team
        - created_at
        - updated_at
      type: object
    IssueStatEntry:
      properties:
        count:
          type: integer
        label:
          type: string
      required:
        - label
        - count
      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

````