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

# Get Optical Timeseries

> Retrieve optical monitoring timeseries data

Returns processed timeseries data from optical image analysis during growth. Each data point corresponds to a video frame and may include computed morphology metrics such as perimeter, circularity, and edge roughness.

<ParamField path="data_id" type="string" required>
  The data entry UUID for the optical measurement
</ParamField>

<ParamField query="return_null_if_missing" type="boolean" default="false">
  If `true`, returns `null` instead of an error when no timeseries data exists for this entry
</ParamField>

## Response

<ResponseField name="series" type="array">
  Array of per-frame measurement data points

  <Expandable title="properties">
    <ResponseField name="relative_time_seconds" type="number">
      Time relative to the start of the recording (seconds)
    </ResponseField>

    <ResponseField name="unix_timestamp_ms" type="number">
      Unix timestamp in milliseconds
    </ResponseField>

    <ResponseField name="frame_number" type="integer">
      Frame index in the video
    </ResponseField>

    <ResponseField name="perimeter_px" type="number">
      Detected perimeter in pixels (if available)
    </ResponseField>

    <ResponseField name="circularity" type="number">
      Circularity metric (if available)
    </ResponseField>

    <ResponseField name="edge_roughness" type="number">
      Edge roughness metric (if available)
    </ResponseField>

    <ResponseField name="hausdorff_px" type="number">
      Hausdorff distance in pixels (if available)
    </ResponseField>
  </Expandable>
</ResponseField>

<RequestExample>
  ```python SDK theme={null}
  from atomscale import Client

  client = Client(api_key="YOUR_API_KEY")
  results = client.get(data_ids="d290f1ee-6c54-4b01-90e6-d701748f0851")
  optical = results[0]  # OpticalResult
  print(optical.timeseries_data)
  ```

  ```python Python theme={null}
  import requests

  response = requests.get(
      "https://api.atomscale.ai/optical/timeseries/d290f1ee-6c54-4b01-90e6-d701748f0851/",
      headers={"X-API-KEY": "YOUR_API_KEY"}
  )
  optical_data = response.json()
  ```

  ```bash cURL theme={null}
  curl "https://api.atomscale.ai/optical/timeseries/d290f1ee-6c54-4b01-90e6-d701748f0851/" \
    -H "X-API-KEY: YOUR_API_KEY"
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "series": [
      {
        "relative_time_seconds": 0.0,
        "unix_timestamp_ms": 1705312200000,
        "frame_number": 0,
        "perimeter_px": 245.3,
        "circularity": 0.87,
        "edge_roughness": 0.12,
        "hausdorff_px": 3.5
      },
      {
        "relative_time_seconds": 1.0,
        "unix_timestamp_ms": 1705312201000,
        "frame_number": 30,
        "perimeter_px": 248.1,
        "circularity": 0.85,
        "edge_roughness": 0.14,
        "hausdorff_px": 3.8
      }
    ]
  }
  ```
</ResponseExample>
