Fieldwire Projects API

Create, retrieve, update, archive, transfer, and synchronise construction projects across the Fieldwire account. Includes project statistics, notifications, project teams, project users, permissions, and project-level forms / templates. Project data is region-resident — US clients call client-api.us.fieldwire.com/api/v3, EU clients call client-api.eu.fieldwire.com/api/v3.

Fieldwire Projects API is one of 9 APIs that Fieldwire publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko.

Tagged areas include Construction, Projects, and Field Management. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, and 1 Naftiko capability spec.

OpenAPI Specification

fieldwire-projects-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Fieldwire Projects API
  description: |
    Create, retrieve, update, archive, transfer, and synchronise construction
    projects across a Fieldwire account, plus project-level users, teams,
    permissions, stats, and notifications. Project data is region-resident:
    US accounts must call `client-api.us.fieldwire.com/api/v3` and EU accounts
    must call `client-api.eu.fieldwire.com/api/v3`. Choose the server that
    matches the account's region (returned by the Account API).
  version: v3.1
  contact:
    name: Fieldwire Developer Support
    url: https://developers.fieldwire.com/
  license:
    name: Fieldwire Terms of Service
    url: https://www.fieldwire.com/terms/
servers:
  - url: https://client-api.us.fieldwire.com/api/v3
    description: US Region
  - url: https://client-api.eu.fieldwire.com/api/v3
    description: EU Region
security:
  - BearerAuth: []
tags:
  - name: Projects
    description: Project lifecycle, archival, transfer, and synchronisation.
  - name: Project Users
    description: User membership, roles, and removal across projects.
  - name: Project Teams
    description: Team-level grouping of users on a project.
  - name: Project Stats
    description: Aggregate project counts and status statistics.
paths:
  /projects:
    get:
      operationId: getProjects
      summary: Get Projects
      description: |
        List all projects in the account. Supports filtering by status
        (`active`, `deleted`, `all`) via the `status` query parameter.
      tags: [Projects]
      parameters:
        - name: status
          in: query
          required: false
          description: Project status filter.
          schema:
            type: string
            enum: [active, deleted, all]
            default: active
      responses:
        '200':
          description: Project list.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Project'
    post:
      operationId: createProject
      summary: Create Project
      description: Create a new construction project.
      tags: [Projects]
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProjectCreate'
      responses:
        '201':
          description: Created project.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
  /projects/{project_id}:
    get:
      operationId: getProjectById
      summary: Get Project By ID
      tags: [Projects]
      parameters:
        - $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          description: Project.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
    patch:
      operationId: updateProjectById
      summary: Update Project By ID
      tags: [Projects]
      parameters:
        - $ref: '#/components/parameters/ProjectId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProjectUpdate'
      responses:
        '200':
          description: Updated project.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
    delete:
      operationId: deleteProjectById
      summary: Delete Project By ID
      description: Soft-delete (archive) a project; restore via `restore_project_by_id`.
      tags: [Projects]
      parameters:
        - $ref: '#/components/parameters/ProjectId'
      responses:
        '204':
          description: Project archived.
  /projects/{project_id}/restore:
    post:
      operationId: restoreProjectById
      summary: Restore Project By ID
      tags: [Projects]
      parameters:
        - $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          description: Restored project.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
  /projects/{project_id}/transfer:
    post:
      operationId: transferProject
      summary: Transfer Project
      description: Transfer a project from one Fieldwire account to another. Triggers a project.transferred webhook event.
      tags: [Projects]
      parameters:
        - $ref: '#/components/parameters/ProjectId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [target_account_id]
              properties:
                target_account_id:
                  type: integer
                  format: int64
                  description: Destination account ID.
      responses:
        '202':
          description: Transfer accepted.
  /projects/{project_id}/users:
    get:
      operationId: getProjectUsers
      summary: Get Project Users
      tags: [Project Users]
      parameters:
        - $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          description: Project user list.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProjectUser'
    post:
      operationId: createProjectUser
      summary: Invite Project User
      tags: [Project Users]
      parameters:
        - $ref: '#/components/parameters/ProjectId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProjectUserCreate'
      responses:
        '201':
          description: Project user invited.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectUser'
  /projects/{project_id}/teams:
    get:
      operationId: getProjectTeams
      summary: Get Project Teams
      tags: [Project Teams]
      parameters:
        - $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          description: Team list.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Team'
  /projects/{project_id}/stats:
    get:
      operationId: getProjectStats
      summary: Get Project Stats
      tags: [Project Stats]
      parameters:
        - $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          description: Project statistics.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectStats'
components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
  parameters:
    ProjectId:
      name: project_id
      in: path
      required: true
      description: Project identifier.
      schema:
        type: integer
        format: int64
  schemas:
    Project:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        code:
          type: string
        description:
          type: string
        address:
          type: string
        city:
          type: string
        state:
          type: string
        country:
          type: string
        time_zone:
          type: string
        currency:
          type: string
        status:
          type: string
          enum: [active, deleted]
        is_archived:
          type: boolean
        owner_account_id:
          type: integer
          format: int64
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
    ProjectCreate:
      type: object
      required: [name]
      properties:
        name:
          type: string
        code:
          type: string
        description:
          type: string
        address:
          type: string
        city:
          type: string
        state:
          type: string
        country:
          type: string
        time_zone:
          type: string
        currency:
          type: string
    ProjectUpdate:
      type: object
      properties:
        name:
          type: string
        code:
          type: string
        description:
          type: string
        address:
          type: string
        city:
          type: string
        state:
          type: string
        country:
          type: string
        time_zone:
          type: string
        currency:
          type: string
    ProjectUser:
      type: object
      properties:
        id:
          type: integer
          format: int64
        user_id:
          type: integer
          format: int64
        project_id:
          type: integer
          format: int64
        role:
          type: string
          enum: [admin, member, follower]
        email:
          type: string
          format: email
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
    ProjectUserCreate:
      type: object
      required: [email, role]
      properties:
        email:
          type: string
          format: email
        role:
          type: string
          enum: [admin, member, follower]
        team_id:
          type: integer
          format: int64
    Team:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        project_id:
          type: integer
          format: int64
        created_at:
          type: string
          format: date-time
    ProjectStats:
      type: object
      properties:
        project_id:
          type: integer
          format: int64
        task_count:
          type: integer
        sheet_count:
          type: integer
        attachment_count:
          type: integer
        form_count:
          type: integer
        rfi_count:
          type: integer
        submittal_count:
          type: integer