Backend API Structure

This document provides an overview of the GP3MixMedia TrailMix API architecture for developers and administrators.


API Overview

  • Framework: Next.js 15.5.9 (App Router)
  • Pattern: RESTful HTTP endpoints
  • Base Path: All endpoints versioned under /api/v1
  • Authentication: NextAuth 4.24.11 with Google Workspace SSO
  • Total Endpoints: 223

Database Architecture

Technology Stack

  • Database: MySQL 8+
  • ORM: Prisma 7.2.0
  • Total Tables: 129 (82 core + 47 archive)

Key Database Categories

CategoryTablesDescription
Campaign Management15Campaigns, stations, settings
Buy Lines & Reconciliation4Ad buys, assignments, reconciliation
Deduplication10Groups, candidates, resolutions
Email & Alerts4Sends, events, configurations
Ingestion Feeds5Feed configs, runs, watermarks
Archive Tables47Soft-delete storage

Main API Endpoint Categories

1. Campaigns

Base Path: /api/v1/campaigns

MethodEndpointPurpose
GET/api/v1/campaignsList all campaigns
POST/api/v1/campaignsCreate new campaign
GET/api/v1/campaigns/{id}Get campaign details
POST/api/v1/campaigns/{id}Update campaign
POST/api/v1/campaigns/{id}/cloneClone campaign

2. Matrix Data

Base Path: /api/v1/matrix

MethodEndpointPurpose
GET/api/v1/matrixGet matrix rows with filters
POST/api/v1/matrix/batch-updateUpdate multiple rows
GET/api/v1/matrix/exportExport matrix data

3. Deduplication

Base Path: /api/v1/dedupe

MethodEndpointPurpose
GET/api/v1/dedupe/groupsList dedupe groups
POST/api/v1/dedupe/groups/{id}/resolveResolve group
POST/api/v1/dedupe/rows/combineCombine rows
POST/api/v1/dedupe/rows/combine/undoUndo combination

4. Email

Base Path: /api/v1/email

MethodEndpointPurpose
POST/api/v1/email/sendSend email
POST/api/v1/email/resendResend failed email
GET/api/v1/email/logsGet send history

5. Ingestion

Base Path: /api/v1/ingestion

MethodEndpointPurpose
GET/api/v1/ingestion/statusGet ingestion status
GET/api/v1/ingestion/controlGet control status
POST/api/v1/ingestion/controlPause/resume/rate-limit

6. Notifications

Base Path: /api/v1/notifications

MethodEndpointPurpose
GET/api/v1/notificationsGet user notifications
POST/api/v1/notifications/{id}/readMark as read
POST/api/v1/notifications/read-allMark all as read

7. Push Notifications

Base Path: /api/v1/push

MethodEndpointPurpose
POST/api/v1/push/subscribeSubscribe to push
DELETE/api/v1/push/subscribeUnsubscribe
POST/api/v1/push/sendSend push notification

8. Admin

Base Path: /api/v1/admin

MethodEndpointPurpose
GET/api/v1/admin/usersList all users
GET/api/v1/admin/archives/{table}List archived records
POST/api/v1/admin/archives/{table}/{id}/restoreRestore record

Common Patterns

Pagination

Cursor-based:

GET /api/v1/campaigns?cursor=123&limit=20

Offset-based:

GET /api/v1/dedupe/groups?page=1&take=50

Filtering

Common query parameters:

  • campaignId - Filter by campaign
  • status - Filter by status
  • weekMode - Time period filtering (booked, projected, futureOnly)
  • startDate, endDate - Date ranges

Error Handling

HTTP status codes:

  • 400 - Validation error
  • 401 - Authentication required
  • 403 - Permission denied
  • 404 - Not found
  • 500 - Server error

Response format:

{ "error": "Error message" }

Security Features

Authentication

  • NextAuth session-based authentication
  • Google Workspace SSO
  • JWT tokens for API routes

Rate Limiting

  • Configurable per tier
  • Unauthenticated: 100 req/min
  • Authenticated: 500 req/min
  • Upstash Redis-based

Idempotency

  • Request deduplication with idempotency keys
  • Prevents duplicate processing

Data Types & Enums

Campaign Status

  • active, paused, completed

Medium Types

  • tv, radio, digital, ott, ctv, mail, phones, other

Dedupe Status

  • open, resolved

Notification Types

  • info, success, warning, error, alert

Health & Monitoring

EndpointPurpose
/api/v1/pingBasic health check
/api/v1/healthDetailed health check
/api/v1/observability/metricsApplication metrics
/api/v1/circuit-breakersCircuit breaker status

Additional Resources


Last Updated: March 2026

Was this helpful? If you have feedback or questions, please contact your administrator.