{"openapi":"3.1.0","info":{"title":"Gene Dai Card Atlas Public API","version":"1.0.0","description":"Read-only public card research. No API key or cookies are required. Independently edited public information; not an issuer, application service, investment recommendation or live fee quote. lastVerifiedAt is an editorial verification date, not an automatic assurance of current eligibility or pricing. Unknown or conditional information is preserved in text and status codes. Never interpret missing or unverified fees as zero. Fee summaries preserve original currencies and conditions. They are not normalized prices and must not be summed without checking units. Cite the canonical product or guide URL, lastVerifiedAt and relevant official source URLs. Retain residency and version caveats. Public exports contain editorial data only; accounts, submitted corrections and private records are not part of this API. GET, HEAD and OPTIONS are supported; no account or transaction operations are exposed.","termsOfService":"https://card.genedai.me/methodology/","contact":{"name":"Gene Dai","url":"https://card.genedai.me/about/"}},"servers":[{"url":"https://card.genedai.me/api/v1"}],"security":[],"paths":{"/cards":{"get":{"operationId":"listCards","summary":"List and filter card/account versions","parameters":[{"name":"type","in":"query","description":"Product category.","required":false,"schema":{"type":"string","enum":["bank","crypto"]}},{"name":"status","in":"query","description":"Editorial qualification status; verify means unknown, not supported.","required":false,"schema":{"type":"string","enum":["visitor","limited","paused","unavailable","verify"]}},{"name":"q","in":"query","description":"Case-insensitive keyword search in name, subtitle, summary and region.","required":false,"schema":{"type":"string","maxLength":200}},{"name":"limit","in":"query","description":"Results per page (1–50).","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":20}},{"name":"offset","in":"query","description":"Zero-based offset (0–10000).","required":false,"schema":{"type":"integer","minimum":0,"maximum":10000,"default":0}}],"responses":{"200":{"description":"Public editorial data, with verification date and citation URLs.","headers":{"ETag":{"schema":{"type":"string"},"description":"Use If-None-Match to revalidate."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardCollection"}}}},"304":{"description":"Content unchanged; no response body."},"400":{"description":"An invalid parameter, unknown ID or unsupported route.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"An invalid parameter, unknown ID or unsupported route.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"405":{"description":"Read-only interface. Allow: GET, HEAD, OPTIONS.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Catalog temporarily unavailable. Retry after the Retry-After interval.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/cards/{id}":{"get":{"operationId":"getCard","summary":"Read one version with fees, application steps and official sources","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9-]+$"},"example":"hsbc-one"}],"responses":{"200":{"description":"Public editorial data, with verification date and citation URLs.","headers":{"ETag":{"schema":{"type":"string"},"description":"Use If-None-Match to revalidate."}},"content":{"application/json":{"schema":{"type":"object","required":["schemaVersion","item"],"properties":{"schemaVersion":{"type":"string"},"item":{"$ref":"#/components/schemas/Card"}}}}}},"304":{"description":"Content unchanged; no response body."},"400":{"description":"An invalid parameter, unknown ID or unsupported route.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"An invalid parameter, unknown ID or unsupported route.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"405":{"description":"Read-only interface. Allow: GET, HEAD, OPTIONS.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Catalog temporarily unavailable. Retry after the Retry-After interval.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/compare":{"get":{"operationId":"compareCards","summary":"Compare 2–5 explicit card versions without choosing a winner","parameters":[{"name":"ids","in":"query","description":"Distinct comma-separated IDs. No currency conversion or suitability inference is performed.","required":true,"schema":{"type":"string","example":"mp-cloud,mp-boundless"}}],"responses":{"200":{"description":"Public editorial data, with verification date and citation URLs.","headers":{"ETag":{"schema":{"type":"string"},"description":"Use If-None-Match to revalidate."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardCollection"}}}},"304":{"description":"Content unchanged; no response body."},"400":{"description":"An invalid parameter, unknown ID or unsupported route.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"An invalid parameter, unknown ID or unsupported route.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"405":{"description":"Read-only interface. Allow: GET, HEAD, OPTIONS.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Catalog temporarily unavailable. Retry after the Retry-After interval.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/search":{"get":{"operationId":"searchCatalog","summary":"Search public cards and guides","parameters":[{"name":"q","in":"query","description":"Non-empty keyword in title, summary or category.","required":true,"schema":{"type":"string","minLength":1,"maxLength":200}},{"name":"limit","in":"query","description":"Results per page (1–50).","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":20}},{"name":"offset","in":"query","description":"Zero-based offset (0–10000).","required":false,"schema":{"type":"integer","minimum":0,"maximum":10000,"default":0}}],"responses":{"200":{"description":"Public editorial data, with verification date and citation URLs.","headers":{"ETag":{"schema":{"type":"string"},"description":"Use If-None-Match to revalidate."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResults"}}}},"304":{"description":"Content unchanged; no response body."},"400":{"description":"An invalid parameter, unknown ID or unsupported route.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"An invalid parameter, unknown ID or unsupported route.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"405":{"description":"Read-only interface. Allow: GET, HEAD, OPTIONS.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Catalog temporarily unavailable. Retry after the Retry-After interval.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}},"components":{"schemas":{"SearchResults":{"type":"object","required":["total","items"],"properties":{"total":{"type":"integer"},"next":{"type":["string","null"]},"items":{"type":"array","items":{"type":"object","required":["id","kind","title","canonicalUrl","markdownUrl","lastVerifiedAt"],"properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["card","guide"]},"title":{"type":"string"},"summary":{"type":"string"},"canonicalUrl":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"},"lastVerifiedAt":{"type":"string","format":"date"}}}}}},"Problem":{"type":"object","required":["type","title","status","detail"],"properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"}}},"Source":{"type":"object","required":["title","url"],"properties":{"title":{"type":"string"},"url":{"type":"string","format":"uri"}}},"Card":{"type":"object","required":["id","name","category","canonicalUrl","markdownUrl","lastVerifiedAt","eligibility","fees","sources","steps"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"subtitle":{"type":"string"},"category":{"type":"string","enum":["bank","crypto"]},"canonicalUrl":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"},"apiUrl":{"type":"string","format":"uri"},"image":{"type":"string","format":"uri"},"artwork":{"type":["object","null"],"description":"Official bank card artwork, separate from account eligibility. A current illustration is not a guarantee of card issuance. Viewport coordinates frame a card within the unchanged source image. Suspended cards are historical references.","required":["name","image","width","height","orientation","status","statusLabel","source","imageSource","verifiedAt","note"],"properties":{"name":{"type":"string"},"image":{"type":"string","format":"uri"},"width":{"type":"integer"},"height":{"type":"integer"},"orientation":{"type":"string","enum":["portrait","landscape"]},"network":{"type":"string"},"label":{"type":"string"},"status":{"type":"string","enum":["current","suspended"]},"statusLabel":{"type":"string"},"note":{"type":"string"},"verifiedAt":{"type":"string","format":"date"},"suspendedAt":{"type":"string","format":"date"},"source":{"type":"object","required":["title","url"],"properties":{"title":{"type":"string"},"url":{"type":"string","format":"uri"}}},"imageSource":{"type":"string","format":"uri"},"viewport":{"type":"object","required":["x","y","width","height"],"properties":{"x":{"type":"integer"},"y":{"type":"integer"},"width":{"type":"integer"},"height":{"type":"integer"}}}}},"summary":{"type":"string"},"lastVerifiedAt":{"type":"string","format":"date"},"language":{"const":"zh-CN"},"region":{"type":"string"},"form":{"type":"string"},"currency":{"type":"string"},"eligibility":{"type":"object","required":["status","label","details"],"properties":{"status":{"type":"string","enum":["visitor","limited","paused","unavailable","verify"]},"label":{"type":"string"},"details":{"type":"string"}}},"fees":{"type":"object","description":"Source-linked text; original currencies, units and qualifications are retained. Not normalized numeric quotes.","required":["opening","recurring","conversion","atm"],"properties":{"opening":{"type":"string"},"recurring":{"type":"string"},"conversion":{"type":"string"},"atm":{"type":"string"}}},"requirements":{"type":"array","items":{"type":"object","required":["label","detail"],"properties":{"label":{"type":"string"},"detail":{"type":"string"}}}},"steps":{"type":"array","items":{"type":"string"}},"notes":{"type":"array","items":{"type":"string"}},"paymentSupport":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"status":{"type":"string","enum":["yes","conditional","unknown","unavailable"]},"detail":{"type":"string"}}}},"sources":{"type":"array","minItems":1,"items":{"$ref":"#/components/schemas/Source"}},"guides":{"type":"array","items":{"type":"string","format":"uri"}},"comparisonUrl":{"type":["string","null"]},"citation":{"type":"object","properties":{"title":{"type":"string"},"author":{"type":"string"},"url":{"type":"string","format":"uri"},"lastVerifiedAt":{"type":"string","format":"date"}}}}},"CardCollection":{"type":"object","required":["schemaVersion","total","items"],"properties":{"schemaVersion":{"type":"string"},"lastVerifiedAt":{"type":"string","format":"date"},"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"next":{"type":["string","null"]},"policy":{"type":"object"},"items":{"type":"array","items":{"$ref":"#/components/schemas/Card"}}}}}}}