Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/paramveer-cyber/Deployaar/llms.txt

Use this file to discover all available pages before exploring further.

The project router handles the full lifecycle of a Deployaar project — creating, reading, updating, and deleting projects inside an organization, and connecting or disconnecting the GitHub repository that the coding agent will clone and push to. Every procedure requires authentication. Repository operations also validate that the GitHub App is installed and the caller has organization membership.

project.createProject — mutation

Creates a new project inside an organization. The organization must not have reached the plan’s maxProjects limit, and the caller must already be a member of the organization.
Billing limits are checked at creation time. Free-plan organizations are limited to 1 project. Upgrade to Pro (5 projects) or Pro Max (15 projects) to create more.

Input

organizationId
string (UUID)
required
The UUID of the organization that will own the project.
name
string
required
Display name for the project. Minimum 2 characters, maximum 100 characters.
slug
string
required
URL-safe identifier for the project. Minimum 2 characters, maximum 100 characters. May only contain lowercase letters, numbers, and hyphens (^[a-z0-9-]+$).
description
string | null
Optional longer description of the project. Maximum 500 characters.

Response

{
  "success": true,
  "message": "Project created",
  "data": {
    "project": {
      "id": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
      "organizationId": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
      "name": "Customer Portal",
      "slug": "customer-portal",
      "description": "Self-service portal for enterprise customers.",
      "createdByUserId": "auth0|abc123",
      "createdAt": "2024-01-10T09:00:00.000Z",
      "updatedAt": "2024-01-10T09:00:00.000Z"
    }
  }
}

project.getProjects — query

Returns all projects that belong to an organization. The caller must be a member of that organization.

Input

organizationId
string (UUID)
required
The UUID of the organization whose projects should be listed.

Response

{
  "success": true,
  "message": "Found",
  "data": {
    "projects": [
      {
        "id": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
        "organizationId": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
        "name": "Customer Portal",
        "slug": "customer-portal",
        "description": null,
        "createdByUserId": "auth0|abc123",
        "createdAt": "2024-01-10T09:00:00.000Z",
        "updatedAt": "2024-01-10T09:00:00.000Z"
      }
    ]
  }
}

project.getProject — query

Fetches a single project by its ID. The caller must be a member of the owning organization.

Input

projectId
string (UUID)
required
The UUID of the project to retrieve.

Response

{
  "success": true,
  "message": "Found",
  "data": {
    "project": {
      "id": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
      "organizationId": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
      "name": "Customer Portal",
      "slug": "customer-portal",
      "description": "Self-service portal for enterprise customers.",
      "createdByUserId": "auth0|abc123",
      "createdAt": "2024-01-10T09:00:00.000Z",
      "updatedAt": "2024-01-10T09:00:00.000Z"
    }
  }
}

project.updateProject — mutation

Updates one or more editable fields on a project. Only the provided fields are changed; omitted fields are left untouched.

Input

projectId
string (UUID)
required
The UUID of the project to update.
name
string
New display name. Minimum 2 characters, maximum 100 characters.
slug
string
New URL-safe slug. Minimum 2 characters, maximum 100 characters. Pattern: ^[a-z0-9-]+$.
description
string | null
New description. Maximum 500 characters. Pass null to clear it.

Response

{
  "success": true,
  "message": "Project updated",
  "data": {
    "project": {
      "id": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
      "name": "Customer Portal v2",
      "slug": "customer-portal-v2",
      "...": "..."
    }
  }
}

project.deleteProject — mutation

Permanently deletes a project and all associated data, including feature requests, PRDs, agent runs, and reviews. This action cannot be undone.

Input

projectId
string (UUID)
required
The UUID of the project to delete.

Response

{
  "success": true,
  "message": "Project deleted",
  "data": {
    "id": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed"
  }
}

project.getProjectRepository — query

Returns the GitHub repository linked to a project, or null if no repository has been connected yet.

Input

projectId
string (UUID)
required
The UUID of the project whose linked repository should be retrieved.

Response

