Aller au contenu principal

Spécification de l'API des Offres Serveur

Ce document décrit les points de terminaison pertinents nécessaires pour interagir avec les API de Rokt afin de récupérer le contenu Offre de Rokt.

Veuillez travailler avec votre gestionnaire de compte pour obtenir les identifiants nécessaires pour interagir avec ce point de terminaison.

Points de terminaisonLien direct vers Points de terminaison

EnvironnementActionURL
ProductionPOSThttps://server-api.rokt.com/v1/partner/offers
TestPOSThttps://server-api-demo.rokt.com/v1/partner/offers

Meilleures pratiques de testLien direct vers Meilleures pratiques de test

Le point de terminaison de test https://server-api-demo.rokt.com/v1/partner/offers est spécifiquement conçu pour les tests et doit être utilisé pour valider l'intégration sans affecter les données ou les performances de production. Assurez-vous que les en-têtes appropriés et les formats de requête sont utilisés comme spécifié dans la documentation de l'API pour simuler efficacement des scénarios similaires à ceux de la production.

RequêteLien direct vers Requête

Racine/CorpsLien direct vers Racine/Corps

Nom de la propriétéRequisType de donnéesDescription
pageIdentifierOuistringTexte utilisé pour différencier les vues
attributesOuiDictionary<string, string> / Map<string, string>Contient les données d'attribut utilisateur à utiliser pour la sélection des offres.

Pour les requêtes WebMobile/WebDesktop uniquement :
Inclure userAgent (dérivé du navigateur) comme attribut. Voir exemple ci-dessous.

En-têtes d'autorisationLien direct vers En-têtes d'autorisation

Clé d'en-têteDescriptionTypeRemarque
rokt-pub-idContient l'identifiant public client fournistringCela sera fourni par Rokt.
rokt-secretContient le secret public client fourni qui doit correspondre à l'identifiant publicstringCela sera fourni par Rokt.

En-têtes requisLien direct vers En-têtes requis

Clé d'en-têteDescriptionTypeExemple
content-typeType de médiastring“application/json”
acceptType de média attendu de la réponsestring“application/json”
rokt-tag-idID de Tag RoktString1234567890
rokt-ui-localeCulture et pays de l'interface utilisateurStringIdentifiant de locale et de pays ISO. par ex. en-US
rokt-client-unique-idPour le dépannage entre les systèmes partenaires et RoktStringUn ID de transaction de référence (ID unique)
rokt-platform-typeIndique la plateforme pour laquelle les offres sont demandéesstringPar défaut : Mobile
Valeurs acceptées : Mobile, Web, WebMobile, WebDesktop

En-têtes supplémentaires requis pour MobileLien direct vers En-têtes supplémentaires requis pour Mobile

Lors de la demande d'offres pour la plateforme Mobile, les en-têtes suivants sont également requis :

Clé de l'en-têteDescriptionTypeExemple
rokt-os-typeType de système d'exploitationchaîne"iOS" ou "Android"
rokt-os-versionVersion du système d'exploitationChaîne"8.0" ou "4.4.1"
rokt-device-modelModèle de l'appareil pour iOS ou modèle de construction pour AndroidChaîne"iPhone 6s", "Galaxy S9", etc.
rokt-package-nameNom du paquet ou identifiant de bundle de l'application hôteChaîneiOS : com.APPNAME.ios
Android : com.APPNAME.android
Utilisez le nom de paquet réel de l'application client donnée
rokt-package-versionVersion du paquet ou version du bundle de l'application hôteChaîne1.0.5
Utilisez la version de paquet réelle de l'application client donnée

Exemple de requête (Application Mobile)Lien direct vers Exemple de requête (Application Mobile)

Corps/Payload de la requête JSON

{
"attributes": {
"country": "AU",
"firstname": "jenny",
"mobile": "(323) 867-5309",
"postcode": "90210",
"email": "test1593754986316@rokt.com",
"lastname": "Smith"
},
"pageIdentifier": "page_identifier"
}

Exemple de requête (Web Mobile/Desktop)Lien direct vers Exemple de requête (Web Mobile/Desktop)

Corps/Payload de la requête JSON

{
"attributes": {
"country": "AU",
"firstname": "jenny",
"mobile": "(323) 867-5309",
"postcode": "90210",
"email": "test1593754986316@rokt.com",
"lastname": "Smith",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_3_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.3.1 Safari/605.1.15"
},
"pageIdentifier": "page_identifier"
}

  • userAgent peut être dérivé du navigateur, par exemple via window.navigator.userAgent.

RéponseLien direct vers Réponse

Réponse de succès (200)Lien direct vers Réponse de succès (200)

Racine/CorpsLien direct vers Racine/Corps

