Preferencias de privacidad

Funciones necesarias

Necesarias para la seguridad y las funciones básicas del sitio.

Siempre activas

Diagnósticos de Landing y grabación con contenido oculto

Mide las visitas públicas, el abandono y las interacciones con enlaces de registro mediante un ID anónimo exclusivo de esta pestaña, sin vincular cuentas. Se oculta todo el texto y se bloquean los formularios.

Analítica opcional de uso

¿Permitir analítica de uso de PostHog? Puedes cambiar tu elección en el pie de página cuando quieras.

Permitir también la grabación de sesiones en este sitio web público

La grabación de sesiones en el modo opcional entre sitios muestra las páginas públicas y las interacciones, con los datos introducidos y el contenido privado ocultos. La grabación de sesiones en la aplicación es una opción independiente.

Requiere analítica opcional; la grabación en este modo entre sitios está desactivada por defecto. El modo Landing de arriba funciona por separado.

Los análisis del navegador no activan los de la cuenta.

La búsqueda solo se carga cuando la usas. Explora todas las categorías a continuación.

Publicidad

Analizar rendimiento publicitario

Analiza un informe limitado de publicidad pagada proporcionado por el cliente, con atribución explícita y hash exacto de origen. Sin acceso a la plataforma ni afirmaciones de rentabilidad causal.

POST /advertising-api/performance/analyze

Contrato revisado: · sha256:9aedef8d43dd4514

Descripción general

Analiza un informe limitado de publicidad pagada proporcionado por el cliente, con atribución explícita y hash exacto de origen. Sin acceso a la plataforma ni afirmaciones de rentabilidad causal.

Una respuesta HTTP exitosa puede indicar aceptación, no finalización. Para trabajo en segundo plano, guarda el ID devuelto y consulta la misma operación hasta que termine. Una publicación programada o aceptada solo está publicada cuando la plataforma lo confirma; un tiempo de espera agotado en el cliente no determina el resultado.

Autenticación y permisos

Clases de credenciales aceptadas
user_session, delegated_oauth, personal_access_token
Capacidad delegada
agent:advertising_read
Rol mínimo del espacio de trabajo
viewer
Alcance del acceso
Recursos a los que este usuario está autorizado a acceder
Se requiere consentimiento para todos los espacios de trabajo
No
Cambia el estado
No
Cuando la operación se completa
synchronous_http_response

Un token solo puede usar los derechos de su propietario. Cada solicitud comprueba pertenencia al espacio, propiedad del recurso, espacios elegidos y capacidades concedidas. Los perfiles core y full cambian qué herramientas se muestran; no conceden acceso.

Campos de solicitud

Obligatorio significa obligatorio dentro del objeto principal y la rama elegida. Un campo secundario obligatorio no convierte en obligatorio un objeto principal opcional. Las reglas y nombres de campos siguientes se copian del contrato.

Campos de solicitud
Campo / ramaTipo / obligatorioRestricciones
$objectObligatorio en el objeto principal
  • additionalProperties: false
workspace_idstringObligatorio en el objeto principal
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
source_kindstringObligatorio en el objeto principal
  • enum: ["customer_import","official_meta_api"]
source_idstringObligatorio en el objeto principal
  • minLength: 1
  • maxLength: 100
provider_api_versionstringObligatorio en el objeto principal
  • const: "v26.0"
provider_account_idstringObligatorio en el objeto principal
  • pattern: "^[1-9]\\d{1,24}$"
currencystringObligatorio en el objeto principal
  • pattern: "^[A-Z]{3}$"
timezonestringObligatorio en el objeto principal
  • minLength: 1
  • maxLength: 100
levelstringObligatorio en el objeto principal
  • enum: ["campaign","adset","ad"]
start_datestringObligatorio en el objeto principal
  • pattern: "^\\d{4}-\\d{2}-\\d{2}$"
end_datestringObligatorio en el objeto principal
  • pattern: "^\\d{4}-\\d{2}-\\d{2}$"
action_attribution_windowsarrayObligatorio en el objeto principal
  • minItems: 1
  • maxItems: 1
action_attribution_windows[]stringOpcional / elemento
  • enum: ["1d_click","7d_click","1d_view"]
action_report_timestringObligatorio en el objeto principal
  • enum: ["impression","conversion"]
conversion_action_typestringObligatorio en el objeto principal
  • pattern: "^[a-z][a-z0-9_.]{0,99}$"
revenue_action_typestringObligatorio en el objeto principal
  • pattern: "^[a-z][a-z0-9_.]{0,99}$"
completebooleanObligatorio en el objeto principal—
rowsarrayObligatorio en el objeto principal
  • maxItems: 500
rows[]objectOpcional / elemento
  • additionalProperties: false
rows[].account_idstringObligatorio en el objeto principal
  • pattern: "^[1-9]\\d{1,24}$"
rows[].account_currencystringObligatorio en el objeto principal
  • pattern: "^[A-Z]{3}$"
rows[].campaign_idstringObligatorio en el objeto principal
  • pattern: "^[1-9]\\d{1,24}$"
rows[].campaign_namestringOpcional / elemento
  • maxLength: 200
rows[].adset_idstringOpcional / elemento
  • pattern: "^[1-9]\\d{1,24}$"
rows[].ad_idstringOpcional / elemento
  • pattern: "^[1-9]\\d{1,24}$"
rows[].date_startstringObligatorio en el objeto principal
  • pattern: "^\\d{4}-\\d{2}-\\d{2}$"
rows[].date_stopstringObligatorio en el objeto principal
  • pattern: "^\\d{4}-\\d{2}-\\d{2}$"
rows[].spendstringOpcional / elemento
  • pattern: "^\\d{1,12}(?:\\.\\d{1,6})?$"
rows[].clicksstringOpcional / elemento
  • pattern: "^\\d{1,15}$"
rows[].actionsarrayOpcional / elemento
  • maxItems: 100
rows[].actions[]objectOpcional / elemento
  • additionalProperties: false
rows[].actions[].action_typestringObligatorio en el objeto principal
  • pattern: "^[a-z][a-z0-9_.]{0,99}$"
rows[].actions[].valuestringOpcional / elemento
  • pattern: "^\\d{1,12}(?:\\.\\d{1,6})?$"
rows[].actions[].1d_clickstringOpcional / elemento
  • pattern: "^\\d{1,12}(?:\\.\\d{1,6})?$"
rows[].actions[].7d_clickstringOpcional / elemento
  • pattern: "^\\d{1,12}(?:\\.\\d{1,6})?$"
