---
title: "Read the gifting report"
method: GET
path: "/reports"
tags: ["Tracking & events"]
---

# Read the gifting report

`GET /reports`

## Request

- Base URL: `https://gtmswag.com/api/v1`
- URL: `https://gtmswag.com/api/v1/reports`
- Auth: HTTP bearer

Delivery and value totals across campaigns for one mode (default `test`), filtered by gift creation date (inclusive, UTC), with team-reported replies and meetings. Every campaign appears, even with no gifts.

## Query parameters

- `from` string, date
- `to` string, date
- `campaignId` string
- `mode` 'test' | 'live'

## Response `200`

Success: `{"data": GiftingReport}`.

- GiftingReportResponse: The success body: `{"data": GiftingReport}`.
  - `data` GiftingReport, required: Delivery and value totals per campaign for one mode.
    - `mode` 'test' | 'live', required
    - `totals` object, required
      - `gifts` integer, required
      - `committedCents` integer, required
    - `campaigns` object[], required
      - `campaignId` string, required
      - `gifts` integer, required
      - `committedCents` integer, required
    - `outcomeSource` 'team_reported', required

## Other responses

- `400`: Bad request: `VALIDATION_ERROR`. Each example says when.
- `401`: Not authenticated: `AUTH_REQUIRED`. no credentials, or an OAuth token on a route that only takes workspace keys; the key is malformed, unknown or revoked.
- `429`: Too many requests: `RATE_LIMIT`. more than 240 requests in the current minute for this workspace (REST and MCP share the limit); wait `retryAfterMs`.
- `default`: Any other refusal or failure, such as 403 CSRF (a cross-origin `Origin` header), 403 HTTPS_REQUIRED or 500 INTERNAL_ERROR, with what to do next.

---

[API](https://skmtc.dev/gtmswag/apis/gtm-swag-api.md) · [All operations](https://skmtc.dev/gtmswag/apis/gtm-swag-api/llms.txt) · [OpenAPI document](https://skmtc.dev/gtmswag/apis/gtm-swag-api/revisions/9ff86fa99afe?raw)
