La ressource QrCode expose tout ce dont vous avez besoin pour créer, gérer et distribuer des QR codes avec Twilee. Ce guide parcourt chaque opération disponible, les structures de données associées et des exemples reflétant les réponses réelles de l’API.
Représentation de la ressource
Les réponses exposent un document structuré séparant les données d’identification, les options d’apparence, les attributs hébergés et l’analytique. Voici un payload réel :
{
"id": "68ef5bc4e581e7223e010b2e",
"name": "Event test API",
"type": "event",
"content": {
"name": "Test event",
"eventType": "Test",
"location": "Paris",
"description": "lorem ipsum",
"hostedPageBackgroundColor": "#f9fAfb",
"hostedPagePrimaryColor": "#0ea5e9"
},
"metadata": {
"shortToken": "frnKYa3c",
"createdAt": "2025-10-15T08:31:00+00:00",
"updatedAt": "2025-10-15T08:31:00+00:00"
},
"appearance": {
"shape": "square",
"predefinedImage": null,
"uploadedImage": null,
"margin": 10,
"qrOptionsTypeNumber": 0,
"qrOptionsMode": "Byte",
"qrOptionsErrorCorrectionLevel": "Q",
"imageOptionsHideBackgroundDots": true,
"imageOptionsImageSize": 0.4,
"imageOptionsMargin": 0,
"dotsOptionsColor": "#0f172a",
"dotsOptionsType": "extra-rounded",
"dotsOptionsRoundSize": true,
"dotsOptionsGradientType": null,
"dotsOptionsGradientRotation": null,
"dotsOptionsGradientColorStops": null,
"backgroundOptionsColor": "#ffffff",
"backgroundOptionsGradientType": null,
"backgroundOptionsGradientRotation": null,
"backgroundOptionsGradientColorStops": null,
"cornersSquareOptionsColor": "#0f172a",
"cornersSquareOptionsType": "extra-rounded",
"cornersSquareOptionsGradientType": null,
"cornersSquareOptionsGradientRotation": null,
"cornersSquareOptionsGradientColorStops": null,
"cornersDotOptionsColor": "#0f172a",
"cornersDotOptionsType": "dot",
"cornersDotOptionsGradientType": null,
"cornersDotOptionsGradientRotation": null,
"cornersDotOptionsGradientColorStops": null
},
"attributes": {
"dynamicUrl": "https://qr-click-me.local/r/frnKYa3c",
"hostedPageUrl": "https://twilee.local/p/frnKYa3c"
},
"links": [
{
"rel": "self",
"href": "/qr_codes/68ef5bc4e581e7223e010b2e",
"method": "GET"
},
{
"rel": "https://twilee.com/rels/download",
"href": "/qr_codes/68ef5bc4e581e7223e010b2e/download",
"method": "POST"
},
{
"rel": "https://twilee.com/rels/schema-org",
"href": "/qr_codes/68ef5bc4e581e7223e010b2e/schemaorg",
"method": "GET"
},
{
"rel": "https://twilee.com/rels/scan-logs",
"href": "/qr_codes/68ef5bc4e581e7223e010b2e/scans",
"method": "GET"
},
{
"rel": "https://twilee.com/rels/page-views",
"href": "/qr_codes/68ef5bc4e581e7223e010b2e/page-views",
"method": "GET"
}
],
"analytics": {
"scans": 0,
"views": 0
}
}
Référence des champs
| Champ | Type | Description | Validation / Défaut |
|---|---|---|---|
id |
string |
Identifiant unique généré par MongoDB. | Lecture seule. |
name |
string |
Libellé lisible par l’humain. | Obligatoire, 1 à 255 caractères. |
type |
string |
Type de contenu définissant la forme de content. |
Valeur par défaut url; doit être parmi url, text, email, call, sms, geo, wifi, vcard, file, links, audio, event. |
content |
object |
Contenu embarqué spécifique au type sélectionné. | Champs requis selon le type (voir ci-dessous). |
metadata |
object |
Informations non visuelles comme les jetons et horodatages. | Renseigné par l’API ; voir Métadonnées ci-dessous. |
appearance |
object |
Style visuel du QR code rendu. | Voir Apparence ci-dessous. |
attributes |
object |
URL informatives et propriétés dérivées. | Lecture seule. |
links |
array |
Relations hypermédia actionnables (le lien page-views n’apparaît que pour les codes hébergés). |
Lecture seule ; varie selon le code. |
analytics |
object |
Compteurs agrégés de scans et vues. | Lecture seule ; views n’est présent que pour les codes hébergés. |
Métadonnées
| Champ | Type | Description |
|---|---|---|
shortToken |
`string | null` |
createdAt |
datetime |
Horodatage ISO 8601 de création. |
updatedAt |
datetime |
Horodatage ISO 8601 de dernière mise à jour. |
Apparence
L’objet appearance reprend les options proposées dans le concepteur Twilee. Les propriétés sont regroupées par composant de rendu.
Général
| Champ | Type | Description | Validation / Défaut |
|---|---|---|---|
shape |
string |
Contour des modules (square ou circle). |
Défaut square ; doit être square ou circle. |
predefinedImage |
`string | null` | Identifiant ou URL d’un logo intégré. |
uploadedImage |
`string | null` | URL ou chemin d’un logo personnalisé. |
margin |
int |
Marge autour du canevas (px). | Défaut 10 ; doit être ≥ 0. |
Options QR
| Champ | Type | Description | Validation / Défaut |
|---|---|---|---|
qrOptionsTypeNumber |
int |
Version de la matrice QR. | Défaut 0 ; doit être compris entre 0 et 40. |
qrOptionsMode |
`string | null` | Mode d’encodage. |
qrOptionsErrorCorrectionLevel |
string |
Niveau de correction d’erreur. | Défaut Q ; doit être L, M, Q ou H. |
Options d’image
| Champ | Type | Description | Validation / Défaut |
|---|---|---|---|
imageOptionsHideBackgroundDots |
bool |
Supprimer les modules masqués par l’image centrale. | Défaut true. |
imageOptionsImageSize |
float |
Ratio de taille de l’image centrale. | Défaut 0.4 ; doit être compris entre 0 et 1. |
imageOptionsMargin |
int |
Marge autour de l’image centrale (px). | Défaut 0 ; doit être ≥ 0. |
Options des modules
| Champ | Type | Description | Validation / Défaut |
|---|---|---|---|
dotsOptionsColor |
string |
Couleur des modules. | Défaut #000000 ; hexadécimal sur 6 caractères. |
dotsOptionsType |
string |
Forme des modules. | Défaut square ; parmi rounded, dots, classy, classy-rounded, square, extra-rounded. |
dotsOptionsRoundSize |
bool |
Arrondir la taille des modules au rendu. | Défaut true. |
dotsOptionsGradientType |
`string | null` | Type de dégradé des modules. |
dotsOptionsGradientRotation |
`float | null` | Rotation du dégradé (radians). |
dotsOptionsGradientColorStops |
`array | null` | Tableau de { offset, color } pour un dégradé multi-couleurs. |
Options d’arrière-plan
| Champ | Type | Description | Validation / Défaut |
|---|---|---|---|
backgroundOptionsColor |
string |
Couleur de fond du canevas. | Défaut #ffffff ; hexadécimal sur 6 caractères. |
backgroundOptionsGradientType |
`string | null` | Type de dégradé de fond. |
backgroundOptionsGradientRotation |
`float | null` | Rotation du dégradé de fond. |
backgroundOptionsGradientColorStops |
`array | null` | Tableau de { offset, color } pour le dégradé de fond. |
Options des carrés d’angle
| Champ | Type | Description | Validation / Défaut |
|---|---|---|---|
cornersSquareOptionsColor |
`string | null` | Couleur des carrés de repère. |
cornersSquareOptionsType |
`string | null` | Forme des carrés de repère. |
cornersSquareOptionsGradientType |
`string | null` | Type de dégradé des carrés de repère. |
cornersSquareOptionsGradientRotation |
`float | null` | Rotation du dégradé des carrés de repère. |
cornersSquareOptionsGradientColorStops |
`array | null` | Dégradé des carrés de repère. |
Options des points d’angle
| Champ | Type | Description | Validation / Défaut |
|---|---|---|---|
cornersDotOptionsColor |
`string | null` | Couleur des points de repère. |
cornersDotOptionsType |
`string | null` | Forme des points de repère. |
cornersDotOptionsGradientType |
`string | null` | Type de dégradé des points de repère. |
cornersDotOptionsGradientRotation |
`float | null` | Rotation du dégradé des points de repère. |
cornersDotOptionsGradientColorStops |
`array | null` | Dégradé des points de repère. |
Attributs
| Champ | Type | Description |
|---|---|---|
dynamicUrl |
`string | null` |
hostedPageUrl |
`string | null` |
Analytique
| Champ | Type | Description |
|---|---|---|
scans |
int |
Nombre total de scans du QR code. |
views |
`int | null` |
Types de contenu (payload content)
Définissez le champ type avec l’une des valeurs supportées ci-dessous, puis fournissez la structure content correspondante. Le tableau résume le payload renvoyé par l’API pour chaque type :
Type (type) |
Champs content obligatoires |
Champs optionnels / supplémentaires |
|---|---|---|
url |
url |
— |
text |
text |
name, image, couleurs de page hébergée (hostedPageBackgroundColor, hostedPagePrimaryColor), publicFilePath |
email |
address |
subject, message |
call |
phoneNumber |
— |
sms |
phoneNumber, message |
— |
geo |
coordinates |
— |
wifi |
ssid |
encryptionType, password, isHidden |
vcard |
varie (voir ci-dessous) | Prend en charge les noms, poste, genre, note, organisation, champs d’adresse, tel (appel intégré), url (lien intégré), email (e-mail intégré) |
file |
fileName |
— |
links |
links (tableau de { url, name, image }) |
name, image, couleurs de page hébergée, publicFilePath |
audio |
fileName |
name, image, couleurs de page hébergée, publicAudioFilePath |
event |
name, startDate, endDate |
eventType, image, location, description, couleurs de page hébergée, publicFilePath |
Remarque : Les types compatibles avec une page hébergée (
text,links,audio,event) exposenthostedPageBackgroundColor,hostedPagePrimaryColoretpublicFilePathpour ajuster le style de la page d’atterrissage.
Lister les QR codes — GET /qr_codes
Récupérez une liste paginée de tous les QR codes associés à votre équipe.
curl -X GET "https://api.twilee.com/qr_codes" \
-H "Authorization: Bearer VOTRE_CLE_API" \
-H "Accept: application/json"
Réponse (JSON-LD)
{
"@context": "/contexts/QrCode",
"@id": "/qr_codes",
"@type": "Collection",
"totalItems": 1,
"member": [
{
"@id": "/qr_codes/68cdbbe0ed096c7b590277c6",
"@type": "QrCode",
"id": "68cdbbe0ed096c7b590277c6",
"name": "Redirects to https://twilee.com",
"type": "url",
"content": { "url": "https://twilee.com" },
"metadata": { "shortToken": "frbORDRQ", "createdAt": "2024-05-01T09:15:24+00:00", "updatedAt": "2024-05-02T11:02:31+00:00" },
"appearance": { "shape": "square", "predefinedImage": null, "uploadedImage": null, "margin": 10, "qrOptionsTypeNumber": 0, "qrOptionsMode": "Byte", "qrOptionsErrorCorrectionLevel": "Q", "imageOptionsHideBackgroundDots": true, "imageOptionsImageSize": 0.4, "imageOptionsMargin": 0, "dotsOptionsColor": "#000000", "dotsOptionsType": "square", "dotsOptionsRoundSize": true, "dotsOptionsGradientType": null, "dotsOptionsGradientRotation": null, "dotsOptionsGradientColorStops": null, "backgroundOptionsColor": "#ffffff", "backgroundOptionsGradientType": null, "backgroundOptionsGradientRotation": null, "backgroundOptionsGradientColorStops": null, "cornersSquareOptionsColor": null, "cornersSquareOptionsType": null, "cornersSquareOptionsGradientType": null, "cornersSquareOptionsGradientRotation": null, "cornersSquareOptionsGradientColorStops": null, "cornersDotOptionsColor": null, "cornersDotOptionsType": null, "cornersDotOptionsGradientType": null, "cornersDotOptionsGradientRotation": null, "cornersDotOptionsGradientColorStops": null },
"attributes": { "dynamicUrl": "https://qr.twilee.com/r/frbORDRQ" },
"links": [
{ "rel": "self", "href": "/qr_codes/68cdbbe0ed096c7b590277c6", "method": "GET" }
],
"analytics": { "scans": 0 }
}
]
}
Utilisez le paramètre de requête page pour la pagination :
GET /qr_codes?page=2
Récupérer un QR code — GET /qr_codes/{id}
Récupérez un QR code appartenant à l’équipe de l’utilisateur authentifié. Le corps de la réponse correspond à la structure décrite dans la section Représentation de la ressource.
curl -X GET "https://api.twilee.com/qr_codes/{id}" \
-H "Authorization: Bearer VOTRE_CLE_API" \
-H "Accept: application/json"
Si le QR code est introuvable ou appartient à une autre équipe, l’API renvoie 400 Bad Request avec le message « QR code not found ».
Représentation schema.org — GET /qr_codes/{id}/schemaorg
Cet endpoint expose une représentation alternative destinée aux crawlers de données structurées. La réponse regroupe les métadonnées du QR code et le contenu encodé en deux sections :
{
"id": "68cdbbe0ed096c7b590277c6",
"qrCode": {
"@context": "https://schema.org",
"@type": "BarCode",
"identifier": "frbORDRQ",
"name": "Redirects to twilee.com",
"caption": "Scan me",
"creator": { "@type": "Person", "name": "[email protected]" },
"maintainer": { "@type": "Organization", "name": "My Team" },
"dateCreated": { "@type": "DateTime", "dateCreated": "2024-05-01T09:15:24+00:00" },
"description": "Campaign QR code",
"provider": "Twilee"
},
"content": {
"@context": "https://schema.org",
"@type": "Event",
"identifier": "frbORDRQ",
"name": "Product Launch",
"startDate": "2024-05-10T18:00:00+00:00",
"endDate": "2024-05-10T21:00:00+00:00",
"url": "https://twilee.com/p/frbORDRQ"
}
}
Un traitement spécifique est appliqué aux types event et vcard pour les convertir en structures schema.org adaptées ; les autres types renvoient le payload content brut.
Créer un QR code — POST /qr_codes
Créez un nouveau QR code en envoyant des données JSON. Fournissez les champs décrits dans la table de représentation de la ressource ci-dessus ; les clés non prises en charge sont ignorées.
curl -X POST "https://api.twilee.com/qr_codes" \
-H "Authorization: Bearer VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"name": "Launch landing page",
"type": "url",
"content": { "url": "https://twilee.com" },
"appearance": {
"shape": "circle",
"margin": 12,
"qrOptionsErrorCorrectionLevel": "H",
"imageOptionsHideBackgroundDots": false,
"dotsOptionsColor": "#111111",
"dotsOptionsType": "rounded",
"backgroundOptionsColor": "#f1f5f9",
"cornersSquareOptionsType": "extra-rounded",
"cornersSquareOptionsColor": "#111111"
}
}'
Points de validation clés
name: 1 à 255 caractèrestype: doit correspondre à une valeur de l’énumération (url,text,email,call,sms,geo,wifi,vcard,file,links,audio,event)appearance.shape: doit êtresquareoucircleappearance.qrOptionsTypeNumber: entier compris entre 0 et 40appearance.qrOptionsMode: optionnel, mais si renseigné doit êtreNumeric,Alphanumeric,ByteouKanjiappearance.qrOptionsErrorCorrectionLevel: doit êtreL,M,QouHappearance.imageOptionsImageSize: valeur flottante comprise entre 0 et 1appearance.margin,appearance.imageOptionsMargin: entiers supérieurs ou égaux à 0- Champs de couleur (
dotsOptionsColor,backgroundOptionsColor,cornersSquareOptionsColor,cornersDotOptionsColor) : hexadécimal sur 6 caractères (ex.#123abc) - Sélecteurs de forme (
dotsOptionsType,cornersSquareOptionsType,cornersDotOptionsType) : utiliser l’une des valeurs listées dans les tableaux ci-dessus
Une création réussie renvoie 201 Created avec la nouvelle ressource dans le corps de la réponse.
Mettre à jour un QR code — PUT /qr_codes/{id}
Envoyez une représentation complète (ou au moins tous les champs que vous souhaitez conserver) pour mettre à jour un QR code existant. Les règles de validation sont identiques à celles de la création.
curl -X PUT "https://api.twilee.com/qr_codes/{id}" \
-H "Authorization: Bearer VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"name": "Updated launch landing page",
"type": "url",
"content": { "url": "https://twilee.com" },
"appearance": {
"dotsOptionsColor": "#000000",
"backgroundOptionsColor": "#ffffff"
}
}'
En cas de succès, l’API répond avec 200 OK et le payload du QR code mis à jour.
Supprimer un QR code — DELETE /qr_codes/{id}
Supprimez un QR code existant. Une suppression réussie renvoie 204 No Content.
curl -X DELETE "https://api.twilee.com/qr_codes/{id}" \
-H "Authorization: Bearer VOTRE_CLE_API"
Télécharger un QR code — POST /qr_codes/{id}/download
Déclenchez la génération d’une image de QR code pour la ressource spécifiée. L’appel doit être authentifié avec une clé API autorisée à accéder à l’équipe du QR code.
curl -X POST "https://api.twilee.com/qr_codes/{id}/download" \
-H "Authorization: Bearer VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-o qr-code.png \
-d '{
"format": "png",
"size": 600,
"margin": 10
}'
Options du corps de requête
| Champ | Type | Défaut | Validation |
|---|---|---|---|
format |
string |
png |
Doit être png ou svg. |
size |
int |
300 |
Doit être compris entre 10 et 5000 pixels. |
margin |
int |
10 |
Doit être compris entre 0 et 30 pixels. |
Avis : L’endpoint de téléchargement ne prend pas encore en charge le stylisme avancé ; la sortie utilise le thème par défaut.
La réponse est un fichier binaire avec un nom dérivé du QR code et du format choisi. Twilee nettoie automatiquement le fichier temporaire après l’envoi.
Gestion des erreurs
- Les erreurs de validation renvoient
400 Bad Requestavec un message descriptif (par exemple options de téléchargement invalides ou champscontentmanquants). - L’accès à un QR code appartenant à une autre équipe produit également
400 Bad Request(« QR code not found ») afin d’éviter de divulguer l’existence d’autres ressources. - Les requêtes non authentifiées renvoient
401 Unauthorized, tandis qu’un utilisateur authentifié sans accès au QR code reçoit403 Forbidden.
Avec ces opérations, vous pouvez gérer les QR codes Twilee de bout en bout : création, personnalisation, analytique, publication schema.org et téléchargement des assets.