Nom de la propriétéType de donnéesDescription
sessionIdchaîneID de session Rokt
pageInstanceGuidchaîneIdentifiant unique de l'instance de la page de l'utilisateur
pageDetectionTimechaîneHeure à laquelle la détection de la page a eu lieu
successbooléenIndique si la requête a réussi
placementsPlacement[]Collection d'offres/placement

PlacementLien direct vers Placement

Nom de la propriétéType de donnéesDescription
experienceIdchaîneIdentifiant représentant l'expérience sélectionnée de Rokt. Si aucune expérience n'est explicitement sélectionnée, la valeur sera NotSet
placementGuidchaîneUn GUID généré qui est unique au placement et doit être envoyé dans le cadre des appels d'événements
configurablesDictionnaire<string, string> / Carte<string, string>Collection de paramètres dynamiques utilisés pour le rendu des offres
targetingDataTargetingDataInformations sur les raisons pour lesquelles l'ensemble actuel d'offres a été affiché, y compris les informations sur les annonceurs, pour les exigences de la loi sur les services numériques
offersPartnerOffer[]Collection d'offres à afficher

Offre PartenaireLien direct vers Offre Partenaire

Nom de la PropriétéType de DonnéeDescription
creativeIdstringId unique pour le Créatif de l'offre sur la Plateforme Rokt.1
campaignIdstringId unique pour la Campagne de l'offre sur la Plateforme Rokt.1
slotGuidstringGUID unique représentant l'emplacement de l'offre
creativeGuidstringGUID unique représentant l'offre/créatif
copyDictionary<string, string> / Map<string, string>Collection de KVP utilisée pour fournir les données de l'offre
responseOptionsResponseOption[]Collection des options de réponse possibles
advertiserAdvertiserDétails concernant l'annonceur derrière cette offre
formatTypestringType de format pour afficher une offre

1 L'Id sera fourni pour les Campagnes Ecommerce, d'autres types de campagnes recevront la valeur : NotSet

CopieLien direct vers Copie

Nom de la PropriétéType de DonnéeDescription
creative.copystringContenu de la copie
creative.titlestringTitre de la copie
creative.disclaimerstringTexte de la clause de non-responsabilité
creative.termsAndConditions.linkstringLien vers les termes et conditions
creative.privacyPolicy.linkstringLien vers la Politique de Confidentialité

Option de RéponseLien direct vers Option de Réponse

Nom de la PropriétéType de DonnéeDescription
actionstringL'action de la réponse
“CaptureOnly” - juste déclencher l'événement
“Url” - L'url doit être ouverte et déclencher l'événement
responseOptionGuidstringUn GUID généré qui est unique à l'option de réponse et doit être envoyé dans le cadre des appels d'événements
signalTypestringLe EventType à utiliser lors de l'envoi d'un événement lors de l'interaction. Ce sera presque toujours SignalResponse
labelstringÉtiquette à afficher sur le bouton/lien
successTextstringTexte à afficher lors de l'interaction (non pertinent pour le pilote)
isPositivebooleanIndique si la réponse est un engagement positif ou négatif
urlstringURL sur laquelle effectuer l'action

Ciblage des DonnéesLien direct vers Ciblage des Données

Nom de la PropriétéType de DonnéeDescription
linkstringUn hyperlien vers des détails sur la raison pour laquelle cette sélection d'offres a été montrée, y compris les informations des annonceurs uniques à la session. Afficher ce lien peut aider à remplir les obligations de la Loi sur les services numériques
copystringTexte expliquant comment les Partenaires utilisent Rokt pour déterminer les offres les plus pertinentes à montrer aux clients
advertisersAdvertiser[]La collection d'annonceurs derrière l'ensemble actuel d'offres, ordonnée selon la séquence dans laquelle les offres sont montrées

AnnonceurLien direct vers Annonceur

Nom de la PropriétéType de DonnéeDescription
namestringLe Nom de Compte/Entité Légale de l'annonceur
brandstringLe nom de marque de l'annonceur

Comment trouver la Mention Légale & les Termes et ConditionsLien direct vers Comment trouver la Mention Légale & les Termes et Conditions

Nom de la PropriétéType de DonnéeEmplacement de la Réponse des Offres (chemin JSON)
Disclaimerstringbody.placements[i].offers[j].copy.creative.disclaimer
Terms and Conditions Linkstringbody.placements[i].offers[j].copy.creative.termsAndConditions.link

Où :

  • i représente l'index du placement affiché
  • j représente l'index de l'emplacement affiché

ExempleLien direct vers Exemple

