---
title: "List company documents"
method: POST
path: "/companies/v1/documents"
tags: ["Companies"]
---

# List company documents

`POST /companies/v1/documents`

Lists documents for a company based on applied filters, with support for sorting and pagination.

## Request body

- S12ContractorsV1ListCompanyDocumentsRequest
  - `company_id` string, required — Required. The ID of the contractor company.
  - `filter` S12ContractorsV1CompanyDocumentsFilter
    - `is_archived` boolean — Filter by archived status. Default is unarchived only.
    - `type_ids` string[] — Filter by document type. If not provided, all types are returned.
    - `approval_statuses` S12DocumentsV1ApprovalStatus[] — Filter by the approval status of the document. If not provided, all statuses are returned.
    - `doc_expiry_statuses` S12CommonExpiryStatus[] — Filter by the expiry status of the document. If not provided, all statuses are returned.
    - `modified_at` S12DocumentsV1Duration
      - `from` string, date-time — optional. represents the time should be after the time provided
      - `to` string, date-time — optional. represents the time should be before the time provided
  - `sort_field` 'DOCUMENT_SORT_FIELD_CREATED_AT' | 'DOCUMENT_SORT_FIELD_MODIFIED_AT' | 'DOCUMENT_SORT_FIELD_TITLE' | 'DOCUMENT_SORT_FIELD_FILE_NAME' | 'DOCUMENT_SORT_FIELD_TYPE' | 'DOCUMENT_SORT_FIELD_ISSUE_DATE' | 'DOCUMENT_SORT_FIELD_EXPIRATION_DATE' | 'DOCUMENT_SORT_FIELD_EXPIRY_STATUS'
  - `sort_direction` 'SORT_DIRECTION_UNSPECIFIED' | 'SORT_DIRECTION_ASC' | 'SORT_DIRECTION_DESC'
  - `page_size` integer — The number of results to return in a single request.
  - `page_token` string — If present, will fetch the next page of results. This must be the value of `next_page_token` from the response.
  - `search` S12ContractorsV1Search
    - `value` string

## Response `200`

A successful response.

