Servicio GraphQL

Información general

GraphQL es un lenguaje de consulta para API y un tiempo de ejecución que le permite solicitar solo los datos que necesita. Proporciona una recuperación de datos precisa y eficaz y reduce la sobrecarga que a menudo se asocia con la API de transferencia de estado representacional (REST).

GraphQL también aborda varias limitaciones de las arquitecturas basadas en REST, que incluyen:

  • Permitiéndole obtener todos los datos necesarios en una sola consulta.
  • Para evitar la captura excesiva, devuelva solo los campos que solicita.
  • Admitir solicitudes de varios recursos para mejorar el rendimiento.

GraphQL garantiza patrones de acceso más seguros, modernos y escalables, al tiempo que conserva la flexibilidad que necesita.

Requisitos previos

Antes de iniciar esta configuración, revise los conceptos fundamentales descritos en las páginas a las que se hace referencia:

  • Introducción a la API: abarca los entornos de prueba, las restricciones de uso, la semántica de la API, como la ejecución de comandos, el filtrado y la ordenación, así como las prácticas recomendadas
  • Servicio de autenticación : siempre complete primero la autenticación al usar los servicios de API. Después de autenticarse, escriba el token en el archivo de cookies para futuras solicitudes.

Autenticación

Para obtener más información sobre la autenticación, consulte API de Yield Analytics - Proceso de autenticación.

Tipos de contenido

La API de REST de servicio está diseñada actualmente para admitir el siguiente tipo de contenido:

  • JSON - using Content-type: application/json

Seleccionar el tipo de contenido deseado es una elección que el desarrollador de API debe hacer caso por caso. La funcionalidad de la API es simétrica entre los tipos de contenido. Los desarrolladores de API pueden especificar el tipo de contenido deseado en los parámetros del método HTTP GET o POST o a través de su biblioteca de cliente AJAX o HTTP.

Comprobación de errores y códigos de estado

Los desarrolladores de API deben comprobar los códigos de respuesta HTTP devueltos desde la API REST de servicio para detectar errores propagados a partir de llamadas API. Las llamadas correctas al servicio darán como resultado códigos de respuesta de 200 intervalos. Las respuestas HTTP de rango 400 y 500 denotan errores. Es probable que los códigos de respuesta y el texto específicos experimenten cambios durante el desarrollo BETA de la API, sin embargo, los rangos no lo harán.

Confidencialidad

La confidencialidad se mantiene mediante el uso de la comunicación basada en Secure Socket Layer para interactuar con la API de Yield Analytics. Los desarrolladores de API deben preferir el uso de HTTPS sobre una comunicación insegura de HTTP siempre que sea posible. Consulte la biblioteca de clientes HTTP para saber cómo habilitar HTTP sobre SSL al desarrollar fuera del contexto de un explorador web.

API de REST

Método HTTP Endpoint Description
POST https://api.appnexus.com/imf/api/v1/rest/graphql Recupera los nombres de productos y las listas de identificadores de acuerdo con los criterios de filtro seleccionados.
POST https://api.appnexus.com/imf/api/v1/rest/graphql Crear, modificar o actualizar varios productos mediante la carga de archivos.
POST https://api.appnexus.com/imf/api/v1/rest/graphql Analizar la superposición de productos y las relaciones de capacidad mediante consultas sencillas (id. de producto/nombres/grupos) o expresiones de segmentación dinámica.
POST https://api.appnexus.com/imf/api/v1/rest/graphql Administrar ajustes de previsión manuales (MFA): enumerar, agregar, editar y eliminar invalidaciones de previsión para la capacidad del inventario de anuncios.

Paths

Listado de productos

El servicio de listado de productos recupera los nombres e identificadores de los productos en función de los filtros que aplique. El sistema devuelve solo aquellos productos que cumplen los criterios seleccionados, lo que permite una navegación eficiente y un uso posterior de los metadatos del producto.

Campos JSON

