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

# Get a project

> Read one project



## OpenAPI

````yaml /openapi-v3.yaml get /account/projects/{project_id}
openapi: 3.1.0
info:
  title: Origami API v3
  version: '3.0'
  description: >
    The Origami **v3 API** is the current public surface: named, typed

    operations in three sections (**Account**, **Leads**, **Send**) plus

    one shared **Job** resource for all async work. The same catalog

    drives HTTP (`https://origami.chat/api/v3`), the hosted MCP server

    (`https://origami.chat/mcp`), and the `origami` CLI.


    **Wire conventions.** Fields are `snake_case`. Every object carries

    an `object` type field. Every list is

    `{ "object": "list", "items": [...], "next_cursor": string|null, "url":
    string }`

    and pages with `cursor` + `limit` (max 100). Unknown request fields

    are rejected with `400 VALIDATION_ERROR` — a camelCase body fails

    loudly instead of being silently stripped.


    **Async work.** Async operations return `202` with a Job. Poll

    `GET /jobs/{job_id}` honoring `next_poll_at` / `Retry-After`, or

    subscribe to `job.*` webhooks. `succeeded` means the work

    *including enrichment* is done, so result counts are final.


    **Auth.** `Authorization: Bearer og_live_...`. Keys carry a role

    (`member` default, or `admin`). Scope a request to a child project

    with `x-origami-project: <project_id>`. The header applies to

    Leads, Send, Jobs, and — within Account — chats and exclusion

    lists. It is ignored by project management, org reads, senders,

    domains, mailboxes, webhooks, and API-key routes.


    **Idempotency.** Any POST may send `Idempotency-Key: <uuid>`. Reuse

    with a different body → `409 IDEMPOTENCY_MISMATCH`. A racing retry

    → `409 IDEMPOTENCY_PENDING` (honor `Retry-After`).


    v1 and v2 remain available but are deprecated for new integrations.

    See the v2 → v3 migration guide for the 1:1 flow map.
servers:
  - url: https://origami.chat/api/v3
security:
  - bearerAuth: []
tags:
  - name: jobs
    description: Shared async Job resource
  - name: account
    description: Org, projects, chats, senders, domains, exclusions, webhooks, keys
  - name: leads
    description: Lists, columns, rows, searches, enrichment
  - name: send
    description: 'Campaigns: the linear send recipe'
paths:
  /account/projects/{project_id}:
    get:
      tags:
        - account
      summary: Read one project
      operationId: account.projects.get
      parameters:
        - name: project_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
        '400':
          description: Validation error (unknown fields are rejected)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limited
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      description: Closed error envelope — no additional top-level keys.
      additionalProperties: false
      properties:
        error:
          type: string
        code:
          type: string
          description: UPPER_SNAKE_CASE machine code
        details:
          type: object
        handoff:
          type: object
          description: >-
            In-app recovery link when the user can fix the situation in the
            dashboard
          properties:
            kind:
              type: string
              enum:
                - connect-accounts
                - reconnect-account
                - billing
                - upgrade-plan
                - sca-confirm
            url:
              type: string
            label:
              type: string
      required:
        - error
        - code
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'API key: Authorization: Bearer og_live_...'

````