{
"sessionId": "aec20020-2d5c-45e7-ac3d-6f5daa22b983",
"pageInstanceGuid": "aec20020-2d5c-4497-87e8-475576ddffa5",
"pageDetectionTime": "2022-06-28T01:57:09.2147413+00:00",
"placements": [
{
"experienceId": "RedButton",
"placementGuid": "8ed27738-fec8-49e4-9436-d44faa6eaf0f",
"targetingData": {
"link": "https://apps-demo.rokt.com/dsa/rokt-en.html?name=Legal%20Name%20One&brand=Brand%20Name%20One&name=Legal%20Name%20Two&brand=Brand%20Name%20Two",
"copy": "Text displaying how Partners use Rokt to determine the most relevant offers to show customers",
"advertisers": [
{
"name": "Legal Name One",
"brand": "Brand Name One"
},
{
"name": "Legal Name Two",
"brand": "Brand Name Two"
}
]
},
"offers": [
{
"creativeId": "NotSet",
"campaignId": "NotSet",
"slotGuid": "58bcbaa0-e13c-4a3d-84cd-2803ccc35394",
"creativeGuid": "b3a1d523-5490-49f0-a379-7a67628a4cdd",
"copy": {
"creative.copy": "This is an Rokt Commerce Email Campaign from Mobile team Account. This should appear in prime position for the mobile SDK automated testing. ",
"creative.termsAndConditions.link": "https://server-api-demo.rokt.com/LegalTerms/TermsAndConditions/2732356166940819466",
"creative.termsAndConditions.close.copy": "Close",
"creative.termsAndConditions.title": "Terms of Use",
"creative.privacyPolicy.link": "https://server-api-demo.rokt.com/LegalTerms/PrivacyPolicy/2732356166940819466",
"creative.privacyPolicy.close.copy": "Close",
"creative.privacyPolicy.title": "Privacy Policy",
"creative.confirmation.message": "Details will go to test1593754986316@rokt.com",
"creative.success.title": "Success",
"creative.success.copy": "We have sent a confirmation to test1593754986316@rokt.com."
},
"advertiser": {
"name": "Legal Name One",
"brand": "Brand Name One"
}
"responseOptions": [
{
"action": "CaptureOnly",
"responseOptionGuid": "6bea8e29-b3cd-4717-bd82-59ccbca0d863",
"signalType": "SignalResponse",
"label": "Yes",
"successText": "Subscribed",
"isPositive": true,
"url": ""
},
{
"action": "CaptureOnly",
"responseOptionGuid": "04c74a56-9fa7-408e-b722-052ae275f53f",
"signalType": "SignalResponse",
"label": "No thanks",
"successText": "",
"isPositive": false,
"url": ""
}
],
"formatType": "Text"
},
{
"creativeId": "2732357120423559183",
"campaignId": "2732344566234284034",
"slotGuid": "e499763e-769e-4621-8591-c55c6b833e1f",
"creativeGuid": "11096aa6-878f-4bb7-acb5-156d0999edb8",
"copy": {
"creative.disclaimer": "<strong>Disclaimer</strong>",
"creative.copy": "This is an acquire email campaign from Mobile team Account for mobile SDK automated testing.",
"creative.termsAndConditions.link": "https://server-api-demo.rokt.com/LegalTerms/TermsAndConditions/2732357120423559183",
"creative.termsAndConditions.close.copy": "Close",
"creative.termsAndConditions.title": "Terms &amp; Conditions",
"creative.privacyPolicy.link": "https://server-api-demo.rokt.com/LegalTerms/PrivacyPolicy/2732357120423559183",
"creative.privacyPolicy.close.copy": "Close",
"creative.privacyPolicy.title": "Privacy Policy",
"creative.confirmation.message": "Confirmation will go to test1593754986316@rokt.com",
"creative.success.title": "Success",
"creative.success.copy": "We have sent a confirmation to test1593754986316@rokt.com."
},
"advertiser": {
"name": "Legal Name Two",
"brand": "Brand Name Two"
},
"responseOptions": [
{
"action": "CaptureOnly",
"responseOptionGuid": "779e41cd-5653-4143-b0bb-3df4eb3a2325",
"signalType": "SignalResponse",
"label": "Yes please",
"successText": "Email Sent",
"isPositive": true,
"url": ""
},
{
"action": "CaptureOnly",
"responseOptionGuid": "87af7302-0c53-4676-a002-8f0f8fcbb530",
"signalType": "SignalResponse",
"label": "No thanks",
"successText": "",
"isPositive": false,
"url": ""
}
],
"formatType": "Text"
}
],
"configurables": {
"positive.button.color": "red"
}
}
],
"success": true
}

Réponse de Succès Vide (200)Lien direct vers Réponse de Succès Vide (200)

Il y a une rare occurrence où il n'y aura pas d'offres pertinentes pour un utilisateur particulier. Dans ce cas, Rokt renverra une charge utile sans placements :

{
"sessionId": "aec20024-8d23-46be-95f3-9be5d86292a9",
"pageInstanceGuid": "aec20024-8d24-4ee5-8b6b-2b45364e678b",
"pageDetectionTime": "2022-06-28T02:13:04.7608276+00:00",
"placements": [],
"success": true
}