Parámetro Campo Descripción
reportType string Required
Especifica el tipo de informe que se generará. Este campo debe tener una de las constantes de la lista siguiente:
- ALL_CUSTOM_PRODUCTS
- ACTIVE_CUSTOM_PRODUCTS
- ALL_REPORTING_PRODUCTS
- ACTIVE_REPORTING_PRODUCTS
- ALL_SEASONAL_PRODUCTS
- ACTIVE_SEASONAL_PRODUCTS
- ALL_RATE_CARD_PRODUCTS
- ACTIVE_RATE_CARD_PRODUCTS
- PRODUCTS_BY_NAME
- ACTIVE_PRODUCTS_BY_NAME
- PRODUCTS_BY_CHARACTERISTICS
- PRODUCT_GROUP
- ACTIVE_PRODUCT_GROUP
- ACTIVE_PRODUCTS_BY_CHARACTERISTICS
startDate string Necesario.
La fecha de inicio de los datos del informe.
endDate string La fecha de finalización de los datos del informe.
NOTA: Si no se proporciona, seleccionará la misma fecha que startDate.
periodicidad integer Define la frecuencia o granularidad de los resultados. Se puede utilizar cualquiera de los siguientes valores:
- DIARIO
- SEMANAL
- MENSUAL
- TRIMESTRAL
- ANUAL
- TODO
características similares string Lista de atributos clave que describen las especificaciones o propiedades del producto.
NOTA: Solo es necesario cuando report_type es ACTIVE_PRODUCTS_BY_CHARACTERISTICS o PRODUCTS_BY_CHARACTERISTICS
names string Nombres legibles para productos individuales.
NOTA: Solo es necesario cuando report_type es ACTIVE_PRODUCTS_BY_NAME o PRODUCTS_BY_NAME
productGroupNames string Agrupación lógica o categoría a la que pertenece el producto.
NOTA: Solo es necesario cuando report_type es ACTIVE_PRODUCT_GROUP o PRODUCT_GROUP
Ejemplo de solicitud de cURL

Todos los productos, tanto activos como inactivos, con el tipo de producto establecido en Personalizado: ALL_CUSTOM_PRODUCTS

$ curl 'https://api.appnexus.com/imf/api/v1/rest/graphql'
{
  query {
    getProductListing(
      reportType: ALL_CUSTOM_PRODUCTS
      startDate: "2025-10-01"
      periodicity: DAILY
    ) {
      productId
      productName
    }
  }
}

Productos activos con el tipo de producto establecido en Personalizado: ACTIVE_CUSTOM_PRODUCTS

Nota:

Todas las respuestas a las consultas siguen un formato único y coherente, en lugar de usar diferentes variaciones de respuestas de ejemplo.

$ curl 'https://api.appnexus.com/imf/api/v1/rest/graphql'
{
  query {
    getProductListing(
      reportType: ACTIVE_CUSTOM_PRODUCTS
      startDate: "2025-10-01"
      periodicity: DAILY
    ) {
      productId
      productName
    }
  }
}

Todos los productos, tanto activos como inactivos, con el tipo de producto establecido en Informes: ALL_REPORTING_PRODUCTS

$ curl 'https://api.appnexus.com/imf/api/v1/rest/graphql'
{
  query {
    getProductListing(
      reportType: ALL_REPORTING_PRODUCTS
      startDate: "2025-10-01"
      periodicity: DAILY
    ) {
      productId
      productName
    }
  }
}

Todos los productos activos con el tipo de producto establecido en Informes: ACTIVE_REPORTING_PRODUCTS

$ curl 'https://api.appnexus.com/imf/api/v1/rest/graphql'
{
  query {
    getProductListing(
      reportType: ACTIVE_REPORTING_PRODUCTS
      startDate: "2025-10-01"
      periodicity: DAILY
    ) {
      productId
      productName
    }
  }
}

Todos los productos, tanto activos como inactivos, con el tipo de producto establecido en Modelo estacional: ALL_SEASONAL_PRODUCTS

$ curl 'https://api.appnexus.com/imf/api/v1/rest/graphql'
{
  query {
    getProductListing(
      reportType: ALL_SEASONAL_PRODUCTS
      startDate: "2025-10-01"
      periodicity: DAILY
    ) {
      productId
      productName
    }
  }
}

Productos activos con el tipo de producto establecido en Modelo estacional: ACTIVE_SEASONAL_PRODUCTS

