---
title: "Get Source Field Options"
method: POST
path: "/api/v1/sources/{source_id}/options/{field_name}"
tags: ["Sources"]
---

# Get Source Field Options

`POST /api/v1/sources/{source_id}/options/{field_name}`

## Request

- Base URL: `http://localhost:3009`
- URL: `http://localhost:3009/api/v1/sources/{source_id}/options/{field_name}`
- Auth: HTTP bearer

Fetches the dropdown / dynamic option values for one of a source's payload fields. Use it when building a source's preview / create payload whose field expects a value from a connected integration (HubSpot lists, HubSpot properties per object type, etc.).

Pass the `source_id` (same identifier used by the source's preview / create endpoints, e.g. `import_from_hubspot`) and the `field_name`. Behaves like the workflow Get Action Field Options endpoint, so resolver behavior is consistent across the two surfaces.

Cascading resolvers (e.g. HubSpot: pick `object_type` → list `hubspot_properties`) take their parent selection via `context`. Calling a cascading resolver without the required key returns a 400 with the accepted key spellings. `hubspot_lists` takes an optional `context.search` (words matched against list names) to find a list by name without pulling the whole catalog.

Returns options as `{ value, label, extras? }`. `value` is what to send back in the source's payload; `extras` carries per-integration metadata when relevant.

## Path parameters

- `source_id` string, required
- `field_name` string, required

## Request body

- GetSourceOptionsBody: Body for Get Source Field Options. `context` carries any earlier cascading selections (e.g. `{ object_type: "contacts" }` for HubSpot property lookups). Resolvers without cascades accept an empty body.
  - `context` object: Optional context for cascading resolvers. Keys are snake-cased and match the parent field's public name on the source's payload. Resolvers accept multiple snake-cased spellings — calling without a required key returns 400 listing the accepted spellings. `hubspot_lists` also accepts an optional `search` key: words matched against list names (case-insensitive) so a list can be found by name instead of pulling the whole catalog.

## Response `200`

Default Response

- object
  - `status` integer
  - `data` GetSourceOptionsData: Response data for Get Source Field Options.
    - `options` SourceOptionItem[], required: Available option values for the requested field.
      - `value` string, required: The value to send back via the source's create / preview payload.
      - `label` string, required: Human-readable label for the option.
      - `extras` object: Per-integration metadata. Shape varies by integration — use it for richer rendering when needed.

## Other responses

- `400`: Invalid request — e.g. the field has no resolver for that source, or a cascading resolver was called without its required `context` keys.
- `401`: Unauthorized — missing or invalid API key
- `403`: Forbidden. `code` says which permission refused: ROLE_FORBIDDEN (your role), INSUFFICIENT_SCOPE (the API key's scopes), WORKFLOW_FORBIDDEN (no access to the workflow), KEY_WORKFLOW_FORBIDDEN (the API key's workflow restriction).
- `424`: The user is not connected to the underlying integration (e.g. no HubSpot OAuth). Surface as a 'connect first' CTA.
- `429`: Too Many Requests — rate limit exceeded. Check `Retry-After` header for seconds until the limit resets.
- `502`: Upstream integration call failed (provider down, expired token, etc.).

---

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