Réponse d'Erreur de Requête (4XX)Lien direct vers Réponse d'Erreur de Requête (4XX)

Racine/CorpsLien direct vers Racine/Corps

Nom de la PropriétéType de DonnéeDescription
titlestringRaison principale de l'échec
statusnumberCode de statut HTTP
successbooleanIndique si la requête a réussi
errorsError[]Collection d'erreurs de validation qui se sont produites

ErreurLien direct vers Erreur

Nom de la PropriétéType de DonnéeDescription
codestringCode d'erreur correspondant
messagenumberMessage décrivant l'erreur
valuebooleanValeur fournie qui était invalide, le cas échéant

Exemple : Erreur de Validation de Requête (422)Lien direct vers Exemple : Erreur de Validation de Requête (422)

{
"title": "Validation failed",
"status": 422,
"success": false,
"errors": [
{
"code": "PartnerIdNotIncluded",
"message": "rokt-tag-id is missing/incorrect",
"value": "0"
},
{
"code": "NotEmptyValidator",
"message": "Missing header: rokt-os-type."
},
{
"code": "NotEmptyValidator",
"message": "Missing header: rokt-package-name."
},
{
"code": "NotEmptyValidator",
"message": "Missing header: rokt-package-version."
},
{
"code": "NotEmptyValidator",
"message": "Missing header: rokt-device-model."
},
{
"code": "NotEmptyValidator",
"message": "Missing header: rokt-sdk-version."
},
{
"code": "NotEmptyValidator",
"message": "Missing header: rokt-os-version."
},
{
"code": "ClientUniqueIdIsMissing",
"message": "Missing header: rokt-client-unique-id."
},
{
"code": "PlatformTypeIsInvalid",
"message": "Invalid header: rokt-platform-type."
}
]
}

Exemple : Requête videLien direct vers Exemple : Requête vide

{
"title": "BadRequest",
"status": 400,
"success": false,
"errors": [
{
"code": "InvalidRequestPayload",
"message": "Request body format is not valid"
}
]
}

Exemple : Trop de requêtes (429)Lien direct vers Exemple : Trop de requêtes (429)

Rokt peut limiter ou bloquer temporairement le trafic pour protéger la stabilité de la plateforme ou appliquer une politique. Dans ces cas, l'API renvoie un HTTP 429 avec un corps vide et sans en-tête Retry-After. Veuillez ne pas réessayer ces requêtes — les réessais automatisés peuvent augmenter la charge et prolonger la limitation. Suspendez les appels ultérieurs pour ce flux, examinez votre taux de requêtes, et contactez votre représentant Rokt si les 429 persistent.

Erreurs de service interne (5XX)Lien direct vers Erreurs de service interne (5XX)

Dans de rares circonstances, un système peut ne pas être en mesure de compléter une requête de manière inattendue. Dans ce cas, nous retournerons une requête sans corps avec un code d'état approprié conforme aux codes de réponse HTTP standard. Dans le cas où cette réponse se produit, nous recommandons que la requête soit réessayée après un bref délai (1-2 secondes).

Si le problème persiste ou se produit de manière constante, veuillez contacter le support (support@rokt.com) pour aider à identifier et corriger le problème.

Mise en cache des offresLien direct vers Mise en cache des offres

Rendre les offres Rokt en temps opportun vous permet de maximiser les opportunités de revenus grâce à l'engagement des utilisateurs et aux conversions. Cependant, une intégration serveur à serveur implique des appels réseau supplémentaires entre les serveurs backend de Rokt et les vôtres, ce qui retarde la récupération des données nécessaires pour rendre les offres.

Pour améliorer les performances, nous recommandons de récupérer le contenu des offres depuis le point de terminaison API /offers de Rokt à un moment antérieur dans le parcours de transaction de l'utilisateur avant que nos offres ne soient censées être rendues. Il est préférable de lancer la récupération du contenu des offres après qu'un utilisateur a démontré un intérêt significatif pour compléter la transaction afin d'éviter des appels réseau inutiles.

Une fois reçues, les données peuvent être stockées dans un cache. Cela permettra une récupération plus rapide plus tard par le client pour une utilisation dans la même transaction.

Nous recommandons de mettre en cache en fonction d'une combinaison d'ID de transaction unique, d'ID utilisateur et de type d'appareil utilisateur. Dans le scénario d'un changement de contexte utilisateur (par exemple, d'un appareil Android à un appareil iOS), le client devrait récupérer de nouveaux emplacements depuis le point de terminaison /offers en utilisant des attributs client mis à jour. Cela garantit que les offres rendues restent pertinentes pour le contexte actuel du client.

Cet article vous a-t-il été utile ?