Everything you need to integrate the Offer.love Credit Card Offers API.
https://data.offer.love/v1
Append your API key to the URL — works with any client:
curl "https://data.offer.love/v1/search?q=amazon&key=YOUR_API_KEY"
Also supports x-api-key header, Authorization: Bearer, and OAuth 2.0.
No key? Anonymous requests get 100 free calls/day with basic fields.
Get a Free API Key
usr_)💡 Using an AI assistant? Access offers via our MCP server with the same API key — no code needed.
List endpoints return:
{
"total": 4, // number of results returned
"per_page": 10, // max results per request (tier-based)
"results": [...] // array of offer objects
}If total equals per_page, there may be more results. No pagination — upgrade tier for higher limits.
{
"offerId": "19cdd43e-...", // unique offer identifier
"domainSld": "walmart", // merchant slug
"merchantName": "Walmart", // display name
"title": "Earn 4% Back...", // offer headline
"details": "Terms apply...", // full terms (keyed users only)
"bank": "Amex", // issuing bank
"imgSrc": "https://...", // merchant logo URL
"addedAt": "2026-03-01", // date offer was added
"expiresAt": "2026-06-01" // expiration date
}/v1/search?q={query}FreeSearch by merchant name, bank, or keyword. Min 2 characters.
| Param | Type | Description | Example |
|---|---|---|---|
q | string | Search query (min 2 chars) | walmart |
{
"total": 4,
"per_page": 10,
"results": [
{
"offerId": "19cdd43e-...",
"domainSld": "walmart",
"merchantName": "Walmart",
"title": "Earn 4% Back on any purchase.",
"bank": "Amex",
"imgSrc": "https://assets.offer.love/logo/walmart.png",
"addedAt": "2026-03-01",
"expiresAt": "2026-06-15"
}
]
}/v1/merchants/{slug}FreeGet all active offers from a specific merchant.
| Param | Type | Description | Example |
|---|---|---|---|
slug | string | Merchant slug (use /v1/search to find slugs) | walmart |
{
"total": 4,
"per_page": 10,
"results": [ ... ]
}/v1/banks/{name}FreeGet all active offers from a specific bank. Case-insensitive.
| Param | Type | Description | Example |
|---|---|---|---|
name | string | Bank name | Chase |
{
"total": 10,
"per_page": 10,
"results": [ ... ]
}/v1/offers/{id}FreeGet a specific offer by its ID.
| Param | Type | Description | Example |
|---|---|---|---|
id | string | Offer ID (from search/list results) | 19cdd43e-ae4c-... |
{
"offerId": "19cdd43e-...",
"domainSld": "walmart",
"merchantName": "Walmart",
"title": "Earn 4% Back on any purchase.",
"bank": "Amex",
"imgSrc": "https://...",
"addedAt": "2026-03-01",
"expiresAt": "2026-06-15"
}/v1/statsFreeOverall statistics for active offers.
{
"total": 5628, // active offers
"merchants": 2796, // unique merchants
"banks": 5 // issuing banks
}/v1/banksFreeAll banks with their active offer counts.
[
{ "bank": "Paypal", "count": 1989 },
{ "bank": "Amex", "count": 1832 },
{ "bank": "Chase", "count": 1204 },
{ "bank": "Citi", "count": 412 },
{ "bank": "US Bank", "count": 191 }
]/v1/trendingKeyMost viewed merchants by page views.
{
"total": 20,
"per_page": 20,
"results": [
{
"domainSld": "amazon",
"views": 1523,
"merchantName": "Amazon",
"offerCount": 12,
"bank": "Amex",
"imgSrc": "https://..."
}
]
}/v1/expiringKeyOffers expiring within 7 days, sorted by expiration date.
{
"total": 50,
"per_page": 50,
"results": [
{
"offerId": "...",
"title": "Last chance: 5% back",
"expiresAt": "2026-03-10",
...
}
]
}/v1/recentKeyMost recently added offers.
{
"total": 50,
"per_page": 50,
"results": [
{
"offerId": "...",
"title": "New: 3x points at...",
"addedAt": "2026-03-08",
...
}
]
}/v1/my-offers?q=FreeSearch your own credit card offers synced from the browser extension. Requires API key linked to your offer.love account.
| Param | Type | Description | Example |
|---|---|---|---|
q | string | Search query (min 2 chars) | undefined |
{
"total": 3,
"results": [
{
"merchant": "starbucks",
"title": "Earn 5% back at Starbucks",
"bank": "Chase",
"details": "...",
"expiresAt": "2026-04-15",
"cardNumber": "...1234"
}
]
}| Feature | Anonymous | Free Key | Pro | Enterprise |
|---|---|---|---|---|
| Rate limit | 100/day | 100/day | 10K/day | Unlimited |
| Search, list by bank/merchant | ✓ | ✓ | ✓ | ✓ |
| Stats & bank list | ✓ | ✓ | ✓ | ✓ |
| Offer details/terms | ✗ | ✓ | ✓ | ✓ |
| Results per request | 10 | 10 | 50 | 50 |
| Trending, expiring, recent | ✗ | ✓ | ✓ | ✓ |
| Search personal offers | ✗ | ✓ | ✓ | ✓ |
| MCP server access | ✓ | ✓ | ✓ | ✓ |
| Code | Meaning | Response |
|---|---|---|
401 | Invalid API key | {"error":"Invalid API key"} |
403 | Tier restriction | {"error":"Pro tier required"} |
404 | Not found | {"error":"Offer not found"} |
429 | Rate limit exceeded | {"error":"Rate limit exceeded..."} |
const res = await fetch("https://data.offer.love/v1/search?q=starbucks&key=YOUR_KEY") const { total, results } = await res.json() console.log(`Found ${total} offers`) results.forEach(o => console.log(o.merchantName, "-", o.title))
import requests r = requests.get("https://data.offer.love/v1/search", params={"q": "starbucks", "key": "YOUR_KEY"}) data = r.json() print(f"Found {data['total']} offers") for o in data["results"]: print(f"{o['merchantName']} - {o['title']}")
curl "https://data.offer.love/v1/search?q=starbucks&key=YOUR_KEY"