$ curl 'https://api.appnexus.com/imf/api/v1/rest/graphql'
{
  query {
    getProductListing(
      reportType: ACTIVE_SEASONAL_PRODUCTS
      startDate: "2025-10-01"
      periodicity: DAILY
    ) {
      productId
      productName
    }
  }
}

Todos los productos, tanto activos como inactivos, con el tipo de producto establecido en Tabla de tarifas: ALL_RATE_CARD_PRODUCTS

$ curl 'https://api.appnexus.com/imf/api/v1/rest/graphql'
{
  query {
    getProductListing(
      reportType: ALL_RATE_CARD_PRODUCTS
      startDate: "2025-10-01"
      periodicity: DAILY
    ) {
      productId
      productName
    }
  }
}

Todos los productos activos con el tipo de producto establecido en Tarjeta de tarifas: ACTIVE_RATE_CARD_PRODUCTS

$ curl 'https://api.appnexus.com/imf/api/v1/rest/graphql'
{
  query {
    getProductListing(
      reportType: ACTIVE_RATE_CARD_PRODUCTS
      startDate: "2025-10-01"
      periodicity: DAILY
    ) {
      productId
      productName
    }
  }
}

Todos los productos, tanto activos como inactivos, enumerados por nombre: PRODUCTS_BY_NAME

Nota:

Nombres es un campo obligatorio para esta solicitud.

$ curl 'https://api.appnexus.com/imf/api/v1/rest/graphql'
{
  query {
    getProductListing(
      reportType: PRODUCTS_BY_NAME
      names: ["Display Banner 728x90", "Video Pre-Roll 30s"]
      startDate: "2025-10-01"
      periodicity: DAILY
    ) {
      productId
      productName
    }
  }
}

Todos los productos activos enumerados por nombre: ACTIVE_PRODUCTS_BY_NAME

Nota:

Nombres es un campo obligatorio para esta solicitud.

$ curl 'https://api.appnexus.com/imf/api/v1/rest/graphql'
{
  query {
    getProductListing(
      reportType: ACTIVE_PRODUCTS_BY_NAME
      names: ["Display Banner 728x90", "Video Pre-Roll 30s"]
      startDate: "2025-10-01"
      periodicity: DAILY
    ) {
      productId
      productName
    }
  }
}

Todos los productos, tanto activos como inactivos, que cumplan con las características especificadas - PRODUCTS_BY_CHARACTERISTICS

Nota:

characteristics es obligatorio para esta solicitud. Los valores de la matriz se evalúan mediante la lógica AND. Por ejemplo: WHERE size="780x320" AND duration=30.

$ curl 'https://api.appnexus.com/imf/api/v1/rest/graphql'
{
  query {
    getProductListing(
      reportType: PRODUCTS_BY_CHARACTERISTICS
      characteristics: ["size=780x320", "duration=30"]
      startDate: "2025-10-01"
      periodicity: DAILY
    ) {
      productId
      productName
    }
  }
}

Todos los productos activos que cumplan con las características especificadas - ACTIVE_PRODUCTS_BY_CHARACTERISTICS

Nota:

characteristics es obligatorio para esta solicitud. Los valores de la matriz se evalúan mediante la lógica AND. Por ejemplo: WHERE size="780x320" AND duration=30.

$ curl 'https://api.appnexus.com/imf/api/v1/rest/graphql'
{
  query {
    getProductListing(
      reportType: ACTIVE_PRODUCTS_BY_CHARACTERISTICS
      characteristics: ["size=780x320", "duration=30"]
      startDate: "2025-10-01"
      periodicity: DAILY
    ) {
      productId
      productName
    }
  }
}

Todos los productos, tanto activos como inactivos, con el grupo de productos especificado: PRODUCT_GROUP

Nota:

productGroupNames es obligatorio para esta solicitud.

$ curl 'https://api.appnexus.com/imf/api/v1/rest/graphql'
{
  query {
    getProductListing(
      reportType: PRODUCT_GROUP
      productGroupNames: ["Placement", "Video Inventory"]
      startDate: "2025-10-01"
      periodicity: DAILY
    ) {
      productId
      productName
    }
  }
}

Todos los productos activos con el grupo de productos especificado: ACTIVE_PRODUCT_GROUP

