Centering Lab Standards API
The Standards API from Centering Lab — 1 operation(s) for standards.
The Standards API from Centering Lab — 1 operation(s) for standards.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.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.curl "https://apis.io/api/v1/apis/centeringlab-com:centeringlab-com-standards-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a 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.
openapi: 3.2.0
info:
title: Centering Lab Standards API
version: 1.3.0
description: 'Card centering measurement and published grading thresholds. Free public access with no API key; optional bearer authentication selects partner quotas and reserved lanes. Public REST endpoints allow cross-origin browser fetch without credentials (Access-Control-Allow-Origin: *); IP quotas still apply. Images are processed only in memory. This is a ceiling from centering alone, not a prediction of the final grade.'
servers:
- url: https://centeringlab.com
security:
- {}
- partnerBearer: []
tags:
- name: Standards
paths:
/api/v1/standards:
get:
operationId: get_centering_standards
summary: Get centering standards and sources
description: 'USE ONLY for questions about published THRESHOLDS, tolerance, rules or SOURCES without grading the user''s supplied numeric ratios. For PSA 10 compatibility with supplied ratios use grade_centering instead; it applies rounding and house-specific rules. If face/axis is unknown, ask first without any call. Example: {"house":"BGS","face":"back"}; fields optional, {} returns all. Houses PSA/BGS/CGC/SGC (case accepted), TAG excluded: explain proprietary assessment; never substitute another house. Face front/back in English; case/spaces accepted, reverse/obverse and translations rejected. SGC back has empty bands, no published table or ceiling; never invent one. Returns official/interpreted/approximate status, sources and verification. Not a final-grade prediction.'
parameters:
- name: house
in: query
required: false
schema:
type: string
enum:
- PSA
- BGS
- CGC
- SGC
description: 'Grading house: PSA, BGS, CGC or SGC; TAG is excluded. Case/outer whitespace accepted by the service. Example: PSA (psa also accepted).'
examples:
- PSA
- BGS
- name: face
in: query
required: false
schema:
type: string
enum:
- front
- back
description: 'Face: front or back, in English. Ask the user if unknown. Case and outer whitespace accepted; never use reverse/obverse or translated names. Example: front.'
examples:
- front
- back
responses:
'200':
description: Centering result. Always distinguish a centering ceiling from a grade prediction.
headers:
RateLimit-Limit:
schema:
type: integer
description: 'Partner only: limiting quota window limit.'
RateLimit-Remaining:
schema:
type: integer
description: 'Partner only: remaining calls in that window.'
RateLimit-Reset:
schema:
type: integer
description: 'Partner only: delta seconds until that window resets.'
X-Request-Id:
schema:
type: string
maxLength: 128
description: 'Partner only: supplied visible ASCII request ID, echoed without storage.'
content:
application/json:
schema:
type: object
properties:
normalizations:
default: []
type: array
items:
type: object
properties:
field:
type: string
input:
type:
- number
- string
ratio:
type: string
note:
type: string
required:
- field
- note
additionalProperties: false
standards:
type: array
items:
type: object
properties:
house:
type: string
enum:
- PSA
- BGS
- CGC
- SGC
description: 'Grading house: PSA, BGS, CGC or SGC; TAG is excluded. Case/outer whitespace accepted by the service. Example: PSA (psa also accepted).'
examples:
- PSA
- BGS
face:
type: string
enum:
- front
- back
description: 'Face: front or back, in English. Ask the user if unknown. Case and outer whitespace accepted; never use reverse/obverse or translated names. Example: front.'
examples:
- front
- back
bands:
type: array
items:
type: object
properties:
value:
type: number
label:
type: string
rank:
type: number
loose:
type: number
tight:
type: number
status:
type: string
enum:
- official
- interpreted
- approximate
required:
- value
- label
- rank
- loose
- status
additionalProperties: false
source:
type: string
sources:
type: array
items:
type: string
status:
type: string
enum:
- official
- interpreted
- approximate
verified:
type: string
verification:
type: string
note:
type: string
required:
- house
- face
- bands
- source
- sources
- status
- verified
- verification
- note
additionalProperties: false
rounding_rule:
type: string
tag_note:
type: string
summary:
type: string
disclaimer:
type: string
required:
- normalizations
- standards
- rounding_rule
- tag_note
- summary
- disclaimer
additionalProperties: false
'400':
description: Invalid input, unsafe image URL or unsupported image.
headers:
RateLimit-Limit:
schema:
type: integer
description: 'Partner only: limiting quota window limit.'
RateLimit-Remaining:
schema:
type: integer
description: 'Partner only: remaining calls in that window.'
RateLimit-Reset:
schema:
type: integer
description: 'Partner only: delta seconds until that window resets.'
X-Request-Id:
schema:
type: string
maxLength: 128
description: 'Partner only: supplied visible ASCII request ID, echoed without storage.'
content:
application/json:
schema:
type: object
required:
- status
- code
- message
- disclaimer
properties:
status:
const: failed
type: string
code:
type: string
description: Includes INVALID_GEOMETRY, INVALID_ARGUMENTS, INVALID_API_KEY, INVALID_REQUEST_ID and existing errors.
message:
type: string
reason:
type: string
unknown_key:
type: string
field:
type: string
hint:
type: string
example:
type: object
disclaimer:
type: string
'401':
description: 'INVALID_API_KEY: unknown, inactive or malformed partner key.'
headers:
RateLimit-Limit:
schema:
type: integer
description: 'Partner only: limiting quota window limit.'
RateLimit-Remaining:
schema:
type: integer
description: 'Partner only: remaining calls in that window.'
RateLimit-Reset:
schema:
type: integer
description: 'Partner only: delta seconds until that window resets.'
X-Request-Id:
schema:
type: string
maxLength: 128
description: 'Partner only: supplied visible ASCII request ID, echoed without storage.'
content:
application/json:
schema:
type: object
required:
- status
- code
- message
- disclaimer
properties:
status:
const: failed
type: string
code:
type: string
description: Includes INVALID_GEOMETRY, INVALID_ARGUMENTS, INVALID_API_KEY, INVALID_REQUEST_ID and existing errors.
message:
type: string
reason:
type: string
unknown_key:
type: string
field:
type: string
hint:
type: string
example:
type: object
disclaimer:
type: string
'403':
description: Unrecognized Host header.
headers:
RateLimit-Limit:
schema:
type: integer
description: 'Partner only: limiting quota window limit.'
RateLimit-Remaining:
schema:
type: integer
description: 'Partner only: remaining calls in that window.'
RateLimit-Reset:
schema:
type: integer
description: 'Partner only: delta seconds until that window resets.'
X-Request-Id:
schema:
type: string
maxLength: 128
description: 'Partner only: supplied visible ASCII request ID, echoed without storage.'
content:
application/json:
schema:
type: object
required:
- status
- code
- message
- disclaimer
properties:
status:
const: failed
type: string
code:
type: string
description: Includes INVALID_GEOMETRY, INVALID_ARGUMENTS, INVALID_API_KEY, INVALID_REQUEST_ID and existing errors.
message:
type: string
reason:
type: string
unknown_key:
type: string
field:
type: string
hint:
type: string
example:
type: object
disclaimer:
type: string
'405':
description: Use the documented HTTP method.
headers:
RateLimit-Limit:
schema:
type: integer
description: 'Partner only: limiting quota window limit.'
RateLimit-Remaining:
schema:
type: integer
description: 'Partner only: remaining calls in that window.'
RateLimit-Reset:
schema:
type: integer
description: 'Partner only: delta seconds until that window resets.'
X-Request-Id:
schema:
type: string
maxLength: 128
description: 'Partner only: supplied visible ASCII request ID, echoed without storage.'
content:
application/json:
schema:
type: object
required:
- status
- code
- message
- disclaimer
properties:
status:
const: failed
type: string
code:
type: string
description: Includes INVALID_GEOMETRY, INVALID_ARGUMENTS, INVALID_API_KEY, INVALID_REQUEST_ID and existing errors.
message:
type: string
reason:
type: string
unknown_key:
type: string
field:
type: string
hint:
type: string
example:
type: object
disclaimer:
type: string
'413':
description: Request/image byte limit or decoded pixel limit exceeded.
headers:
RateLimit-Limit:
schema:
type: integer
description: 'Partner only: limiting quota window limit.'
RateLimit-Remaining:
schema:
type: integer
description: 'Partner only: remaining calls in that window.'
RateLimit-Reset:
schema:
type: integer
description: 'Partner only: delta seconds until that window resets.'
X-Request-Id:
schema:
type: string
maxLength: 128
description: 'Partner only: supplied visible ASCII request ID, echoed without storage.'
content:
application/json:
schema:
type: object
required:
- status
- code
- message
- disclaimer
properties:
status:
const: failed
type: string
code:
type: string
description: Includes INVALID_GEOMETRY, INVALID_ARGUMENTS, INVALID_API_KEY, INVALID_REQUEST_ID and existing errors.
message:
type: string
reason:
type: string
unknown_key:
type: string
field:
type: string
hint:
type: string
example:
type: object
disclaimer:
type: string
'415':
description: Send uncompressed application/json.
headers:
RateLimit-Limit:
schema:
type: integer
description: 'Partner only: limiting quota window limit.'
RateLimit-Remaining:
schema:
type: integer
description: 'Partner only: remaining calls in that window.'
RateLimit-Reset:
schema:
type: integer
description: 'Partner only: delta seconds until that window resets.'
X-Request-Id:
schema:
type: string
maxLength: 128
description: 'Partner only: supplied visible ASCII request ID, echoed without storage.'
content:
application/json:
schema:
type: object
required:
- status
- code
- message
- disclaimer
properties:
status:
const: failed
type: string
code:
type: string
description: Includes INVALID_GEOMETRY, INVALID_ARGUMENTS, INVALID_API_KEY, INVALID_REQUEST_ID and existing errors.
message:
type: string
reason:
type: string
unknown_key:
type: string
field:
type: string
hint:
type: string
example:
type: object
disclaimer:
type: string
'429':
description: Rate limit reached. Respect Retry-After.
headers:
RateLimit-Limit:
schema:
type: integer
description: 'Partner only: limiting quota window limit.'
RateLimit-Remaining:
schema:
type: integer
description: 'Partner only: remaining calls in that window.'
RateLimit-Reset:
schema:
type: integer
description: 'Partner only: delta seconds until that window resets.'
X-Request-Id:
schema:
type: string
maxLength: 128
description: 'Partner only: supplied visible ASCII request ID, echoed without storage.'
Retry-After:
schema:
type: integer
description: Seconds until retry.
content:
application/json:
schema:
type: object
required:
- status
- code
- message
- disclaimer
properties:
status:
const: failed
type: string
code:
type: string
description: Includes INVALID_GEOMETRY, INVALID_ARGUMENTS, INVALID_API_KEY, INVALID_REQUEST_ID and existing errors.
message:
type: string
reason:
type: string
unknown_key:
type: string
field:
type: string
hint:
type: string
example:
type: object
disclaimer:
type: string
'500':
description: Internal error; retry or direct the user to the website.
headers:
RateLimit-Limit:
schema:
type: integer
description: 'Partner only: limiting quota window limit.'
RateLimit-Remaining:
schema:
type: integer
description: 'Partner only: remaining calls in that window.'
RateLimit-Reset:
schema:
type: integer
description: 'Partner only: delta seconds until that window resets.'
X-Request-Id:
schema:
type: string
maxLength: 128
description: 'Partner only: supplied visible ASCII request ID, echoed without storage.'
content:
application/json:
schema:
type: object
required:
- status
- code
- message
- disclaimer
properties:
status:
const: failed
type: string
code:
type: string
description: Includes INVALID_GEOMETRY, INVALID_ARGUMENTS, INVALID_API_KEY, INVALID_REQUEST_ID and existing errors.
message:
type: string
reason:
type: string
unknown_key:
type: string
field:
type: string
hint:
type: string
example:
type: object
disclaimer:
type: string
'503':
description: Measurement queue or request capacity full. Respect Retry-After.
headers:
RateLimit-Limit:
schema:
type: integer
description: 'Partner only: limiting quota window limit.'
RateLimit-Remaining:
schema:
type: integer
description: 'Partner only: remaining calls in that window.'
RateLimit-Reset:
schema:
type: integer
description: 'Partner only: delta seconds until that window resets.'
X-Request-Id:
schema:
type: string
maxLength: 128
description: 'Partner only: supplied visible ASCII request ID, echoed without storage.'
Retry-After:
schema:
type: integer
description: Seconds until retry.
content:
application/json:
schema:
type: object
required:
- status
- code
- message
- disclaimer
properties:
status:
const: failed
type: string
code:
type: string
description: Includes INVALID_GEOMETRY, INVALID_ARGUMENTS, INVALID_API_KEY, INVALID_REQUEST_ID and existing errors.
message:
type: string
reason:
type: string
unknown_key:
type: string
field:
type: string
hint:
type: string
example:
type: object
disclaimer:
type: string
'504':
description: Image download or measurement timed out.
headers:
RateLimit-Limit:
schema:
type: integer
description: 'Partner only: limiting quota window limit.'
RateLimit-Remaining:
schema:
type: integer
description: 'Partner only: remaining calls in that window.'
RateLimit-Reset:
schema:
type: integer
description: 'Partner only: delta seconds until that window resets.'
X-Request-Id:
schema:
type: string
maxLength: 128
description: 'Partner only: supplied visible ASCII request ID, echoed without storage.'
content:
application/json:
schema:
type: object
required:
- status
- code
- message
- disclaimer
properties:
status:
const: failed
type: string
code:
type: string
description: Includes INVALID_GEOMETRY, INVALID_ARGUMENTS, INVALID_API_KEY, INVALID_REQUEST_ID and existing errors.
message:
type: string
reason:
type: string
unknown_key:
type: string
field:
type: string
hint:
type: string
example:
type: object
disclaimer:
type: string
tags:
- Standards
components:
securitySchemes:
partnerBearer:
type: http
scheme: bearer
bearerFormat: Centering Lab partner key
description: Optional. Without a partner key, existing public IP quotas apply. Partner keys (prefix clp_) that are unknown, revoked or malformed return 401 INVALID_API_KEY; other Authorization values are ignored.