openapi: 3.2.0 info: title: MNTN Reporting Apilist API description: '## Overview Public partner reporting surface: **`GET /apilist`** (metadata) and **`GET` / `POST /apidata`** (query execution).' version: 3.7.0 servers: - url: / description: Reporting API security: - API Key: [] tags: - name: Apilist paths: /apilist: get: tags: - Apilist summary: List reporting metadata description: 'Returns tables, columns and help text available to the advertiser (same `key` and `format` query parameters as **GET /apidata**). The response shape depends on `format`: `json` returns a structured JSON object, while `csv`, `excel`, and `human` return tabular text/binary representations of the same metadata. There is **no** `filter` query parameter on this route; call **`/apidata`** to apply **`filter`**. Use **`/apilist`** first to discover column identifiers for `data`, `sum`, and `filter`.' operationId: list parameters: - name: key in: query description: Advertiser API key (required on every request). required: true schema: type: string example: YOUR_API_KEY - name: format in: query description: defines the content type of the response schema: type: string enum: - human - json - csv - excel default: human responses: '500': description: An unexpected error occurred while processing the request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetail' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetail' '413': description: Payload Too Large — the query exceeds server memory limits. Use the asynchronous /batch endpoint for large requests. content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetail' '400': description: Invalid request parameters content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetail' '504': description: Gateway Timeout — the query exceeded the synchronous request time limit. content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetail' '200': description: Metadata payload in the requested format content: application/json: schema: $ref: '#/components/schemas/ListMetadataResponse' text/csv: schema: $ref: '#/components/schemas/CsvListResponse' examples: CSV metadata: description: CSV metadata value: 'Inventory.Day,The date of the data, Inventory.SoldImpressions,Number of impressions sold, Inventory.RemainingImpressions,Number of impressions remaining, DealInfo.DealId,Unique identifier for the deal, DealInfo.DealName,Name of the deal,' text/plain: schema: $ref: '#/components/schemas/HumanListResponse' examples: Human-readable metadata: description: Human-readable metadata value: "Inventory\n Day The date of the data\n SoldImpressions Number of impressions sold\n RemainingImpressions Number of impressions remaining\n\nDealInfo\n DealId Unique identifier for the deal\n DealName Name of the deal" application/vnd.openxmlformats-officedocument.spreadsheetml.sheet: schema: $ref: '#/components/schemas/ExcelListResponse' components: schemas: ListMetadataResponse: title: List Metadata Response type: object properties: tables: type: array description: List of available tables items: type: object properties: name: type: string description: Table name example: Inventory friendly: type: string description: User-friendly table name example: Inventory Data help: type: string description: Table description example: Contains inventory information columns: type: array description: List of columns in this table items: type: object properties: name: type: string description: Column name example: Day friendly: type: string description: User-friendly column name example: Day help: type: string description: Column description example: The date of the data format: type: string description: Data format type example: date icon: type: string description: Icon type for UI example: calendar table: type: string description: Parent table name example: Inventory fully_qualified_name: type: string description: Full column path example: Inventory.Day description: Response containing available tables and columns metadata example: '{tables=[{name=Inventory, friendly=Inventory Data, help=Contains inventory and impressions data, columns=[{name=Day, friendly=Day, help=The date of the data, format=date, icon=calendar, table=Inventory, fully_qualified_name=Inventory.Day}, {name=SoldImpressions, friendly=Sold Impressions, help=Number of impressions sold, format=number, icon=chart, table=Inventory, fully_qualified_name=Inventory.SoldImpressions}, {name=RemainingImpressions, friendly=Remaining Impressions, help=Number of impressions remaining, format=number, icon=chart, table=Inventory, fully_qualified_name=Inventory.RemainingImpressions}]}, {name=DealInfo, friendly=Deal Information, help=Contains deal and pricing information, columns=[{name=DealId, friendly=Deal ID, help=Unique identifier for the deal, format=text, icon=key, table=DealInfo, fully_qualified_name=DealInfo.DealId}, {name=DealName, friendly=Deal Name, help=Name of the deal, format=text, icon=text, table=DealInfo, fully_qualified_name=DealInfo.DealName}]}]}' ExcelListResponse: title: Excel Metadata Response type: string description: Response format when format=excel is specified. Returns a downloadable attachment with .xlsx filename; for `/apilist` this currently contains the same CSV rows as format=csv (not a native XLSX workbook). format: binary ProblemDetail: title: Problem Detail (RFC 9457) type: object properties: type: type: string description: A URI reference that identifies the problem type example: https://api3.mntn.com/problems/query-timeout title: type: string description: A short, human-readable summary of the problem type (stable across occurrences) example: Gateway Timeout status: type: integer description: The HTTP status code format: int32 example: 504 detail: type: string description: A human-readable explanation specific to this occurrence of the problem example: Gateway Timeout instance: type: string description: A URI reference that identifies the specific occurrence of the problem (request path) example: /data?aid=12345 timestamp: type: string description: ISO 8601 timestamp when the error occurred example: '2026-01-08T17:21:59.445461Z' errorCode: type: string description: Internal error code for support reference example: QUERY_TIMEOUT traceId: type: string description: OpenTelemetry trace ID for debugging and support example: 64a8b3c2d1e0f9876543210abcdef123 errors: type: array description: Array of validation errors (for 400 Bad Request responses) items: type: object properties: field: type: string description: Field name that failed validation example: aid message: type: string description: Error message example: Advertiser ID is required description: 'Standard error response format following RFC 9457 (Problem Details for HTTP APIs). All error responses include machine-readable problem types and human-readable details. See: https://www.rfc-editor.org/rfc/rfc9457.html' example: '{Invalid API Key (401)={type=https://api3.mntn.com/problems/authorization-error, title=Invalid API Key, status=401, detail=The provided API key ''abc123...'' is not valid, instance=/apidata, timestamp=2026-01-08T17:21:59.445461Z, errorCode=INVALID_API_KEY, traceId=64a8b3c2d1e0f9876543210abcdef123}, Validation Error (400)={type=https://api3.mntn.com/problems/general-request-error, title=Bad Request, status=400, detail=Request validation failed, instance=/apidata, timestamp=2026-01-08T17:21:59.445461Z, errorCode=GENERAL_REQUEST_ERROR, errors=[{field=aid, message=Advertiser ID is required}, {field=begin, message=Start date is required}]}, Metadata Error (400)={type=https://api3.mntn.com/problems/metadata-error, title=Metadata Error, status=400, detail=Table ''Inventory1'' does not exist, instance=/apidata?aid=12345, timestamp=2026-01-08T17:21:59.445461Z, errorCode=METADATA_ERROR, traceId=64a8b3c2d1e0f9876543210abcdef123}, Query Timeout (504)={type=https://api3.mntn.com/problems/query-timeout, title=Gateway Timeout, status=504, detail=Gateway Timeout, instance=/apidata?aid=12345&begin=2020-01-01&end=2025-12-31, timestamp=2026-01-08T17:21:59.445461Z, traceId=64a8b3c2d1e0f9876543210abcdef123}, Resource Limit Exceeded (400)={type=https://api3.mntn.com/problems/resource-limit-exceeded, title=Resource Limit Exceeded, status=400, detail=Query returned too many rows. Please narrow your date range or refine `filter`., instance=/data?aid=12345&begin=2020-01-01&end=2025-12-31, timestamp=2026-01-08T17:21:59.445461Z, errorCode=RESOURCE_LIMIT_EXCEEDED, traceId=64a8b3c2d1e0f9876543210abcdef123}, Internal Server Error (500)={type=https://api3.mntn.com/problems/internal-error, title=Internal Server Error, status=500, detail=An unexpected error occurred while processing the request, instance=/apidata, timestamp=2026-01-08T17:21:59.445461Z, errorCode=NA, traceId=64a8b3c2d1e0f9876543210abcdef123}}' ErrorResponse: description: HTTP error / validation payload (RFC 9457); same schema as ProblemDetail allOf: - $ref: '#/components/schemas/ProblemDetail' HumanListResponse: title: Human-Readable Metadata Response type: string description: 'Response format when format=human is specified (default). Returns a formatted text table: each table name followed by its indented columns, column help text, and optional [tags].' example: "Inventory\n Day The date of the data\n SoldImpressions Number of impressions sold\n RemainingImpressions Number of impressions remaining\n\nDealInfo\n DealId Unique identifier for the deal\n DealName Name of the deal" CsvListResponse: title: CSV Metadata Response type: string description: 'Response format when format=csv is specified. Returns one row per column with no header row. Note: this output is comma-delimited but fields are not CSV-escaped (help text and tags may contain commas); use format=json for machine parsing.' example: 'Inventory.Day,The date of the data, Inventory.SoldImpressions,Number of impressions sold, Inventory.RemainingImpressions,Number of impressions remaining, DealInfo.DealId,Unique identifier for the deal, DealInfo.DealName,Name of the deal,' securitySchemes: API_Key: type: apiKey description: MNTN-issued advertiser API key. Available in Account Settings. name: key in: query