rows[].actions[].1d_viewstringOpcional / elemento
  • pattern: "^\\d{1,12}(?:\\.\\d{1,6})?$"
rows[].action_valuesarrayOpcional / elemento
  • maxItems: 100
rows[].action_values[]objectOpcional / elemento
  • additionalProperties: false
rows[].action_values[].action_typestringObligatorio en el objeto principal
  • pattern: "^[a-z][a-z0-9_.]{0,99}$"
rows[].action_values[].valuestringOpcional / elemento
  • pattern: "^\\d{1,12}(?:\\.\\d{1,6})?$"
rows[].action_values[].1d_clickstringOpcional / elemento
  • pattern: "^\\d{1,12}(?:\\.\\d{1,6})?$"
rows[].action_values[].7d_clickstringOpcional / elemento
  • pattern: "^\\d{1,12}(?:\\.\\d{1,6})?$"
rows[].action_values[].1d_viewstringOpcional / elemento
  • pattern: "^\\d{1,12}(?:\\.\\d{1,6})?$"
JSON Schema completo
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "workspace_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "source_kind": {
      "type": "string",
      "enum": [
        "customer_import",
        "official_meta_api"
      ]
    },
    "source_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "provider_api_version": {
      "type": "string",
      "const": "v26.0"
    },
    "provider_account_id": {
      "type": "string",
      "pattern": "^[1-9]\\d{1,24}$"
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Z]{3}$"
    },
    "timezone": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "level": {
      "type": "string",
      "enum": [
        "campaign",
        "adset",
        "ad"
      ]
    },
    "start_date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "end_date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "action_attribution_windows": {
      "minItems": 1,
      "maxItems": 1,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "1d_click",
          "7d_click",
          "1d_view"
        ]
      }
    },
    "action_report_time": {
      "type": "string",
      "enum": [
        "impression",
        "conversion"
      ]
    },
    "conversion_action_type": {
      "type": "string",
      "pattern": "^[a-z][a-z0-9_.]{0,99}$"
    },
    "revenue_action_type": {
      "type": "string",
      "pattern": "^[a-z][a-z0-9_.]{0,99}$"
    },
    "complete": {
      "type": "boolean"
    },
    "rows": {
      "maxItems": 500,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "account_id": {
            "type": "string",
            "pattern": "^[1-9]\\d{1,24}$"
          },
          "account_currency": {
            "type": "string",
            "pattern": "^[A-Z]{3}$"
          },
          "campaign_id": {
            "type": "string",
            "pattern": "^[1-9]\\d{1,24}$"
          },
          "campaign_name": {
            "type": "string",
            "maxLength": 200
          },
          "adset_id": {
            "type": "string",
            "pattern": "^[1-9]\\d{1,24}$"
          },
          "ad_id": {
            "type": "string",
            "pattern": "^[1-9]\\d{1,24}$"
          },
          "date_start": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "date_stop": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "spend": {
            "type": "string",
            "pattern": "^\\d{1,12}(?:\\.\\d{1,6})?$"
          },
          "clicks": {
            "type": "string",
            "pattern": "^\\d{1,15}$"
          },
          "actions": {
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "action_type": {
                  "type": "string",
                  "pattern": "^[a-z][a-z0-9_.]{0,99}$"
                },
                "value": {
                  "type": "string",
                  "pattern": "^\\d{1,12}(?:\\.\\d{1,6})?$"
                },
                "1d_click": {
                  "type": "string",
                  "pattern": "^\\d{1,12}(?:\\.\\d{1,6})?$"
                },
                "7d_click": {
                  "type": "string",
                  "pattern": "^\\d{1,12}(?:\\.\\d{1,6})?$"
                },
                "1d_view": {
                  "type": "string",
                  "pattern": "^\\d{1,12}(?:\\.\\d{1,6})?$"
                }
              },
              "required": [
                "action_type"
              ],
              "additionalProperties": false
            }
          },
          "action_values": {
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "action_type": {
                  "type": "string",
                  "pattern": "^[a-z][a-z0-9_.]{0,99}$"
                },
                "value": {
                  "type": "string",
                  "pattern": "^\\d{1,12}(?:\\.\\d{1,6})?$"
                },
                "1d_click": {
                  "type": "string",
                  "pattern": "^\\d{1,12}(?:\\.\\d{1,6})?$"
                },
                "7d_click": {
                  "type": "string",
                  "pattern": "^\\d{1,12}(?:\\.\\d{1,6})?$"
                },
                "1d_view": {
                  "type": "string",
                  "pattern": "^\\d{1,12}(?:\\.\\d{1,6})?$"
                }
              },
              "required": [
                "action_type"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "account_id",
          "account_currency",
          "campaign_id",
          "date_start",
          "date_stop"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "workspace_id",
    "source_kind",
    "source_id",
    "provider_api_version",
    "provider_account_id",
    "currency",
    "timezone",
    "level",
    "start_date",
    "end_date",
    "action_attribution_windows",
    "action_report_time",
    "conversion_action_type",
    "revenue_action_type",
    "complete",
    "rows"
  ],
  "additionalProperties": false
}

Respuesta y finalización

Estados HTTP de éxito: 200. Cuando la operación se completa: synchronous_http_response.

Una respuesta HTTP exitosa puede indicar aceptación, no finalización. Para trabajo en segundo plano, guarda el ID devuelto y consulta la misma operación hasta que termine. Una publicación programada o aceptada solo está publicada cuando la plataforma lo confirma; un tiempo de espera agotado en el cliente no determina el resultado.

Obligatorio significa obligatorio dentro del objeto principal y la rama elegida. Un campo secundario obligatorio no convierte en obligatorio un objeto principal opcional. Las reglas y nombres de campos siguientes se copian del contrato.

Respuesta y finalización
Campo / ramaTipo / obligatorioRestricciones
$objectObligatorio en el objeto principal—
contract_versionstringObligatorio en el objeto principal
  • const: "ad-performance/v1"
source_idstringObligatorio en el objeto principal
  • maxLength: 100
source_sha256stringObligatorio en el objeto principal
  • pattern: "^[a-f0-9]{64}$"
identity_verificationstringObligatorio en el objeto principal
  • enum: ["customer_supplied","accepted_provider_grant"]
currencystringObligatorio en el objeto principal
  • pattern: "^[A-Z]{3}$"
timezonestringObligatorio en el objeto principal
  • maxLength: 100
selectionobjectObligatorio en el objeto principal—
selection.provider_api_versionstringObligatorio en el objeto principal
  • const: "v26.0"
