OutFlo Public API / Guide
Analytics and reporting
Query organization and campaign performance through focused reporting endpoints.
Overview
Analytics operations use query parameters for date ranges, campaigns, senders, statuses, and aggregation behavior. Every endpoint returns the same response envelope even though its data object reflects a different reporting surface.
Authentication
Send the same x-api-key header with every request.
Canonical contract
Request and response schemas
Every operation below follows the same contract order. All responses use the standard status, data, and error envelope.
GET/api/public/campaigns/{id}/analytics/overviewGet campaign analytics overview
Headers
| Field | Type | Required | Description |
|---|---|---|---|
| x-api-key | string | Yes | Workspace API key. |
Path parameters
| Field | Type | Required | Description |
|---|---|---|---|
| id | string · UUID | Yes | id path identifier. |
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
| connection_status | string · CSV | No | Comma-separated connection statuses. |
| reply_status | string · CSV | No | Comma-separated reply statuses. |
| account_id | string · CSV | No | Comma-separated sender account UUIDs. |
| overall_status | string · CSV | No | Comma-separated lead workflow statuses. |
| from_date | string · date-time | No | Inclusive ISO 8601 start timestamp. |
| to_date | string · date-time | No | Inclusive ISO 8601 end timestamp. |
| search_text | string | No | Case-insensitive lead search text. |
| timezone | string | No | Timezone used for date grouping. |
Request body
No request body.
Success response · 200
| Field | Type | Required | Description |
|---|---|---|---|
| status | integer | Yes | HTTP status mirrored in the JSON body. Success: 200. |
| data | object | array | null | Yes | Get campaign analytics overview result. The exact data fields depend on the selected resource. |
| error | string | null | Yes | Null on success; a developer-readable message on failure. |
Query example
{
"connection_status": "<string>",
"reply_status": "<string>",
"account_id": "<string>",
"overall_status": "<string>",
"from_date": "<string>",
"to_date": "<string>",
"search_text": "<string>",
"timezone": "<string>"
}Standard success envelope · 200
{
"status": 200,
"data": "<endpoint-specific response data>",
"error": null
}Standard error envelope
{
"status": 400,
"data": null,
"error": "Developer-readable error message"
}GET/api/public/campaigns/{id}/analytics/funnelGet campaign funnel analytics
Headers
| Field | Type | Required | Description |
|---|---|---|---|
| x-api-key | string | Yes | Workspace API key. |
Path parameters
| Field | Type | Required | Description |
|---|---|---|---|
| id | string · UUID | Yes | id path identifier. |
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
| connection_status | string · CSV | No | Comma-separated connection statuses. |
| reply_status | string · CSV | No | Comma-separated reply statuses. |
| account_id | string · CSV | No | Comma-separated sender account UUIDs. |
| overall_status | string · CSV | No | Comma-separated lead workflow statuses. |
| from_date | string · date-time | No | Inclusive ISO 8601 start timestamp. |
| to_date | string · date-time | No | Inclusive ISO 8601 end timestamp. |
| search_text | string | No | Case-insensitive lead search text. |
Request body
No request body.
Success response · 200
| Field | Type | Required | Description |
|---|---|---|---|
| status | integer | Yes | HTTP status mirrored in the JSON body. Success: 200. |
| data | object | array | null | Yes | Get campaign funnel analytics result. The exact data fields depend on the selected resource. |
| error | string | null | Yes | Null on success; a developer-readable message on failure. |
Query example
{
"connection_status": "<string>",
"reply_status": "<string>",
"account_id": "<string>",
"overall_status": "<string>",
"from_date": "<string>",
"to_date": "<string>",
"search_text": "<string>"
}Standard success envelope · 200
{
"status": 200,
"data": "<endpoint-specific response data>",
"error": null
}Standard error envelope
{
"status": 400,
"data": null,
"error": "Developer-readable error message"
}GET/api/public/campaigns/{id}/analytics/sequencesGet campaign sequence analytics
Headers
| Field | Type | Required | Description |
|---|---|---|---|
| x-api-key | string | Yes | Workspace API key. |
Path parameters
| Field | Type | Required | Description |
|---|---|---|---|
| id | string · UUID | Yes | id path identifier. |
Query parameters
No query parameters.
Request body
No request body.
Success response · 200
| Field | Type | Required | Description |
|---|---|---|---|
| status | integer | Yes | HTTP status mirrored in the JSON body. Success: 200. |
| data | object | array | null | Yes | Get campaign sequence analytics result. The exact data fields depend on the selected resource. |
| error | string | null | Yes | Null on success; a developer-readable message on failure. |
Request example
{
"headers": {
"x-api-key": "<string>"
}
}Standard success envelope · 200
{
"status": 200,
"data": "<endpoint-specific response data>",
"error": null
}Standard error envelope
{
"status": 400,
"data": null,
"error": "Developer-readable error message"
}GET/api/public/analytics/overviewGet organization analytics overview
Headers
| Field | Type | Required | Description |
|---|---|---|---|
| x-api-key | string | Yes | Workspace API key. |
Path parameters
No path parameters.
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
| start_date | string · date | No | Inclusive reporting start date in YYYY-MM-DD or ISO format. |
| end_date | string · date | No | Inclusive reporting end date in YYYY-MM-DD or ISO format. |
| campaign_id | string · CSV | No | Comma-separated campaign UUIDs. |
| account_id | string · CSV | No | Comma-separated sender account UUIDs. |
| status | enum | No | active, paused, draft, or completed. |
| timezone | string | No | IANA timezone used to group reporting dates. |
| bucket | enum | No | daily or weekly aggregation bucket. |
| rolling | boolean | No | Whether values should use a rolling window. |
Request body
No request body.
Success response · 200
| Field | Type | Required | Description |
|---|---|---|---|
| status | integer | Yes | HTTP status mirrored in the JSON body. Success: 200. |
| data | object | array | null | Yes | Get organization analytics overview result. The exact data fields depend on the selected resource. |
| error | string | null | Yes | Null on success; a developer-readable message on failure. |
Query example
{
"start_date": "<string>",
"end_date": "<string>",
"campaign_id": "<string>",
"account_id": "<string>",
"status": "<string>",
"timezone": "<string>",
"bucket": "<string>",
"rolling": false
}Standard success envelope · 200
{
"status": 200,
"data": "<endpoint-specific response data>",
"error": null
}Standard error envelope
{
"status": 400,
"data": null,
"error": "Developer-readable error message"
}GET/api/public/analytics/timeseriesGet organization analytics timeseries
Headers
| Field | Type | Required | Description |
|---|---|---|---|
| x-api-key | string | Yes | Workspace API key. |
Path parameters
No path parameters.
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
| start_date | string · date | No | Inclusive reporting start date in YYYY-MM-DD or ISO format. |
| end_date | string · date | No | Inclusive reporting end date in YYYY-MM-DD or ISO format. |
| campaign_id | string · CSV | No | Comma-separated campaign UUIDs. |
| account_id | string · CSV | No | Comma-separated sender account UUIDs. |
| status | enum | No | active, paused, draft, or completed. |
| timezone | string | No | IANA timezone used to group reporting dates. |
| bucket | enum | No | daily or weekly aggregation bucket. |
| rolling | boolean | No | Whether values should use a rolling window. |
| metric | enum | No | Metric to plot, such as replies_received or messages_sent. |
Request body
No request body.
Success response · 200
| Field | Type | Required | Description |
|---|---|---|---|
| status | integer | Yes | HTTP status mirrored in the JSON body. Success: 200. |
| data | object | array | null | Yes | Get organization analytics timeseries result. The exact data fields depend on the selected resource. |
| error | string | null | Yes | Null on success; a developer-readable message on failure. |
Query example
{
"start_date": "<string>",
"end_date": "<string>",
"campaign_id": "<string>",
"account_id": "<string>",
"status": "<string>",
"timezone": "<string>",
"bucket": "<string>",
"rolling": false,
"metric": "<string>"
}Standard success envelope · 200
{
"status": 200,
"data": "<endpoint-specific response data>",
"error": null
}Standard error envelope
{
"status": 400,
"data": null,
"error": "Developer-readable error message"
}GET/api/public/analytics/sendersGet sender analytics
Headers
| Field | Type | Required | Description |
|---|---|---|---|
| x-api-key | string | Yes | Workspace API key. |
Path parameters
No path parameters.
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
| start_date | string · date | No | Inclusive reporting start date in YYYY-MM-DD or ISO format. |
| end_date | string · date | No | Inclusive reporting end date in YYYY-MM-DD or ISO format. |
| campaign_id | string · CSV | No | Comma-separated campaign UUIDs. |
| account_id | string · CSV | No | Comma-separated sender account UUIDs. |
| status | enum | No | active, paused, draft, or completed. |
| timezone | string | No | IANA timezone used to group reporting dates. |
| rolling | boolean | No | Whether values should use a rolling window. |
Request body
No request body.
Success response · 200
| Field | Type | Required | Description |
|---|---|---|---|
| status | integer | Yes | HTTP status mirrored in the JSON body. Success: 200. |
| data | object | array | null | Yes | Get sender analytics result. The exact data fields depend on the selected resource. |
| error | string | null | Yes | Null on success; a developer-readable message on failure. |
Query example
{
"start_date": "<string>",
"end_date": "<string>",
"campaign_id": "<string>",
"account_id": "<string>",
"status": "<string>",
"timezone": "<string>",
"rolling": false
}Standard success envelope · 200
{
"status": 200,
"data": "<endpoint-specific response data>",
"error": null
}Standard error envelope
{
"status": 400,
"data": null,
"error": "Developer-readable error message"
}GET/api/public/analytics/campaignsGet campaign analytics
Headers
| Field | Type | Required | Description |
|---|---|---|---|
| x-api-key | string | Yes | Workspace API key. |
Path parameters
No path parameters.
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
| start_date | string · date | No | Inclusive reporting start date in YYYY-MM-DD or ISO format. |
| end_date | string · date | No | Inclusive reporting end date in YYYY-MM-DD or ISO format. |
| campaign_id | string · CSV | No | Comma-separated campaign UUIDs. |
| account_id | string · CSV | No | Comma-separated sender account UUIDs. |
| status | enum | No | active, paused, draft, or completed. |
| timezone | string | No | IANA timezone used to group reporting dates. |
Request body
No request body.
Success response · 200
| Field | Type | Required | Description |
|---|---|---|---|
| status | integer | Yes | HTTP status mirrored in the JSON body. Success: 200. |
| data | object | array | null | Yes | Get campaign analytics result. The exact data fields depend on the selected resource. |
| error | string | null | Yes | Null on success; a developer-readable message on failure. |
Query example
{
"start_date": "<string>",
"end_date": "<string>",
"campaign_id": "<string>",
"account_id": "<string>",
"status": "<string>",
"timezone": "<string>"
}Standard success envelope · 200
{
"status": 200,
"data": "<endpoint-specific response data>",
"error": null
}Standard error envelope
{
"status": 400,
"data": null,
"error": "Developer-readable error message"
}