---
title: "Compare G2X records"
method: POST
path: "/api/webmcp/g2x_compare_records"
---

# Compare G2X records

`POST /api/webmcp/g2x_compare_records`

## Request

- Base URL: `https://g2x.com`
- URL: `https://g2x.com/api/webmcp/g2x_compare_records`
- Auth: one of:
  - API key in cookie `__session`
  - none

Compares two through five records of one type against a fixed field set with explicit nulls and record links. It does not score the records, mix record types, or expose fields hidden from the current viewer. Invoke from an enabled G2X page surface. A signed-in account receives the same fields and results the G2X page shows that account; a signed-out viewer receives the public projection. Follow a returned continuation cursor instead of increasing the limit.

## Request body

- object
  - `schema_version` '2026-09-01', required
  - `surface` 'opportunity_search' | 'opportunity_detail' | 'pipeline', required
  - `input` object, required
    - `record_type` 'opportunity' | 'award' | 'contract' | 'idv' | 'vehicle' | 'agency' | 'company' | 'protest' | 'post', required
    - `ids` string[], required

## Response `200`

Bounded result with source provenance and linked citations, carrying the fields the signed-in G2X page shows. Data is specific to the operation.

- Success
  - `ok` unknown, required
  - `schema_version` '2026-09-01', required
  - `surface` string, required
  - `data` unknown, required
  - `revision` integer
  - `next_step` object
    - `tool` 'g2x_get_lumen_task' | 'g2x_get_access_options', required
    - `input` object, required
  - `citations` object[], required
    - `label` string, required
    - `record_url` string, uri, required
  - `entitlement` object, required
    - `tier` string, required
    - `withheld_count` integer, required
    - `withheld_fields` string[], required
    - `reason` unknown, required
    - `next_step` object, nullable, required
  - `provenance` object, required
    - `source` string, required
    - `read_at` string, date-time, required
    - `record_count` integer, required
    - `truncated` boolean, required

## Other responses

- `400`: Invalid input or schema version
- `403`: Sign-in, plan or product permission required, or the account's daily record allowance is used
- `404`: Tool, surface or record unavailable, including disabled access or missing product permissions
- `409`: Ambiguous input or revision conflict
- `413`: Request or result exceeds the bounded transport limit
- `429`: Usage limit reached
- `499`: Request aborted
- `500`: Internal error
- `503`: Upstream source unavailable or timed out

---

[API](https://skmtc.dev/g2x/apis/g2x-webmcp-read-transport.md) · [All operations](https://skmtc.dev/g2x/apis/g2x-webmcp-read-transport/llms.txt) · [OpenAPI document](https://skmtc.dev/g2x/apis/g2x-webmcp-read-transport/revisions/0bce02900b04?raw)
