Skip to main content
Glama

get_form

Read-only

Retrieve a single form by ID from your Checkout Page account.

Use this tool when you already know the form ID and want to inspect the current configuration.

If the form ID does not exist, returns a 404 error: "Form not found".

Example uses:

  • "Fetch form 6812fe6e9f39b6760576f01c"

  • "Show me the current settings for form X"

  • "Check whether this form is draft, published or archived"

  • "Inspect the fields, files, images, or redirect settings on this form"

For create flows, use create_form. For a direct lookup after creation, pass the returned page id into this tool.

Input Schema

NameRequiredDescriptionDefault
pageIdYesThe ID of the form to retrieve. You can get this from `create_form`, the dashboard, or another Checkout Page API response.

Output Schema

NameRequiredDescriptionDefault
dataYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedOutput schema / $defs / FormLayoutDivider / properties / disabled
      Added value: +{
      +  "description": "`true` keeps the divider in the layout but hides it from customers. Defaults to `false`.",
      +  "type": "boolean"
      +}
    • addedOutput schema / $defs / FormLayoutHeading / properties / disabled
      Added value: +{
      +  "description": "`true` keeps the heading in the layout but hides it from customers. Defaults to `false`.",
      +  "type": "boolean"
      +}
  2. Changed2 schema fields changed
    • changedOutput schema / properties / data / properties / confirmationCheckoutMessage / description
      Previous value: -"Confirmation page message."New value: +"Confirmation page message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
    • changedOutput schema / properties / data / properties / confirmationEmailMessage / description
      Previous value: -"Custom confirmation email message."New value: +"Custom confirmation email message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
  3. Changed1 schema field changed
    • changedOutput schema / $defs / Field / properties / reference / description
      Previous value: -"External reference ID for mapping this field in downstream systems."New value: +"Stable key that exports, Zapier, Google Sheets and webhooks use for this field's answers. Not updated when the label changes."
  4. Changed8 schema fields changed
    • changedOutput schema / $defs / Field / properties / order / description
      Previous value: -"Display order of the field within the form."New value: +"Position of the field among the page's fields, from 0. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead."
    • addedOutput schema / $defs / FormLayoutDiscountCode
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Where the discount code box sits. This item only places the box: the box shows while the page has `showCouponCodeField` on. Checkout pages and events only.",
      +  "properties": {
      +    "type": {
      +      "const": "discount-code",
      +      "description": "Always `discount-code`.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "type"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / $defs / FormLayoutDivider
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "A line that separates parts of the form.",
      +  "properties": {
      +    "id": {
      +      "description": "The divider's id, chosen by you: 1 to 64 characters, unique in the layout.",
      +      "maxLength": 64,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "type": {
      +      "const": "divider",
      +      "description": "Always `divider`.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "type",
      +    "id"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / $defs / FormLayoutField
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "A field on the page, shown where it sits in the layout.",
      +  "properties": {
      +    "fieldId": {
      +      "description": "The `id` of a field in the page's `fields`.",
      +      "pattern": "^[0-9a-fA-F]{24}$",
      +      "type": "string"
      +    },
      +    "type": {
      +      "const": "field",
      +      "description": "Always `field`.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "type",
      +    "fieldId"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / $defs / FormLayoutGroup
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Items shown side by side in columns.",
      +  "properties": {
      +    "columns": {
      +      "description": "How many items sit side by side, 1 to 4. On phones the group stacks by default.",
      +      "maximum": 4,
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "id": {
      +      "description": "The group's id, chosen by you: 1 to 64 characters, unique in the layout.",
      +      "maxLength": 64,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "items": {
      +      "description": "What the group holds, filled row by row: fields, headings, dividers and the discount code. Groups never nest.",
      +      "items": {
      +        "oneOf": [
      +          {
      +            "$ref": "#/$defs/FormLayoutField"
      +          },
      +          {
      +            "$ref": "#/$defs/FormLayoutHeading"
      +          },
      +          {
      +            "$ref": "#/$defs/FormLayoutDivider"
      +          },
      +          {
      +            "$ref": "#/$defs/FormLayoutDiscountCode"
      +          }
      +        ]
      +      },
      +      "maxItems": 200,
      +      "type": "array"
      +    },
      +    "name": {
      +      "description": "A name for the group, seen only in the dashboard. Up to 100 characters.",
      +      "maxLength": 100,
      +      "type": "string"
      +    },
      +    "type": {
      +      "const": "group",
      +      "description": "Always `group`.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "type",
      +    "id",
      +    "columns",
      +    "items"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / $defs / FormLayoutHeading
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "A heading or subheading shown above the items after it.",
      +  "properties": {
      +    "id": {
      +      "description": "The heading's id, chosen by you: 1 to 64 characters, unique in the layout.",
      +      "maxLength": 64,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "level": {
      +      "description": "`heading` for a section title, `subheading` for a smaller one.",
      +      "enum": [
      +        "heading",
      +        "subheading"
      +      ],
      +      "type": "string"
      +    },
      +    "text": {
      +      "description": "The text shown, up to 200 characters.",
      +      "maxLength": 200,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "type": {
      +      "const": "heading",
      +      "description": "Always `heading`.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "type",
      +    "id",
      +    "text",
      +    "level"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / $defs / FormLayoutItem
      Added value: +{
      +  "description": "More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
      +  "oneOf": [
      +    {
      +      "$ref": "#/$defs/FormLayoutField"
      +    },
      +    {
      +      "$ref": "#/$defs/FormLayoutHeading"
      +    },
      +    {
      +      "$ref": "#/$defs/FormLayoutDivider"
      +    },
      +    {
      +      "$ref": "#/$defs/FormLayoutDiscountCode"
      +    },
      +    {
      +      "$ref": "#/$defs/FormLayoutGroup"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / data / properties / formLayout
      Added value: +{
      +  "description": "How the page's form is arranged, top to bottom: fields, headings, dividers, groups of fields shown side by side in columns, and where the discount code box sits. Always returned, even for a page that was never arranged: every field on the page is listed, and `fieldId` matches the `id` of an entry in `fields`. A `discount-code` item only places the box, which shows while `showCouponCodeField` is on. A placement you saved is returned whether the box is on or off; when none was saved and the box is on, the item is at the end, where the box shows. Forms never have one. Each item is one of: `field` (`fieldId`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
      +  "items": {
      +    "$ref": "#/$defs/FormLayoutItem"
      +  },
      +  "type": "array"
      +}
  5. Changed1 schema field changed
    • addedOutput schema / $defs / Field / properties / disabled
      Added value: +{
      +  "description": "Whether this field is switched off. A disabled field keeps its settings but is removed from the page entirely.",
      +  "example": false,
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
  6. First observed

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description still adds real value beyond that: the exact 404 message on a missing ID, and the surface of what can be inspected (status, fields, files, images, redirects). It stops short of describing what the response payload looks like, but an output schema exists to cover that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and precondition lead, alternatives follow, and the example list at the end is skimmable rather than buried. The four bullet examples are slightly redundant with the prose but each illustrates a distinct query intent, so little is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with annotations covering safety and an output schema covering the return shape, the description supplies the remaining gaps: precondition, sibling routing, and error behavior. The only omission of note is any rate-limit or pagination nuance, which is negligible here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the pageId pattern and provenance are already documented in the schema. The description adds only the 404 consequence of passing an unknown ID and the pointer to use the page `id` returned from create_form — useful but marginal against a fully documented parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource — 'Retrieve a single form by ID from your Checkout Page account' — which unambiguously separates it from list_forms. The scope ('single', 'by ID') and the object ('form') are stated up front with no hedging.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit precondition ('when you already know the form ID'), names the alternative tool for the other case ('For create flows, use create_form'), and even describes the post-creation lookup path. Both the when-to-use and the sibling routing are spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources