Fieldwire RFIs and Submittals API

Track Requests for Information, submittals, submittal types, spec sections, attachments, markups, watchers, approvals, and submittal log extraction. Supports email-based responses, ball-in-court reassignments, and renumbering with the lead company's own format.

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

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

Tagged areas include Construction, RFIs, Submittals, Spec Sections, and Approvals. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, and 2 Naftiko capability specs.

OpenAPI Specification

fieldwire-rfis-submittals-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Fieldwire RFIs and Submittals API
  description: |
    Track Requests for Information (RFIs), submittals, submittal types, spec
    sections, attachments, markups, watchers, approvals, and submittal log
    extraction across construction projects.
  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: RFIs
    description: Requests for Information lifecycle.
  - name: Submittals
    description: Submittal lifecycle, approvals, and types.
  - name: Spec Sections
    description: Specification sections used to organise submittals.
paths:
  /projects/{project_id}/rfis:
    get:
      operationId: getRfisInProject
      summary: Get RFIs In Project
      tags: [RFIs]
      parameters:
        - $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          description: RFI list.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Rfi'
    post:
      operationId: createRfiInProject
      summary: Create RFI In Project
      tags: [RFIs]
      parameters:
        - $ref: '#/components/parameters/ProjectId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RfiCreate'
      responses:
        '201':
          description: Created RFI.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Rfi'
  /projects/{project_id}/rfis/{rfi_id}:
    get:
      operationId: getRfiById
      summary: Get RFI By ID
      tags: [RFIs]
      parameters:
        - $ref: '#/components/parameters/ProjectId'
        - $ref: '#/components/parameters/RfiId'
      responses:
        '200':
          description: RFI.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Rfi'
    patch:
      operationId: updateRfiById
      summary: Update RFI By ID
      tags: [RFIs]
      parameters:
        - $ref: '#/components/parameters/ProjectId'
        - $ref: '#/components/parameters/RfiId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RfiUpdate'
      responses:
        '200':
          description: Updated RFI.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Rfi'
  /projects/{project_id}/submittals:
    get:
      operationId: getSubmittalsInProject
      summary: Get Submittals In Project
      tags: [Submittals]
      parameters:
        - $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          description: Submittal list.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Submittal'
    post:
      operationId: createSubmittalInProject
      summary: Create Submittal In Project
      tags: [Submittals]
      parameters:
        - $ref: '#/components/parameters/ProjectId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubmittalCreate'
      responses:
        '201':
          description: Created submittal.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Submittal'
  /projects/{project_id}/spec_sections:
    get:
      operationId: getSpecSectionsInProject
      summary: Get Spec Sections In Project
      tags: [Spec Sections]
      parameters:
        - $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          description: Spec section list.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SpecSection'
components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
  parameters:
    ProjectId:
      name: project_id
      in: path
      required: true
      schema:
        type: integer
        format: int64
    RfiId:
      name: rfi_id
      in: path
      required: true
      schema:
        type: integer
        format: int64
  schemas:
    Rfi:
      type: object
      properties:
        id:
          type: integer
          format: int64
        project_id:
          type: integer
          format: int64
        number:
          type: string
        title:
          type: string
        question:
          type: string
        answer:
          type: string
        status:
          type: string
          enum: [draft, open, answered, closed, void]
        priority:
          type: string
          enum: [low, normal, high, urgent]
        spec_section_id:
          type: integer
          format: int64
        ball_in_court_user_id:
          type: integer
          format: int64
        due_at:
          type: string
          format: date-time
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
    RfiCreate:
      type: object
      required: [title, question]
      properties:
        title:
          type: string
        question:
          type: string
        priority:
          type: string
          enum: [low, normal, high, urgent]
        spec_section_id:
          type: integer
          format: int64
        ball_in_court_user_id:
          type: integer
          format: int64
        due_at:
          type: string
          format: date-time
    RfiUpdate:
      type: object
      properties:
        title:
          type: string
        question:
          type: string
        answer:
          type: string
        status:
          type: string
          enum: [draft, open, answered, closed, void]
        priority:
          type: string
          enum: [low, normal, high, urgent]
        ball_in_court_user_id:
          type: integer
          format: int64
        due_at:
          type: string
          format: date-time
    Submittal:
      type: object
      properties:
        id:
          type: integer
          format: int64
        project_id:
          type: integer
          format: int64
        number:
          type: string
        title:
          type: string
        type:
          type: string
          description: Submittal type (e.g. shop drawing, product data, sample).
        status:
          type: string
          enum: [draft, submitted, in_review, approved, approved_as_noted, revise_and_resubmit, rejected, void]
        spec_section_id:
          type: integer
          format: int64
        ball_in_court_user_id:
          type: integer
          format: int64
        due_at:
          type: string
          format: date-time
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
    SubmittalCreate:
      type: object
      required: [title, type]
      properties:
        title:
          type: string
        type:
          type: string
        spec_section_id:
          type: integer
          format: int64
        ball_in_court_user_id:
          type: integer
          format: int64
        due_at:
          type: string
          format: date-time
    SpecSection:
      type: object
      properties:
        id:
          type: integer
          format: int64
        project_id:
          type: integer
          format: int64
        number:
          type: string
        title:
          type: string
        division:
          type: string
        created_at:
          type: string
          format: date-time