Nota:

productGroupNames es obligatorio para esta solicitud.

$ curl 'https://api.appnexus.com/imf/api/v1/rest/graphql'
{
  query {
    getProductListing(
      reportType: ACTIVE_PRODUCT_GROUP
      productGroupNames: ["Placement", "Video Inventory"]
      startDate: "2025-10-01"
      periodicity: DAILY
    ) {
      productId
      productName
    }
  }
}
Ejemplo de respuesta cURL
{
  "data": {
    "getProductListing": [
      {
        "productId": "11",
        "productName": "desktop native placement slot 1 - 11"
      },
      {
        "productId": "12",
        "productName": "native_featured_discount_details_page_tracker - 111"
      },
      {
        "productId": "-13",
        "productName": "Analyzed Network"
      },
      {
        "productId": "14",
        "productName": "hour_17"
      },
      {
        "productId": "15",
        "productName": "desktop native placement slot 2 - 1111"
      },
      {
        "productId": "-16",
        "productName": "Non-Analyzed Network"
      },
      {
        "productId": "17",
        "productName": "tracker - 112"
      }
    ]
  }
}

Creación de productos basados en archivos

La función de creación de productos basada en archivos le permite crear o actualizar productos en masa mediante un flujo de trabajo de carga de archivos.

Para crear o actualizar productos:

  • Cree un archivo .txt que contenga los datos necesarios del producto. Haga clic aquí para ver el archivo de .txt de ejemplo.
  • Cargue el archivo a través del punto de conexión designado.
  • Una vez cargado, el sistema guarda el contenido del archivo en la tabla de base de datos adecuada.
  • Luego, los datos se procesan y los productos se crean instantáneamente o se actualizan durante la siguiente ejecución de procesamiento nocturno.

Campos JSON

Parámetro Campo Descripción
productId string Id. de producto válido de la aplicación.
NOTA: Este campo solo es obligatorio dentro del archivo, cuando se actualiza un producto existente.
mutation UploadFile string Hace referencia a una operación de mutación de GraphQL que se usa para cargar un archivo en un servidor o en un punto final de API.
validateOnly booleano Si se establece en true, la aplicación GraphQL solo validará el archivo de texto. No insertará los datos del archivo de texto en la tabla, por lo que no se producirá la creación del producto. Este proceso sirve únicamente para validar los datos del archivo de texto. Si se establece en false, los productos se pondrán en cola para crearse durante la siguiente ejecución de procesamiento nocturno. Otros campos de la consulta, como mutación o UploadFile, no cambian y siempre serán los mismos en la consulta.
NOTA: Las únicas entradas permitidas son:
- validateOnly: verdadero o falso
- processNow: verdadero o falso
- 0: archivo
processNow booleano Si se establece en true, el trabajo de creación de productos desencadenará inmediatamente la creación de productos en la tabla real. En lugar de esperar a la siguiente ejecución de procesamiento, esto crea el producto inmediatamente. Si se establece en false, los productos se pondrán en cola para crearse durante la siguiente ejecución de procesamiento nocturno. Otros campos de la consulta, como mutación o UploadFile, no cambian.
NOTA: Las únicas entradas permitidas son:
- validateOnly: verdadero o falso
- processNow: verdadero o falso
- 0: archivo
mapa string Hace referencia a la variable de la operación de GraphQL que debe recibir los archivos cargados.
NOTA: El valor aquí siempre será { "0": ["variables.input.file"] }
Ejemplo de solicitud de cURL

validateOnly":true,"processNow":false

$ curl 'https://api.appnexus.com/imf/api/v1/rest/graphql' \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: multipart/form-data' \
  operations: {"query":"mutation UploadFile($input: CustomSeasonalModelInput!) { uploadCustomSeasonalModels(input: $input) { success messages { lineNumber message } } }","variables":{"input":{"file":null,"validateOnly":true,"processNow":false}}}
  map: { "0": ["variables.input.file"] }
  0: upload the file here

validateOnly":false,"processNow":true

