{"openapi":"3.0.3","info":{"title":"FCCID.io Giteki API","version":"1.0.0","description":"Free, keyless search and certificate-number catalog verification. CORS enabled. Combined limit: 30 requests per rolling minute and 500 per UTC day per IP. Displayed data requires a visible link to https://fccid.io/giteki/ and credit to Japan MIC. Private server-to-server use does not require a public display link. No bulk harvesting, limit bypass or resale of API access. English is machine translated; original fields are included on verification. Read the terms before use.","termsOfService":"https://fccid.io/giteki/api/terms","contact":{"url":"https://fccid.io/contact"}},"servers":[{"url":"https://fccid.io/giteki/api"}],"externalDocs":{"description":"API documentation and examples","url":"https://fccid.io/giteki/api/"},"paths":{"/search.json":{"get":{"operationId":"searchCertificates","summary":"Search Japanese radio certifications","description":"One result per certificate. English and original Japanese text and verified product aliases are indexed. Follow pagination.next with its snapshot parameter. Search excludes certificate dates after today plus two calendar days in America/Los_Angeles. snapshot.visible_through gives the cutoff; snapshot IDs change when it advances.","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":200},"description":"Search English or Japanese certificate numbers, applicants, regulatory models or verified retail names. At least one term must contain two letters or numbers."},{"name":"year","in":"query","required":false,"schema":{"type":"string","pattern":"^(?:[0-9]{4}|undated)$"},"description":"Optional certification year present in the published catalog."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":1000,"default":1},"description":"Page number."},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":20},"description":"Certificates per page."},{"name":"snapshot","in":"query","required":false,"schema":{"type":"string","maxLength":200},"description":"Optional snapshot.id from a response. Catalog or listing-date changes return HTTP 409; restart without snapshot."}],"responses":{"200":{"description":"Lookup completed. An empty search or number not found also returns HTTP 200.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Search"}}}},"400":{"description":"Invalid, missing, duplicate or unknown parameters.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown endpoint.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method; use GET, HEAD or OPTIONS.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Snapshot changed or number normalization is ambiguous.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Combined per-IP quota exhausted; respect Retry-After.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Published catalog or quota storage unavailable; retry after 60 seconds.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"head":{"summary":"Read status and quota headers; consumes one request.","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":200},"description":"Search English or Japanese certificate numbers, applicants, regulatory models or verified retail names. At least one term must contain two letters or numbers."},{"name":"year","in":"query","required":false,"schema":{"type":"string","pattern":"^(?:[0-9]{4}|undated)$"},"description":"Optional certification year present in the published catalog."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":1000,"default":1},"description":"Page number."},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":20},"description":"Certificates per page."},{"name":"snapshot","in":"query","required":false,"schema":{"type":"string","maxLength":200},"description":"Optional snapshot.id from a response. Catalog or listing-date changes return HTTP 409; restart without snapshot."}],"responses":{"200":{"description":"Same status and headers as GET; no body.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}}},"400":{"description":"Invalid, missing, duplicate or unknown parameters.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}}},"404":{"description":"Unknown endpoint.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}}},"405":{"description":"Unsupported method; use GET, HEAD or OPTIONS.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}}},"409":{"description":"Snapshot changed or number normalization is ambiguous.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}}},"429":{"description":"Combined per-IP quota exhausted; respect Retry-After.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}}},"503":{"description":"Published catalog or quota storage unavailable; retry after 60 seconds.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}}}}},"options":{"summary":"Unmetered CORS preflight.","responses":{"204":{"description":"Allows GET, HEAD, OPTIONS and the Accept and Content-Type headers."}}}},"/verify.json":{"get":{"operationId":"verifyCertificateNumber","summary":"Check whether a certificate number matches the published catalog","description":"Catalog matches do not assess present legal status, device authenticity or certification applicability. No match does not establish that a device is uncertified.","parameters":[{"name":"num","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":200},"description":"Certificate number, not a URL. Exact match wins; unique full-width, case or punctuation normalization is allowed. Printed R prefix accepted for standard labels."},{"name":"snapshot","in":"query","required":false,"schema":{"type":"string","maxLength":200},"description":"Optional snapshot.id from a response. Catalog or listing-date changes return HTTP 409; restart without snapshot."}],"responses":{"200":{"description":"Lookup completed. An empty search or number not found also returns HTTP 200.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Verification"}}}},"400":{"description":"Invalid, missing, duplicate or unknown parameters.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown endpoint.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Unsupported method; use GET, HEAD or OPTIONS.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Snapshot changed or number normalization is ambiguous.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Combined per-IP quota exhausted; respect Retry-After.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Published catalog or quota storage unavailable; retry after 60 seconds.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"head":{"summary":"Read status and quota headers; consumes one request.","parameters":[{"name":"num","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":200},"description":"Certificate number, not a URL. Exact match wins; unique full-width, case or punctuation normalization is allowed. Printed R prefix accepted for standard labels."},{"name":"snapshot","in":"query","required":false,"schema":{"type":"string","maxLength":200},"description":"Optional snapshot.id from a response. Catalog or listing-date changes return HTTP 409; restart without snapshot."}],"responses":{"200":{"description":"Same status and headers as GET; no body.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}}},"400":{"description":"Invalid, missing, duplicate or unknown parameters.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}}},"404":{"description":"Unknown endpoint.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}}},"405":{"description":"Unsupported method; use GET, HEAD or OPTIONS.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}}},"409":{"description":"Snapshot changed or number normalization is ambiguous.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}}},"429":{"description":"Combined per-IP quota exhausted; respect Retry-After.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}}},"503":{"description":"Published catalog or quota storage unavailable; retry after 60 seconds.","headers":{"X-RateLimit-Limit-Minute":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Minute":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Minute":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"X-RateLimit-Limit-Day":{"schema":{"type":"integer"},"description":"Limit requests for this IP and window."},"X-RateLimit-Remaining-Day":{"schema":{"type":"integer"},"description":"Remaining requests for this IP and window."},"X-RateLimit-Reset-Day":{"schema":{"type":"integer"},"description":"Unix reset timestamp."},"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds to wait before retrying (429 and 503)."}}}}},"options":{"summary":"Unmetered CORS preflight.","responses":{"204":{"description":"Allows GET, HEAD, OPTIONS and the Accept and Content-Type headers."}}}}},"components":{"schemas":{"Snapshot":{"type":"object","properties":{"id":{"type":"string"},"source_date":{"type":"string","format":"date"},"published_at":{"type":"string","format":"date-time"},"visible_through":{"type":"string","format":"date","description":"Inclusive latest certification date shown in search: today plus two calendar days in America/Los_Angeles. Explicit number verification and direct pages retain catalog records."}},"required":["id","source_date","published_at"]},"RateLimit":{"type":"object","properties":{"minute_limit":{"type":"integer"},"minute_remaining":{"type":"integer"},"minute_reset":{"type":"integer"},"day_limit":{"type":"integer"},"day_remaining":{"type":"integer"},"day_reset":{"type":"integer"}}},"Envelope":{"type":"object","properties":{"api_version":{"type":"string","enum":["1"]},"ok":{"type":"boolean"},"attribution":{"type":"string"},"attribution_url":{"type":"string","format":"uri"},"link_required":{"type":"string"},"terms_url":{"type":"string","format":"uri"},"source_url":{"type":"string","format":"uri"},"snapshot":{"$ref":"#/components/schemas/Snapshot"},"rate_limit":{"$ref":"#/components/schemas/RateLimit"}},"required":["api_version","ok","attribution","attribution_url","link_required","terms_url","source_url"]},"Certificate":{"type":"object","properties":{"number":{"type":"string"},"name":{"type":"string","description":"English display name; includes only independently verified retail aliases."},"applicant":{"type":"string"},"model":{"type":"string","description":"Regulatory model from the source, translated where applicable."},"certifying_organization":{"type":"string"},"latest_certification_date":{"type":"string","nullable":true},"radio_record_count":{"type":"integer"},"document_count":{"type":"integer"},"url":{"type":"string","format":"uri"},"documents_url":{"type":"string","format":"uri","description":"Certificate document list linking to individual viewer pages; never a MIC PDF URL."},"manufacturer_identification":{"type":"object","properties":{"brand":{"type":"string"},"retail_model":{"type":"string"},"regulatory_model":{"type":"string"},"source_url":{"type":"string"},"source_title":{"type":"string"},"verified_on":{"type":"string"}}}},"required":["number","name","applicant","model","certifying_organization","latest_certification_date","radio_record_count","document_count","url","documents_url"]},"RadioRecord":{"type":"object","properties":{"english":{"type":"object","additionalProperties":{"type":"string"}},"original":{"type":"object","additionalProperties":{"type":"string"}}},"required":["english","original"]},"Search":{"allOf":[{"$ref":"#/components/schemas/Envelope"},{"type":"object","properties":{"query":{"type":"string"},"year":{"type":"string","nullable":true},"total":{"type":"integer"},"results":{"type":"array","items":{"$ref":"#/components/schemas/Certificate"}},"pagination":{"type":"object","properties":{"page":{"type":"integer"},"per_page":{"type":"integer"},"total_pages":{"type":"integer"},"max_page":{"type":"integer"},"has_more":{"type":"boolean"},"next":{"type":"string","format":"uri","nullable":true}},"required":["page","per_page","total_pages","max_page","has_more","next"]},"translation":{"type":"object","properties":{"primary":{"type":"string","enum":["en"]},"original":{"type":"string"},"machine_translated":{"type":"boolean"}}}},"required":["query","year","total","results","pagination","translation"]}]},"Verification":{"allOf":[{"$ref":"#/components/schemas/Envelope"},{"type":"object","properties":{"input_number":{"type":"string"},"status":{"type":"string","enum":["found","not_found"]},"found":{"type":"boolean"},"match_type":{"type":"string","enum":["exact","normalized",null],"nullable":true},"verification_scope":{"type":"string","enum":["catalog_number_match"]},"certification_status":{"type":"string","enum":["not_assessed"]},"notice":{"type":"string"},"certificate":{"type":"object","nullable":true,"properties":{"number":{"type":"string"},"name":{"type":"string","description":"English display name; includes only independently verified retail aliases."},"applicant":{"type":"string"},"model":{"type":"string","description":"Regulatory model from the source, translated where applicable."},"certifying_organization":{"type":"string"},"latest_certification_date":{"type":"string","nullable":true},"radio_record_count":{"type":"integer"},"document_count":{"type":"integer"},"url":{"type":"string","format":"uri"},"documents_url":{"type":"string","format":"uri","description":"Certificate document list linking to individual viewer pages; never a MIC PDF URL."},"manufacturer_identification":{"type":"object","properties":{"brand":{"type":"string"},"retail_model":{"type":"string"},"regulatory_model":{"type":"string"},"source_url":{"type":"string"},"source_title":{"type":"string"},"verified_on":{"type":"string"}}}},"required":["number","name","applicant","model","certifying_organization","latest_certification_date","radio_record_count","document_count","url","documents_url"],"description":"Null when found is false."},"radio_records_truncated":{"type":"boolean"},"radio_records":{"type":"array","maxItems":50,"items":{"$ref":"#/components/schemas/RadioRecord"}}},"required":["input_number","status","found","match_type","verification_scope","certification_status","notice","certificate"]}]},"Error":{"allOf":[{"$ref":"#/components/schemas/Envelope"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}]}}}}