selection.provider_account_idstringObligatorio en el objeto principal
  • pattern: "^[1-9]\\d{1,24}$"
selection.currencystringObligatorio en el objeto principal
  • pattern: "^[A-Z]{3}$"
selection.timezonestringObligatorio en el objeto principal
  • maxLength: 100
selection.levelstringObligatorio en el objeto principal
  • enum: ["campaign","adset","ad"]
selection.start_datestringObligatorio en el objeto principal
  • pattern: "^\\d{4}-\\d{2}-\\d{2}$"
selection.end_datestringObligatorio en el objeto principal
  • pattern: "^\\d{4}-\\d{2}-\\d{2}$"
selection.action_attribution_windowsarrayObligatorio en el objeto principal
  • minItems: 1
  • maxItems: 1
selection.action_attribution_windows[]stringOpcional / elemento
  • enum: ["1d_click","7d_click","1d_view"]
selection.action_report_timestringObligatorio en el objeto principal
  • enum: ["impression","conversion"]
selection.conversion_action_typestringObligatorio en el objeto principal
  • maxLength: 100
selection.revenue_action_typestringObligatorio en el objeto principal
  • maxLength: 100
completebooleanObligatorio en el objeto principal—
rowsarrayObligatorio en el objeto principal
  • maxItems: 500
rows[]objectOpcional / elemento—
rows[].row_idstringObligatorio en el objeto principal
  • maxLength: 100
rows[].metricsobjectObligatorio en el objeto principal—
rows[].metrics.spendobjectObligatorio en el objeto principal—
rows[].metrics.spend.valuestring | nullObligatorio en el objeto principal—
rows[].metrics.spend.valueanyOf 1stringObligatorio en el objeto principal
  • pattern: "^\\d{1,24}(?:\\.\\d{1,6})?$"
rows[].metrics.spend.valueanyOf 2nullObligatorio en el objeto principal—
rows[].metrics.spend.unitstringObligatorio en el objeto principal
  • enum: ["currency","count","currency_per_click","currency_per_conversion","ratio"]
rows[].metrics.spend.availabilitystringObligatorio en el objeto principal
  • enum: ["available","missing_input","zero_denominator","incompatible","partial"]
rows[].metrics.spend.reasonstring | nullObligatorio en el objeto principal—
rows[].metrics.spend.reasonanyOf 1stringObligatorio en el objeto principal
  • maxLength: 300
rows[].metrics.spend.reasonanyOf 2nullObligatorio en el objeto principal—
rows[].metrics.spend.input_refsarrayObligatorio en el objeto principal
  • maxItems: 2000
rows[].metrics.spend.input_refs[]stringOpcional / elemento
  • maxLength: 300
rows[].metrics.clicksobjectObligatorio en el objeto principal—
rows[].metrics.clicks.valuestring | nullObligatorio en el objeto principal—
rows[].metrics.clicks.valueanyOf 1stringObligatorio en el objeto principal
  • pattern: "^\\d{1,24}(?:\\.\\d{1,6})?$"
rows[].metrics.clicks.valueanyOf 2nullObligatorio en el objeto principal—
rows[].metrics.clicks.unitstringObligatorio en el objeto principal
  • enum: ["currency","count","currency_per_click","currency_per_conversion","ratio"]
rows[].metrics.clicks.availabilitystringObligatorio en el objeto principal
  • enum: ["available","missing_input","zero_denominator","incompatible","partial"]
rows[].metrics.clicks.reasonstring | nullObligatorio en el objeto principal—
rows[].metrics.clicks.reasonanyOf 1stringObligatorio en el objeto principal
  • maxLength: 300
rows[].metrics.clicks.reasonanyOf 2nullObligatorio en el objeto principal—
rows[].metrics.clicks.input_refsarrayObligatorio en el objeto principal
  • maxItems: 2000
rows[].metrics.clicks.input_refs[]stringOpcional / elemento
  • maxLength: 300
rows[].metrics.conversionsobjectObligatorio en el objeto principal—
rows[].metrics.conversions.valuestring | nullObligatorio en el objeto principal—
rows[].metrics.conversions.valueanyOf 1stringObligatorio en el objeto principal
  • pattern: "^\\d{1,24}(?:\\.\\d{1,6})?$"
rows[].metrics.conversions.valueanyOf 2nullObligatorio en el objeto principal—
rows[].metrics.conversions.unitstringObligatorio en el objeto principal
  • enum: ["currency","count","currency_per_click","currency_per_conversion","ratio"]
rows[].metrics.conversions.availabilitystringObligatorio en el objeto principal
  • enum: ["available","missing_input","zero_denominator","incompatible","partial"]
rows[].metrics.conversions.reasonstring | nullObligatorio en el objeto principal—
rows[].metrics.conversions.reasonanyOf 1stringObligatorio en el objeto principal
  • maxLength: 300
rows[].metrics.conversions.reasonanyOf 2nullObligatorio en el objeto principal—
rows[].metrics.conversions.input_refsarrayObligatorio en el objeto principal
  • maxItems: 2000
rows[].metrics.conversions.input_refs[]stringOpcional / elemento
  • maxLength: 300
rows[].metrics.attributed_revenueobjectObligatorio en el objeto principal—
rows[].metrics.attributed_revenue.valuestring | nullObligatorio en el objeto principal—
rows[].metrics.attributed_revenue.valueanyOf 1stringObligatorio en el objeto principal
  • pattern: "^\\d{1,24}(?:\\.\\d{1,6})?$"
rows[].metrics.attributed_revenue.valueanyOf 2nullObligatorio en el objeto principal—
rows[].metrics.attributed_revenue.unitstringObligatorio en el objeto principal
  • enum: ["currency","count","currency_per_click","currency_per_conversion","ratio"]
rows[].metrics.attributed_revenue.availabilitystringObligatorio en el objeto principal
  • enum: ["available","missing_input","zero_denominator","incompatible","partial"]
rows[].metrics.attributed_revenue.reasonstring | nullObligatorio en el objeto principal—
rows[].metrics.attributed_revenue.reasonanyOf 1stringObligatorio en el objeto principal
  • maxLength: 300
rows[].metrics.attributed_revenue.reasonanyOf 2nullObligatorio en el objeto principal—
rows[].metrics.attributed_revenue.input_refsarrayObligatorio en el objeto principal
  • maxItems: 2000
rows[].metrics.attributed_revenue.input_refs[]stringOpcional / elemento
  • maxLength: 300
