---
title: "Get a lead form"
method: GET
path: "/v1/messaging/ads/lead-forms/{formId}"
tags: ["Lead Gen"]
---

# Get a lead form

`GET /v1/messaging/ads/lead-forms/{formId}`

## Request

- Base URL: `https://apihub.co.il`
- URL: `https://apihub.co.il/v1/messaging/ads/lead-forms/{formId}`
- Auth: HTTP bearer

Shows a lead form in full, including its questions and thank-you page.

Returns the full form, including the thank-you page, so a form can be diffed against what was created. Meta forms are scoped to the Page the accountId manages: a form on any other Page is a 404, never a read.


**Billing:** Read (free unless it says otherwise) · **Rate limit:** 120/min

## Path parameters

- `formId` string, required: Numeric form id (Meta leadgen_form id or LinkedIn leadForm id).

## Query parameters

- `fields` string: Meta only. A Graph field selection passed through verbatim to GET /{form-id}, replacing the default projection, so fields Meta adds later are reachable without an API change. Field names, commas and {} expansion only; anything else (Graph field modifiers such as .limit(), or characters that could open another query parameter) is a 400. Ownership of the form is verified before the selection runs, so this cannot reach any Page but the one accountId manages. Unknown field names are rejected by Meta as a 400.
- `accountId` string, required: Connected Meta ads, facebook, instagram or linkedin ads account id (selects the platform). A Meta ads connection resolves its Page through the Facebook account linked to the same profile; an Instagram account uses the Page its ads run under (its own linked Page, else the Facebook or business-login Meta ads account on the same profile).

## Headers

- `Idempotency-Key` string
- `X-Tag` string

## Response `200`

Completed

- object
  - `id` string: Execution id — stable across internal retries; use it with GET /v1/executions/{id}
  - `status` 'pending' | 'processing' | 'completed' | 'partial' | 'failed' | 'cancelled' | 'timeout'
  - `operation` string
  - `tag` string, nullable: Your X-Tag, if sent
  - `created_at` string, date-time
  - `completed_at` string, date-time, nullable
  - `output` object: Operation result (see each operation). While a Studio render is processing: `stage` (queued · transcribing · downloading · preparing · cleaning_voice · mixing_audio · rendering · finishing), `phase` (the engine's: download · prepare · voice · audio · encode · qa · upload, or null), `progress` (a percent, 0–100) and `progress_fraction` (0–1), `eta_seconds` (seconds left, never below 0) and `estimate_seconds`
    - `form` union
      - object: A Meta Lead Gen form as Graph returns it, in Meta's own snake_case. Read through GET /v1/ads/lead-forms/{formId}. Every setting POST /v1/ads/lead-forms writes is present here, so a form can be diffed against what was created and drift from edits made in Meta's form builder is detectable. A compound field is omitted entirely when the form has no value for it, and `fields` narrows the selection.
        - `id` string
        - `name` string
        - `locale` string
        - `status` string: One of ACTIVE, ARCHIVED, DELETED or DRAFT.
        - `page_id` string: Owning Facebook Page. A form on any other Page is a 404, whether read or archived.
        - `questions` object[]
          - `id` string
          - `key` string
          - `type` string: EMAIL, PHONE, FULL_NAME, CUSTOM, ...
          - `label` string
          - `options` object[]
            - `key` string
            - `value` string
          - `inline_context` string
          - `conditional_questions_choices` object[]: READ-ONLY. Which answers reveal the conditional group.
          - `conditional_questions_group_id` string: READ-ONLY. Conditional logic can only be authored in Meta form builder; Meta has no create parameter for it.
          - `dependent_conditional_questions` object[]: READ-ONLY. Questions revealed by the conditional group.
        - `leads_count` integer
        - `context_card` object
          - `id` string
          - `style` 'LIST_STYLE' | 'PARAGRAPH_STYLE'
          - `title` string
          - `content` string[]
          - `button_text` string
          - `cover_photo` object
            - `id` string
        - `created_time` string, date-time
        - `legal_content` object: Privacy policy and custom disclaimer as Meta stores them.
          - `id` string
          - `privacy_policy` object
            - `url` string, uri
            - `link_text` string
          - `custom_disclaimer` object: Set in Meta form builder only; there is no create parameter for it.
        - `thank_you_page` object: The form's single ending page, mirroring the thankYou* create fields. Meta has exactly one per form; there is no multiple-ending-page API (thank_you_pages and ending_pages are not Graph fields).
          - `id` string
          - `body` string
          - `title` string
          - `status` string
          - `button_text` string
          - `button_type` string
          - `website_url` string, uri
          - `country_code` string
          - `enable_messenger` boolean
          - `lead_gen_use_case` string
          - `business_phone_number` string
        - `allow_organic_lead` boolean: Whether the form can also be submitted from an organic Page post.
        - `privacy_policy_url` string, uri
        - `expired_leads_count` integer: Leads Meta has aged out of the retention window.
        - `organic_leads_count` integer
        - `tracking_parameters` object[]: Custom key/value pairs attached to every lead of this form.
          - `key` string
          - `value` string
        - `follow_up_action_url` string, uri
        - `follow_up_action_text` string
        - `is_optimized_for_quality` boolean
        - `question_page_custom_headline` string
        - `block_display_for_non_targeted_viewer` boolean
      - object
    - `status` string
  - `error` string, nullable
  - `usage` object
    - `credits_charged` number, nullable
    - `credits_reserved` number
    - `estimated_credits` number
    - `cost_source` 'provider_reported' | 'calculated' | 'estimated' | 'null', nullable
    - `provider_usage` object, nullable: Normalised consumption, e.g. { VIDEO_SECOND: 22.4 }
  - `balance` object
    - `available` number
    - `reserved` number

## Other responses

- `400`: Invalid input
- `402`: Insufficient credits / project budget
- `404`: Resource not found (or not yours)
- `429`: Rate limited
- `503`: Service temporarily paused

---

[API](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai.md) · [All operations](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai/llms.txt) · [OpenAPI document](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai/revisions/a8caa42835ce?raw)
