PullRequestMergeability

Whether a pull request can be merged, and why not when it cannot.

AI CodingDevelopment ToolsCloud AgentsCLIEnterprise Software

Properties

Name Type Description
pullRequest object The pull request the verdict is about.
verdict string Overall answer for every pull request in `evaluated_pull_requests`: `mergeable` means merging `pull_request` lands all of them (for a stacked pull request, the whole stack below it as well). Unrecogni
blockers array Everything preventing the merge, ordered by the pull request they belong to (stack root first) and then by kind. Empty when `verdict` is `mergeable`. At most one blocker per pull request per kind, exc
evaluatedPullRequests array Pull requests a merge of `pull_request` would land, stack root first and ending with `pull_request`. Ancestors that already merged are not listed: they are history, not part of the evaluation. Exactly
headSha string Head commit of `pull_request` that was evaluated.
baseRef string Branch the evaluated pull requests merge into: the stack root's base, not this pull request's own base when it is stacked.
baseSha string Tip commit of `base_ref` at `evaluated_at`. A later push to `base_ref` may change the verdict. Empty when the base branch could not be determined (for example, an invalid stack).
evaluatedAt string When this result was evaluated. Changes after this time are not reflected; re-query to pick them up.
View JSON Schema on GitHub

JSON Schema

anysphere-cursor.com-pull-request-mergeability-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/anysphere-cursor.com/main/json-schema/anysphere-cursor.com-pull-request-mergeability-schema.json",
  "title": "PullRequestMergeability",
  "description": "Whether a pull request can be merged, and why not when it cannot.",
  "x-generated": "2026-09-25",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/anysphere-cursor.com-openapi.yaml#/components/schemas/PullRequestMergeability",
  "type": "object",
  "properties": {
    "pullRequest": {
      "allOf": [
        {
          "$ref": "#/$defs/PullRequestReference"
        }
      ],
      "description": "The pull request the verdict is about.",
      "x-cursor-visibility": "PREVIEW"
    },
    "verdict": {
      "enum": [
        "mergeable",
        "blocked"
      ],
      "type": "string",
      "description": "Overall answer for every pull request in `evaluated_pull_requests`:\n `mergeable` means merging `pull_request` lands all of them (for a stacked\n pull request, the whole stack below it as well). Unrecognized values must\n be treated as `blocked`.",
      "x-cursor-visibility": "PREVIEW"
    },
    "blockers": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/PullRequestMergeabilityBlocker"
      },
      "description": "Everything preventing the merge, ordered by the pull request they belong\n to (stack root first) and then by kind. Empty when `verdict` is\n `mergeable`. At most one blocker per pull request per kind, except\n `required_checks` (one per state) and `rule_failure` / `ruleset_error`\n (one per distinct message); the same kind can appear for different pull\n requests in the stack. Every blocker's `pull_request` is one of\n `evaluated_pull_requests`.\n\n New kinds are added over time. Decode with unknown values tolerated\n (`ignoreUnknownFields` in protobuf-es, `DiscardUnknown` in Go protojson):\n a blocker whose `kind` postdates your client then decodes with `kind`\n unset and `message` intact, and is still blocking. Strict decoders reject\n the whole response instead.",
      "x-cursor-visibility": "PREVIEW"
    },
    "evaluatedPullRequests": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/PullRequestReference"
      },
      "description": "Pull requests a merge of `pull_request` would land, stack root first and\n ending with `pull_request`. Ancestors that already merged are not listed:\n they are history, not part of the evaluation. Exactly one element for an\n unstacked pull request.",
      "x-cursor-visibility": "PREVIEW"
    },
    "headSha": {
      "type": "string",
      "description": "Head commit of `pull_request` that was evaluated.",
      "x-cursor-visibility": "PREVIEW"
    },
    "baseRef": {
      "type": "string",
      "description": "Branch the evaluated pull requests merge into: the stack root's base, not\n this pull request's own base when it is stacked.",
      "x-cursor-visibility": "PREVIEW"
    },
    "baseSha": {
      "type": "string",
      "description": "Tip commit of `base_ref` at `evaluated_at`. A later push to `base_ref`\n may change the verdict. Empty when the base branch could not be\n determined (for example, an invalid stack).",
      "x-cursor-visibility": "PREVIEW"
    },
    "evaluatedAt": {
      "type": "string",
      "description": "When this result was evaluated. Changes after this time are not\n reflected; re-query to pick them up.",
      "format": "date-time",
      "x-cursor-visibility": "PREVIEW"
    }
  },
  "x-cursor-visibility": "PREVIEW",
  "$defs": {
    "CheckRunReference": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "x-cursor-visibility": "PREVIEW"
        },
        "name": {
          "type": "string",
          "x-cursor-visibility": "PREVIEW"
        },
        "checkSuite": {
          "allOf": [
            {
              "$ref": "#/$defs/CheckSuiteReference"
            }
          ],
          "description": "Suite the check run belongs to.",
          "x-cursor-visibility": "PREVIEW"
        }
      },
      "description": "Identity and display coordinates of a check run, for embedding in resources\n that a `repository:checks` read does not gate. Everything else about the run\n (status, conclusion, output, details URL) is `GetCheckRun`.",
      "x-cursor-visibility": "PREVIEW"
    },
    "CheckSuiteReference": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        }
      }
    },
    "CodeownerApprovalBlocker": {
      "type": "object",
      "properties": {
        "requirements": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/CodeownerRequirement"
          },
          "x-cursor-visibility": "PREVIEW"
        }
      },
      "x-cursor-visibility": "PREVIEW"
    },
    "CodeownerRequirement": {
      "type": "object",
      "properties": {
        "owners": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Code owners, any one of whom can satisfy the requirement.",
          "x-cursor-visibility": "PREVIEW"
        },
        "paths": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Changed paths this owner set covers.",
          "x-cursor-visibility": "PREVIEW"
        }
      },
      "description": "One owner set that still needs an approval.",
      "x-cursor-visibility": "PREVIEW"
    },
    "MergeConflictBlocker": {
      "type": "object",
      "properties": {
        "conflictedPaths": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Paths that conflict with the base branch. At most 100 are listed.",
          "x-cursor-visibility": "PREVIEW"
        },
        "truncated": {
          "type": "boolean",
          "description": "Whether more paths conflict than are listed.",
          "x-cursor-visibility": "PREVIEW"
        },
        "inheritedFromDownstack": {
          "type": "boolean",
          "description": "The conflict comes from a pull request below this one in the stack, so\n this pull request is waiting on that one rather than conflicted itself.",
          "x-cursor-visibility": "PREVIEW"
        }
      },
      "x-cursor-visibility": "PREVIEW"
    },
    "OriginActor": {
      "type": "object",
      "properties": {
        "user": {
          "$ref": "#/$defs/OriginUserActor"
        },
        "app": {
          "$ref": "#/$defs/OriginAppActor"
        },
        "serviceAccount": {
          "$ref": "#/$defs/OriginServiceAccountActor"
        }
      },
      "description": "A user, app, or service account that performed an externally visible action."
    },
    "OriginAppActor": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "displayName": {
          "type": "string",
          "description": "The app's registered display name, never empty when present. Omitted on\n payloads whose app could not be resolved and on the first-party Cursor\n facade actor."
        }
      }
    },
    "OriginServiceAccountActor": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        }
      }
    },
    "OriginUserActor": {
      "required": [
        "email"
      ],
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "email": {
          "type": "string"
        },
        "displayName": {
          "type": "string",
          "description": "Human-readable display name: the account's first and last name, each\n trimmed, joined with a space — exactly the name the product UI renders.\n Omitted when the account has no name; never synthesized from the email,\n the id, or any other field. May also be absent on webhook payloads whose\n actor could not be resolved."
        },
        "handle": {
          "type": "string",
          "description": "The user's claimed profile handle (the identity behind cursor.com\n /@handle), without the @ prefix. Present only while the user's profile\n is publicly visible; omitted for users without a claimed handle and for\n non-public profiles."
        }
      }
    },
    "Owner": {
      "type": "object",
      "properties": {
        "slug": {
          "type": "string",
          "description": "Unique URL-friendly name of the owner."
        },
        "id": {
          "type": "string",
          "description": "Unique ID of the owner namespace."
        },
        "type": {
          "readOnly": true,
          "enum": [
            "team",
            "user"
          ],
          "type": "string",
          "description": "`team` or `user`. Output-only; unset when unknown."
        }
      },
      "description": "The owner of a repo."
    },
    "PullRequestMergeabilityBlocker": {
      "type": "object",
      "properties": {
        "pullRequest": {
          "allOf": [
            {
              "$ref": "#/$defs/PullRequestReference"
            }
          ],
          "description": "Pull request in `evaluated_pull_requests` this blocker belongs to.",
          "x-cursor-visibility": "PREVIEW"
        },
        "kind": {
          "enum": [
            "draft",
            "closed",
            "merged",
            "merge_conflict",
            "required_checks",
            "required_approvals",
            "codeowner_approval",
            "behind_base",
            "needs_restack",
            "restack_pending",
            "conflict_check_pending",
            "invalid_stack",
            "ruleset_error",
            "rule_failure"
          ],
          "type": "string",
          "description": "Category of the blocker. Never unset on the wire; a client that decodes\n it unset received a kind newer than itself (see `blockers`).",
          "x-cursor-visibility": "PREVIEW"
        },
        "message": {
          "type": "string",
          "description": "Human-readable statement of the blocker and how to clear it. Never empty:\n what to render when `kind` is unrecognized.",
          "x-cursor-visibility": "PREVIEW"
        },
        "requiredChecks": {
          "allOf": [
            {
              "$ref": "#/$defs/RequiredChecksBlocker"
            }
          ],
          "x-cursor-visibility": "PREVIEW"
        },
        "requiredApprovals": {
          "allOf": [
            {
              "$ref": "#/$defs/RequiredApprovalsBlocker"
            }
          ],
          "x-cursor-visibility": "PREVIEW"
        },
        "codeownerApproval": {
          "allOf": [
            {
              "$ref": "#/$defs/CodeownerApprovalBlocker"
            }
          ],
          "x-cursor-visibility": "PREVIEW"
        },
        "mergeConflict": {
          "allOf": [
            {
              "$ref": "#/$defs/MergeConflictBlocker"
            }
          ],
          "x-cursor-visibility": "PREVIEW"
        },
        "stackShape": {
          "allOf": [
            {
              "$ref": "#/$defs/StackShapeBlocker"
            }
          ],
          "x-cursor-visibility": "PREVIEW"
        }
      },
      "description": "One condition preventing a merge.",
      "x-cursor-visibility": "PREVIEW"
    },
    "PullRequestReference": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "Immutable Origin change id."
        },
        "number": {
          "type": "string"
        },
        "repository": {
          "allOf": [
            {
              "$ref": "#/$defs/RepositoryReference"
            }
          ],
          "description": "Repository reference for this pull request."
        }
      },
      "description": "Stable identity and display coordinates for an Origin pull request."
    },
    "RepositoryReference": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "owner": {
          "$ref": "#/$defs/Owner"
        }
      },
      "description": "Stable identity and display coordinates for a repository."
    },
    "RequiredApprovalsBlocker": {
      "type": "object",
      "properties": {
        "requiredCount": {
          "type": "integer",
          "description": "Approving reviews the repository rules require.",
          "format": "int32",
          "x-cursor-visibility": "PREVIEW"
        },
        "approvedCount": {
          "type": "integer",
          "description": "Approving reviews currently counted toward the requirement.",
          "format": "int32",
          "x-cursor-visibility": "PREVIEW"
        }
      },
      "x-cursor-visibility": "PREVIEW"
    },
    "RequiredCheck": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name the repository rule requires.",
          "x-cursor-visibility": "PREVIEW"
        },
        "owner": {
          "allOf": [
            {
              "$ref": "#/$defs/OriginActor"
            }
          ],
          "description": "Principal expected to report the check.",
          "x-cursor-visibility": "PREVIEW"
        },
        "checkRun": {
          "allOf": [
            {
              "$ref": "#/$defs/CheckRunReference"
            }
          ],
          "description": "The check run on `head_sha` matching this requirement, by reference.\n Unset when none has been reported (state `missing`). A reference rather\n than the full `CheckRun`: this resource is readable with\n `repository:pull_requests` read alone, while a run's status, conclusion,\n output and details URL are gated by `repository:checks` read\n (`GetCheckRun`); the requirement's state is `RequiredChecksBlocker.state`.",
          "x-cursor-visibility": "PREVIEW"
        }
      },
      "description": "A check a repository rule requires on the evaluated head.",
      "x-cursor-visibility": "PREVIEW"
    },
    "RequiredChecksBlocker": {
      "type": "object",
      "properties": {
        "state": {
          "enum": [
            "missing",
            "pending",
            "failing",
            "action_required"
          ],
          "type": "string",
          "description": "State shared by every check in this blocker.",
          "x-cursor-visibility": "PREVIEW"
        },
        "checks": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/RequiredCheck"
          },
          "description": "Required checks in that state.",
          "x-cursor-visibility": "PREVIEW"
        }
      },
      "x-cursor-visibility": "PREVIEW"
    },
    "StackShapeBlocker": {
      "type": "object",
      "properties": {
        "reason": {
          "enum": [
            "partially_merged",
            "cycle",
            "missing_parent",
            "cross_repository_parent",
            "base_branch_missing"
          ],
          "type": "string",
          "x-cursor-visibility": "PREVIEW"
        },
        "relatedPullRequests": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/PullRequestReference"
          },
          "description": "Other pull requests involved, when the reason names any.",
          "x-cursor-visibility": "PREVIEW"
        }
      },
      "x-cursor-visibility": "PREVIEW"
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/anysphere-cursor.com-pull-request-mergeability"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.