rows[].metrics.cpcobjectObligatorio en el objeto principal—
rows[].metrics.cpc.valuestring | nullObligatorio en el objeto principal—
rows[].metrics.cpc.valueanyOf 1stringObligatorio en el objeto principal
  • pattern: "^\\d{1,24}(?:\\.\\d{1,6})?$"
rows[].metrics.cpc.valueanyOf 2nullObligatorio en el objeto principal—
rows[].metrics.cpc.unitstringObligatorio en el objeto principal
  • enum: ["currency","count","currency_per_click","currency_per_conversion","ratio"]
rows[].metrics.cpc.availabilitystringObligatorio en el objeto principal
  • enum: ["available","missing_input","zero_denominator","incompatible","partial"]
rows[].metrics.cpc.reasonstring | nullObligatorio en el objeto principal—
rows[].metrics.cpc.reasonanyOf 1stringObligatorio en el objeto principal
  • maxLength: 300
rows[].metrics.cpc.reasonanyOf 2nullObligatorio en el objeto principal—
rows[].metrics.cpc.input_refsarrayObligatorio en el objeto principal
  • maxItems: 2000
rows[].metrics.cpc.input_refs[]stringOpcional / elemento
  • maxLength: 300
rows[].metrics.cpaobjectObligatorio en el objeto principal—
rows[].metrics.cpa.valuestring | nullObligatorio en el objeto principal—
rows[].metrics.cpa.valueanyOf 1stringObligatorio en el objeto principal
  • pattern: "^\\d{1,24}(?:\\.\\d{1,6})?$"
rows[].metrics.cpa.valueanyOf 2nullObligatorio en el objeto principal—
rows[].metrics.cpa.unitstringObligatorio en el objeto principal
  • enum: ["currency","count","currency_per_click","currency_per_conversion","ratio"]
rows[].metrics.cpa.availabilitystringObligatorio en el objeto principal
  • enum: ["available","missing_input","zero_denominator","incompatible","partial"]
rows[].metrics.cpa.reasonstring | nullObligatorio en el objeto principal—
rows[].metrics.cpa.reasonanyOf 1stringObligatorio en el objeto principal
  • maxLength: 300
rows[].metrics.cpa.reasonanyOf 2nullObligatorio en el objeto principal—
rows[].metrics.cpa.input_refsarrayObligatorio en el objeto principal
  • maxItems: 2000
rows[].metrics.cpa.input_refs[]stringOpcional / elemento
  • maxLength: 300
rows[].metrics.attributed_roasobjectObligatorio en el objeto principal—
rows[].metrics.attributed_roas.valuestring | nullObligatorio en el objeto principal—
rows[].metrics.attributed_roas.valueanyOf 1stringObligatorio en el objeto principal
  • pattern: "^\\d{1,24}(?:\\.\\d{1,6})?$"
rows[].metrics.attributed_roas.valueanyOf 2nullObligatorio en el objeto principal—
rows[].metrics.attributed_roas.unitstringObligatorio en el objeto principal
  • enum: ["currency","count","currency_per_click","currency_per_conversion","ratio"]
rows[].metrics.attributed_roas.availabilitystringObligatorio en el objeto principal
  • enum: ["available","missing_input","zero_denominator","incompatible","partial"]
rows[].metrics.attributed_roas.reasonstring | nullObligatorio en el objeto principal—
rows[].metrics.attributed_roas.reasonanyOf 1stringObligatorio en el objeto principal
  • maxLength: 300
rows[].metrics.attributed_roas.reasonanyOf 2nullObligatorio en el objeto principal—
rows[].metrics.attributed_roas.input_refsarrayObligatorio en el objeto principal
  • maxItems: 2000
rows[].metrics.attributed_roas.input_refs[]stringOpcional / elemento
  • maxLength: 300
totalsobjectObligatorio en el objeto principal—
totals.spendobjectObligatorio en el objeto principal—
totals.spend.valuestring | nullObligatorio en el objeto principal—
totals.spend.valueanyOf 1stringObligatorio en el objeto principal
  • pattern: "^\\d{1,24}(?:\\.\\d{1,6})?$"
totals.spend.valueanyOf 2nullObligatorio en el objeto principal—
totals.spend.unitstringObligatorio en el objeto principal
  • enum: ["currency","count","currency_per_click","currency_per_conversion","ratio"]
totals.spend.availabilitystringObligatorio en el objeto principal
  • enum: ["available","missing_input","zero_denominator","incompatible","partial"]
totals.spend.reasonstring | nullObligatorio en el objeto principal—
totals.spend.reasonanyOf 1stringObligatorio en el objeto principal
  • maxLength: 300
totals.spend.reasonanyOf 2nullObligatorio en el objeto principal—
totals.spend.input_refsarrayObligatorio en el objeto principal
  • maxItems: 2000
totals.spend.input_refs[]stringOpcional / elemento
  • maxLength: 300
totals.clicksobjectObligatorio en el objeto principal—
totals.clicks.valuestring | nullObligatorio en el objeto principal—
totals.clicks.valueanyOf 1stringObligatorio en el objeto principal
  • pattern: "^\\d{1,24}(?:\\.\\d{1,6})?$"
totals.clicks.valueanyOf 2nullObligatorio en el objeto principal—
totals.clicks.unitstringObligatorio en el objeto principal
  • enum: ["currency","count","currency_per_click","currency_per_conversion","ratio"]
totals.clicks.availabilitystringObligatorio en el objeto principal
  • enum: ["available","missing_input","zero_denominator","incompatible","partial"]
totals.clicks.reasonstring | nullObligatorio en el objeto principal—
totals.clicks.reasonanyOf 1stringObligatorio en el objeto principal
  • maxLength: 300
totals.clicks.reasonanyOf 2nullObligatorio en el objeto principal—
totals.clicks.input_refsarrayObligatorio en el objeto principal
  • maxItems: 2000
totals.clicks.input_refs[]stringOpcional / elemento
  • maxLength: 300
totals.conversionsobjectObligatorio en el objeto principal—
totals.conversions.valuestring | nullObligatorio en el objeto principal—
totals.conversions.valueanyOf 1stringObligatorio en el objeto principal
  • pattern: "^\\d{1,24}(?:\\.\\d{1,6})?$"
totals.conversions.valueanyOf 2nullObligatorio en el objeto principal—
totals.conversions.unitstringObligatorio en el objeto principal
  • enum: ["currency","count","currency_per_click","currency_per_conversion","ratio"]
totals.conversions.availabilitystringObligatorio en el objeto principal
  • enum: ["available","missing_input","zero_denominator","incompatible","partial"]
