Ir al contenido principal

Plataforma API: Objetivos de imagen

La API de gestión de objetivos de imagen de 8th Wall permite a los desarrolladores gestionar dinámicamente la **biblioteca de objetivos de imagen ** asociada a sus proyectos WebAR impulsados por 8th Wall. Esta API y la documentación que la acompaña están diseñadas para desarrolladores familiarizados con el desarrollo web y los objetivos de imagen de 8th Wall.

Antes de empezar: Antes de empezar a utilizar la API Image Target, su espacio de trabajo debe estar en un plan de facturación Enterprise. Para actualizar, póngase en contacto con ventas.

Autenticación

La autenticación se realiza mediante claves secretas. Los espacios de trabajo con un plan Enterprise pueden solicitar una clave API. Incluirá esta clave secreta en cada solicitud para verificar que la solicitud está autorizada. Dado que la clave está asignada a su espacio de trabajo en , tendrá acceso a todos los objetivos de imagen de todas las aplicaciones de ese espacio de trabajo en .

Puede ver su clave en la página de su cuenta.

Visualización que muestra los objetivos de imagen dentro de las aplicaciones, las aplicaciones dentro del espacio de trabajo y la clave API dentro del espacio de trabajo

Importante

La clave API de Image Target es una clave B2B asociada a su espacio de trabajo. Siga las mejores prácticas para proteger su clave de API en , ya que exponer públicamente su clave de API puede dar lugar a un uso no intencionado y a un acceso no autorizado a . En particular, evite:

  • Incrustación de la clave API de Image Target en código que se ejecuta en el dispositivo de un usuario o se comparte públicamente
  • Almacenamiento de la clave API de Image Target en el árbol de código fuente de la aplicación

Límites y cuotas

  • 25 peticiones por minuto, con una ráfaga permitida de 500, lo que significa que puedes hacer 500 peticiones en un minuto , luego puedes hacer 25 peticiones por minuto después de eso, o podrías esperar 20 minutos y hacer otras 500 peticiones.
  • 10.000 solicitudes al día.

Nota: Estos límites sólo se aplican a la API de gestión de objetivos de imagen, que permite a los desarrolladores gestionar dinámicamente la biblioteca de imágenes asociadas a un proyecto 8th Wall. Estos límites no son aplicables a las activaciones de usuario final de una experiencia web AR.

Para solicitar un aumento de los límites de cuota de la API de destino de imágenes para los proyectos de su espacio de trabajo , envíe una solicitud a support.

Puntos finales

Crear imagen de destino

Cargar un nuevo objetivo en la lista de objetivos de imagen de una aplicación

Solicitar

curl -X POST "https://api.8thwall.com/v1/apps/$APP_KEY/targets" \
-H "X-Api-Key:$SECRET_KEY" \
-F "name=mi-nombre-de-objetivo" \
-F "image=@image.png"\
-F "geometry.top=0"\
-F "geometry.left=0"\
-F "geometry.width=480"\
-F "geometry.height=640"\
-F "metadata={"customFlag\":true}"
-F "loadAutomatically=true"
CampoTipoValor por defectoDescripción
imagenDatos binariosformato PNG o JPEG, debe ser de al menos 480x640, menos de 2048x2048 y menos de 10MB
nombreCadenaDebe ser único dentro de una aplicación, no puede incluir tildes (~) y no puede superar los 255 caracteres.
tipo [Opcional]Cadena'PLANAR'PLANAR", "CILÍNDRICO" o "CÓNICO".
metadatos [Opcional]Cadena"nullDebe ser JSON válido si metadataIsJson es verdadero, y no puede superar los 2048 caracteres
metadataIsJson [Opcional]BooleanotruePuede establecer false para utilizar la propiedad de metadatos como una cadena sin procesar
loadAutomatically [Opcional]BooleanofalseCada aplicación está limitada a 5 objetivos de imagen con loadAutomatically: true.
geometry.isRotated [Opcional]BooleanofalseEstablecer a true si la imagen está prerrotado de horizontal a vertical.
geometría.topenteroEstas propiedades especifican el recorte que se aplicará a la imagen. Debe tener una relación de aspecto de 3:4 y al menos 480x640.
geometría.izquierdaentero
geometría.anchuraentero
geometría.alturaentero
geometry.topRadiusenteroSólo necesario para type: 'CONICAL'.
geometry.bottomRadiusenteroSólo necesario para type: 'CONICAL'.

Geometría de carga plana / cilíndrica

Este diagrama muestra cómo se aplica el recorte especificado a la imagen cargada para generar imageUrl y thumbnailImageUrl. La relación anchura:altura es siempre 3:4.

