---
title: "List Submissions"
method: GET
path: "/v2/ap-portals/submissions"
tags: ["ap-portals"]
---

# List Submissions

`GET /v2/ap-portals/submissions`

## Request

- Base URL: `https://api.stuut.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.stuut.ai/v2/ap-portals/submissions`
- Auth: HTTP bearer

List submissions

Recorded submit outcomes (DRY_RUN / ACCEPTED / REJECTED) for the org, filterable by
login or internal invoice. ``submission_id`` carries the portal's confirmation for an
accepted submission; review and live-confirmation screenshots are returned as signed URLs
when captured.

## Query parameters

- `page` integer: Page number, 0 indexed.
- `limit` integer: Number of records per page.
- `ap_portal_account_id` string, nullable: Restrict to submissions through one login.
- `invoice_id` string, nullable: Restrict to submissions of one internal invoice.
- `search` string, nullable: Case-insensitive substring match on the portal confirmation id, or on the submitted invoice's number, PO number, or customer name.

## Response `200`

Successful Response

- PaginatedResponseAPPortalSubmissionListItem
  - `data` APPortalSubmissionListItem[], required: The list of records.
    - `id` string, required
    - `status` 'dry_run' | 'accepted' | 'rejected' | 'unknown' | 'failed', required: Outcome of a submit run for one invoice through an AP-portal login.
    - `submission_id` string, nullable, required
    - `reason` string, nullable, required
    - `reject_reason` 'po_mismatch' | 'missing_required_field' | 'invalid_tax' | 'duplicate_invoice' | 'unknown_customer' | 'invalid_date' | 'transmission_failed' | 'not_stated' | 'other' | 'po_line_mismatch' | 'receipt_pending' | 'disallowed_charge' | 'invoice_data_error' | 'prerequisite_document' | 'wrong_channel' | 'po_closed', required: Closed reject taxonomy — remediation routes by code, not string-match. Buckets group rejections by what fixes them: missing fields/attachments into ``MISSING_REQUIRED_FIELD``; tax errors and missing tax docs into ``INVALID_TAX``.
    - `submitted_at` string, date-time, nullable, required
    - `submit_gate_at_enqueue` 'ok' | 'needs_review' | 'blocked', required: Submit pre-flight gate for one invoice — can we submit it right now? Computed from the field-mapping + PO/order checks (see ``stuut.core.ap_portal.preview``) and persisted so the dashboard can flag "needs a fix before submit" without re-running a preview. A separate axis from ``APPortalInvoiceStatus`` (what the portal reports about the invoice).
    - `failed_checks_at_enqueue` string[], nullable, required
    - `invoice_id` string, nullable, required
    - `invoice_number` string, nullable, required
    - `purchase_order_number` string, nullable, required
    - `customer` string, nullable, required
    - `partner_name` string, nullable, required
    - `ap_portal_account_id` string, required
    - `ap_portal_work_id` string, nullable, required
    - `provider` 'kehe' | 'taulia' | 'coupa' | 'ariba' | 'meijer' | 'kroger' | 'walgreens' | 'albertsons' | 'target' | 'heb' | 'heb_sidm' | 'c_and_s' | 'walmart' | 'walmart_highradius' | 'cvs' | 'cvs_sap' | 'cvs_image_silo' | 'kroger_supplier_connect' | 'kroger_claimtrax' | 'kroger_verigon' | 'servicetitan' | 'sandbox' | 'generic', required: Supported AP Portal providers.
    - `review_artifact_id` string, nullable, required
    - `review_url` string, nullable, required
    - `proof_artifact_id` string, nullable, required
    - `proof_url` string, nullable, required
  - `current_page` integer, required: The current page.
  - `total_records` integer, nullable, required: Total number of records.
  - `next_page` integer, nullable, required: The next page number, if one exists.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/stuut/apis/stuut-api.md) - [All operations](https://skmtc.dev/stuut/apis/stuut-api/llms.txt) - [OpenAPI document](https://skmtc.dev/stuut/apis/stuut-api/revisions/ff0ad16a55ff?raw)
