---
updatedAt: 2026-08-24T09:14:57.000Z
agentTools:
  projectIndex: https://developers.vibe.co/llms.txt
---

# Create an async report

Creates an asynchronous report and returns the report resource. Poll GET /reports/{report_id} until the report reaches a terminal state.
**Scopes:**
`reporting:read`
<br>*Rate limits*:<br>Burst: `1/s`<br>Steady: `20/m`


# OpenAPI definition

```json
{
  "openapi": "3.1.0",
  "paths": {
    "/reports": {
      "post": {
        "description": "Creates an asynchronous report and returns the report resource. Poll GET /reports/{report_id} until the report reaches a terminal state.\n**Scopes:**\n`reporting:read`\n<br>*Rate limits*:<br>Burst: `1/s`<br>Steady: `20/m`\n",
        "operationId": "createReport",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReportCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Report accepted for processing",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Report"
                }
              }
            }
          },
          "400": {
            "description": "Bad request error response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "missingApiKey": {
                    "summary": "Missing API key",
                    "value": {
                      "error": {
                        "type": "validation",
                        "message": "Missing API Key",
                        "status": 400,
                        "detail": null,
                        "request_id": "req_8f3a4b2c",
                        "doc_url": null
                      }
                    }
                  },
                  "validationError": {
                    "summary": "Validation error",
                    "value": {
                      "error": {
                        "type": "validation",
                        "message": "Validation error",
                        "status": 400,
                        "detail": {
                          "validation": [
                            "id must be a string"
                          ]
                        },
                        "request_id": "req_8f3a4b2c",
                        "doc_url": null
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized error response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalidApiKey": {
                    "summary": "Invalid API key",
                    "value": {
                      "error": {
                        "type": "invalid_token",
                        "message": "Unauthorized",
                        "status": 401,
                        "detail": null,
                        "request_id": "req_8f3a4b2c",
                        "doc_url": "https://developers.vibe.co/errors/invalid-token"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Insufficient scope error response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "insufficientScope": {
                    "summary": "Missing required scope",
                    "value": {
                      "error": {
                        "type": "insufficient_scope",
                        "message": "Missing required scope",
                        "status": 403,
                        "detail": {
                          "required": "reporting:read",
                          "granted": [
                            "test"
                          ]
                        },
                        "request_id": "req_8f3a4b2c",
                        "doc_url": "https://developers.vibe.co/reference/oauth2token"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "summary": "Create an async report",
        "tags": [
          "Reporting"
        ],
        "x-rate-limit": {
          "rps": 1,
          "rpm": 20
        },
        "x-scopes": [
          "reporting:read"
        ]
      }
    }
  },
  "info": {
    "title": "Vibe Public API",
    "description": "Vibe Public API revision 2026-06-01",
    "version": "2026-06-01",
    "contact": {}
  },
  "tags": [
    {
      "name": "Reporting",
      "description": "Aggregated delivery, spend, and outcome metrics, plus the purchase events attributed to Vibe campaigns.\n\nReports run asynchronously: create a report, poll it until its status is `READY`, then download it from the signed `download_url`, which is valid for 24 hours. Purchase events are pulled directly and are useful for reconciling Vibe reporting against e-commerce backends.\n\nDate windows are limited to the last 45 days. Reports typically complete within a few minutes — **do not poll more than once every 10 seconds**."
    }
  ],
  "servers": [
    {
      "url": "https://api.vibe.co",
      "description": "Production API"
    }
  ],
  "components": {
    "securitySchemes": {
      "bearer": {
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "type": "http"
      }
    },
    "schemas": {
      "ErrorDetail": {
        "type": "object",
        "properties": {
          "required": {
            "type": "string",
            "example": "audiences:write"
          },
          "granted": {
            "example": [
              "audiences:read",
              "reporting:read"
            ],
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "required",
          "granted"
        ]
      },
      "ApiError": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "insufficient_scope",
              "invalid_token",
              "validation",
              "internal_error"
            ]
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number",
            "example": 403
          },
          "detail": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ErrorDetail"
              }
            ]
          },
          "request_id": {
            "type": "string",
            "example": "req_8f3a4b2c"
          },
          "doc_url": {
            "type": "string",
            "example": "https://developers.vibe.co/reference/oauth2token",
            "nullable": true
          }
        },
        "required": [
          "type",
          "message",
          "status",
          "request_id"
        ]
      },
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "error": {
            "$ref": "#/components/schemas/ApiError"
          }
        },
        "required": [
          "error"
        ]
      },
      "ReportFilter": {
        "type": "object",
        "properties": {
          "dimension": {
            "type": "string",
            "description": "Dimension to filter on",
            "enum": [
              "event_source_id",
              "campaign_id",
              "strategy_id"
            ]
          },
          "values": {
            "minItems": 1,
            "description": "Values to include",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "dimension"
        ]
      },
      "ReportCreate": {
        "type": "object",
        "properties": {
          "start_date": {
            "type": "string",
            "description": "Minimum date (inclusive) for which to return data",
            "format": "date"
          },
          "end_date": {
            "type": "string",
            "description": "Maximum date (exclusive) for which to return data",
            "format": "date"
          },
          "timezone": {
            "type": "string",
            "description": "Timezone identifier for reported data",
            "enum": [
              "UTC",
              "Europe/Amsterdam",
              "Europe/Berlin",
              "Europe/Helsinki",
              "Europe/Istanbul",
              "Europe/London",
              "Europe/Stockholm",
              "Asia/Seoul",
              "Asia/Shanghai",
              "Asia/Tel_Aviv",
              "America/Denver",
              "America/Los_Angeles",
              "America/New_York",
              "America/Phoenix"
            ],
            "default": "UTC"
          },
          "advertiser_ids": {
            "minItems": 1,
            "description": "Advertisers to include. Must be owned by the tenant.",
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "dimensions": {
            "type": "array",
            "description": "Dimensions to group rows by",
            "items": {
              "type": "string",
              "enum": [
                "impression_date",
                "advertiser_id",
                "advertiser_name",
                "campaign_id",
                "campaign_name",
                "strategy_id",
                "strategy_name",
                "creative_id",
                "creative_name",
                "event_source_id",
                "event_source_platform",
                "purchase_id",
                "screen",
                "channel_name",
                "content_name",
                "geo_region",
                "geo_metro",
                "geo_city",
                "geo_zip",
                "segment_ages",
                "segment_career",
                "segment_educations",
                "segment_estimated_incomes",
                "segment_estimated_net_worth",
                "segment_ethnicity",
                "segment_family_composition",
                "segment_genders",
                "segment_interests",
                "segment_languages",
                "segment_political_status",
                "segment_retargeting",
                "custom_audiences"
              ]
            }
          },
          "metrics": {
            "type": "array",
            "minItems": 1,
            "description": "Metrics to compute",
            "items": {
              "type": "string",
              "enum": [
                "spend",
                "impressions",
                "households",
                "frequency",
                "cpm",
                "completed_views",
                "cost_per_completed_view",
                "view_through_rate",
                "number_of_page_views",
                "cost_per_page_view",
                "number_of_sessions",
                "cost_per_session",
                "number_of_leads",
                "cost_per_lead",
                "installs",
                "cost_per_install",
                "number_of_purchases",
                "cost_per_purchase",
                "amount_of_purchases",
                "number_of_signups",
                "cost_per_signup",
                "number_of_custom_1",
                "cost_per_custom_1",
                "number_of_custom_2",
                "cost_per_custom_2",
                "number_of_custom_3",
                "cost_per_custom_3",
                "roas"
              ]
            }
          },
          "attribution_window": {
            "type": "string",
            "enum": [
              "1h",
              "6h",
              "12h",
              "24h",
              "48h",
              "72h",
              "7 days",
              "30 days"
            ],
            "default": "7 days"
          },
          "granularity": {
            "type": "string",
            "default": "DAY",
            "description": "Time aggregation granularity for rows in the report",
            "enum": [
              "HOUR",
              "DAY",
              "WEEK",
              "MONTH"
            ]
          },
          "filters": {
            "description": "Optional filters, combined with AND",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReportFilter"
            }
          },
          "format": {
            "type": "string",
            "enum": [
              "JSON",
              "CSV"
            ],
            "default": "JSON"
          }
        },
        "required": [
          "start_date",
          "end_date",
          "advertiser_ids",
          "metrics"
        ]
      },
      "ReportFailureReason": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "Stable machine-readable error code"
          },
          "message": {
            "type": "string",
            "description": "Human-readable explanation"
          },
          "details": {
            "type": "object",
            "nullable": true,
            "description": "Additional context specific to the failure code"
          }
        },
        "required": [
          "code",
          "message"
        ]
      },
      "Report": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Stable identifier of the report",
            "format": "uuid"
          },
          "status": {
            "type": "string",
            "enum": [
              "CREATED",
              "PROCESSING",
              "READY",
              "FAILED"
            ]
          },
          "download_url": {
            "type": "string",
            "nullable": true,
            "format": "uri",
            "description": "Pre-signed URL to download the report. Populated only when status is READY."
          },
          "generated_url_time": {
            "type": "string",
            "nullable": true,
            "format": "date-time"
          },
          "url_expiration_time": {
            "type": "string",
            "nullable": true,
            "format": "date-time"
          },
          "failure_reason": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ReportFailureReason"
              }
            ]
          },
          "created_at": {
            "type": "string",
            "description": "Time at which the report was created",
            "format": "date-time"
          },
          "completed_at": {
            "type": "string",
            "nullable": true,
            "description": "Time at which the report reached a terminal state",
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "status",
          "created_at"
        ]
      }
    }
  },
  "security": [
    {
      "bearer": []
    }
  ]
}
```