Diagrama que muestra cómo se aplican el recorte, la rotación y la escala a objetivos de imágenes planas y cilíndricas

Para un recorte apaisado, cargue la imagen girada 90 grados en el sentido de las agujas del reloj, configure geometry.isRotated: true, y especifique el recorte contra la imagen girada.

Diagrama que muestra cómo se aplican el recorte, la rotación y la escala a los objetivos de imagen planares y cilíndricos cuando isRotated es verdadero

Geometría de carga cónica

Este diagrama muestra cómo se aplana y recorta la imagen cargada en función de los parámetros. La imagen cargada en tiene un formato "arco iris" en el que los bordes superior e inferior de su contenido están alineados a dos círculos concéntricos. Si su objetivo es más estrecho por arriba que por abajo, especifique topRadius como el negativo del radio exterior, y bottomRadius como el radio interior (positivo). Para un recorte de paisaje , establezca geometry.isRotated: true, y la imagen aplanada se rotará antes de aplicar el recorte .

Diagrama que muestra cómo se aplican el recorte, la rotación y la escala a objetivos de imagen cónicos

Respuesta

Este es el formato de respuesta JSON estándar para objetivos de imagen.

{
"name": "...",
"uuid": "...",
"type": "PLANAR",
"loadAutomatically": true,
"status": "AVAILABLE",
"appKey": "...",
"geometry": {
"top": 842,
"left": 392,
"width": 851,
"height": 1135,
"isRotated": true,
"originalWidth": 2000,
"originalHeight": 2000
},
"metadata": null,
"metadataIsJson": true,
"originalImageUrl": "https://cdn.8thwall.com/image-target/...",
"imageUrl": "https://cdn.8thwall.com/image-target/...",
"thumbnailImageUrl": "https://cdn.8thwall.com/image-target/...",
"geometryTextureUrl": "https://cdn.8thwall.com/image-target/...",
"created": 1613508074845,
"updated": 1613683291310
}
PropiedadTipoDescripción
nombreCadena
uuidCadenaID único de este objetivo de imagen
tipoCadena"PLANAR", "CILÍNDRICO" o "CÓNICO".
cargarAutomáticamenteBooleano
estadoCadena'AVAILABLE' o 'TAKEN_DOWN'.
appKeyCadenaLa aplicación a la que pertenece el objetivo
geometríaObjetoVer más abajo
metadatosCadena
metadataIsJsonBooleano
originalImageUrlCadenaURL CDN de la imagen de origen que se ha cargado
imageUrlCadenaVersión recortada de geometryTextureUrl.
thumbnailImageUrlCadenaVersión de 350px de alto de la imageUrl para su uso en miniaturas
geometryTextureUrlCadenaPara cónica, es una versión aplanada de la imagen original; para plana y cilíndrica, es la misma que originalImageUrl.
creadoenteroFecha de creación en milisegundos después de unix epoch
actualizadoenteroFecha de la última actualización en milisegundos después de unix epoch

Geometría plana

PropiedadTipoDescripción
topentero
izquierdaentero
anchuraentero
alturaentero
isRotatedBooleano
anchooriginalenteroAnchura de la imagen cargada
originalHeightenteroAltura de la imagen cargada

Geometría cilíndrica o cónica

Amplía las propiedades de geometría plana con la modificación de que originalWidth y originalHeight se refieren a las dimensiones de la imagen aplanada almacenada en geometryTextureUrl.

PropiedadTipoDescripción
topRadiusfloat
bottomRadiusfloat
coninessfloatSiempre 0 para type: CYLINDER, derivado de topRadius/bottomRadius para `type: CONICO
cilindroCircunferenciaTopfloatLa circunferencia del círculo completo trazado por el borde superior de su objetivo.
targetCircumferenceTopfloatLa longitud a lo largo del borde superior del objetivo antes de aplicar el recorte.
cilindroCircunferenciaFondofloatDerivado de cylinderCircumferenceTop y topRadius/bottomRadius.
cylinderSideLengthfloatDerivado de targetCircumferenceTop y las dimensiones de la imagen original
arcAnglefloatDerivado de cylinderCircumferenceTop y targetCircumferenceTop.
inputModeCadenaBÁSICO" o "AVANZADO". Controla lo que ven los usuarios en la consola 8th Wall, ya sean controles deslizantes o cuadros de introducción de números.

Lista de objetivos de imagen

Consulta de una lista de objetivos de imagen que pertenecen a una aplicación. Los resultados están paginados, lo que significa que si la aplicación contiene más destinos de imagen de los que se pueden devolver en una respuesta, tendrá que realizar varias solicitudes a para enumerar la lista completa de destinos de imagen.

Solicitar

curl "https://api.8thwall.com/v1/apps/$APP_KEY/targets" -H "X-Api-Key:$SECRET_KEY"
ParámetroTipoDescripción
por [Opcional]CadenaEspecifica la columna por la que se va a ordenar. Las opciones son "creado", "actualizado", "nombre" o "uuid".
dir [Opcional]CadenaControla la dirección de ordenación de la lista. Ya sea "asc" o "desc".
inicio [Opcional]CadenaEspecifica que la lista comienza con los elementos que tienen este valor en la columna `by
después de [Opcional]CadenaEspecifica que la lista comienza inmediatamente después de los elementos que tienen este valor
límite [Opcional]enteroDebe estar entre 1 y 500
continuación [Opcional]CadenaSe utiliza para buscar la página siguiente a la consulta inicial.