curl `https://api.appnexus.com/imf/api/v1/rest/graphql`
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: multipart/form-data' \
operations: {"query":"mutation UploadFile($input: CustomSeasonalModelInput!) { uploadCustomSeasonalModels(input: $input) { success messages { lineNumber message } } }","variables":{"input":{"file":null,"validateOnly":false,"processNow":true}}}
map: { "0": ["variables.input.file"] }
0: upload the file here

validateOnly":false,"processNow":false

curl `https://api.appnexus.com/imf/api/v1/rest/graphql`
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: multipart/form-data' \
operations: {"query":"mutation UploadFile($input: CustomSeasonalModelInput!) { uploadCustomSeasonalModels(input: $input) { success messages { lineNumber message } } }","variables":{"input":{"file":null,"validateOnly":false,"processNow":false}}}
map: { "0": ["variables.input.file"] }
0: upload the file here

Ejemplo de respuesta cURL

validateOnly":false,"processNow":true

{ 
  "data": { 
    "uploadCustomSeasonalModels": { 
      "success": true, 
      "messages": [ 
      { 
        "lineNumber": null, 
            "message": "[INFO] Loaded 1 lines. Checking Line Operations...”        
                           }, 
      { 
        "lineNumber": 1, 
        "message": "[INFO] Line parsed successfully" 
      }, 
      { 
        "lineNumber": null, 
        "message": "[INFO] Line parsed successfully" 
      }, 
      { 
        "lineNumber": null, 
        "message": "[INFO] *** 1 products to process ***" 
      }, 
      { 
        "lineNumber": null, 
        "message": "[INFO] Validation completed successfully. 1 line processed." 
      }, 
      { 
        "lineNumber": null, 
        "message": "[INFO] Products have been successfully created" 
      }, 
      { 
        "lineNumber": null, 
        "message": "[INFO] PDI job triggered successfully " 
      } 
     ] 
    } 
  } 
}

validateOnly":false,"processNow":false

{
  "data": {
    "uploadCustomSeasonalModels": {
      "success": true,
      "messages": [
        {
          "lineNumber": null,
          "message": "[INFO] Loaded 1 lines. Checking Line Operations..."
        },
        {
          "lineNumber": 1,
          "message": "[INFO] Line parsed successfully"
        },
        {
          "lineNumber": null,
          "message": "[INFO] *** 1 products to process ***"
        },
        {
          "lineNumber": null,
          "message": "[INFO] Validation completed successfully. 1 lines processed."
        },
        {
          "lineNumber": null,
          "message": "[INFO] Products have been successfully queued for creation"
        }
      ]
    }
  }
}

Consulta de análisis de superposición o producto

La consulta de análisis de productos o superposiciones de Yield Analytics examina cómo se superponen las impresiones entre productos. Al analizar estas impresiones superpuestas, puedes comparar cómo se comparten las impresiones entre un producto de foco seleccionado, o un conjunto de atributos de destino, y los productos que se superponen con él.

El servicio admite dos métodos de consulta:

  • Consultas sencillas: Compara los nombres o id. de productos con otros nombres o identificadores de productos.
  • Consultas dinámicas: Compare una expresión de destino con un identificador de producto.

Campos JSON

Parámetro Campo Descripción
focusProductIds matriz Matriz de identificadores de producto que representan los productos principales para los que se solicita el análisis de superposición.
focusProductNames matriz Matriz de nombres correspondientes a los identificadores de producto de foco. .
focusProductGroupNames string Nombres de grupos de productos (por ejemplo, paquetes o categorías) a los que pertenecen los productos de foco.
focusProductIdsOrTargetExpressions string Permite definir el foco de un análisis de superposición ya sea enumerando identificadores de producto o proporcionando una expresión de segmentación.
overlapsToAnalyzeProductIds matriz Matriz de identificadores de producto que se deben comparar con los productos de foco para la superposición.
overlapsToAnalyzeProductNames string Nombres correspondientes a los identificadores de producto relacionados.
overlapsToAnalyzeProductGroupNames string Nombres de grupos de productos para los productos relacionados.
startDate string La fecha de inicio para el análisis de superposición (formato: AAAA-MM-DD).
endDate string La fecha de finalización del análisis de superposición (formato: AAAA-MM-DD).
RELATED_PRODUCT_ID string El identificador único de otro producto que se compara con el producto de foco para el análisis de superposición.
RELATED_PRODUCT_NAME string El nombre del producto relacionado en la comparación de superposición.
FOCUS_PRODUCT_CAPACITY integer La capacidad total de impresiones disponible para el producto relacionado dentro del mismo intervalo de fechas.
RELATED_PRODUCT_CAPACITY integer La capacidad total de impresiones disponible para el producto relacionado dentro del mismo intervalo de fechas.
OVERLAPPING_CAPACITY integer El número de impresiones que comparten ambos productos (es decir, el inventario que cumple los requisitos para ambos conjuntos de segmentación).
PERCENT_OVERLAP float Porcentaje de la capacidad del producto relacionado que se superpone con el producto de foco.
TargetExpressions string El conjunto de criterios o condiciones de segmentación que definen qué inventario cumple los requisitos para un producto o un segmento en el contexto de IMF/Yield Analytics y la previsión de anuncios.
PERCENT_OVERLAP_FOCUS float Porcentaje de la capacidad del producto de foco que se superpone con el producto relacionado.
Consulta sencilla

