Not affiliated with American Express, Visa, Mastercard, or any card issuer.

pc-ai / platinumcard.ai

Which card fits — before the agent pays

Declare · Enforce · Optimize

Validate checks the declaration. Rank applies it to a transaction. To integrate, read llms.txt.

Banks don't do what we do. Cards can't do what we can.

Not a bank. Not an issuer. Not a lender.

What happens

An agent approaches pay or book. It declares which cards it may use and under what limits. We check the declaration, then — for partners — rank which eligible card (if any) fits this moment. Multi-issuer. Non-custodial. The money never passes through us.

How to think about it

For a deeper read: a weigh station for agents that spend — not a toll, and not a fine booth. Agent runtimes are the highway; they move the work. We sit beside them with the rulebook: which cards, which limits, which categories, when a human must approve. Eligible? It rolls with the card that fits. Not eligible? A clear no, with a reason. We never touch the freight and we never touch the money.

What we are

Partners & Pilot

Validate (free, public) checks that a portfolio declaration is well-formed. Rank (partner, keyed) recommends which card to use for a specific transaction.

Free live pilot. Run Rank on real transactions for up to 60 days. No card needed to start.

We ask for a named technical contact and your feedback while you build. After 60 days, pick a plan, or your keys go back to test-only. Plans start at $299 per month, with 10,000 ranks included.

Want to start today? A test key takes one email. It lasts 30 days, never bills, and allows 6 requests per minute. Same Rank, same response shape.

To start, email team@platinumcard.ai with your company, what your agent buys, and the person we should work with. Help guide what we build.

Try it

Public validation stores nothing and returns a verdict. POST a portfolio to check that the declaration is well-formed. Limits in the example must be numbers; this call checks that, and does not evaluate a payment.

curl -X POST https://validate.platinumcard.ai \
  -H 'content-type: application/json' \
  -d '{
  "version": "0.1.1",
  "cards": [
    {
      "id": "amex-plat",
      "network": "amex",
      "product_tier": "platinum",
      "status": "active",
      "constraints": {
        "per_transaction_limit": 1200,
        "allowed_mccs": ["3000-3299", "4511", "5812"]
      }
    },
    {
      "id": "chase-reserve",
      "network": "visa",
      "product_tier": "infinite",
      "status": "active",
      "constraints": {
        "per_transaction_limit": 2000
      }
    }
  ]
}'

Returns {"valid": true, "card_count": 2, ...} or {"valid": false, "errors": [...], ...}. The response shape is unstable and versioned 0.1.1. Every response carries the disclaimer above. Declarations containing secret-like fields (card numbers, API keys, bank details) are rejected immediately, not stored.

See the full portfolio schema or read llms.txt for integration guidance.

What we're not

Generic fields, not brands

A portfolio describes cards the way software should — as data. Tier and network are plain enumerated values, and every network is treated alike.

network:      visa | mastercard | amex | discover | other
product_tier: platinum | gold | infinite | signature | other
visamastercardamexdiscoverother

On the word "Platinum"

"Platinum" has been a generic industry tier descriptor since the American Express v. Visa / First USA litigation settled in 1996–97. This project uses it in exactly that sense — a product-tier value alongside gold, infinite and signature — and not as a reference to any issuer's product.