Lista ordenada

Esta consulta enumera los objetivos de la aplicación empezando por "z" y yendo hacia "a".

curl "https://api.8thwall.com/v1/apps/$APP_KEY/targets?by=name&dir=desc" -H "X-Api-Key:$SECRET_KEY"

Clasificación múltiple

Puede especificar un parámetro secundario "sort-by" que actúe como criterio de desempate en caso de duplicados en su primer valor by. uuid se utiliza como criterio de desempate por defecto si no se especifica.

curl "https://api.8thwall.com/v1/apps/$APP_KEY/targets?by=updated&by=uuid" -H "X-Api-Key:$SECRET_KEY"

Especifique un punto de partida

Puede especificar los valores start o after que corresponden a los valores by para especificar su posición actual en la lista. Si quieres que tu lista empiece inmediatamente después del elemento con updated: 333 y uuid: 777, usarías:

curl "https://api.8thwall.com/v1/apps/$APP_KEY/targets?by=updated&by=uuid&start=333&after=777" -H "X-Api-Key:$SECRET_KEY"

De este modo, los elementos con updated: 333 se incluyen en la página siguiente si su uuid es posterior a 777. Si el valor updated de un elemento es mayor que 333, pero su uuid es menor que 777, se incluirá en la página siguiente porque la segunda propiedad by sólo entra en juego para los desempates.

No es válido especificar un valor after para la ordenación principal mientras se proporciona un valor start para la ordenación de desempate. Por ejemplo, no sería válido especificar ?by=name&by=uuid&after=my-name-&start=333. Debería ser ?by=name&by=uuid&after=my-name- porque el segundo punto de inicio sólo entra en juego cuando el punto de inicio principal es inclusivo (usando start).

Diagrama que muestra cómo los parámetros by, start y after especifican el punto inicial de la lista

Respuesta

Objeto JSON que contiene la propiedad targets, que es una matriz de objetos objetivo de imagen en el formato estándar.

Si continuationToken está presente, para obtener la siguiente página de objetivos de imagen, deberá especificar ?continuation=[continuationToken] en una petición posterior para obtener la siguiente página de objetivos de imagen.

{
"continuationToken": "...",
"targets": {
"name": "...",
"uuid": "...",
"type": "PLANAR",
"loadAutomatically": true,
"status": "AVAILABLE",
"appKey": "...",
"geometry": {
"top": 842,
"left": 392,
"width": 851,
"height": 1135,
"isRotated": true,
"originalWidth": 2000,
"originalHeight": 2000
},
"metadata": null,
"metadataIsJson": true,
"originalImageUrl": "https://cdn.8thwall.com/image-target/...",
"imageUrl": "https://cdn.8thwall.com/image-target/...",
"thumbnailImageUrl": "https://cdn.8thwall.com/image-target/...",
"geometryTextureUrl": "https://cdn.8thwall.com/image-target/...",
"created": 1613508074845,
"updated": 1613683291310
}, {
"name": "...",
"uuid": "...",
"type": "CONICAL",
"loadAutomatically": true,
"status": "AVAILABLE",
"appKey": "...",
"geometry": {
"top": 0,
"left": 0,
"width": 480,
"height": 640,
"originalWidth": 886,
"originalHeight": 2048,
"isRotated": true,
"cylinderCircumferenceTop": 100,
"cylinderCircumferenceBottom": 40,
"targetCircumferenceTop": 50,
"cylinderSideLength": 21.63,
"topRadius": 1600,
"bottomRadius": 640,
"arcAngle": 180,
"coniness": 1.3219280948873624,
"inputMode": "BASIC"
},
"metadata": "my-metadata\": 34534}",
"metadataIsJson": true,
"originalImageUrl": "https://cdn.8thwall.com/...",
"imageUrl": "https://cdn.8thwall.com/...",
"thumbnailImageUrl": "https://cdn.8thwall.com/...",
"geometryTextureUrl": "https://cdn.8thwall.com/...",
"created": 1613508074845,
"updated": 1613683291310
}]
}