totals.conversions.reasonstring | nullObligatorio en el objeto principal—
totals.conversions.reasonanyOf 1stringObligatorio en el objeto principal
  • maxLength: 300
totals.conversions.reasonanyOf 2nullObligatorio en el objeto principal—
totals.conversions.input_refsarrayObligatorio en el objeto principal
  • maxItems: 2000
totals.conversions.input_refs[]stringOpcional / elemento
  • maxLength: 300
totals.attributed_revenueobjectObligatorio en el objeto principal—
totals.attributed_revenue.valuestring | nullObligatorio en el objeto principal—
totals.attributed_revenue.valueanyOf 1stringObligatorio en el objeto principal
  • pattern: "^\\d{1,24}(?:\\.\\d{1,6})?$"
totals.attributed_revenue.valueanyOf 2nullObligatorio en el objeto principal—
totals.attributed_revenue.unitstringObligatorio en el objeto principal
  • enum: ["currency","count","currency_per_click","currency_per_conversion","ratio"]
totals.attributed_revenue.availabilitystringObligatorio en el objeto principal
  • enum: ["available","missing_input","zero_denominator","incompatible","partial"]
totals.attributed_revenue.reasonstring | nullObligatorio en el objeto principal—
totals.attributed_revenue.reasonanyOf 1stringObligatorio en el objeto principal
  • maxLength: 300
totals.attributed_revenue.reasonanyOf 2nullObligatorio en el objeto principal—
totals.attributed_revenue.input_refsarrayObligatorio en el objeto principal
  • maxItems: 2000
totals.attributed_revenue.input_refs[]stringOpcional / elemento
  • maxLength: 300
totals.cpcobjectObligatorio en el objeto principal—
totals.cpc.valuestring | nullObligatorio en el objeto principal—
totals.cpc.valueanyOf 1stringObligatorio en el objeto principal
  • pattern: "^\\d{1,24}(?:\\.\\d{1,6})?$"
totals.cpc.valueanyOf 2nullObligatorio en el objeto principal—
totals.cpc.unitstringObligatorio en el objeto principal
  • enum: ["currency","count","currency_per_click","currency_per_conversion","ratio"]
totals.cpc.availabilitystringObligatorio en el objeto principal
  • enum: ["available","missing_input","zero_denominator","incompatible","partial"]
totals.cpc.reasonstring | nullObligatorio en el objeto principal—
totals.cpc.reasonanyOf 1stringObligatorio en el objeto principal
  • maxLength: 300
totals.cpc.reasonanyOf 2nullObligatorio en el objeto principal—
totals.cpc.input_refsarrayObligatorio en el objeto principal
  • maxItems: 2000
totals.cpc.input_refs[]stringOpcional / elemento
  • maxLength: 300
totals.cpaobjectObligatorio en el objeto principal—
totals.cpa.valuestring | nullObligatorio en el objeto principal—
totals.cpa.valueanyOf 1stringObligatorio en el objeto principal
  • pattern: "^\\d{1,24}(?:\\.\\d{1,6})?$"
totals.cpa.valueanyOf 2nullObligatorio en el objeto principal—
totals.cpa.unitstringObligatorio en el objeto principal
  • enum: ["currency","count","currency_per_click","currency_per_conversion","ratio"]
totals.cpa.availabilitystringObligatorio en el objeto principal
  • enum: ["available","missing_input","zero_denominator","incompatible","partial"]
totals.cpa.reasonstring | nullObligatorio en el objeto principal—
totals.cpa.reasonanyOf 1stringObligatorio en el objeto principal
  • maxLength: 300
totals.cpa.reasonanyOf 2nullObligatorio en el objeto principal—
totals.cpa.input_refsarrayObligatorio en el objeto principal
  • maxItems: 2000
totals.cpa.input_refs[]stringOpcional / elemento
  • maxLength: 300
totals.attributed_roasobjectObligatorio en el objeto principal—
totals.attributed_roas.valuestring | nullObligatorio en el objeto principal—
totals.attributed_roas.valueanyOf 1stringObligatorio en el objeto principal
  • pattern: "^\\d{1,24}(?:\\.\\d{1,6})?$"
totals.attributed_roas.valueanyOf 2nullObligatorio en el objeto principal—
totals.attributed_roas.unitstringObligatorio en el objeto principal
  • enum: ["currency","count","currency_per_click","currency_per_conversion","ratio"]
totals.attributed_roas.availabilitystringObligatorio en el objeto principal
  • enum: ["available","missing_input","zero_denominator","incompatible","partial"]
totals.attributed_roas.reasonstring | nullObligatorio en el objeto principal—
totals.attributed_roas.reasonanyOf 1stringObligatorio en el objeto principal
  • maxLength: 300
totals.attributed_roas.reasonanyOf 2nullObligatorio en el objeto principal—
totals.attributed_roas.input_refsarrayObligatorio en el objeto principal
  • maxItems: 2000
totals.attributed_roas.input_refs[]stringOpcional / elemento
  • maxLength: 300
gapsarrayObligatorio en el objeto principal
  • maxItems: 1000
gaps[]stringOpcional / elemento
  • maxLength: 300
suggestionsarrayObligatorio en el objeto principal
  • maxItems: 3
suggestions[]objectOpcional / elemento—
suggestions[].rule_idstringObligatorio en el objeto principal
  • enum: ["supply_revenue","review_comparable_creative_test","complete_coverage"]
suggestions[].rule_versionnumberObligatorio en el objeto principal
  • const: 1
suggestions[].proposalstringObligatorio en el objeto principal
  • maxLength: 600
suggestions[].input_refsarrayObligatorio en el objeto principal
  • maxItems: 2000
suggestions[].input_refs[]stringOpcional / elemento
  • maxLength: 300
suggestions[].limitationsstringObligatorio en el objeto principal
  • const: "Observational comparison only; no causal uplift or profitability claim. Human review required."