Ejemplo de solicitud de cURL

$ curl 'https://api.appnexus.com/imf/api/v1/rest/graphql'
{
  query {
    getOverlapAnalysis(
      focusProductIds: ["focusproduct ID"]
      overlapsToAnalyzeProductIds: ["product ID1", "productID2", "productID3"]
      startDate: "2025-12-15"
      endDate: "2025-12-18"
    ) {
      data {
        FOCUS_PRODUCT_ID
        FOCUS_PRODUCT_NAME
        RELATED_PRODUCT_ID
        RELATED_PRODUCT_NAME
        FOCUS_PRODUCT_CAPACITY
        RELATED_PRODUCT_CAPACITY
        OVERLAPPING_CAPACITY
        PERCENT_OVERLAP
        PERCENT_OVERLAP_FOCUS
      }
    }
  }
}

Ejemplo de respuesta cURL

{
  "data": {
    "getOverlapAnalysis": {
      "data": [
        {
          "FOCUS_PRODUCT_ID": "focus_product_id",
          "FOCUS_PRODUCT_NAME": "focus_product_name",
          "RELATED_PRODUCT_ID": "related_product_id1",
          "RELATED_PRODUCT_NAME": "related_product_name",
          "FOCUS_PRODUCT_CAPACITY": "focus_product_capacity",
          "RELATED_PRODUCT_CAPACITY": "related_product_capacity1",
          "OVERLAPPING_CAPACITY": "overlapping_capacity1",
          "PERCENT_OVERLAP": "percent_overlap",
          "PERCENT_OVERLAP_FOCUS": "percent_overlap_focus"
        },
        {
          "FOCUS_PRODUCT_ID": "focus_product_id",
          "FOCUS_PRODUCT_NAME": "focus_product_name",
          "RELATED_PRODUCT_ID": "related_product_id2",
          "RELATED_PRODUCT_NAME": "related_product_name",
          "FOCUS_PRODUCT_CAPACITY": "focus_product_capacity",
          "RELATED_PRODUCT_CAPACITY": "related_product_capacity2",
          "OVERLAPPING_CAPACITY": "overlapping_capacity2",
          "PERCENT_OVERLAP": "percent_overlap",
          "PERCENT_OVERLAP_FOCUS": "percent_overlap_focus"
        },
        {
          "FOCUS_PRODUCT_ID": "focus_product_id",
          "FOCUS_PRODUCT_NAME": "focus_product_name",
          "RELATED_PRODUCT_ID": "related_product_id3",
          "RELATED_PRODUCT_NAME": "related_product_name",
          "FOCUS_PRODUCT_CAPACITY": "focus_product_capacity",
          "RELATED_PRODUCT_CAPACITY": "related_product_capacity3",
          "OVERLAPPING_CAPACITY": "overlapping_capacity3",
          "PERCENT_OVERLAP": "percent_overlap",
          "PERCENT_OVERLAP_FOCUS": "percent_overlap_focus"
        }
      ]
    }
  }
}
Consulta dinámica

Ejemplo de solicitud de cURL