Obtener imagen de destino

Solicitar

curl "https://api.8thwall.com/v1/targets/$TARGET_UUID" -H "X-Api-Key:$SECRET_KEY"

Respuesta

Objeto JSON del formato de destino de imagen estándar

Modificar el destino de la imagen

Se pueden modificar las siguientes propiedades:

  • nombre
  • cargar automáticamente
  • metadatos
  • metadataIsJson

Se aplican las mismas reglas de validación que en la carga inicial

Para los objetivos de imagen cilíndricos y cónicos, también se pueden modificar las siguientes propiedades del objeto geometría:

  • CircunferenciaCilindroTopo
  • targetCircumferenceTop
  • ModoEntrada

Las demás propiedades geométricas del objetivo se actualizarán para que coincidan.

Solicitar

curl -X PATCH "https://api.8thwall.com/v1/targets/$TARGET_UUID"\
-H "X-Api-Key:$SECRET_KEY"\
-H "Content-Type: application/json"\
--data '{"name": "new-name", "geometry: {"inputMode": "BASIC"}, "metadata": "{}"}'

Respuesta

Objeto JSON del formato de destino de imagen estándar

Borrar imagen de destino

Solicitar

curl -X DELETE "https://api.8thwall.com/v1/targets/$TARGET_UUID" -H "X-Api-Key:$SECRET_KEY"

Respuesta

Una eliminación correcta devolverá una respuesta vacía con el código de estado 204: No Content.

Vista previa de la imagen de destino

Generar una URL que los usuarios puedan utilizar para previsualizar el seguimiento de un objetivo.

Solicitar

curl "https://api.8thwall.com/v1/targets/$TARGET_UUID/test" -H "X-Api-Key:$SECRET_KEY"

Respuesta

{
"url": "https://8w.8thwall.app/previewit/?j=...",
"token": "...",
"exp": 1612830293128
}
PropiedadTipoDescripción
urlCadenaLa URL que se puede utilizar para previsualizar el seguimiento del objetivo
fichaCadenaActualmente, este token sólo puede ser utilizado por nuestra aplicación de vista previa.
expenteroLa marca de tiempo en milisegundos de cuando expirará el token. Las fichas caducan una hora después de su emisión.

La funcionalidad de previsualización está pensada para ser utilizada en el contexto de un usuario específico que gestione o configure objetivos de imagen en . No publique las URL de previsualización en un sitio público ni las comparta con un gran número de usuarios.

Mejores prácticas para experiencias de previsualización personalizadas: La URL de previsualización que devuelve la API es la octava experiencia genérica de previsualización de imágenes de destino de Wall. Si desea personalizar aún más el frontend de su previsualización de destino de imagen siga los siguientes pasos:

  1. Crear un proyecto público del 8º Muro
  2. Personalice la UX de este proyecto según sus especificaciones
  3. Cargue los objetivos de imagen que los usuarios quieren probar a través de la API utilizando la clave de la aplicación para el proyecto que creado en el paso 1
  4. Genere una URL de destino de imagen comprobable para los usuarios finales utilizando la URL pública del proyecto en el paso 1 y un parámetro URL con el nombre del destino de imagen.
  5. En el proyecto que ha creado en el paso 1 utilice el parámetro URL para establecer el objetivo de imagen activo utilizando la llamada XR8.XrController.configure({imageTargets: ['theTargetName']}).

Tratamiento de errores

Si la API rechaza su solicitud, la respuesta será Content-Type: application/json, y el cuerpo de contendrá una propiedad message con una cadena de error.

Ejemplo

{
"mensaje": "App no encontrada: ..."
}

Códigos de estado

EstadoRazón
400Esto puede ocurrir si has especificado un valor no válido, o has proporcionado un parámetro que no existe.
403Esto puede ocurrir si no está proporcionando su clave secreta correctamente.
404La aplicación o la imagen de destino podrían haberse eliminado, o la clave de la aplicación o el UUID del destino son incorrectos. Este es también el código de respuesta si la clave de API proporcionada no coincide con el recurso al que está intentando acceder.
413La imagen cargada ha sido rechazada por ser un archivo demasiado grande.
429Su clave API ha superado su [límite de velocidad] asociado(#limits-and-quotas).