JSON Schema completo
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "contract_version": {
      "type": "string",
      "const": "ad-performance/v1"
    },
    "source_id": {
      "type": "string",
      "maxLength": 100
    },
    "source_sha256": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$"
    },
    "identity_verification": {
      "type": "string",
      "enum": [
        "customer_supplied",
        "accepted_provider_grant"
      ]
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Z]{3}$"
    },
    "timezone": {
      "type": "string",
      "maxLength": 100
    },
    "selection": {
      "type": "object",
      "properties": {
        "provider_api_version": {
          "type": "string",
          "const": "v26.0"
        },
        "provider_account_id": {
          "type": "string",
          "pattern": "^[1-9]\\d{1,24}$"
        },
        "currency": {
          "type": "string",
          "pattern": "^[A-Z]{3}$"
        },
        "timezone": {
          "type": "string",
          "maxLength": 100
        },
        "level": {
          "type": "string",
          "enum": [
            "campaign",
            "adset",
            "ad"
          ]
        },
        "start_date": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
        },
        "end_date": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
        },
        "action_attribution_windows": {
          "minItems": 1,
          "maxItems": 1,
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "1d_click",
              "7d_click",
              "1d_view"
            ]
          }
        },
        "action_report_time": {
          "type": "string",
          "enum": [
            "impression",
            "conversion"
          ]
        },
        "conversion_action_type": {
          "type": "string",
          "maxLength": 100
        },
        "revenue_action_type": {
          "type": "string",
          "maxLength": 100
        }
      },
      "required": [
        "provider_api_version",
        "provider_account_id",
        "currency",
        "timezone",
        "level",
        "start_date",
        "end_date",
        "action_attribution_windows",
        "action_report_time",
        "conversion_action_type",
        "revenue_action_type"
      ]
    },
    "complete": {
      "type": "boolean"
    },
    "rows": {
      "maxItems": 500,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "row_id": {
            "type": "string",
            "maxLength": 100
          },
          "metrics": {
            "type": "object",
            "properties": {
              "spend": {
                "type": "object",
                "properties": {
                  "value": {
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^\\d{1,24}(?:\\.\\d{1,6})?$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "unit": {
                    "type": "string",
                    "enum": [
                      "currency",
                      "count",
                      "currency_per_click",
                      "currency_per_conversion",
                      "ratio"
                    ]
                  },
                  "availability": {
                    "type": "string",
                    "enum": [
                      "available",
                      "missing_input",
                      "zero_denominator",
                      "incompatible",
                      "partial"
                    ]
                  },
                  "reason": {
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 300
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "input_refs": {
                    "maxItems": 2000,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "maxLength": 300
                    }
                  }
                },
                "required": [
                  "value",
                  "unit",
                  "availability",
                  "reason",
                  "input_refs"
                ]
              },
              "clicks": {
                "type": "object",
                "properties": {
                  "value": {
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^\\d{1,24}(?:\\.\\d{1,6})?$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "unit": {
                    "type": "string",
                    "enum": [
                      "currency",
                      "count",
                      "currency_per_click",
                      "currency_per_conversion",
                      "ratio"
                    ]
                  },
                  "availability": {
                    "type": "string",
                    "enum": [
                      "available",
                      "missing_input",
                      "zero_denominator",
                      "incompatible",
                      "partial"
                    ]
                  },
                  "reason": {
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 300
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "input_refs": {
                    "maxItems": 2000,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "maxLength": 300
                    }
                  }
                },
                "required": [
                  "value",
                  "unit",
                  "availability",
                  "reason",
                  "input_refs"
                ]
              },
              "conversions": {
                "type": "object",
                "properties": {
                  "value": {
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^\\d{1,24}(?:\\.\\d{1,6})?$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "unit": {
                    "type": "string",
                    "enum": [
                      "currency",
                      "count",
                      "currency_per_click",
                      "currency_per_conversion",
                      "ratio"
                    ]
                  },
                  "availability": {
                    "type": "string",
                    "enum": [
                      "available",
                      "missing_input",
                      "zero_denominator",
                      "incompatible",
                      "partial"
                    ]
                  },
                  "reason": {
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 300
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "input_refs": {
                    "maxItems": 2000,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "maxLength": 300
                    }
                  }
                },
                "required": [
                  "value",
                  "unit",
                  "availability",
                  "reason",
                  "input_refs"
                ]
              },
              "attributed_revenue": {
                "type": "object",
                "properties": {
                  "value": {
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^\\d{1,24}(?:\\.\\d{1,6})?$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "unit": {
                    "type": "string",
                    "enum": [
                      "currency",
                      "count",
                      "currency_per_click",
                      "currency_per_conversion",
                      "ratio"
                    ]
                  },
                  "availability": {
                    "type": "string",
                    "enum": [
                      "available",
                      "missing_input",
                      "zero_denominator",
                      "incompatible",
                      "partial"
                    ]
                  },
                  "reason": {
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 300
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "input_refs": {
                    "maxItems": 2000,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "maxLength": 300
                    }
                  }
                },
                "required": [
                  "value",
                  "unit",
                  "availability",
                  "reason",
                  "input_refs"
                ]
              },
              "cpc": {
                "type": "object",
                "properties": {
                  "value": {
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^\\d{1,24}(?:\\.\\d{1,6})?$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "unit": {
                    "type": "string",
                    "enum": [
                      "currency",
                      "count",
                      "currency_per_click",
                      "currency_per_conversion",
                      "ratio"
                    ]
                  },
                  "availability": {
                    "type": "string",
                    "enum": [
                      "available",
                      "missing_input",
                      "zero_denominator",
                      "incompatible",
                      "partial"
                    ]
                  },
                  "reason": {
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 300
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "input_refs": {
                    "maxItems": 2000,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "maxLength": 300
                    }
                  }
                },
                "required": [
                  "value",
                  "unit",
                  "availability",
                  "reason",
                  "input_refs"
                ]
              },
              "cpa": {
                "type": "object",
                "properties": {
                  "value": {
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^\\d{1,24}(?:\\.\\d{1,6})?$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "unit": {
                    "type": "string",
                    "enum": [
                      "currency",
                      "count",
                      "currency_per_click",
                      "currency_per_conversion",
                      "ratio"
                    ]
                  },
                  "availability": {
                    "type": "string",
                    "enum": [
                      "available",
                      "missing_input",
                      "zero_denominator",
                      "incompatible",
                      "partial"
                    ]
                  },
                  "reason": {
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 300
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "input_refs": {
                    "maxItems": 2000,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "maxLength": 300
                    }
                  }
                },
                "required": [
                  "value",
                  "unit",
                  "availability",
                  "reason",
                  "input_refs"
                ]
              },
              "attributed_roas": {
                "type": "object",
                "properties": {
                  "value": {
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^\\d{1,24}(?:\\.\\d{1,6})?$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "unit": {
                    "type": "string",
                    "enum": [
                      "currency",
                      "count",
                      "currency_per_click",
                      "currency_per_conversion",
                      "ratio"
                    ]
                  },
                  "availability": {
                    "type": "string",
                    "enum": [
                      "available",
                      "missing_input",
                      "zero_denominator",
                      "incompatible",
                      "partial"
                    ]
                  },
                  "reason": {
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 300
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "input_refs": {
                    "maxItems": 2000,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "maxLength": 300
                    }
                  }
                },
                "required": [
                  "value",
                  "unit",
                  "availability",
                  "reason",
                  "input_refs"
                ]
              }
            },
            "required": [
              "spend",
              "clicks",
              "conversions",
              "attributed_revenue",
              "cpc",
              "cpa",
              "attributed_roas"
            ]
          }
        },
        "required": [
          "row_id",
          "metrics"
        ]
      }
    },
    "totals": {
      "type": "object",
      "properties": {
        "spend": {
          "type": "object",
          "properties": {
            "value": {
              "anyOf": [
                {
                  "type": "string",
                  "pattern": "^\\d{1,24}(?:\\.\\d{1,6})?$"
                },
                {
                  "type": "null"
                }
              ]
            },
            "unit": {
              "type": "string",
              "enum": [
                "currency",
                "count",
                "currency_per_click",
                "currency_per_conversion",
                "ratio"
              ]
            },
            "availability": {
              "type": "string",
              "enum": [
                "available",
                "missing_input",
                "zero_denominator",
                "incompatible",
                "partial"
              ]
            },
            "reason": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 300
                },
                {
                  "type": "null"
                }
              ]
            },
            "input_refs": {
              "maxItems": 2000,
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 300
              }
            }
          },
          "required": [
            "value",
            "unit",
            "availability",
            "reason",
            "input_refs"
          ]
        },
        "clicks": {
          "type": "object",
          "properties": {
            "value": {
              "anyOf": [
                {
                  "type": "string",
                  "pattern": "^\\d{1,24}(?:\\.\\d{1,6})?$"
                },
                {
                  "type": "null"
                }
              ]
            },
            "unit": {
              "type": "string",
              "enum": [
                "currency",
                "count",
                "currency_per_click",
                "currency_per_conversion",
                "ratio"
              ]
            },
            "availability": {
              "type": "string",
              "enum": [
                "available",
                "missing_input",
                "zero_denominator",
                "incompatible",
                "partial"
              ]
            },
            "reason": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 300
                },
                {
                  "type": "null"
                }
              ]
            },
            "input_refs": {
              "maxItems": 2000,
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 300
              }
            }
          },
          "required": [
            "value",
            "unit",
            "availability",
            "reason",
            "input_refs"
          ]
        },
        "conversions": {
          "type": "object",
          "properties": {
            "value": {
              "anyOf": [
                {
                  "type": "string",
                  "pattern": "^\\d{1,24}(?:\\.\\d{1,6})?$"
                },
                {
                  "type": "null"
                }
              ]
            },
            "unit": {
              "type": "string",
              "enum": [
                "currency",
                "count",
                "currency_per_click",
                "currency_per_conversion",
                "ratio"
              ]
            },
            "availability": {
              "type": "string",
              "enum": [
                "available",
                "missing_input",
                "zero_denominator",
                "incompatible",
                "partial"
              ]
            },
            "reason": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 300
                },
                {
                  "type": "null"
                }
              ]
            },
            "input_refs": {
              "maxItems": 2000,
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 300
              }
            }
          },
          "required": [
            "value",
            "unit",
            "availability",
            "reason",
            "input_refs"
          ]
        },
        "attributed_revenue": {
          "type": "object",
          "properties": {
            "value": {
              "anyOf": [
                {
                  "type": "string",
                  "pattern": "^\\d{1,24}(?:\\.\\d{1,6})?$"
                },
                {
                  "type": "null"
                }
              ]
            },
            "unit": {
              "type": "string",
              "enum": [
                "currency",
                "count",
                "currency_per_click",
                "currency_per_conversion",
                "ratio"
              ]
            },
            "availability": {
              "type": "string",
              "enum": [
                "available",
                "missing_input",
                "zero_denominator",
                "incompatible",
                "partial"
              ]
            },
            "reason": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 300
                },
                {
                  "type": "null"
                }
              ]
            },
            "input_refs": {
              "maxItems": 2000,
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 300
              }
            }
          },
          "required": [
            "value",
            "unit",
            "availability",
            "reason",
            "input_refs"
          ]
        },
        "cpc": {
          "type": "object",
          "properties": {
            "value": {
              "anyOf": [
                {
                  "type": "string",
                  "pattern": "^\\d{1,24}(?:\\.\\d{1,6})?$"
                },
                {
                  "type": "null"
                }
              ]
            },
            "unit": {
              "type": "string",
              "enum": [
                "currency",
                "count",
                "currency_per_click",
                "currency_per_conversion",
                "ratio"
              ]
            },
            "availability": {
              "type": "string",
              "enum": [
                "available",
                "missing_input",
                "zero_denominator",
                "incompatible",
                "partial"
              ]
            },
            "reason": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 300
                },
                {
                  "type": "null"
                }
              ]
            },
            "input_refs": {
              "maxItems": 2000,
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 300
              }
            }
          },
          "required": [
            "value",
            "unit",
            "availability",
            "reason",
            "input_refs"
          ]
        },
        "cpa": {
          "type": "object",
          "properties": {
            "value": {
              "anyOf": [
                {
                  "type": "string",
                  "pattern": "^\\d{1,24}(?:\\.\\d{1,6})?$"
                },
                {
                  "type": "null"
                }
              ]
            },
            "unit": {
              "type": "string",
              "enum": [
                "currency",
                "count",
                "currency_per_click",
                "currency_per_conversion",
                "ratio"
              ]
            },
            "availability": {
              "type": "string",
              "enum": [
                "available",
                "missing_input",
                "zero_denominator",
                "incompatible",
                "partial"
              ]
            },
            "reason": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 300
                },
                {
                  "type": "null"
                }
              ]
            },
            "input_refs": {
              "maxItems": 2000,
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 300
              }
            }
          },
          "required": [
            "value",
            "unit",
            "availability",
            "reason",
            "input_refs"
          ]
        },
        "attributed_roas": {
          "type": "object",
          "properties": {
            "value": {
              "anyOf": [
                {
                  "type": "string",
                  "pattern": "^\\d{1,24}(?:\\.\\d{1,6})?$"
                },
                {
                  "type": "null"
                }
              ]
            },
            "unit": {
              "type": "string",
              "enum": [
                "currency",
                "count",
                "currency_per_click",
                "currency_per_conversion",
                "ratio"
              ]
            },
            "availability": {
              "type": "string",
              "enum": [
                "available",
                "missing_input",
                "zero_denominator",
                "incompatible",
                "partial"
              ]
            },
            "reason": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 300
                },
                {
                  "type": "null"
                }
              ]
            },
            "input_refs": {
              "maxItems": 2000,
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 300
              }
            }
          },
          "required": [
            "value",
            "unit",
            "availability",
            "reason",
            "input_refs"
          ]
        }
      },
      "required": [
        "spend",
        "clicks",
        "conversions",
        "attributed_revenue",
        "cpc",
        "cpa",
        "attributed_roas"
      ]
    },
    "gaps": {
      "maxItems": 1000,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 300
      }
    },
    "suggestions": {
      "maxItems": 3,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "rule_id": {
            "type": "string",
            "enum": [
              "supply_revenue",
              "review_comparable_creative_test",
              "complete_coverage"
            ]
          },
          "rule_version": {
            "type": "number",
            "const": 1
          },
          "proposal": {
            "type": "string",
            "maxLength": 600
          },
          "input_refs": {
            "maxItems": 2000,
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 300
            }
          },
          "limitations": {
            "type": "string",
            "const": "Observational comparison only; no causal uplift or profitability claim. Human review required."
          }
        },
        "required": [
          "rule_id",
          "rule_version",
          "proposal",
          "input_refs",
          "limitations"
        ]
      }
    }
  },
  "required": [
    "contract_version",
    "source_id",
    "source_sha256",
    "identity_verification",
    "currency",
    "timezone",
    "selection",
    "complete",
    "rows",
    "totals",
    "gaps",
    "suggestions"
  ]
}

