Esc

↑↓ move↵ openIndex · Pagefind
API preview · design draft
API reference · Field

RFIs

Questions with a clock. Linked to the daily log that raised them and the change order they cause.

Design draftSubject to changeobject: rfiid prefix: rfi_
  1. OBJECT The rfi object
  2. GET /v1/rfisList RFIs
  3. POST /v1/rfisCreate an RFI

The rfi object

Every object carries an id, timestamps, and an audit_trail. Money is integer cents. Expand any node in the explorer to see how it links to the rest of the record.

  • id
    string
    Unique, stable identifier. Prefixed by object type.
  • object
    string
    String naming the object type.
  • project
    string
    Project ID.
  • number
    integer
    RFI number.
  • subject
    string
    Subject line.
  • status
    enum
    draft · open · answered · closed.
  • ball_in_court
    enum
    gc · architect · engineer · owner.
  • question
    string
    The question.
  • answer
    string
    Official response.
  • due_date
    date
    Response due.
  • cost_impact
    boolean
    Flags a likely change order.
  • change_orders
    array
    Resulting COs.
  • created_at
    timestamp
    ISO 8601, UTC.
  • updated_at
    timestamp
    ISO 8601, UTC. Changes on every write.
  • audit_trail
    string
    Path to the append-only history of who changed what, and when.
rfi · sample data
object{17}
  • id"rfi_212"id
  • object"rfi"string
  • project"prj_24118"id
  • number212integer
  • subject"Missing fire dampers at L3 corridor rated wall"string
  • status"answered"string
  • ball_in_court"gc"string
  • question"Drawings show a 1-hr rated corridor wall at L3 with no fire dampers at duct penetrations. Confirm dampers required and spec."string
  • answer"Provide UL 555 fire dampers at all rated penetrations per M-301. Price as change."string
  • due_date"2026-09-23"date
  • answered_at"2026-09-22T19:02:00Z"timestamp
  • cost_impacttrueboolean
  • change_ordersarray[1]
    • 0"co_14"id
  • daily_log"dl_20260918"id
  • created_at"2026-09-18T20:14:00Z"timestamp
  • updated_at"2026-09-22T19:02:00Z"timestamp
  • audit_trail"/v1/rfis/rfi_212/audit"string
GET /v1/rfis

List RFIs

Use overdue=true for the morning list.

Parameters

  • project
    stringquery
    ID of the project, e.g. prj_24118.
  • status
    enumquery
    Status filter.
  • overdue
    booleanquery
    Past due and unanswered.
  • limit
    integerquery
    Page size, 1 to 100. Default 25.
  • cursor
    stringquery
    Cursor from a previous page’s next_cursor.

Returns

A paginated list of rfi objects. Errors use the standard error shape.

Request
curl https://api.os.construction/v1/rfis \
  -H "Authorization: Bearer $OS_API_KEY"
Response · 200
{
  "object": "list",
  "url": "/v1/rfis",
  "has_more": true,
  "next_cursor": "cur_9f2c",
  "data": [
    {
      "id": "rfi_212",
      "object": "rfi",
      "project": "prj_24118",
      "number": 212,
      "subject": "Missing fire dampers at L3 corridor rated wall",
      "status": "answered",
      "ball_in_court": "gc",
      "question": "Drawings show a 1-hr rated corridor wall at L3 with no fire dampers at duct penetrations. Confirm dampers required and spec.",
      "answer": "Provide UL 555 fire dampers at all rated penetrations per M-301. Price as change.",
      "due_date": "2026-09-23",
      "answered_at": "2026-09-22T19:02:00Z",
      "cost_impact": true,
      "change_orders": [
        "co_14"
      ],
      "daily_log": "dl_20260918",
      "created_at": "2026-09-18T20:14:00Z",
      "updated_at": "2026-09-22T19:02:00Z",
      "audit_trail": "/v1/rfis/rfi_212/audit"
    }
  ]
}
POST /v1/rfis

Create an RFI

Opens an RFI and starts the clock.

Idempotent. Send an Idempotency-Key; retries within 24 hours return the original result and never write twice.

Parameters

  • Idempotency-Key
    stringheaderrequired
    Any unique string. Replays return the first result instead of writing twice.
  • project
    stringbodyrequired
    Project ID.
  • subject
    stringbodyrequired
    Subject.
  • question
    stringbodyrequired
    Question.
  • due_date
    datebody
    Due date.

Returns

The rfi object. Errors use the standard error shape.

Request
curl -X POST https://api.os.construction/v1/rfis \
  -H "Authorization: Bearer $OS_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "project": "prj_24118",
    "subject": "Missing fire dampers at L3 corridor rated wall",
    "question": "Drawings show a 1-hr rated corridor wall at L3 with no fire dampers at duct penetrations. Confirm dampers required and spec.",
    "due_date": "2026-09-23",
    "daily_log": "dl_20260918"
  }'
Response · 201
{
  "id": "rfi_212",
  "object": "rfi",
  "project": "prj_24118",
  "number": 212,
  "subject": "Missing fire dampers at L3 corridor rated wall",
  "status": "open",
  "ball_in_court": "gc",
  "question": "Drawings show a 1-hr rated corridor wall at L3 with no fire dampers at duct penetrations. Confirm dampers required and spec.",
  "answer": null,
  "due_date": "2026-09-23",
  "answered_at": null,
  "cost_impact": true,
  "change_orders": [],
  "daily_log": "dl_20260918",
  "created_at": "2026-09-18T20:14:00Z",
  "updated_at": "2026-09-22T19:02:00Z",
  "audit_trail": "/v1/rfis/rfi_212/audit"
}

Events

Webhooks fire on every state change of a rfi.