Part3 Developers

Submittals list

GET /organization/{orgId}/project/{projectId}/document/submittals

List submittals in a project

GET
/organization/{orgId}/project/{projectId}/document/submittals
AuthorizationBearer <token>

In: header

Path Parameters

orgId*string

Organization ID. Returned from GET /v1/client/me for the authenticated client; for web-app users it is the active org context.

projectId*string

Project ID. Returned from GET /v1/organization/{orgId}/project. Must belong to the org in the path.

Query Parameters

cursor?string

Pagination cursor

limit?string

Page size (1-50, default 25)

sortBy?string

Sort field (createdAt, updatedAt, dueDate, title, …).

sortOrder?string

Sort direction (default: desc)

Value in"asc" | "desc"
status?string

Filter by DOCUMENT workflow status (e.g. draft, with-consultants, issued, returned, closed, cancelled), comma-separated for OR. NOTE: this is the document lifecycle status, NOT the consultant review outcome — for "pending/approved/rejected submittals" use filter.reviewStatus, and for open/overdue use filter.open / filter.overdue.

Lengthlength <= 500
search?string

Full-text search across title, id, and format-specific text

Lengthlength <= 500
filter.status?string

Same as status — DOCUMENT workflow status (comma-separated OR). Not the review outcome.

Lengthlength <= 500
filter.dueDate?string

Due-date range as "from,to" ISO dates (YYYY-MM-DD). For overdue items prefer filter.overdue=true.

Lengthlength <= 25
filter.createdAt?string
Lengthlength <= 25
includeMeta?string

Include meta.filters with enum values for filterable columns

Value in"true"
filter.reviewStatus?string

Consultant review OUTCOME — the value shown in the UI submittal "Status" column. Comma-separated for OR. Values: reviewed, reviewed-as-noted, reviewed-as-noted-partial-resubmit, revise-and-resubmit, revise-and-resubmit-for-record, rejected, for-record-only, not-reviewed, not-required-for-review, pending. Mapping: "approved" ≈ {reviewed, reviewed-as-noted}; "pending submittals" = pending (NOT document status); "rejected" is ambiguous (often includes revise-and-resubmit) — clarify with the user. Org list presets relabel these (e.g. reviewed shows as "Approved"/"No Exception") but the underlying value is unchanged.

Lengthlength <= 500
filter.receivedAt?string
Lengthlength <= 25
filter.closedAt?string

Closed-date range as "from,to" ISO dates — when the submittal was closed out. For simple open vs closed, prefer filter.open=true, which keys on the document lifecycle status rather than this timestamp.

Lengthlength <= 25
filter.open?string

Set 'true' for OPEN items only — status is not terminal (not closed/cancelled/locked/accepted/approved). 'open' is about the document lifecycle, independent of consultant review outcome.

Value in"true"
filter.overdue?string

Set 'true' for OVERDUE items only — past the due date AND still open (dueDate < now AND status not terminal). 'overdue' is measured against the due date, not the on-site need-by date.

Value in"true"

Response Body

application/json

curl -X GET "https://api.part3.io/v1/organization/org_8a1b2c3d4e/project/proj_5f9a3c2e8b/document/submittals"
{
  "data": [
    {
      "uid": "string",
      "id": null,
      "format": "string",
      "type": "string",
      "title": null,
      "status": "string",
      "priority": null,
      "dueDate": null,
      "issuedAt": null,
      "createdAt": null,
      "updatedAt": null,
      "projectId": "string",
      "projectName": null,
      "organizationId": null,
      "organizationName": null,
      "referenceNumber": null,
      "divisionTitle": null,
      "reviewStatus": null,
      "receivedAt": null,
      "closedAt": null,
      "ballInCourt": null,
      "assignees": [
        {}
      ],
      "approvers": [
        {}
      ],
      "distributionRecipients": [
        {}
      ],
      "consultants": [
        {}
      ]
    }
  ],
  "total": 0,
  "nextCursor": null,
  "hasMore": true,
  "meta": {}
}