- S12ContractorsV1ListCompanyDocumentsResponse
  - `company_document_list` S12ContractorsV1CompanyDocument[] — The list of documents in the company.
    - `id` string
    - `resource_version_id` string
    - `title` string
    - `description` string
    - `updated_at` string, date-time
    - `updated_by` string
    - `version_number` integer
    - `source_id` string
    - `file_size` integer
    - `created_at` string, date-time
    - `created_by` string — @deprecated. Use created_by_user instead.
    - `archived` boolean
    - `archived_at` string, date-time
    - `archived_by` string
    - `company_document_type` S12ContractorsV1CompanyDocumentType
      - `id` string
      - `name` string
      - `form` S12ContractorsV1CompanyDocumentTypeForm — CompanyDocumentTypeForm is a reusable blank form that lives on a document type. Key contacts download, fill out, and return it; it is reused on every request for that type instead of being re-uploaded per request.
        - `media` S12CommonMedia
          - `id` string
          - `token` string
          - `filename` string — full file name, including file extension
          - `media_type` 'MEDIA_TYPE_IMAGE' | 'MEDIA_TYPE_VIDEO' | 'MEDIA_TYPE_PDF' | 'MEDIA_TYPE_DOCX' | 'MEDIA_TYPE_XLSX' | 'MEDIA_TYPE_PPTX' | 'MEDIA_TYPE_CSV' — - MEDIA_TYPE_IMAGE: An image file (GIF, JPG, PNG, WEBP). - MEDIA_TYPE_VIDEO: A video file (MP4, MOV). - MEDIA_TYPE_PDF: A PDF document. - MEDIA_TYPE_DOCX: A Microsoft Word document (DOCX, DOC). - MEDIA_TYPE_XLSX: A Microsoft Excel spreadsheet (XLSX, XLS). - MEDIA_TYPE_PPTX: A Microsoft PowerPoint presentation (PPTX, PPT). - MEDIA_TYPE_CSV: A CSV file.
        - `added_by_user_id` string — The user that attached the current form.
        - `added_at` string, date-time — When the current form was attached.
      - `open_request_count` string, int64 — Output-only. Number of open (sent-but-unfulfilled) requests for this type, org-wide. Drives the "updating the form applies to N open requests" banner.
    - `issue_date` GoogleTypeDate — * A full date, with non-zero year, month, and day values * A month and day value, with a zero year, such as an anniversary * A year on its own, with zero month and day values * A year and month value, with a zero day, such as a credit card expiration date Related types are [google.type.TimeOfDay][google.type.TimeOfDay] and `google.protobuf.Timestamp`.
      - `year` integer — Year of the date. Must be from 1 to 9999, or 0 to specify a date without a year.
      - `month` integer — Month of a year. Must be from 1 to 12, or 0 to specify a year without a month and day.
      - `day` integer — Day of a month. Must be from 1 to 31 and valid for the year and month, or 0 to specify a year by itself or a year and month where the day isn't significant.
    - `expiration_date` GoogleTypeDate — * A full date, with non-zero year, month, and day values * A month and day value, with a zero year, such as an anniversary * A year on its own, with zero month and day values * A year and month value, with a zero day, such as a credit card expiration date Related types are [google.type.TimeOfDay][google.type.TimeOfDay] and `google.protobuf.Timestamp`.
      - `year` integer — Year of the date. Must be from 1 to 9999, or 0 to specify a date without a year.
      - `month` integer — Month of a year. Must be from 1 to 12, or 0 to specify a year without a month and day.
      - `day` integer — Day of a month. Must be from 1 to 31 and valid for the year and month, or 0 to specify a year by itself or a year and month where the day isn't significant.
    - `parent_id` string
    - `approval_status` 'APPROVAL_STATUS_UNSPECIFIED' | 'APPROVAL_STATUS_PENDING' | 'APPROVAL_STATUS_APPROVED' | 'APPROVAL_STATUS_REJECTED'
    - `created_by_user` S12CommonUserDocument
      - `id` string — UUID of the user
      - `email` string — Email of the user
      - `first_name` string — First name of the user
      - `last_name` string — Last name of the user
      - `timezone` string — What timezone the user is in
      - `profile_picture` string — URL of the profile picture of the user
      - `status` 'USER_ACTIVE_STATUS_UNSPECIFIED' | 'USER_ACTIVE_STATUS_ACTIVE' | 'USER_ACTIVE_STATUS_DEACTIVATED' — - USER_ACTIVE_STATUS_UNSPECIFIED: Status is unknown or not specified - USER_ACTIVE_STATUS_ACTIVE: User is active - USER_ACTIVE_STATUS_DEACTIVATED: User has been deactivated
      - `external_mappings` S12CommonUserDocumentUserExternalMappings
        - `edapp_id` string
      - `seat_type` 'SUBSCRIPTION_SEAT_TYPE_UNSPECIFIED' | 'SUBSCRIPTION_SEAT_TYPE_PREMIUM' | 'SUBSCRIPTION_SEAT_TYPE_COLLABORATOR' | 'SUBSCRIPTION_SEAT_TYPE_LITE' | 'SUBSCRIPTION_SEAT_TYPE_SERVICE_USER' | 'SUBSCRIPTION_SEAT_TYPE_SUPPORT'
      - `profile_image` S12CommonMedia
        - `id` string
        - `token` string
        - `filename` string — full file name, including file extension
        - `media_type` 'MEDIA_TYPE_IMAGE' | 'MEDIA_TYPE_VIDEO' | 'MEDIA_TYPE_PDF' | 'MEDIA_TYPE_DOCX' | 'MEDIA_TYPE_XLSX' | 'MEDIA_TYPE_PPTX' | 'MEDIA_TYPE_CSV' — - MEDIA_TYPE_IMAGE: An image file (GIF, JPG, PNG, WEBP). - MEDIA_TYPE_VIDEO: A video file (MP4, MOV). - MEDIA_TYPE_PDF: A PDF document. - MEDIA_TYPE_DOCX: A Microsoft Word document (DOCX, DOC). - MEDIA_TYPE_XLSX: A Microsoft Excel spreadsheet (XLSX, XLS). - MEDIA_TYPE_PPTX: A Microsoft PowerPoint presentation (PPTX, PPT). - MEDIA_TYPE_CSV: A CSV file.
      - `last_seen` string, date-time — Timestamp of when the user last interacted with the system. May be empty.
      - `email_confirmed` boolean — Whether or not the user has confirmed their email.
      - `created_at` string, date-time — Timestamp of when the user was created.
      - `language` 'LANGUAGE_UNSPECIFIED' | 'LANGUAGE_EN_US' | 'LANGUAGE_EN_GB' | 'LANGUAGE_DE_DE' | 'LANGUAGE_ES_ES' | 'LANGUAGE_FR_FR' | 'LANGUAGE_PT_BR' | 'LANGUAGE_NL_NL' — - LANGUAGE_UNSPECIFIED: Language unspecified - LANGUAGE_EN_US: Language en-US - LANGUAGE_EN_GB: Language en-GB - LANGUAGE_DE_DE: Language de-DE - LANGUAGE_ES_ES: Language es-ES - LANGUAGE_FR_FR: Language fr-FR - LANGUAGE_PT_BR: Language pt-BR - LANGUAGE_NL_NL: Language nl-NL
      - `phone_number` string — Phone number of the user
    - `media` S12CommonMedia
      - `id` string
      - `token` string
      - `filename` string — full file name, including file extension
      - `media_type` 'MEDIA_TYPE_IMAGE' | 'MEDIA_TYPE_VIDEO' | 'MEDIA_TYPE_PDF' | 'MEDIA_TYPE_DOCX' | 'MEDIA_TYPE_XLSX' | 'MEDIA_TYPE_PPTX' | 'MEDIA_TYPE_CSV' — - MEDIA_TYPE_IMAGE: An image file (GIF, JPG, PNG, WEBP). - MEDIA_TYPE_VIDEO: A video file (MP4, MOV). - MEDIA_TYPE_PDF: A PDF document. - MEDIA_TYPE_DOCX: A Microsoft Word document (DOCX, DOC). - MEDIA_TYPE_XLSX: A Microsoft Excel spreadsheet (XLSX, XLS). - MEDIA_TYPE_PPTX: A Microsoft PowerPoint presentation (PPTX, PPT). - MEDIA_TYPE_CSV: A CSV file.
    - `doc_expiry_status` 'EXPIRY_STATUS_VALID' | 'EXPIRY_STATUS_EXPIRED' | 'EXPIRY_STATUS_EXPIRING_SOON' — The expiry status of an object based on its validity period.
    - `modified_by_user` S12CommonUserDocument
      - `id` string — UUID of the user
      - `email` string — Email of the user
      - `first_name` string — First name of the user
      - `last_name` string — Last name of the user
      - `timezone` string — What timezone the user is in
      - `profile_picture` string — URL of the profile picture of the user
      - `status` 'USER_ACTIVE_STATUS_UNSPECIFIED' | 'USER_ACTIVE_STATUS_ACTIVE' | 'USER_ACTIVE_STATUS_DEACTIVATED' — - USER_ACTIVE_STATUS_UNSPECIFIED: Status is unknown or not specified - USER_ACTIVE_STATUS_ACTIVE: User is active - USER_ACTIVE_STATUS_DEACTIVATED: User has been deactivated
      - `external_mappings` S12CommonUserDocumentUserExternalMappings
        - `edapp_id` string
      - `seat_type` 'SUBSCRIPTION_SEAT_TYPE_UNSPECIFIED' | 'SUBSCRIPTION_SEAT_TYPE_PREMIUM' | 'SUBSCRIPTION_SEAT_TYPE_COLLABORATOR' | 'SUBSCRIPTION_SEAT_TYPE_LITE' | 'SUBSCRIPTION_SEAT_TYPE_SERVICE_USER' | 'SUBSCRIPTION_SEAT_TYPE_SUPPORT'
      - `profile_image` S12CommonMedia
        - `id` string
        - `token` string
        - `filename` string — full file name, including file extension
        - `media_type` 'MEDIA_TYPE_IMAGE' | 'MEDIA_TYPE_VIDEO' | 'MEDIA_TYPE_PDF' | 'MEDIA_TYPE_DOCX' | 'MEDIA_TYPE_XLSX' | 'MEDIA_TYPE_PPTX' | 'MEDIA_TYPE_CSV' — - MEDIA_TYPE_IMAGE: An image file (GIF, JPG, PNG, WEBP). - MEDIA_TYPE_VIDEO: A video file (MP4, MOV). - MEDIA_TYPE_PDF: A PDF document. - MEDIA_TYPE_DOCX: A Microsoft Word document (DOCX, DOC). - MEDIA_TYPE_XLSX: A Microsoft Excel spreadsheet (XLSX, XLS). - MEDIA_TYPE_PPTX: A Microsoft PowerPoint presentation (PPTX, PPT). - MEDIA_TYPE_CSV: A CSV file.
      - `last_seen` string, date-time — Timestamp of when the user last interacted with the system. May be empty.
      - `email_confirmed` boolean — Whether or not the user has confirmed their email.
      - `created_at` string, date-time — Timestamp of when the user was created.
      - `language` 'LANGUAGE_UNSPECIFIED' | 'LANGUAGE_EN_US' | 'LANGUAGE_EN_GB' | 'LANGUAGE_DE_DE' | 'LANGUAGE_ES_ES' | 'LANGUAGE_FR_FR' | 'LANGUAGE_PT_BR' | 'LANGUAGE_NL_NL' — - LANGUAGE_UNSPECIFIED: Language unspecified - LANGUAGE_EN_US: Language en-US - LANGUAGE_EN_GB: Language en-GB - LANGUAGE_DE_DE: Language de-DE - LANGUAGE_ES_ES: Language es-ES - LANGUAGE_FR_FR: Language fr-FR - LANGUAGE_PT_BR: Language pt-BR - LANGUAGE_NL_NL: Language nl-NL
      - `phone_number` string — Phone number of the user
    - `fulfills` S12ContractorsV1FulfilledRequirementRef[] — Output-only. References to CompanyRequirements (scoped to the requesting org) that this document currently fulfils. A document fulfils a requirement when it is recorded as the fulfilling_entity on that requirement row. Today, only the caller-org's requirements are surfaced — even though the same document may transitively fulfil requirements held by other buyer orgs that track the same contractor. May be empty.
      - `reference_id` string — The reference_id of the fulfilled CompanyRequirement. For requirement_type = DOCUMENT_TYPE this is the document type ID and matches CompanyDocument.company_document_type.id.
    - `ai_compliance_audit` S12ContractorsV1AiDocumentComplianceAudit — AiDocumentComplianceAudit is the per-document-version result of running AI compliance review against the rule for that document's type. Carried on a CompanyDocument when there is a rule configured for its type.
      - `status` 'AI_DOCUMENT_COMPLIANCE_AUDIT_STATUS_UNSPECIFIED' | 'AI_DOCUMENT_COMPLIANCE_AUDIT_STATUS_NOT_YET_QUEUED' | 'AI_DOCUMENT_COMPLIANCE_AUDIT_STATUS_QUEUED' | 'AI_DOCUMENT_COMPLIANCE_AUDIT_STATUS_RUNNING' | 'AI_DOCUMENT_COMPLIANCE_AUDIT_STATUS_COMPLETED' | 'AI_DOCUMENT_COMPLIANCE_AUDIT_STATUS_FAILED' — AiDocumentComplianceAuditStatus is the lifecycle of an audit run. - AI_DOCUMENT_COMPLIANCE_AUDIT_STATUS_NOT_YET_QUEUED: A rule is configured for the document's type but this version was never audited — typically because the rule was created after the version was uploaded. The frontend should surface a "Run audit" affordance rather than a verdict. - AI_DOCUMENT_COMPLIANCE_AUDIT_STATUS_QUEUED: Scheduled but not yet started. - AI_DOCUMENT_COMPLIANCE_AUDIT_STATUS_RUNNING: Currently being evaluated by the AI. - AI_DOCUMENT_COMPLIANCE_AUDIT_STATUS_COMPLETED: Evaluation finished — see result + summary_prose. - AI_DOCUMENT_COMPLIANCE_AUDIT_STATUS_FAILED: The evaluator errored out (e.g. unsupported media, AI gateway failure). See summary_prose for a brief reason.
      - `finished_at` string, date-time — When the audit reached a terminal state. Unset for QUEUED / RUNNING / NOT_YET_QUEUED.
      - `completed` S12ContractorsV1AiDocumentComplianceAuditCompletedOutcome — AiDocumentComplianceAuditCompletedOutcome is the payload when the AI produced a verdict (status = COMPLETED). Includes UNCERTAIN — that's still a completed run, just one that fell back to manual review.
        - `result` 'AI_DOCUMENT_COMPLIANCE_AUDIT_RESULT_UNSPECIFIED' | 'AI_DOCUMENT_COMPLIANCE_AUDIT_RESULT_COMPLIANT' | 'AI_DOCUMENT_COMPLIANCE_AUDIT_RESULT_NON_COMPLIANT' | 'AI_DOCUMENT_COMPLIANCE_AUDIT_RESULT_UNCERTAIN' — AiDocumentComplianceAuditResult is the AI's verdict on a completed audit. - AI_DOCUMENT_COMPLIANCE_AUDIT_RESULT_COMPLIANT: Document satisfies the rule's criteria. - AI_DOCUMENT_COMPLIANCE_AUDIT_RESULT_NON_COMPLIANT: Document fails one or more parts of the rule's criteria. - AI_DOCUMENT_COMPLIANCE_AUDIT_RESULT_UNCERTAIN: The AI could not form a confident verdict (e.g. illegible scan, missing pages). Falls back to manual review regardless of action_mode.
        - `summary_prose` string — Plain-English explanation of the verdict, produced by the AI. Always set.
      - `failed` S12ContractorsV1AiDocumentComplianceAuditFailedOutcome — AiDocumentComplianceAuditFailedOutcome is the payload when the evaluator could not run to completion (status = FAILED).
        - `reason` 'AI_DOCUMENT_COMPLIANCE_AUDIT_FAILURE_REASON_UNSPECIFIED' | 'AI_DOCUMENT_COMPLIANCE_AUDIT_FAILURE_REASON_INTERNAL_ERROR' | 'AI_DOCUMENT_COMPLIANCE_AUDIT_FAILURE_REASON_UNSUPPORTED_MEDIA_TYPE' | 'AI_DOCUMENT_COMPLIANCE_AUDIT_FAILURE_REASON_TIMEOUT' | 'AI_DOCUMENT_COMPLIANCE_AUDIT_FAILURE_REASON_RULE_OWNER_REMOVED' | 'AI_DOCUMENT_COMPLIANCE_AUDIT_FAILURE_REASON_FILE_TOO_LARGE' — AiDocumentComplianceAuditFailureReason is a coarse categorization of why an audit run failed to complete. - AI_DOCUMENT_COMPLIANCE_AUDIT_FAILURE_REASON_INTERNAL_ERROR: Unclassified internal error. - AI_DOCUMENT_COMPLIANCE_AUDIT_FAILURE_REASON_UNSUPPORTED_MEDIA_TYPE: File format not supported by the evaluator (e.g. .dwg, .zip). - AI_DOCUMENT_COMPLIANCE_AUDIT_FAILURE_REASON_TIMEOUT: Evaluator timed out. - AI_DOCUMENT_COMPLIANCE_AUDIT_FAILURE_REASON_RULE_OWNER_REMOVED: The rule's current_actor_user_id could not be resolved. - AI_DOCUMENT_COMPLIANCE_AUDIT_FAILURE_REASON_FILE_TOO_LARGE: The document's file is too large for the evaluator to process (e.g. an image exceeding the model's per-image byte limit).
        - `details` string — Optional extra context — upstream error codes, file format details, etc. Not intended for verbatim end-user display.
  - `next_page_token` string — The next page token.
  - `total_count` integer — The total number of documents that match the filter (in the current archived scope — active or archived, whichever was requested).
  - `total_archived_count` integer — The total number of archived documents that match the same filters as this request, regardless of which archived scope was requested. Used by clients to populate a "Show archived (N)" badge without firing a second request, so the count always respects the user's active filters.

## Other responses

- `default` — An unexpected error response.

---

[API](https://skmtc.net/safetyculture/apis/safetyculture-api.md) · [All operations](https://skmtc.net/safetyculture/apis/safetyculture-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/safetyculture/safetyculture-api/revisions/5be91df61ded/schema)
