---
title: "Measure card centering"
method: POST
path: "/v1/centering/measure"
tags: ["centering"]
---

# Measure card centering

`POST /v1/centering/measure`

## Request

- Base URL: `https://api.pokemontcgapi.com`
- URL: `https://api.pokemontcgapi.com/v1/centering/measure`
- Auth: API key in header `X-Api-Key`

Photo to ratios, uncertainty and editable geometry. Expected needs-review results need a person to inspect the lines.

## Query parameters

- `face` string
- `card_size` string
- `corners` string

## Request body

- union
  - object
    - `image` string, required: Photo of one face: multipart image, JSON base64 image (image_base64 alias), or raw image/* / application/octet-stream. Entire body at most 10 MiB including encoding overhead, image at most 40 MP, single frame. Prefer JPG or PNG.
    - `face` 'front' | 'back', required
    - `card_size` 'standard' | 'small'
    - `corners` object[]
      - `x` number, required
      - `y` number, required
    - `image_base64` string: Alternative to image; send exactly one.
  - object
    - `image` string: Photo of one face: multipart image, JSON base64 image (image_base64 alias), or raw image/* / application/octet-stream. Entire body at most 10 MiB including encoding overhead, image at most 40 MP, single frame. Prefer JPG or PNG.
    - `face` 'front' | 'back', required
    - `card_size` 'standard' | 'small'
    - `corners` object[]
      - `x` number, required
      - `y` number, required
    - `image_base64` string, required: Alternative to image; send exactly one.

## Response `200`

Success

- object
  - `data` object, required
    - `status` 'ok' | 'needs-review' | 'failed', required
    - `code` string, required
    - `face` 'front' | 'back', required
    - `card_size` 'standard' | 'small', required
    - `lr` object, nullable, required
      - `ratio` string, required
      - `major_percent` number, required
      - `minor_percent` number, required
      - `uncertainty_pp` number, required
      - `sigma_pp` number, required
      - `worst_station_px` number, required
      - `stations_major_percent` number[], required
    - `tb` object, nullable, required
      - `ratio` string, required
      - `major_percent` number, required
      - `minor_percent` number, required
      - `uncertainty_pp` number, required
      - `sigma_pp` number, required
      - `worst_station_px` number, required
      - `stations_major_percent` number[], required
    - `confidence` number, nullable, required
    - `warnings` string[], required
    - `ceilings` object, nullable, required
      - `PSA` object, required
        - `maximum_grade` number, nullable, required
        - `label` string, nullable, required
        - `rank` number, nullable, required
        - `limiting_face` 'front' | 'back', required
        - `limiting_axis` 'lr' | 'tb', required
        - `distance_to_next` number, nullable, required
        - `next_grade` number, nullable, required
        - `next_label` string, nullable, required
        - `borderline` boolean, required
        - `unconstrained` boolean, required
        - `source_status` 'official' | 'interpreted' | 'approximate', required
        - `standard_status` 'official' | 'interpreted' | 'approximate', required
        - `source` string, required
        - `sources` string[], required
        - `reviewed_at` string, required
        - `verification` string, required
      - `BGS` object, required
        - `maximum_grade` number, nullable, required
        - `label` string, nullable, required
        - `rank` number, nullable, required
        - `limiting_face` 'front' | 'back', required
        - `limiting_axis` 'lr' | 'tb', required
        - `distance_to_next` number, nullable, required
        - `next_grade` number, nullable, required
        - `next_label` string, nullable, required
        - `borderline` boolean, required
        - `unconstrained` boolean, required
        - `source_status` 'official' | 'interpreted' | 'approximate', required
        - `standard_status` 'official' | 'interpreted' | 'approximate', required
        - `source` string, required
        - `sources` string[], required
        - `reviewed_at` string, required
        - `verification` string, required
      - `CGC` object, required
        - `maximum_grade` number, nullable, required
        - `label` string, nullable, required
        - `rank` number, nullable, required
        - `limiting_face` 'front' | 'back', required
        - `limiting_axis` 'lr' | 'tb', required
        - `distance_to_next` number, nullable, required
        - `next_grade` number, nullable, required
        - `next_label` string, nullable, required
        - `borderline` boolean, required
        - `unconstrained` boolean, required
        - `source_status` 'official' | 'interpreted' | 'approximate', required
        - `standard_status` 'official' | 'interpreted' | 'approximate', required
        - `source` string, required
        - `sources` string[], required
        - `reviewed_at` string, required
        - `verification` string, required
      - `SGC` object, required
        - `maximum_grade` number, nullable, required
        - `label` string, nullable, required
        - `rank` number, nullable, required
        - `limiting_face` 'front' | 'back', required
        - `limiting_axis` 'lr' | 'tb', required
        - `distance_to_next` number, nullable, required
        - `next_grade` number, nullable, required
        - `next_label` string, nullable, required
        - `borderline` boolean, required
        - `unconstrained` boolean, required
        - `source_status` 'official' | 'interpreted' | 'approximate', required
        - `standard_status` 'official' | 'interpreted' | 'approximate', required
        - `source` string, required
        - `sources` string[], required
        - `reviewed_at` string, required
        - `verification` string, required
    - `advice` string, required
    - `elapsed_ms` number, required
    - `image_bytes` number, required
    - `normalizations` object[], required
      - `field` string, required
      - `input` union
        - number
        - string
      - `ratio` string
      - `note` string, required
    - `summary` string, required
    - `disclaimer` string, required
    - `geometry` object: Image corners use EXIF-oriented pixels reduced to at most 2560 px. Lines use rectified pixels including padding: vertical x=intercept+slope*y, horizontal y=intercept+slope*x. Preserve rotations, corner_offset, warnings and positioning_sigma when editing.
      - `geometry_version` 1, required
      - `image` object, required
        - `width` integer, required
        - `height` integer, required
      - `corners` object[], required
        - `x` number, required
        - `y` number, required
      - `rectified` object, required
        - `width` integer, required
        - `height` integer, required
        - `rotations` integer
        - `corner_offset` integer
      - `lines` object, required
        - `cut` object, required
          - `left` object, required
            - `intercept` number, required
            - `slope` number, required
          - `right` object, required
            - `intercept` number, required
            - `slope` number, required
          - `top` object, required
            - `intercept` number, required
            - `slope` number, required
          - `bottom` object, required
            - `intercept` number, required
            - `slope` number, required
        - `print` object, required
          - `left` object, required
            - `intercept` number, required
            - `slope` number, required
          - `right` object, required
            - `intercept` number, required
            - `slope` number, required
          - `top` object, required
            - `intercept` number, required
            - `slope` number, required
          - `bottom` object, required
            - `intercept` number, required
            - `slope` number, required
      - `card_size` 'standard' | 'small', required
      - `warnings` string[]
      - `positioning_sigma` number
  - `meta` object, required
    - `elapsed_ms` number, required
    - `engine_version` string, required

## Other responses

- `400`: INVALID_PARAMETER
- `401`: MISSING_API_KEY
- `403`: PLAN_REQUIRED, TRIAL_EXPIRED
- `413`: PAYLOAD_TOO_LARGE
- `415`: UNSUPPORTED_MEDIA_TYPE
- `429`: QUOTA_EXCEEDED
- `503`: FEATURE_NOT_CONFIGURED

---

[API](https://skmtc.dev/pokemontcgapi/apis/pokemon-tcg-api.md) · [All operations](https://skmtc.dev/pokemontcgapi/apis/pokemon-tcg-api/llms.txt) · [OpenAPI document](https://skmtc.dev/pokemontcgapi/apis/pokemon-tcg-api/revisions/9e4ee9a375da?raw)
