List promotions

List this rooftop's promotions, optionally filtered by status, type or name.

Each item has the same fields as Create a promotion returns. Performance numbers are only on Retrieve a promotion.

GEThttps://api.spyne.ai/api/pv1/promotions
AuthBearer tokenRate limit120 reads / min per rooftop

Before you call it

Counts toward the 120 reads a minute per rooftop.


Query parameters

Optionalcan be left out
ParameterTypeRequiredDescription
statusstringOptionaldraft, scheduled, active, paused or completed. Not case-sensitive.
promotionTypestringOptionalcustom (hand-picked) or dynamic (filter-based). Lowercase only.
searchstringOptionalPart of the promotion name.
pageintegerOptionalPage number, starting at 1. Default: 1.
perPageintegerOptionalPromotions per page, 1 to 100. Default: 20.

Sample request

curl --request GET \
  --url 'https://api.spyne.ai/api/pv1/promotions?status=active' \
  --header 'Authorization: Bearer YOUR_API_KEY'
import requests

url = "https://api.spyne.ai/api/pv1/promotions"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
params = {"status": "active"}

response = requests.get(url, headers=headers, params=params)
print(response.status_code, response.json())
const response = await fetch("https://api.spyne.ai/api/pv1/promotions?status=active", {
  method: "GET",
  headers: {
    Authorization: "Bearer YOUR_API_KEY",
  },
});
console.log(response.status, await response.json());

Sample response

{
  "success": true,
  "statusCode": 200,
  "data": {
    "total": 1,
    "page": 1,
    "perPage": 20,
    "promotions": [
      {
        "id": 351,
        "name": "Fall Clearance",
        "promotionType": "custom",
        "status": "active",
        "assets": [{ "assetId": "1584", "position": "all_images" }],
        "schedule": { "startDate": "2026-10-01T09:59:00Z", "neverEnds": true },
        "priority": 1000,
        "vehicleCount": 2
      }
    ]
  }
}

Response parameters (200)

ParameterTypeDescription
data.totalintegerPromotions that match, across all pages.
data.pageintegerThe page returned.
data.perPageintegerPromotions per page.
data.promotions[]arrayThe promotions on this page. Each has the fields described in Create a promotion.

Errors

StatusCodeWhen it happens
400INVALID_REQUESTA query parameter is invalid. details.errors lists every problem.
400VALIDATION_FAILEDSpyne refused the request; details explains why.
400TEAM_NOT_RESOLVEDThe API key isn't linked to a rooftop.
401UNAUTHORIZEDThe API key is missing or wrong.
429RATE_LIMITEDMore than 120 reads this minute. Wait the seconds in Retry-After.
502 / 503SERVICE_UNAVAILABLEA Spyne service is briefly unavailable. Retry shortly.

What happens next

Take an id and retrieve the promotion to see its performance.


Did this page help you?