# Get campaign timeline analytics Retrieve time-series timeline data for a campaign with daily buckets showing cumulative payouts, escrow balance, participation counts, and approved submission counts over time. Returns 200 OK on success, 404 if campaign not found. Supports optional limitDays query parameter to limit the number of days returned. Requires a valid JWT access token. Endpoint: GET /campaigns/{campaignId}/timeline Version: 0.1.0 Security: bearerAuth ## Path parameters: - `campaignId` (string, required) Unique identifier for the campaign Example: "campaign_abc123" ## Query parameters: - `limitDays` (integer) Maximum number of days to return (returns most recent N days) Example: 30 ## Response 200 fields (application/json): - `campaignId` (string, required) Unique identifier for the campaign Example: "campaign_abc123" - `bucketGranularity` (string, required) Granularity of time buckets Enum: "DAY" - `points` (array, required) Timeline data points, one per day - `points.bucketDate` (string, required) Date of the bucket in YYYY-MM-DD format Example: "2024-01-15" - `points.bucketStartTimestamp` (string, required) Start of the bucket (00:00:00) Example: "2024-01-15T00:00:00Z" - `points.bucketEndTimestamp` (string, required) End of the bucket (23:59:59.999) Example: "2024-01-15T23:59:59.999Z" - `points.cumulativePayoutAmountCents` (integer, required) Cumulative total of all payouts up to this bucket Example: 10000 - `points.remainingEscrowBalanceAmountCents` (integer, required) Remaining escrow balance at the end of this bucket Example: 40000 - `points.totalParticipationCount` (integer, required) Cumulative total of participations up to this bucket Example: 5 - `points.totalApprovedSubmissionCount` (integer, required) Cumulative total of approved submissions up to this bucket Example: 3 ## Response 400 fields (application/json): - `error` (string, required) Error code Example: "VALIDATION_ERROR" - `message` (string, required) Human-readable error message Example: "Invalid email address or password format" - `details` (object) Additional error details (optional) - `requestId` (string) Unique request identifier for tracing (included in X-Request-ID header) Example: "550e8400-e29b-41d4-a716-446655440000" - `timestamp` (string, required) ISO 8601 timestamp when the error occurred Example: "2024-01-01T00:00:00Z" ## Response 401 fields (application/json): - `error` (string, required) Error code Example: "VALIDATION_ERROR" - `message` (string, required) Human-readable error message Example: "Invalid email address or password format" - `details` (object) Additional error details (optional) - `requestId` (string) Unique request identifier for tracing (included in X-Request-ID header) Example: "550e8400-e29b-41d4-a716-446655440000" - `timestamp` (string, required) ISO 8601 timestamp when the error occurred Example: "2024-01-01T00:00:00Z" ## Response 404 fields (application/json): - `error` (string, required) Error code Example: "VALIDATION_ERROR" - `message` (string, required) Human-readable error message Example: "Invalid email address or password format" - `details` (object) Additional error details (optional) - `requestId` (string) Unique request identifier for tracing (included in X-Request-ID header) Example: "550e8400-e29b-41d4-a716-446655440000" - `timestamp` (string, required) ISO 8601 timestamp when the error occurred Example: "2024-01-01T00:00:00Z"