> ## Documentation Index
> Fetch the complete documentation index at: https://docs.opnform.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List Submissions

> Requires `forms-read`. Supports pagination, search, and status filtering.

# List Submissions

Retrieve submissions for a specific form.

## Authentication & Scope

Requires `forms-read` ability.

## Request

```http theme={null}
GET /open/forms/{id}/submissions?page=1 HTTP/1.1
Host: api.opnform.com
Authorization: Bearer <token>
```

### Path Parameters

| Parameter | Type   | Description             |
| --------- | ------ | ----------------------- |
| id        | number | Numeric ID of the form. |

### Query Parameters

| Parameter | Type   | Required | Description                                                              |
| --------- | ------ | -------- | ------------------------------------------------------------------------ |
| page      | number | No       | Pagination page number (default `1`).                                    |
| per\_page | number | No       | Number of results per page (default `100`, max `100`).                   |
| search    | string | No       | Search term to filter submissions by field values.                       |
| status    | string | No       | Filter by submission status: `completed`, `partial`, or `all` (default). |

## Response

`200 OK` – Returns a paginated collection of `Submission` objects.

```json theme={null}
{
    "data": [
        {
            "data": {
                "field-id-1": "Sample text response",
                "field-id-2": ["Option 1", "Option 2"],
                "field-id-3": [
                    {
                        "file_url": "https://api.opnform.com/open/forms/123/submissions/file/document.pdf?expires=1756808073&signature=abc123...",
                        "file_name": "document.pdf"
                    }
                ],
                "status": "completed",
                "created_at": "2024-06-12 09:15:23",
                "id": 615432
            },
            "completion_time": 45,
            "form_id": 123,
            "id": 615432
        }
    ],
    "links": {
        "first": "https://api.opnform.com/open/forms/123/submissions?page=1",
        "last": "https://api.opnform.com/open/forms/123/submissions?page=3",
        "prev": null,
        "next": "https://api.opnform.com/open/forms/123/submissions?page=2"
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 3,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "https://api.opnform.com/open/forms/123/submissions?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": "https://api.opnform.com/open/forms/123/submissions?page=2",
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "https://api.opnform.com/open/forms/123/submissions",
        "per_page": 100,
        "to": 12,
        "total": 12
    }
}
```

### Response Fields

Each submission object contains:

| Field             | Type        | Description                                 |
| ----------------- | ----------- | ------------------------------------------- |
| `data`            | object      | Contains form field responses plus metadata |
| `completion_time` | number/null | Time taken to complete the form in seconds  |
| `form_id`         | number      | ID of the parent form                       |
| `id`              | number      | Unique submission ID                        |

#### Data Object Structure

The `data` object contains:

* **Form field responses**: Keyed by field UUID, values vary by field type
* **Metadata fields**:
  * `status`: Submission status (`completed` or `partial`)
  * `created_at`: Submission creation timestamp
  * `id`: Submission ID (duplicate for convenience)

#### File Field Handling

File and signature fields are automatically processed to include download URLs:

```json theme={null}
"field-uuid": [
  {
    "file_url": "https://api.opnform.com/open/forms/123/submissions/file/filename.pdf?expires=1756808073&signature=abc123...",
    "file_name": "filename.pdf"
  }
]
```

<Note>File URLs are signed and expire after 10 minutes for security.</Note>

### Query Parameter Details

#### Search Functionality

* Searches within submission field **values only** (not field names/keys)
* Uses case-insensitive matching
* Supports partial text matching

#### Status Filtering

* `completed`: Returns only fully completed submissions
* `partial`: Returns only partially completed submissions (Pro feature)
* `all` or omitted: Returns all submissions regardless of status

#### Pagination

* Default `per_page` is 100, maximum is 100
* Results are ordered by `created_at` in descending order (newest first)

`403 Forbidden` – The token lacks `forms-read`.


## OpenAPI

````yaml get /open/forms/{id}/submissions
openapi: 3.0.1
info:
  title: OpnForm API
  description: API for interacting with OpnForm, primarily used for Zapier integration
  version: 1.0.0
servers:
  - url: https://api.opnform.com
security:
  - bearerAuth: []
tags:
  - name: Workspaces
    description: Create and manage workspaces.
  - name: Workspace Users
    description: Manage users within a workspace.
  - name: Forms
    description: Manage and retrieve forms.
  - name: Submissions
    description: Access and manage form submissions.
  - name: Integrations
    description: Manage form integrations (webhooks) via API.
  - name: Zapier
    description: Legacy endpoints for the Zapier integration.
paths:
  /open/forms/{id}/submissions:
    get:
      tags:
        - Submissions
      summary: List Submissions
      description: >-
        Requires `forms-read`. Supports pagination, search, and status
        filtering.
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: number
        - name: page
          in: query
          required: false
          schema:
            type: number
            minimum: 1
            default: 1
          description: Pagination page number
        - name: per_page
          in: query
          required: false
          schema:
            type: number
            minimum: 1
            maximum: 100
            default: 100
          description: Number of results per page
        - name: search
          in: query
          required: false
          schema:
            type: string
          description: Search term to filter submissions by field values
        - name: status
          in: query
          required: false
          schema:
            type: string
            enum:
              - completed
              - partial
              - all
            default: all
          description: Filter by submission status
      responses:
        '200':
          description: Successful
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Submission'
                  links:
                    type: object
                    properties:
                      first:
                        type: string
                      last:
                        type: string
                      prev:
                        type: string
                        nullable: true
                      next:
                        type: string
                        nullable: true
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: number
                      from:
                        type: number
                      last_page:
                        type: number
                      per_page:
                        type: number
                      to:
                        type: number
                      total:
                        type: number
        '403':
          description: Forbidden – token lacks forms-read ability
      security:
        - bearerAuth: []
components:
  schemas:
    Submission:
      type: object
      properties:
        id:
          type: number
          description: Unique submission ID
          readOnly: true
        form_id:
          type: number
          description: ID of the parent form
          readOnly: true
        completion_time:
          type: number
          nullable: true
          description: Time taken to complete the form in seconds
          readOnly: true
        data:
          type: object
          description: Contains form field responses plus metadata (status, created_at, id)
          additionalProperties: true
          readOnly: true
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Personal Access Token
      x-bearer-scopemap:
        workspaces-read: Read access to workspaces
        workspaces-write: Write access to workspaces
        workspace-users-read: Read access to workspace users
        workspace-users-write: Write access to workspace users
        forms-read: Read access to forms
        forms-write: Write access to forms
        manage-integrations: Manage form integrations (webhooks)

````