Errores y reintentos seguros

Comprueba el estado HTTP y el cuerpo de respuesta. Un error de validación 400 puede contener un ZodError; los errores del controlador usan los campos error, message y code. Conserva request_id o x-request-id para el diagnóstico, sin credenciales. Corrige los errores de acceso 401/403 antes de reintentar y respeta Retry-After para 429. Si una escritura es incierta o devuelve 5xx, consulta primero el resultado existente. Reutiliza una clave de idempotencia solo donde se admita; el comportamiento de reintento varía por operación y no garantiza una entrega exactamente una vez.

Guía de solución de problemas

Ejemplos

Estos ejemplos usan valores ficticios comprobados con los esquemas. Sustituye los IDs por otros autorizados, los archivos multimedia por recursos listos y las fechas por tu hora de publicación confirmada. Comprueba la elegibilidad de la cuenta antes de enviar una escritura. Esta página no envía solicitudes API.

Establece SOSOAPI_ACCESS_TOKEN en tu servidor con una credencial aceptada por esta operación y mantenla fuera del código del navegador. Para un agente de IA, usa sosoapi auth login para iniciar sesión en el navegador y deja a la CLI renovar sus credenciales.

request.json

{
  "workspace_id": "11111111-1111-4111-8111-111111111111",
  "source_kind": "customer_import",
  "source_id": "example",
  "provider_api_version": "v26.0",
  "provider_account_id": "12345",
  "currency": "USD",
  "timezone": "UTC",
  "level": "campaign",
  "start_date": "2099-01-15",
  "end_date": "2099-01-15",
  "action_attribution_windows": [
    "1d_click"
  ],
  "action_report_time": "impression",
  "conversion_action_type": "example",
  "revenue_action_type": "example",
  "complete": false,
  "rows": []
}