$ curl 'https://api.appnexus.com/imf/api/v1/rest/graphql'
{
  query {
    getOverlapAnalysis(
      focusProductIdsOrTargetExpressions: ["publisher in ('ABC')"]
      overlapsToAnalyzeProductNames: ["ProductName1", "ProductName2"]
      startDate: "2025-12-15"
      endDate: "2025-12-31"
    ) {
      data {
        FOCUS_PRODUCT_ID
        FOCUS_PRODUCT_NAME
        RELATED_PRODUCT_ID
        RELATED_PRODUCT_NAME
        FOCUS_PRODUCT_CAPACITY
        RELATED_PRODUCT_CAPACITY
        OVERLAPPING_CAPACITY
        PERCENT_OVERLAP
        PERCENT_OVERLAP_FOCUS
      }
    }
  }
}

Ejemplo de respuesta cURL

{
  "data": {
    "getOverlapAnalysis": {
      "data": [
        {
          "FOCUS_PRODUCT_ID": "focus_product_id1",
          "FOCUS_PRODUCT_NAME": "focus_product_name1",
          "RELATED_PRODUCT_ID": "related_product_id1",
          "RELATED_PRODUCT_NAME": "related_product_name1",
          "FOCUS_PRODUCT_CAPACITY": "focus_product_capacity1",
          "RELATED_PRODUCT_CAPACITY": "related_product_capacity1",
          "OVERLAPPING_CAPACITY": "overlapping_capacity1",
          "PERCENT_OVERLAP": "percent_overlap1",
          "PERCENT_OVERLAP_FOCUS": "percent_overlap_focus1"
        },
        {
          "FOCUS_PRODUCT_ID": "focus_product_id2",
          "FOCUS_PRODUCT_NAME": "focus_product_name2",
          "RELATED_PRODUCT_ID": "related_product_id2",
          "RELATED_PRODUCT_NAME": "related_product_name2",
          "FOCUS_PRODUCT_CAPACITY": "focus_product_capacity2",
          "RELATED_PRODUCT_CAPACITY": "related_product_capacity2",
          "OVERLAPPING_CAPACITY": "overlapping_capacity2",
          "PERCENT_OVERLAP": "percent_overlap2",
          "PERCENT_OVERLAP_FOCUS": "percent_overlap_focus2"
        }
      ]
    }
  }
}

Ajuste manual de previsión (MFA)

El ajuste manual de la previsión (MFA) permite realizar cambios únicos en la previsión de eventos específicos que afectarán al tráfico de un producto determinado. La API de GraphQL admite las siguientes operaciones de MFA:

  • Enumerar MFA
  • Agregar un MFA
  • Editar una MFA existente
  • Eliminar una MFA

Campos JSON

Parámetro Campo Descripción
manualForecastAdjustmentId integer Identificador único para la entrada de ajuste de previsión manual.
name string Nombre descriptivo del ajuste (por ejemplo, "Holiday Boost Q4").
productId integer El identificador del producto al que se aplica el ajuste.
adjustmentStatus string Estado de ajuste actual. 
Los valores incluidos son:
- ACTIVO: El cambio entra en vigor en las fechas que selecciones.
- INACTIVO: El cambio no surte efecto hasta que edite y establezca el estado de ajuste como "activo".
adjustmentType string Indica el tipo de ajuste que se aplica, Los valores posibles son:
- Absoluto: Suma/resta un número específico de impresiones a la previsión generada por Yield Analytics. Cambia la previsión sumando o restando el valor introducido.
- Relativo: Suma o resta un porcentaje de impresiones a la previsión generada por Yield Analytics. Cambia la previsión en función del porcentaje que especifique.
- Reemplazar: Reemplaza el pronóstico de Yield Analytics con un valor de pronóstico proporcionado manualmente. Cambia el valor previsto real (número de impresiones) con el valor que especifiques.
- Techo: Limita el pronóstico de Yield Analytics a un valor de pronóstico proporcionado. Crea un límite de impresiones durante un período de tiempo, más allá de la detección y mitigación de picos.
adjustmentValue integer El valor numérico del ajuste (por ejemplo, +10 % o 500000 impresiones).
fecha de creación string Marca de tiempo cuando se creó el ajuste.
lastModifiedDate string Marca de tiempo de la actualización más reciente del ajuste.
desdeFecha string Fecha de inicio del período de vigencia del ajuste.
toDate string Fecha de finalización del período de vigencia del ajuste.
productName string Nombre del producto legible por humanos (por ejemplo, "Banner de la página principal").
externalId integer Identificador de referencia externa para la integración con otros sistemas (por ejemplo, OMS o servidor de anuncios).
priority string Indica el nivel de prioridad del producto en la previsión o la entrega (por ejemplo, Alto, Medio, Bajo)
Ejemplo de solicitud de cURL

