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

# Form Filling API Returns Empty Structured Data

> Poll Form filling session status until completed before retrieving structured data

Form filling Partner API structured data is ready only after processing finishes. If you call the structured-data endpoint too early, or after `failed` / `aborted`, you get empty or missing results.

For the hosted Form filling SDK (cancel, early close, `SUKI_FF_*`), use [Form filling session returns no results](/documentation/troubleshooting/form-filling-no-results).

## Status values

Poll [Get Form filling session status](/form-filling-api-reference/form-filling-sessions/status):

| Status | What to do |
| :- | :- |
| `created`, `ready`, `running`, `staged` | Keep polling |
| `completed` | Retrieve structured data |
| `failed` | Stop. Processing failed |
| `aborted` | Stop. The session was canceled |

## Common causes

* Calling structured data before status is `completed`.
* Skipping `RU9G`, WebSocket close, or REST end.
* Calling content APIs after `failed` or `aborted`.
* Using SDK callbacks on a REST-only integration.

## Fix

<Steps>
  <Step title="Create, Stream, and End">
    Create the Form filling session, stream audio on `/ws/stream` (same ambient wire format), send **`RU9G`**, close the WebSocket, then call [End Form filling session](/form-filling-api-reference/form-filling-sessions/end) with `sdp_suki_token`.
  </Step>

  <Step title="Poll Until Completed">
    Call `GET /api/v1/form-filling/session/{ambient_session_id}/status` until status is **`completed`**. Stop on **`failed`** or **`aborted`**.
  </Step>

  <Step title="Retrieve After Completed">
    Call the Form filling structured-data endpoint only when status is **`completed`**.
  </Step>

  <Step title="If You Use the Form Filling SDK">
    Follow [Form filling session returns no results](/documentation/troubleshooting/form-filling-no-results) for cancel, early close, and `SUKI_FF_001` through `SUKI_FF_004`.
  </Step>
</Steps>

<Warning>
  Closing the WebSocket is not enough. Poll session status before you retrieve structured data.
</Warning>

## Next steps

<Icon icon="file-lines" iconType="solid" /> **[Get Form filling session status](/form-filling-api-reference/form-filling-sessions/status)** - Status values for polling

<Icon icon="file-lines" iconType="solid" /> **[Get Form filling structured data](/form-filling-api-reference/form-filling-sessions/structured-data)** - Retrieve after status is completed

<Icon icon="file-lines" iconType="solid" /> **[Form filling session returns no results](/documentation/troubleshooting/form-filling-no-results)** - SDK cancel, closed, and `SUKI_FF_*`

<Icon icon="file-lines" iconType="solid" /> **[Empty notes after end session](/documentation/troubleshooting/empty-notes-after-end-session)** - Ambient poll before retrieve

<Icon icon="file-lines" iconType="solid" /> **[Streaming architecture](/documentation/how-to/audio-streaming/streaming-architecture)** - Form filling uses ambient wire format on `/ws/stream`
