Keepa API Docs

This API request provides access to current lightning deals. You can specify an ASIN to inquire about a specific deal (token cost: 1), or request the complete list for an overview (token cost: 500).

The comprehensive list includes lightning deals from the past four days, encompassing both active and expired deals.

Note: This request covers lightning deals exclusively, excluding other types of deals. For regular price-drop deals, see the Browsing Deals request.

Endpoint#

GET https://api.keepa.com/lightningdeal?key=<yourAccessKey>&domain=<domainId>&asin=<ASIN>

Parameters#

ParameterRequiredDescription
key required Your private API key.
domain required Integer value for the Amazon locale you want to access. See the table of valid values below.
asin optional The ASIN of the lightning deal you want to request (token cost: 1). If not specified, the entire list will be provided (token cost: 500).
state optional Limit the returned lightning deals by their state. Possible values: AVAILABLE, WAITLIST, SOLDOUT, WAITLISTFULL, EXPIRED, SUPPRESSED. Example: &state=AVAILABLE

Valid domain values#

Domain IDLocale
1com
2co.uk
3de
4fr
5co.jp
6ca
8it
9es
10in
11com.mx
12com.br

Token Cost#

RequestToken Cost
Specific lightning deal (with asin parameter)1
Complete list (no asin parameter)500 (10 when the list holds 10 deals or fewer)

Response#

An array of lightning deal objects in the lightningDeals field.

Examples#

Example request — single deal by ASIN#

Requests the lightning deal for ASIN B00M0QVG3W on Amazon.com (domain 1). Token cost: 1.

KeepaAPI api = new KeepaAPI("YOUR_API_KEY");
Request r = Request.getLightningDealRequest(AmazonLocale.US, "B00M0QVG3W");
api.sendRequest(r)
    .done(result -> {
        for (LightningDeal deal : result.lightningDeals) {
            System.out.println(deal.dealState + "  " + deal.dealPrice);
        }
    })
    .fail(failure -> System.out.println(failure));
<?php
use Keepa\KeepaAPI;
use Keepa\API\Request;
use Keepa\API\ResponseStatus;
use Keepa\objects\AmazonLocale;

$api = new KeepaAPI("YOUR_API_KEY");
$response = $api->sendRequestWithRetry(Request::getLightningDealRequest(AmazonLocale::US, "B00M0QVG3W"));
if ($response->status == ResponseStatus::OK) {
    print_r($response->lightningDeals);
}
import requests

params = {"key": "YOUR_API_KEY", "domain": 1, "asin": "B00M0QVG3W"}
r = requests.get("https://api.keepa.com/lightningdeal", params=params)
data = r.json()
deal = data["lightningDeals"][0]
print(deal["title"], deal["dealState"], deal["dealPrice"])
const res = await fetch("https://api.keepa.com/lightningdeal?key=YOUR_API_KEY&domain=1&asin=B00M0QVG3W");
const data = await res.json();
const deal = data.lightningDeals[0];
console.log(deal.title, deal.dealState, deal.dealPrice);
curl -s "https://api.keepa.com/lightningdeal?key=YOUR_API_KEY&domain=1&asin=B00M0QVG3W"

Example response#

{
  "timestamp": 1753651380000,
  "tokensLeft": 4495,
  "refillIn": 42000,
  "refillRate": 5,
  "tokenFlowReduction": 0,
  "tokensConsumed": 1,
  "processingTimeInMs": 18,
  "lightningDeals": [
    {
      "domainId": 1,
      "lastUpdate": 7663523,
      "asin": "B00M0QVG3W",
      "title": "Canon PowerShot SX400 Digital Camera with 30x Optical Zoom (Black)",
      "sellerId": "A2L77EE7U53NWQ",
      "sellerName": "Amazon Warehouse Deals",
      "dealId": "76fbc441",
      "dealPrice": 6999,
      "currentPrice": 9999,
      "image": "51InzcaVqrL.jpg",
      "isPrimeEligible": true,
      "isFulfilledByAmazon": true,
      "rating": 45,
      "totalReviews": 1834,
      "dealState": "AVAILABLE",
      "startTime": 7663200,
      "endTime": 7663620,
      "percentClaimed": 37,
      "percentOff": 30,
      "variation": [
        {
          "dimension": "Color",
          "value": "Black"
        }
      ]
    }
  ]
}

Response shortened for readability; illustrative values. Prices are integers in the smallest currency unit (here: US cents), timestamps like lastUpdate, startTime and endTime are in Keepa Time minutes. See the Lightning Deal Object for all field semantics.

Example request — complete list with state filter#

Requests the complete lightning deal list for Amazon.de (domain 3), limited to deals that are currently AVAILABLE. Token cost: 500. Without the state filter, the list covers all lightning deals from the past four days, both active and expired.

KeepaAPI api = new KeepaAPI("YOUR_API_KEY");
Request r = Request.getLightningDealRequest(AmazonLocale.DE, null);
// the state filter has no dedicated factory parameter —
// set it via the public parameter map:
r.parameter.put("state", "AVAILABLE");
api.sendRequest(r)
    .done(result -> {
        System.out.println(result.lightningDeals.length + " deals");
    })
    .fail(failure -> System.out.println(failure));
<?php
use Keepa\KeepaAPI;
use Keepa\API\Request;
use Keepa\API\ResponseStatus;
use Keepa\objects\AmazonLocale;

$api = new KeepaAPI("YOUR_API_KEY");
$r = Request::getLightningDealRequest(AmazonLocale::DE, null);
// the state filter has no dedicated factory parameter —
// set it via the public parameter map:
$r->parameter["state"] = "AVAILABLE";
$response = $api->sendRequestWithRetry($r);
if ($response->status == ResponseStatus::OK) {
    echo count($response->lightningDeals) . " deals";
}
import requests

params = {"key": "YOUR_API_KEY", "domain": 3, "state": "AVAILABLE"}
r = requests.get("https://api.keepa.com/lightningdeal", params=params)
data = r.json()
for deal in data["lightningDeals"]:
    print(deal["asin"], deal["percentOff"], deal["percentClaimed"])
const res = await fetch("https://api.keepa.com/lightningdeal?key=YOUR_API_KEY&domain=3&state=AVAILABLE");
const data = await res.json();
for (const deal of data.lightningDeals) {
  console.log(deal.asin, deal.percentOff, deal.percentClaimed);
}
curl -s "https://api.keepa.com/lightningdeal?key=YOUR_API_KEY&domain=3&state=AVAILABLE"