cURL

curl --request POST \
  "https://gqeshlawtcexsapabaui.supabase.co/functions/v1/advertising-api/performance/analyze" \
  -H "Authorization: Bearer $SOSOAPI_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  --data-binary @request.json

JavaScript

// Server-side JavaScript. Do not print tokens or credential-bearing responses.
const token = process.env.SOSOAPI_ACCESS_TOKEN;
if (!token) throw new Error("Set an accepted credential for this operation");
const response = await fetch("https://gqeshlawtcexsapabaui.supabase.co/functions/v1/advertising-api/performance/analyze", {
  method: "POST",
  headers: { "Content-Type": "application/json", Authorization: "Bearer " + token },
  body: JSON.stringify({
  "workspace_id": "11111111-1111-4111-8111-111111111111",
  "source_kind": "customer_import",
  "source_id": "example",
  "provider_api_version": "v26.0",
  "provider_account_id": "12345",
  "currency": "USD",
  "timezone": "UTC",
  "level": "campaign",
  "start_date": "2099-01-15",
  "end_date": "2099-01-15",
  "action_attribution_windows": [
    "1d_click"
  ],
  "action_report_time": "impression",
  "conversion_action_type": "example",
  "revenue_action_type": "example",
  "complete": false,
  "rows": []
})
});
const result = await response.json();
// Check response.ok, the operation-specific body and completion state before continuing.

CLI

npx sosoapi api post /advertising-api/performance/analyze < request.json

Ejemplo de respuesta sintética

{
  "contract_version": "ad-performance/v1",
  "source_id": "example",
  "source_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  "identity_verification": "customer_supplied",
  "currency": "USD",
  "timezone": "UTC",
  "selection": {
    "provider_api_version": "v26.0",
    "provider_account_id": "12345",
    "currency": "USD",
    "timezone": "UTC",
    "level": "campaign",
    "start_date": "2099-01-15",
    "end_date": "2099-01-15",
    "action_attribution_windows": [
      "1d_click"
    ],
    "action_report_time": "impression",
    "conversion_action_type": "example",
    "revenue_action_type": "example"
  },
  "complete": false,
  "rows": [],
  "totals": {
    "spend": {
      "value": null,
      "unit": "currency",
      "availability": "available",
      "reason": null,
      "input_refs": []
    },
    "clicks": {
      "value": null,
      "unit": "currency",
      "availability": "available",
      "reason": null,
      "input_refs": []
    },
    "conversions": {
      "value": null,
      "unit": "currency",
      "availability": "available",
      "reason": null,
      "input_refs": []
    },
    "attributed_revenue": {
      "value": null,
      "unit": "currency",
      "availability": "available",
      "reason": null,
      "input_refs": []
    },
    "cpc": {
      "value": null,
      "unit": "currency",
      "availability": "available",
      "reason": null,
      "input_refs": []
    },
    "cpa": {
      "value": null,
      "unit": "currency",
      "availability": "available",
      "reason": null,
      "input_refs": []
    },
    "attributed_roas": {
      "value": null,
      "unit": "currency",
      "availability": "available",
      "reason": null,
      "input_refs": []
    }
  },
  "gaps": [],
  "suggestions": []
}

MCP: sosoapi_ads_performance_analyze