{
  "openapi": "3.1.0",
  "info": {
    "title": "Ecommerce Leads API",
    "version": "1.0.0",
    "description": "OpenAPI description of the keyed HTTP API and the report-viewer data endpoints. The viewer column set depends on agency type, currency, available store data, and optional fields. The /d/ endpoints use the report-link token in the JSON body. MCP at /api/mcp is a separate protocol and is not described here. Schema checked against the current implementation on 15 October 2026."
  },
  "servers": [
    {
      "url": "https://getecommerceleads.com",
      "description": "Production"
    }
  ],
  "tags": [
    {
      "name": "Reports",
      "description": "Reports available to the API-key owner."
    },
    {
      "name": "Stores",
      "description": "Single-store lookup."
    },
    {
      "name": "Report viewer",
      "description": "Paged report rows and downloads used by the /d/ viewer."
    }
  ],
  "paths": {
    "/api/reports": {
      "get": {
        "tags": ["Reports"],
        "summary": "List reports",
        "description": "Returns the authenticated API-key owner's reports, newest first. The API key is limited to 60 requests per 60 seconds.",
        "operationId": "listReports",
        "security": [{"bearerApiKey": []}],
        "responses": {
          "200": {
            "description": "Reports for the authenticated user.",
            "content": {
              "application/json": {
                "schema": {"$ref": "#/components/schemas/ReportList"},
                "examples": {
                  "example": {
                    "value": {
                      "reports": [
                        {"identifier": "AbCdEf1234567890", "title": "Acme Agency | Report #2", "date": "14/Oct/26"}
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {"$ref": "#/components/responses/Unauthorized"},
          "403": {"$ref": "#/components/responses/InactiveAccount"},
          "429": {"$ref": "#/components/responses/RateLimited"},
          "405": {"$ref": "#/components/responses/MethodNotAllowed"}
        }
      }
    },
    "/api/reports/{identifier}": {
      "get": {
        "tags": ["Reports"],
        "summary": "Fetch one report",
        "description": "Returns the full JSON report for an identifier that belongs to the authenticated API-key owner. Metric fields are returned as objects keyed by YYYY-MM and holding numeric values. This endpoint returns the weekly-report JSON payload; it is not the paged master table shown by /d/.",
        "operationId": "getReport",
        "security": [{"bearerApiKey": []}],
        "parameters": [
          {
            "name": "identifier",
            "in": "path",
            "required": true,
            "description": "16-character report identifier.",
            "schema": {"type": "string", "pattern": "^[A-Za-z0-9]{16}$"}
          }
        ],
        "responses": {
          "200": {
            "description": "Full report.",
            "content": {
              "application/json": {
                "schema": {"$ref": "#/components/schemas/Report"},
                "examples": {
                  "example": {
                    "value": {
                      "reportTitle": "Acme Agency | Report #2",
                      "reportDate": "14/Oct/26",
                      "records": [
                        {
                          "Name": "Example Store",
                          "Domain": "example-store.com",
                          "Industry": "Apparel",
                          "Total Traffic": {"2026-08": 12345, "2026-09": 13890},
                          "Additional Signals": ["Increasing Traffic"]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {"$ref": "#/components/responses/Unauthorized"},
          "403": {"$ref": "#/components/responses/InactiveAccount"},
          "404": {"$ref": "#/components/responses/ReportNotFound"},
          "429": {"$ref": "#/components/responses/RateLimited"},
          "405": {"$ref": "#/components/responses/MethodNotAllowed"},
          "500": {"$ref": "#/components/responses/InternalError"},
          "502": {"$ref": "#/components/responses/UpstreamError"}
        }
      }
    },
    "/api/store.php": {
      "get": {
        "tags": ["Stores"],
        "summary": "Look up a store by domain",
        "description": "Returns the keyed API's store detail fields, including buying-signal details and additional decision makers. A full URL or a bare domain is accepted. The route is currently served as /api/store.php?domain=... .",
        "operationId": "lookupStore",
        "security": [{"bearerApiKey": []}],
        "parameters": [
          {
            "name": "domain",
            "in": "query",
            "required": true,
            "description": "A bare domain or an HTTP(S) URL.",
            "schema": {"type": "string", "minLength": 1},
            "example": "example.com"
          }
        ],
        "responses": {
          "200": {
            "description": "Store fields. Values can be null when data is not available.",
            "content": {
              "application/json": {
                "schema": {"$ref": "#/components/schemas/Store"}
              }
            }
          },
          "400": {"$ref": "#/components/responses/InvalidDomain"},
          "401": {"$ref": "#/components/responses/Unauthorized"},
          "403": {"$ref": "#/components/responses/InactiveAccount"},
          "404": {"$ref": "#/components/responses/StoreNotFound"},
          "429": {"$ref": "#/components/responses/RateLimited"},
          "405": {"$ref": "#/components/responses/MethodNotAllowed"}
        }
      }
    },
    "/d/data.php": {
      "post": {
        "tags": ["Report viewer"],
        "summary": "Get a page of report-viewer rows",
        "description": "Returns filtered and sorted rows from the /d/ master table or a watchlist. The report token is the 20-character token in the viewer URL; this endpoint does not use the API-key Bearer authentication. Filters are AND-combined. The response includes column metadata so clients can determine which agency-specific columns are present. Page size is fixed at 30. Rate limit: 50 requests per token per 60 seconds.",
        "operationId": "getReportViewerRows",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {"$ref": "#/components/schemas/ViewerDataRequest"},
              "examples": {
                "example": {
                  "value": {
                    "token": "AbCdEf1234567890AbCd",
                    "filters": [{"column": "Status", "operator": "is", "value": "Not Contacted"}],
                    "sort": {"column": "Date Added", "direction": "desc"},
                    "page": 1
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "One page of viewer rows and the available columns.",
            "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ViewerDataResponse"}}}
          },
          "400": {"$ref": "#/components/responses/InvalidRequest"},
          "404": {"$ref": "#/components/responses/ViewerReportNotFound"},
          "405": {"$ref": "#/components/responses/MethodNotAllowed"},
          "429": {"$ref": "#/components/responses/ViewerRateLimited"},
          "502": {"$ref": "#/components/responses/UpstreamError"}
        }
      }
    },
    "/d/export.php": {
      "post": {
        "tags": ["Report viewer"],
        "summary": "Export report-viewer rows",
        "description": "Exports all matching rows as CSV or JSON. JSON export is available to Growth plan users. The report token is the 20-character token in the viewer URL; this endpoint does not use the API-key Bearer authentication. Rate limit: 50 requests per token per 60 seconds.",
        "operationId": "exportReportViewerRows",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {"$ref": "#/components/schemas/ViewerExportRequest"},
              "examples": {
                "example": {
                  "value": {
                    "token": "AbCdEf1234567890AbCd",
                    "format": "json",
                    "filters": [],
                    "visibleColumns": ["Name", "Domain", "Status", "Date Added"]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "CSV attachment when format is csv; JSON report payload when format is json.",
            "content": {
              "text/csv": {
                "schema": {"type": "string", "format": "binary"}
              },
              "application/json": {
                "schema": {"$ref": "#/components/schemas/ViewerExportResponse"}
              }
            }
          },
          "400": {"$ref": "#/components/responses/InvalidRequest"},
          "403": {"$ref": "#/components/responses/JsonExportForbidden"},
          "404": {"$ref": "#/components/responses/ViewerReportNotFound"},
          "405": {"$ref": "#/components/responses/MethodNotAllowed"},
          "429": {"$ref": "#/components/responses/ViewerRateLimited"},
          "502": {"$ref": "#/components/responses/UpstreamError"}
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerApiKey": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "Ecommerce Leads API key",
        "description": "Send the API key in Authorization: Bearer YOUR_API_KEY. Used by /api/reports and /api/store.php."
      }
    },
    "schemas": {
      "Error": {
        "type": "object",
        "properties": {"error": {"type": "string"}},
        "required": ["error"],
        "additionalProperties": true
      },
      "ReportList": {
        "type": "object",
        "properties": {
          "reports": {"type": "array", "items": {"$ref": "#/components/schemas/ReportSummary"}}
        },
        "required": ["reports"],
        "additionalProperties": false
      },
      "ReportSummary": {
        "type": "object",
        "properties": {
          "identifier": {"type": "string", "pattern": "^[A-Za-z0-9]{16}$"},
          "title": {"type": "string"},
          "date": {"type": ["string", "null"], "description": "Formatted as DD/Month/YY, for example 14/October/26."}
        },
        "required": ["identifier", "title", "date"],
        "additionalProperties": false
      },
      "Report": {
        "type": "object",
        "properties": {
          "reportTitle": {"type": "string"},
          "reportDate": {"type": ["string", "null"], "description": "Formatted as DD/Month/YY, for example 14/October/26."},
          "records": {"type": "array", "items": {"$ref": "#/components/schemas/WeeklyReportRecord"}}
        },
        "required": ["reportTitle", "reportDate", "records"],
        "additionalProperties": false
      },
      "WeeklyReportRecord": {
        "description": "A weekly-report record. The exact properties vary by agency type, source data, and report. Known report fields are typed below; unknown future fields are allowed. Metric fields in this endpoint are monthly timeline objects, not scalar values.",
        "type": "object",
        "properties": {
          "Name": {"type": ["string", "null"]},
          "Product": {"type": ["string", "null"]},
          "Domain": {"type": ["string", "null"]},
          "Industry": {"type": ["string", "null"]},
          "Est. Monthly Revenue (USD)": {"$ref": "#/components/schemas/MetricTimeline"},
          "Est. Monthly Revenue (GBP)": {"$ref": "#/components/schemas/MetricTimeline"},
          "Est. Monthly Revenue (EUR)": {"$ref": "#/components/schemas/MetricTimeline"},
          "Suggested Outreach Angles": {"type": ["string", "null"]},
          "Agency Situation": {"type": ["string", "null"]},
          "Buying Signals": {"type": ["string", "null"]},
          "buying_signals_keys": {"type": "array", "items": {"type": "string"}},
          "Competitor Analysis": {"type": ["string", "null"]},
          "Decision Maker Name": {"type": ["string", "null"]},
          "Decision Maker First Name": {"type": ["string", "null"]},
          "Decision Maker Role": {"type": ["string", "null"]},
          "Decision Maker Contact": {"type": ["string", "null"], "description": "Usually an email address."},
          "Decision Maker LinkedIn": {"type": ["string", "null"], "format": "uri-reference"},
          "Email Verification": {"type": ["string", "null"]},
          "Additional Decision Makers": {"type": ["string", "null"]},
          "Store Phone Numbers": {"type": ["string", "null"]},
          "Country": {"type": ["string", "null"]},
          "Date Founded": {"type": ["integer", "number", "null"]},
          "SKUs": {"type": ["integer", "number", "null"]},
          "Est. Marketing Budget (USD)": {"type": ["string", "number", "null"]},
          "Facebook": {"type": ["string", "null"], "format": "uri-reference"},
          "Instagram": {"type": ["string", "null"], "format": "uri-reference"},
          "Tiktok": {"type": ["string", "null"], "format": "uri-reference"},
          "LinkedIn": {"type": ["string", "null"], "format": "uri-reference"},
          "Google Ads Library": {"type": ["string", "null"], "format": "uri"},
          "Meta Ads Library": {"type": ["string", "null"], "format": "uri"},
          "Trustpilot": {"type": ["string", "null"], "format": "uri-reference"},
          "Additional Signals": {"type": "array", "items": {"type": "string"}},
          "Trends": {"type": ["string", "null"]},
          "Total Traffic": {"$ref": "#/components/schemas/MetricTimeline"},
          "Organic Traffic": {"$ref": "#/components/schemas/MetricTimeline"},
          "Google Paid Traffic": {"$ref": "#/components/schemas/MetricTimeline"},
          "Paid Social Traffic": {"$ref": "#/components/schemas/MetricTimeline"},
          "Organic Social Traffic": {"$ref": "#/components/schemas/MetricTimeline"},
          "Backlinks": {"$ref": "#/components/schemas/MetricTimeline"},
          "Referring Domains": {"$ref": "#/components/schemas/MetricTimeline"},
          "Organic SERPs": {"$ref": "#/components/schemas/MetricTimeline"},
          "Paid SERPs": {"$ref": "#/components/schemas/MetricTimeline"},
          "Page Speed Performance Score": {"$ref": "#/components/schemas/MetricTimeline"},
          "Page Speed SEO Score": {"$ref": "#/components/schemas/MetricTimeline"},
          "Estimated Total Ad Spend": {"type": ["number", "null"], "description": "The weekly report builder provides the combined current value. The viewer JSON export may instead contain a monthly metric timeline for this field."},
          "Estimated Google Ad Spend": {"$ref": "#/components/schemas/MetricTimeline"},
          "Estimated Meta Ad Spend": {"$ref": "#/components/schemas/MetricTimeline"},
          "Total Meta Ads": {"$ref": "#/components/schemas/MetricTimeline"},
          "Active Meta Ads": {"$ref": "#/components/schemas/MetricTimeline"},
          "Number of Video Ads": {"$ref": "#/components/schemas/MetricTimeline"},
          "Total Instagram Followers": {"$ref": "#/components/schemas/MetricTimeline"},
          "Total Instagram Posts": {"$ref": "#/components/schemas/MetricTimeline"},
          "Instagram Engagement Rate": {"$ref": "#/components/schemas/MetricTimeline"},
          "Average Instagram Likes": {"$ref": "#/components/schemas/MetricTimeline"},
          "Average Instagram Comments": {"$ref": "#/components/schemas/MetricTimeline"},
          "Average Instagram Posts per Week": {"$ref": "#/components/schemas/MetricTimeline"},
          "Total Tiktok Followers": {"$ref": "#/components/schemas/MetricTimeline"},
          "Total Tiktok Uploads": {"$ref": "#/components/schemas/MetricTimeline"},
          "Average Tiktok Uploads per Week": {"$ref": "#/components/schemas/MetricTimeline"},
          "Trustpilot Average Rating": {"$ref": "#/components/schemas/MetricTimeline"},
          "Trustpilot Total Reviews": {"$ref": "#/components/schemas/MetricTimeline"}
        },
        "additionalProperties": true
      },
      "MetricTimeline": {
        "description": "An object whose property names are YYYY-MM periods and whose values are numeric metric readings. It can be empty when no history is available.",
        "type": "object",
        "propertyNames": {"pattern": "^\\d{4}-\\d{2}$"},
        "additionalProperties": {"type": ["number", "null"]}
      },
      "ViewerDataRequest": {
        "type": "object",
        "properties": {
          "token": {"type": "string", "pattern": "^[A-Za-z0-9]{20}$", "description": "Report-viewer token from the /d/ URL."},
          "filters": {"type": "array", "items": {"$ref": "#/components/schemas/ViewerFilter"}, "default": []},
          "sort": {"$ref": "#/components/schemas/ViewerSort"},
          "page": {"type": "integer", "minimum": 1, "default": 1},
          "view": {"type": "string", "default": "finder", "description": "Use watchlist with a valid listId to load a watchlist view. Other values use finder behavior."},
          "listId": {"type": "integer", "minimum": 1, "description": "Used with view=watchlist. Missing or invalid values use finder behavior."},
          "watchlistId": {"type": "integer", "minimum": 1, "description": "Selects a watchlist's stores while retaining finder columns."}
        },
        "required": ["token"],
        "additionalProperties": true
      },
      "ViewerExportRequest": {
        "allOf": [
          {"$ref": "#/components/schemas/ViewerDataRequest"},
          {
            "type": "object",
            "properties": {
              "format": {"type": "string", "enum": ["csv", "json"]},
              "visibleColumns": {"type": "array", "items": {"type": "string"}, "description": "Column keys to include. Missing or empty means all available, non-masked columns."}
            },
            "required": ["format"]
          }
        ]
      },
      "ViewerFilter": {
        "type": "object",
        "properties": {
          "column": {"type": "string", "description": "A column key returned in the columns array."},
          "operator": {"type": "string", "enum": ["contains", "notContains", "is", "isNot", "isEmpty", "isNotEmpty", "gt", "gte", "lt", "lte", "eq", "isBefore", "isAfter", "isWithinLast", "hasAny", "notHas"]},
          "value": {"oneOf": [{"type": "string"}, {"type": "number"}, {"type": "array", "items": {"type": ["string", "number"]}}], "description": "Not needed for isEmpty or isNotEmpty. Numeric and date operators require values of the matching type."}
        },
        "required": ["column", "operator"],
        "additionalProperties": false
      },
      "ViewerSort": {
        "type": "object",
        "properties": {
          "column": {"type": "string", "description": "A column key returned in the columns array."},
          "direction": {"type": "string", "enum": ["asc", "desc"], "default": "asc"}
        },
        "required": ["column"],
        "additionalProperties": false
      },
      "ViewerDataResponse": {
        "type": "object",
        "properties": {
          "rows": {"type": "array", "items": {"$ref": "#/components/schemas/ViewerRow"}},
          "total": {"type": "integer", "minimum": 0},
          "page": {"type": "integer", "minimum": 1},
          "pageSize": {"type": "integer", "const": 30},
          "columns": {"type": "array", "items": {"$ref": "#/components/schemas/ViewerColumn"}},
          "cached": {"type": "boolean"}
        },
        "required": ["rows", "total", "page", "pageSize", "columns", "cached"],
        "additionalProperties": false
      },
      "ViewerColumn": {
        "type": "object",
        "properties": {
          "key": {"type": "string"},
          "label": {"type": "string"},
          "type": {"type": "string", "enum": ["text", "number", "date", "tags"]}
        },
        "required": ["key", "label", "type"],
        "additionalProperties": false
      },
      "ViewerRow": {
        "description": "A flat /d/ table row. Properties depend on agency type, available data, and optional fields. The exact set is also supplied by the response's columns array. Tag-type values are arrays of strings. Empty or missing source data can be null, an empty array, or an empty string depending on the field's source.",
        "type": "object",
        "properties": {
          "storeId": {"type": ["integer", "null"], "description": "Internal store row ID; included for viewer row actions and is not a displayed column."},
          "Name": {"type": ["string", "null"]},
          "Product": {"type": ["string", "null"], "description": "Optional; present only when the source record has a Product field."},
          "Domain": {"type": ["string", "null"]},
          "Status": {"type": ["string", "null"], "description": "Outreach status; defaults to Not Contacted."},
          "Signal Sets": {"type": "array", "items": {"type": "string"}},
          "Signal Set": {"type": "array", "items": {"type": "string"}},
          "Industry": {"type": ["string", "null"]},
          "Est. Monthly Revenue (USD)": {"type": ["number", "string", "null"]},
          "Est. Monthly Revenue (GBP)": {"type": ["number", "string", "null"]},
          "Est. Monthly Revenue (EUR)": {"type": ["number", "string", "null"]},
          "Date Added": {"type": ["string", "null"], "format": "date", "description": "Present in the finder view; omitted from watchlist view."},
          "Suggested Outreach Angles": {"type": ["string", "null"]},
          "Agency Situation": {"type": ["string", "null"], "description": "Optional field; present only when the source record has it."},
          "Buying Signals": {"type": ["string", "null"]},
          "Buying Signals List": {"type": "array", "items": {"type": "string"}},
          "Competitor Analysis": {"type": ["string", "null"]},
          "Decision Maker Name": {"type": ["string", "null"]},
          "Decision Maker First Name": {"type": ["string", "null"]},
          "Decision Maker Role": {"type": ["string", "null"]},
          "Decision Maker Contact": {"type": ["string", "null"]},
          "Decision Maker LinkedIn": {"type": ["string", "null"]},
          "Email Verification": {"type": ["string", "null"], "enum": ["Unknown", "Risky", "Valid", null]},
          "Additional Decision Makers": {"type": ["string", "null"]},
          "Store Phone Numbers": {"type": ["string", "null"]},
          "Country": {"type": ["string", "null"]},
          "Date Founded": {"type": ["integer", "number", "null"]},
          "SKUs": {"type": ["integer", "number", "null"]},
          "Est. Marketing Budget (USD)": {"type": ["string", "number", "null"]},
          "Facebook": {"type": ["string", "null"]},
          "Instagram": {"type": ["string", "null"]},
          "Tiktok": {"type": ["string", "null"]},
          "LinkedIn": {"type": ["string", "null"]},
          "Google Ads Library": {"type": ["string", "null"], "format": "uri"},
          "Meta Ads Library": {"type": ["string", "null"], "format": "uri"},
          "Trustpilot": {"type": ["string", "null"]},
          "Additional Signals": {"type": "array", "items": {"type": "string"}},
          "Trends": {"type": ["string", "null"]},
          "Total Traffic": {"type": ["integer", "number", "null"]},
          "Organic Traffic": {"type": ["integer", "number", "null"]},
          "Google Paid Traffic": {"type": ["integer", "number", "null"]},
          "Paid Social Traffic": {"type": ["integer", "number", "null"]},
          "Organic Social Traffic": {"type": ["integer", "number", "null"]},
          "Conversion Rate Score": {"type": ["integer", "null"]},
          "Domain Authority": {"type": ["integer", "number", "null"]},
          "Backlinks": {"type": ["integer", "number", "null"]},
          "Referring Domains": {"type": ["integer", "number", "null"]},
          "Organic SERPs": {"type": ["integer", "number", "null"]},
          "Page Speed Performance Score": {"type": ["integer", "number", "null"]},
          "Page Speed SEO Score": {"type": ["integer", "number", "null"]},
          "Paid SERPs": {"type": ["integer", "number", "null"]},
          "Active Shopping Ads": {"type": ["integer", "number", "null"]},
          "Estimated Total Ad Spend": {"type": ["number", "null"]},
          "Estimated Google Ad Spend": {"type": ["number", "string", "null"]},
          "Estimated Meta Ad Spend": {"type": ["number", "string", "null"]},
          "Total Meta Ads": {"type": ["integer", "number", "null"]},
          "Active Meta Ads": {"type": ["integer", "number", "null"]},
          "Number of Video Ads": {"type": ["integer", "number", "null"]},
          "Total Instagram Followers": {"type": ["integer", "number", "null"]},
          "Total Instagram Posts": {"type": ["integer", "number", "null"]},
          "Instagram Engagement Rate": {"type": ["number", "string", "null"]},
          "Average Instagram Likes": {"type": ["integer", "number", "null"]},
          "Average Instagram Comments": {"type": ["integer", "number", "null"]},
          "Average Instagram Posts per Week": {"type": ["number", "string", "null"]},
          "Total Tiktok Followers": {"type": ["integer", "number", "null"]},
          "Total Tiktok Uploads": {"type": ["integer", "number", "null"]},
          "Average Tiktok Uploads per Week": {"type": ["number", "string", "null"]},
          "Trustpilot Average Rating": {"type": ["number", "null"]},
          "Trustpilot Total Reviews": {"type": ["integer", "number", "null"]}
        },
        "additionalProperties": true
      },
      "ViewerExportResponse": {
        "type": "object",
        "properties": {
          "reportTitle": {"type": "string"},
          "reportDate": {"type": ["string", "null"]},
          "records": {"type": "array", "items": {"$ref": "#/components/schemas/ViewerExportRecord"}}
        },
        "required": ["reportTitle", "reportDate", "records"],
        "additionalProperties": false
      },
      "ViewerExportRecord": {
        "description": "A JSON-download row from /d/export.php. It contains selected viewer columns supported by the report JSON builder. Product and Buying Signals List are viewer-only and are not included in the JSON export. Date Added and Signal Set are added by the export endpoint. Metric fields are YYYY-MM maps.",
        "allOf": [
          {"$ref": "#/components/schemas/WeeklyReportRecord"},
          {
            "type": "object",
            "properties": {
              "Date Added": {"type": ["string", "null"], "format": "date"},
              "Signal Set": {"type": "array", "items": {"type": "string"}}
            },
            "additionalProperties": true
          }
        ]
      },
      "Store": {
        "description": "Single-store lookup response. String and numeric fields can be null when source data is missing.",
        "type": "object",
        "properties": {
          "Name": {"type": ["string", "null"]},
          "Domain": {"type": ["string", "null"]},
          "Industry": {"type": ["string", "null"]},
          "Est. Monthly Revenue (USD)": {"type": ["number", "string", "null"]},
          "Likely to Outsource": {"type": ["array", "null"], "items": {"type": "string"}},
          "Buying Signals": {"type": ["string", "null"]},
          "Buying Signals List": {"type": "array", "items": {"type": "string"}},
          "Decision Maker Name": {"type": ["string", "null"]},
          "Decision Maker First Name": {"type": ["string", "null"]},
          "Decision Maker Role": {"type": ["string", "null"]},
          "Decision Maker Contact": {"type": ["string", "null"]},
          "Decision Maker LinkedIn": {"type": ["string", "null"]},
          "Email Verification": {"type": ["string", "null"], "enum": ["Unknown", "Risky", "Valid", null]},
          "Additional Decision Makers": {"type": ["string", "null"]},
          "Store Phone Numbers": {"type": ["string", "null"]},
          "Country": {"type": ["string", "null"]},
          "Date Founded": {"type": ["integer", "number", "null"]},
          "SKUs": {"type": ["integer", "number", "null"]},
          "Est. Marketing Budget (USD)": {"type": ["number", "string", "null"]},
          "Facebook": {"type": ["string", "null"]},
          "Instagram": {"type": ["string", "null"]},
          "Tiktok": {"type": ["string", "null"]},
          "LinkedIn": {"type": ["string", "null"]},
          "Google Ads Library": {"type": ["string", "null"], "format": "uri"},
          "Meta Ads Library": {"type": ["string", "null"], "format": "uri"},
          "Total Traffic": {"type": ["integer", "number", "null"]},
          "Organic Traffic": {"type": ["integer", "number", "null"]},
          "Google Paid Traffic": {"type": ["integer", "number", "null"]},
          "Paid Social Traffic": {"type": ["integer", "number", "null"]},
          "Organic Social Traffic": {"type": ["integer", "number", "null"]},
          "Platform": {"type": ["string", "null"]},
          "Estimated Google Ad Spend": {"type": ["number", "string", "null"]},
          "Estimated Meta Ad Spend": {"type": ["number", "string", "null"]},
          "Total Meta Ads": {"type": ["integer", "number", "null"]},
          "Active Meta Ads": {"type": ["integer", "number", "null"]},
          "Number of Video Ads": {"type": ["integer", "number", "null"]},
          "Conversion Rate Score": {"type": ["integer", "null"]}
        },
        "additionalProperties": true
      }
    },
    "responses": {
      "Unauthorized": {
        "description": "API key is missing or invalid.",
        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}
      },
      "InactiveAccount": {
        "description": "API key is valid, but the account is not active.",
        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}
      },
      "RateLimited": {
        "description": "The API-key request limit was reached. Retry after the time in Retry-After.",
        "headers": {"Retry-After": {"schema": {"type": "integer"}}},
        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}
      },
      "ViewerRateLimited": {
        "description": "The report-viewer token request limit was reached. Retry after 60 seconds.",
        "headers": {"Retry-After": {"schema": {"type": "integer", "example": 60}}},
        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}
      },
      "ReportNotFound": {
        "description": "Report does not exist or belongs to another API-key owner.",
        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}
      },
      "ViewerReportNotFound": {
        "description": "Viewer token is invalid, unknown, or does not have access to this report or list.",
        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}
      },
      "StoreNotFound": {
        "description": "No active store was found for the domain.",
        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}
      },
      "InvalidDomain": {
        "description": "Domain is missing or invalid.",
        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}
      },
      "InvalidRequest": {
        "description": "Request body is invalid or contains an invalid filter or export format.",
        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}
      },
      "JsonExportForbidden": {
        "description": "JSON export requires the Growth plan.",
        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}
      },
      "MethodNotAllowed": {
        "description": "HTTP method is not allowed.",
        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}
      },
      "InternalError": {
        "description": "The report cannot be resolved from its stored source data.",
        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}
      },
      "UpstreamError": {
        "description": "A report data source failed.",
        "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}
      }
    }
  }
}