{
  "success": true,
  "message": "Found",
  "data": {
    "repository": {
      "id": "c4db5a9e-12d2-4b8c-8b4e-7f6d3c5e9a1b",
      "projectId": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
      "installationId": 12345678,
      "repoFullName": "acme-corp/customer-portal",
      "repoId": 987654321,
      "defaultBranch": "main",
      "reviewDepth": "depth_1",
      "connectedAt": "2024-01-10T10:00:00.000Z"
    }
  }
}
repository is null when no repo is linked. Feature requests cannot be created until a repository is connected.

project.connectRepository — mutation

Links a GitHub repository to the project. The Deployaar GitHub App must already be installed on the target organization or user account that owns the repository.

Input

projectId
string (UUID)
required
The UUID of the project to connect the repository to.
repoFullName
string
required
The full owner/repo name of the GitHub repository, e.g. acme-corp/customer-portal. Must match the pattern ^[^/]+\/[^/]+$.

Response

{
  "success": true,
  "message": "Repository connected",
  "data": {
    "repository": {
      "id": "c4db5a9e-12d2-4b8c-8b4e-7f6d3c5e9a1b",
      "projectId": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
      "installationId": 12345678,
      "repoFullName": "acme-corp/customer-portal",
      "repoId": 987654321,
      "defaultBranch": "main",
      "reviewDepth": "depth_1",
      "connectedAt": "2024-01-10T10:00:00.000Z"
    }
  }
}

project.disconnectRepository — mutation

Removes the GitHub repository link from a project. Existing feature requests and agent runs are not deleted, but new coding runs cannot be started until a repository is reconnected.

Input

projectId
string (UUID)
required
The UUID of the project whose repository connection should be removed.

Response

{
  "success": true,
  "message": "Repository disconnected",
  "data": {
    "id": "c4db5a9e-12d2-4b8c-8b4e-7f6d3c5e9a1b"
  }
}

project.updateReviewDepth — mutation

Changes the AI review depth that will be used for future pull request reviews on this project’s repository.

Review depth values

ValueDescription
shallowQuick scan — checks for obvious bugs and security issues only
depth_1Standard review — correctness, security, and acceptance criteria
depth_2Deep review — includes performance, style, and edge cases
depth_3Exhaustive review — all categories with maximum scrutiny

Input

projectId
string (UUID)
required
The UUID of the project whose review depth should be updated.
reviewDepth
string (enum)
required
One of: shallow | depth_1 | depth_2 | depth_3

Response

{
  "success": true,
  "message": "Review depth updated",
  "data": {
    "repository": {
      "id": "c4db5a9e-12d2-4b8c-8b4e-7f6d3c5e9a1b",
      "reviewDepth": "depth_2",
      "...": "..."
    }
  }
}

TypeScript example

import { trpc } from "~/trpc/client";

// Create a project
const createMutation = trpc.project.createProject.useMutation();

const { data } = await createMutation.mutateAsync({
  organizationId: "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
  name: "Customer Portal",
  slug: "customer-portal",
  description: "Self-service portal for enterprise customers.",
});

const projectId = data.project.id;

// Connect a GitHub repository to the project
const connectMutation = trpc.project.connectRepository.useMutation();

await connectMutation.mutateAsync({
  projectId,
  repoFullName: "acme-corp/customer-portal",
});

// List all projects for an organization
const { data: projectList } = trpc.project.getProjects.useQuery({
  organizationId: "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
});

REST equivalent (curl)

# Create a project
curl -X POST https://api.deployaar.com/api/projects \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "organizationId": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
    "name": "Customer Portal",
    "slug": "customer-portal",
    "description": "Self-service portal for enterprise customers."
  }'

# List projects for an organization
curl "https://api.deployaar.com/api/organizations/{organizationId}/projects" \
  -H "Authorization: Bearer <token>"

# Get a single project
curl https://api.deployaar.com/api/projects/{projectId} \
  -H "Authorization: Bearer <token>"

# Connect a GitHub repository
curl -X POST https://api.deployaar.com/api/projects/{projectId}/repository \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"repoFullName": "acme-corp/customer-portal"}'

# Update review depth
curl -X PATCH https://api.deployaar.com/api/projects/{projectId}/repository/review-depth \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"reviewDepth": "depth_2"}'

Build docs developers (and LLMs) love