The card object
A card has 98 top-level fields, and the objects nested in it (issuers, reward_rates, benefits, statement_credits, card_perks, spend_bonuses, category_rate) add 74 more. Which ones a response includes depends on your plan: fields above it are left out, never sent empty.
GET /v1/cards, /v1/cards/:slug, /v1/cards/compare and /v1/cards/best return this object; /v1/cards/search returns it without the nested lists.
Fields by plan
slug, name, issuer_id, issuers, network, card_type, annual_fee, annual_fee_waived_first_year, ...
id, monthly_fee, supplementary_card_fee, interest_rate_purchase, interest_rate_cash, interest_rate_balance_transfer, foreign_transaction_fee, credit_score_min, ...
historical_best_offer, historical_best_offer_date, spend_bonuses, military_annual_fee_waived, military_apr_cap, military_benefits_notes
image_url, affiliate_url
Each plan includes everything the plans before it return. Free gets each card's 3 highest reward rates; Starter and above get every rate. Compare plans
Sample card at Free
What a Free key gets for GET /v1/cards/american-express-gold-card (abridged). The example values in the tables below come from this one card.
{
"data": {
"slug": "american-express-gold-card",
"name": "American Express® Gold Card",
"issuers": {
"slug": "amex-us",
"name": "American Express",
"country": "US",
"website": "https://www.americanexpress.com",
"logo_url": null
},
"network": "AMEX",
"card_type": "personal",
"annual_fee": 325,
"signup_bonus": "up to 100,000 Membership Rewards points",
"signup_min_spend": 8000,
"signup_min_spend_months": 6,
"reward_currency_name": "Membership Rewards",
"reward_rates": [
{
"category_slug": "dining",
"categories": [
"dining"
],
"rate_multiplier": 4,
"rate_type": "points_per_dollar",
"cap_amount": 50000,
"cap_period": "annual",
"is_base_rate": false
},
{
"category_slug": "groceries",
"categories": [
"groceries"
],
"rate_multiplier": 4,
"rate_type": "points_per_dollar",
"cap_amount": 25000,
"cap_period": "annual",
"is_base_rate": false
}
]
}
}Card
A published card. Which fields are present depends on your plan (see the description of each field group); fields above your plan are left out. GET /v1/cards/search returns no relation arrays.
| Field | Type | Plan | Example | Description |
|---|---|---|---|---|
slug | string | Every plan | "american-express-gold-card" | |
name | string | Every plan | "American Express® Gold Card" | |
issuer_id | string (uuid) | Every plan | — | |
issuers | CardIssuer | Every plan | { ... } | |
network | stringnullable | Every plan | "AMEX" | One of: VISA, MC, AMEX, DISCOVER |
card_type | stringnullable | Every plan | "personal" | One of: personal, business, student, secured |
annual_fee | numbernullable | Every plan | 325 | Annual fee in the card's home currency; null when unknown (not the same as 0). |
annual_fee_waived_first_year | booleannullable | Every plan | — | |
reward_currency | stringnullable | Every plan | — | Broad currency: points, miles or cashback. "none" for a card that earns no rewards (low-rate, secured and store-financing cards); such a card has no reward_rates. |
reward_currency_name | stringnullable | Every plan | "Membership Rewards" | Program name, e.g. Membership Rewards. |
signup_bonus | stringnullable | Every plan | "up to 100,000 Membership Rewards points" | Welcome offer as stated by the issuer. |
signup_bonus_valuedeprecated | numbernullable | Every plan | — | Legacy: older rows hold a point count for some cards. Since 2026-09-30 a new extraction that states the offer's dollar value (or that there is no offer) rewrites it to the cash value, so it becomes null for points-only offers; an extraction that gives only the offer text leaves it as stored. Use signup_bonus_points and signup_bonus_cash_value. |
signup_bonus_points | numbernullable | Every plan | — | Points or miles in the welcome offer; null for cash offers and when the offer pays no bonus (e.g. an intro-APR-only offer). |
signup_bonus_cash_value | numbernullable | Every plan | — | Estimated welcome offer value in the card's home currency (USD for US cards, CAD for Canadian cards). Never a point count. Null when unknown and when the offer pays no cash, points or miles (e.g. an intro-APR-only offer). |
signup_min_spend | numbernullable | Every plan | 8000 | |
signup_min_spend_months | integernullable | Every plan | 6 | |
is_discontinued | booleannullable | Every plan | — | No longer open to new applicants. |
referral_bonus_amount | stringnullable | Every plan | — | |
referral_bonus_url | stringnullable | Every plan | — | |
product_change_eligible | booleannullable | Every plan | — | |
product_change_notes | stringnullable | Every plan | — | |
product_family | stringnullable | Every plan | — | |
churning_notes | stringnullable | Every plan | — | |
application_rules | stringnullable | Every plan | — | Card-level application restrictions. |
reward_rates | RewardRate[] | Every plan | [ 2 items ] | Free plan: the card's 3 highest rates, best first. Starter and above: every rate.Free: the card's 3 highest rates. Starter and above: every rate. |
id | string (uuid) | Starter plan and above | — | |
monthly_fee | numbernullable | Starter plan and above | — | |
supplementary_card_fee | numbernullable | Starter plan and above | — | |
interest_rate_purchase | numbernullable | Starter plan and above | — | |
interest_rate_cash | numbernullable | Starter plan and above | — | |
interest_rate_balance_transfer | numbernullable | Starter plan and above | — | |
foreign_transaction_fee | numbernullable | Starter plan and above | — | |
credit_score_min | integernullable | Starter plan and above | — | |
credit_score_recommended | stringnullable | Starter plan and above | — | Issuer's credit guidance, e.g. "Excellent" or "670-850". |
min_income | numbernullable | Starter plan and above | — | |
min_income_household | numbernullable | Starter plan and above | — | |
residency_requirement | stringnullable | Starter plan and above | — | |
age_min | integernullable | Starter plan and above | — | |
color_from | stringnullable | Starter plan and above | — | |
color_to | stringnullable | Starter plan and above | — | |
color_accent | stringnullable | Starter plan and above | — | |
product_url | stringnullable | Starter plan and above | — | |
apply_url | stringnullable | Starter plan and above | — | |
is_active | boolean | Starter plan and above | — | |
is_published | boolean | Starter plan and above | — | |
source_url | stringnullable | Starter plan and above | — | |
tc_url | stringnullable | Starter plan and above | — | Terms & conditions page or PDF. |
last_scraped | string (date-time)nullable | Starter plan and above | — | |
last_verified | string (date-time)nullable | Starter plan and above | — | |
last_published | string (date-time)nullable | Starter plan and above | — | |
created_at | string (date-time) | Starter plan and above | — | |
updated_at | string (date-time) | Starter plan and above | — | |
intro_apr_purchase | numbernullable | Starter plan and above | — | |
intro_apr_purchase_months | integernullable | Starter plan and above | — | |
intro_apr_balance_transfer | numbernullable | Starter plan and above | — | |
intro_apr_balance_transfer_months | integernullable | Starter plan and above | — | |
balance_transfer_fee_percent | numbernullable | Starter plan and above | — | |
balance_transfer_fee_min | numbernullable | Starter plan and above | — | |
balance_transfer_fee_intro_percent | numbernullable | Starter plan and above | — | |
balance_transfer_fee_intro_months | integernullable | Starter plan and above | — | |
late_payment_fee | numbernullable | Starter plan and above | — | |
returned_payment_fee | numbernullable | Starter plan and above | — | |
cash_advance_fee_percent | numbernullable | Starter plan and above | — | |
cash_advance_fee_min | numbernullable | Starter plan and above | — | |
over_limit_fee | numbernullable | Starter plan and above | — | |
penalty_apr | numbernullable | Starter plan and above | — | |
penalty_apr_trigger | stringnullable | Starter plan and above | — | |
annual_fee_year2 | numbernullable | Starter plan and above | — | |
pre_qualification_available | booleannullable | Starter plan and above | — | |
pre_qualification_url | stringnullable | Starter plan and above | — | |
hard_pull_bureau | stringnullable | Starter plan and above | — | |
network_tier | stringnullable | Starter plan and above | — | |
authorized_user_fee | numbernullable | Starter plan and above | — | |
authorized_user_earns_rewards | booleannullable | Starter plan and above | — | |
authorized_user_max | integernullable | Starter plan and above | — | |
authorized_user_min_age | integernullable | Starter plan and above | — | |
card_material | stringnullable | Starter plan and above | — | |
card_weight_grams | numbernullable | Starter plan and above | — | |
contactless_enabled | booleannullable | Starter plan and above | — | |
chip_and_pin | booleannullable | Starter plan and above | — | |
card_color | stringnullable | Starter plan and above | — | |
vertical_design | booleannullable | Starter plan and above | — | |
has_rotating_categories | booleannullable | Starter plan and above | — | |
rotating_category_activation_required | booleannullable | Starter plan and above | — | |
rotating_category_schedule | objectnullable | Starter plan and above | — | Rotating categories by quarter, e.g. {"Q1": ["groceries"]}. |
annual_reward_cap | numbernullable | Starter plan and above | — | |
annual_reward_cap_notes | stringnullable | Starter plan and above | — | |
benefits | Benefit[] | Starter plan and above | — | |
statement_credits | StatementCredit[] | Starter plan and above | — | |
card_perks | CardPerk[] | Starter plan and above | — | |
historical_best_offer | stringnullable | Pro plan and above | — | |
historical_best_offer_date | string (date)nullable | Pro plan and above | — | |
spend_bonuses | SpendBonus[] | Pro plan and above | — | |
military_annual_fee_waived | booleannullable | Pro plan and above | — | |
military_apr_cap | numbernullable | Pro plan and above | — | |
military_benefits_notes | stringnullable | Pro plan and above | — | |
image_url | stringnullable | Enterprise plan | — | Card art. |
affiliate_url | stringnullable | Enterprise plan | — | |
category_rateonly on /v1/cards/best | CategoryRate | Every plan | — |
CardIssuer (issuers)
The card's issuer. `website` is on GET /v1/cards/{slug} only.
Every planComes with the card's issuers field.
| Field | Type | Example | Description |
|---|---|---|---|
slug | string | "amex-us" | |
name | string | "American Express" | |
country | string | "US" | One of: US, CA |
logo_url | stringnullable | null | |
website | stringnullable | "https://www.americanexpress.com" |
RewardRate (reward_rates)
Every planComes with the card's reward_rates field.
| Field | Type | Example | Description |
|---|---|---|---|
id | string (uuid) | — | |
card_id | string (uuid) | — | |
category_slug | stringnullable | "dining" | Label for the rate, unique on its card within a rotating quarter and built from the fields beside it, so the same rate has the same label on every card: <categories>[:<merchant>][@portal|@direct][#choice][~<tag>]. categories: the rate's `categories` joined by "+" in /v1/categories order ("groceries+gas"); a base rate is "other". :<merchant>: the merchant it is limited to, slugged ("airlines:united-airlines", "other:best-buy"). @portal / @direct: booking_channel issuer_portal / direct ("travel@portal"). #choice: one of a pick-your-category group ("dining#choice"). ~<tag>: only when two rates of one card would otherwise share a label, e.g. "airlines:united-airlines~3x"; a tag can change when the card's other rates change. Match on `categories`, `merchant`, `booking_channel` and `choice_group`, not by parsing the label. |
categories | string[] | [ 1 item ] | Canonical categories this rate applies to; every value is a slug from GET /v1/categories. A rate can cover several (e.g. gas and groceries under one cap). |
merchant | stringnullable | — | Merchant or co-brand partner the rate is limited to (e.g. "Best Buy", "United Airlines"). Null when it applies anywhere in the category. |
booking_channel | stringnullable | — | issuer_portal: only when booked through the issuer's travel portal (Chase Travel, Capital One Travel, ...). direct: booked directly with the airline or hotel.One of: issuer_portal, direct |
choice_group | stringnullable | — | Rates on one card that share a choice_group are alternatives (pick-your-category cards): only choice_picks of them earn at once. |
choice_picks | integernullable | — | How many categories in the choice_group earn the rate at the same time. |
choice_selection | stringnullable | — | user: the cardholder picks; automatic: applied to the top spend categories.One of: user, automatic |
rate_multiplier | number | 4 | |
rate_type | string | "points_per_dollar" | One of: multiplier, percent_cashback, points_per_dollar |
cap_amount | numbernullable | 50000 | |
cap_period | stringnullable | "annual" | One of: monthly, quarterly, annual |
fallback_rate | numbernullable | — | |
is_base_rate | boolean | false | |
is_rotating | boolean | — | True for a quarterly rotating bonus row; see rotating_quarter/rotating_year. |
rotating_quarter | integernullable | — | |
rotating_year | integernullable | — | |
notes | stringnullable | — | |
created_at | string (date-time) | — |
Benefit (benefits)
Starter plan and aboveComes with the card's benefits field.
| Field | Type | Example | Description |
|---|---|---|---|
id | string (uuid) | — | |
card_id | string (uuid) | — | |
benefit_type | string | — | |
name | string | — | |
description | stringnullable | — | |
value | numbernullable | — | |
details | objectnullable | — | Structured coverage detail extracted from the issuer's terms & conditions (when available), e.g. coverage_amount, deductible, covered_reasons, minimum_delay_hours, covers_meals, covers_lodging, max_claims_per_year, is_primary, source. |
created_at | string (date-time) | — |
StatementCredit (statement_credits)
Starter plan and aboveComes with the card's statement_credits field.
| Field | Type | Example | Description |
|---|---|---|---|
id | string (uuid) | — | |
card_id | string (uuid) | — | |
credit_name | string | — | |
credit_amount | number | — | |
credit_period | string | — | How often the credit renews, e.g. annual, monthly, quarterly, semi_annual. |
eligible_merchants | stringnullable | — | |
enrollment_required | booleannullable | — | |
notes | stringnullable | — | |
created_at | string (date-time)nullable | — |
CardPerk (card_perks)
Starter plan and aboveComes with the card's card_perks field.
| Field | Type | Example | Description |
|---|---|---|---|
id | string (uuid) | — | |
card_id | string (uuid) | — | |
perk_type | string | — | |
perk_name | string | — | |
perk_value | numbernullable | — | |
perk_period | stringnullable | — | |
partner | stringnullable | — | |
details | stringnullable | — | |
created_at | string (date-time)nullable | — |
SpendBonus (spend_bonuses)
Pro plan and aboveComes with the card's spend_bonuses field.
| Field | Type | Example | Description |
|---|---|---|---|
id | string (uuid) | — | |
card_id | string (uuid) | — | |
spend_threshold | number | — | |
spend_period | string | — | |
bonus_description | string | — | |
bonus_type | stringnullable | — | |
bonus_value | stringnullable | — | |
created_at | string (date-time)nullable | — |
CategoryRate (category_rate)
The rate a card earns in the requested category (GET /v1/cards/best).
Every planComes with the card's category_rate field.
| Field | Type | Example | Description |
|---|---|---|---|
category_slug | stringnullable | — | The rate's label, as on the card's reward_rates. Label for the rate, unique on its card within a rotating quarter and built from the fields beside it, so the same rate has the same label on every card: <categories>[:<merchant>][@portal|@direct][#choice][~<tag>]. categories: the rate's `categories` joined by "+" in /v1/categories order ("groceries+gas"); a base rate is "other". :<merchant>: the merchant it is limited to, slugged ("airlines:united-airlines", "other:best-buy"). @portal / @direct: booking_channel issuer_portal / direct ("travel@portal"). #choice: one of a pick-your-category group ("dining#choice"). ~<tag>: only when two rates of one card would otherwise share a label, e.g. "airlines:united-airlines~3x"; a tag can change when the card's other rates change. Match on `categories`, `merchant`, `booking_channel` and `choice_group`, not by parsing the label. |
rate_multiplier | number | — | |
rate_type | string | — | One of: multiplier, percent_cashback, points_per_dollar |
cap_amount | numbernullable | — | |
cap_period | stringnullable | — | One of: monthly, quarterly, annual |
categories | string[] | — | |
merchant | stringnullable | — | |
booking_channel | stringnullable | — | One of: issuer_portal, direct |
choice_group | stringnullable | — | |
choice_picks | integernullable | — | |
choice_selection | stringnullable | — | One of: user, automatic |
is_rotating | boolean | — | |
rotating_quarter | integernullable | — | |
rotating_year | integernullable | — | |
notes | stringnullable | — |