Lista de todos los MFA sin filtro de identificador de producto

$ curl 'https://api.appnexus.com/imf/api/v1/rest/graphql'
{
  "query": "query {
    "getManualForecastAdjustments": [
      {
        manualForecastAdjustmentId
        name
        productId
        adjustmentStatus
        adjustmentType
        adjustmentValue
        creationDate
        lastModifiedDate
        fromDate
        toDatex
        product: {
          productId
          productName
          externalId
          priority
        }
      },
      {
        manualForecastAdjustmentId
        name
        productId
        adjustmentStatus
        adjustmentType
        adjustmentValue
        creationDate
        lastModifiedDate
        fromDate
        toDate
        product: {
          productId
          productName
          externalId
          priority
        }
      }
    ]
  }"
}

Listado de todos los MFA con el filtro de identificador de producto

$ curl 'https://api.appnexus.com/imf/api/v1/rest/graphql'
{
  "query": "query {
    getManualForecastAdjustments(productId: \"538\") [
      {
        manualForecastAdjustmentId
        name
        productId
        adjustmentStatus
        adjustmentType
        adjustmentValue
        creationDate
        lastModifiedDate
        fromDate
        toDate
        product: {
          productId
          productName
          externalId
          priority
        }
      }
    ]
  }"
}

Agregar un nuevo MFA en un producto

Nota:

productId es un campo obligatorio para agregar una nueva fila.

$ curl 'https://api.appnexus.com/imf/api/v1/rest/graphql'
{
  "query": "mutation {
    addManualForecastAdjustment (
      productId: 538,
      name: \"Test\",
      adjustmentStatus: \"Active\",
      adjustmentType: \"Absolute\",
      adjustmentValue: 1.0,
      fromDate: \"2025-12-21\",
      toDate: \"2025-12-25\"
    ) {
    manualForecastAdjustmentId
      productId
      adjustmentStatus
      adjustmentType
      adjustmentValue
      fromDate
      toDate
    }
  }"
}

Editar una MFA

Nota:

Al editar una MFA, no es necesario incluir todos los campos en la carga útil de la solicitud. Solo puede proporcionar los campos que desea actualizar (por ejemplo, adjustmentStatus) y omitir todos los demás. Los valores existentes de la base de datos permanecen sin cambios, excepto el campo lastUpdatedDate. Los siguientes campos son obligatorios al editar una MFA:

  • manualForecastAdjustmentId
  • productId
$ curl 'https://api.appnexus.com/imf/api/v1/rest/graphql'
{
  "query": "mutation {
    updateManualForecastAdjustment(
      manualForecastAdjustmentId: \"6c45e5e3-3759-463a-815f-0a2ad900f362\"
      productId: 538,
      name: \"Test MFA Edited\",
      adjustmentStatus: \"Active\",
      adjustmentType: \"Relative\",
      adjustmentValue: 100.0,
      fromDate: \"2025-10-25\",
      toDate: \"2025-10-26\"
    ) {
      manualForecastAdjustmentId
      productId
      adjustmentStatus
      adjustmentType
      adjustmentValue
      fromDate
      toDate
    }
  }"
}

Eliminar una MFA

Nota:

manualForecastAdjustmentId es necesario para eliminar una MFA.

$ curl 'https://api.appnexus.com/imf/api/v1/rest/graphql'
{
  mutation {
    deleteManualForecastAdjustment(manualForecastAdjustmentId: "111")
  }
} 
Ejemplo de respuesta cURL
{ 
  "data": { 
    "deleteManualForecastAdjustment": true 
  } 
}