# Fonctionnement

Toutes les commandes sont exécutables à travers la fonction API `__sdcmpapi` et Sirdata CMP fournit une liste de commandes standards décrites dans l'[IAB Tech Lab CMP JavaScript API](https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/IAB%20Tech%20Lab%20-%20CMP%20API%20v2.md)

Si vous utilisez une version compatible avec le Transparency and Consent Framework/TCF (c'est le cas par défaut), les commandes sont alors **également** exécutables à travers la fonction API `__tcfapi`.

{% tabs %}
{% tab title="\_\_sdcmpapi" %}

```javascript
window.__sdcmpapi(command, version, callback, parameter);
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="\_\_tcfapi" %}

```javascript
window.__tcfapi(command, version, callback, parameter);
```

{% endtab %}
{% endtabs %}

Le paramètre `version` correspond à la version de la spécification TCF (= 2).

<table data-header-hidden><thead><tr><th width="173.65934065934064">COMMANDE</th><th width="172">CALLBACK</th><th width="175.2858384013901">PARAMETRE</th><th>DESCRIPTION</th></tr></thead><tbody><tr><td>COMMANDE</td><td>CALLBACK</td><td>PARAMETRE</td><td>DESCRIPTION</td></tr><tr><td><strong>ping</strong></td><td>function(PingReturn, success)</td><td>-</td><td>Renvoie des informations sur le statut de chargement de la CMP et le mode d'application du RGPD configuré.</td></tr><tr><td><strong>revokeUtiq</strong></td><td>function(success)</td><td>-</td><td>Retire le consentement existant pour le partenaire Utiq et la finalité associée. Le signal associée et l'UI de la CMP (en cas de réaffichage) sont mis à jour.<br><br>Renvoie <em>true</em> si Utiq et la finalité associée font partie du paramétrage de la CMP, et <em>false</em> sinon.</td></tr><tr><td><strong>getVendorList</strong></td><td>function(GlobalVendorList, success)</td><td><strong>vendorListVersion (int) - optionnel</strong><br>Version de la Global Vendor List à récupérer.<br>Si elle n'est pas renseignée, la version utilisée par Sirdata CMP sera renvoyée.<br>Si la valeur est <em>LATEST</em>, la dernière version disponible sera renvoyée.<br>Si la valeur est invalide, <code>GlobalVendorList</code> sera nul et <code>success</code> sera <em>false</em>.</td><td>Renvoie la Global Vendor List contenant les finalités et les partenaires participant au Transparency &#x26; Consent Framework.</td></tr><tr><td><strong>addEventListener</strong></td><td>function(TCData, success)</td><td>-</td><td>Ajoute une fonction JavaScript à appeler avec les TC Data lorsqu'un évènement CMP se produit.<br><a href="https://cmp.docs.sirdata.net/cmp-api/fonctionnement#events">Voir la liste des évènements</a></td></tr><tr><td><strong>removeEventListener</strong></td><td>function(success)</td><td><strong>listenerId (int)</strong><br>ID du listener à supprimer.</td><td>Supprime un listener précédemment ajouté avec la commande addEventListener.</td></tr></tbody></table>

### PingReturn <a href="#ping-return" id="ping-return"></a>

```erlang
{
    gdprApplies: *Boolean*,
    cmpLoaded: *Boolean*,
    cmpStatus: *String*,
    displayStatus: *String*,
    apiVersion: '2.0',
    cmpVersion: *Integer*,
    cmpId: *Integer*,
    gvlVersion: *Integer*,
    tcfPolicyVersion: *Integer*
}
```

### TCData <a href="#tc-data" id="tc-data"></a>

```erlang
{
    tcString: [base64url-encoded] *String*,
    addtlConsent: *String*,
    tcfPolicyVersion: *Integer*,
    cmpId: *Integer*,
    cmpVersion: *Integer*,
    gdprApplies: *Boolean*,
    eventStatus: *String*,
    cmpStatus: *String*,
    isServiceSpecific: *Boolean*,
    useNonStandardStacks: *Boolean*,
    publisherCC: *String*,
    purposeOneTreatment: *Boolean*,
    outOfBand: {
        allowedVendors: {
            *vendorId*: *Boolean*,
            ?
        },
        disclosedVendors: {
            *vendorId*: *Boolean*,
            ?
        }
    },
    purpose: {
        consents: {
            *purposeId*: *Boolean*,
            ?
        },
        legitimateInterests: {
            *purposeId*: *Boolean*,
            ?
        }
    },
    vendor: {
        consents: {
            *vendorId* : *Boolean*,
            ?
        },
        legitimateInterests: {
            *vendorId* : *Boolean*,
            ?
        }
    },
    specialFeatureOptins: {
        *specialFeatureId*: *Boolean*,
        ?
    },
    publisher: {
        consents: {
            *purposeId*: *Boolean*,
            ?
        },
        legitimateInterests: {
            *purposeId*: *Boolean*,
            ?
        },
        customPurpose: {
            consents: {
                *customPurposeId*: *Boolean*,
                ?
            },
            legitimateInterests: {
                *customPurposeId*: *Boolean*,
                ?
            }
        },
        restrictions: {
            *purposeId*: {
                *vendorId* : *Integer*,
                ?
            },
            ?
        }
    }
}
```

### GlobalVendorList <a href="#global-vendor-list" id="global-vendor-list"></a>

```erlang
{
    gvlSpecificationVersion: *Integer*,
    vendorListVersion: *Integer*,
    tcfPolicyVersion: *Integer*,
    lastUpdated: *String*,
    purposes: {
        *purposeId*: {
            id: *Integer*,
            name: *String*,
            description: *String*,
            descriptionLegal: *String*,
        },
        ?
    },
    specialPurposes: {
        *specialPurposeId*: {
            id: *Integer*,
            name: *String*,
            description: *String*,
            descriptionLegal: *String*,
        },
        ?
    },
    features: {
        *featureId*: {
            id: *Integer*,
            name: *String*,
            description: *String*,
            descriptionLegal: *String*,
        },
        ?
    },
    specialFeatures: {
        *specialFeatureId*: {
            id: *Integer*,
            name: *String*,
            description: *String*,
            descriptionLegal: *String*,
        },
        ?
    },
    stacks: {
        *stackId*: {
            id: *Integer*,
            name: *String*,
            description: *String*,
            purposes: [
                *Integer*,
                ?
            ],
            specialFeatures: [
                *Integer*,
                ?
            ],
        },
        ?
    },
    vendors: {
        *vendorId*: {
        {
            id: *Integer*,
            name: *String*,
            purposes: [
                *Integer*,
                ?
            ],
            legIntPurposes: [
                *Integer*,
                ?
            ],
            flexiblePurposes: [
                *Integer*,
                ?
            ],
            specialPurposes: [
                *Integer*,
                ?
            ],
            features: [
                *Integer*,
                ?
            ],
            specialFeatures: [
                *Integer*,
                ?
            ],
            policyUrl: *String*,
            usesCookies: *Boolean*,
            cookieMaxAgeSeconds: *Integer*,            
            usesNonCookieAccess: *Boolean*,
            deviceStorageDisclosureUrl: *String*
        },
        ?
    }
}
```

### Evènements <a href="#events" id="events"></a>

Vous trouverez dans le tableau ci-dessous la liste des évènements qui peuvent être déclenchés par la CMP :

| EVENEMENT              | DESCRIPTION                                                                                                                                                                                                                                                               |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **tcloaded**           | Cet évènement se déclenche lorsque la CMP est chargée, qu'une TC String valide est disponible et que l'UI n'est pas affichée.                                                                                                                                             |
| **cmpuishown**         | Cet évènement se déclenche lorsque l'UI est affichée ou ré-affichée. S'il n'y a pas de TC String existante pour l'utilisateur, la CMP crée une TC String avec tous les signaux d'intérêt légitime définis à `true` et tous les signaux de consentement définis à `false`. |
| **useractioncomplete** | Cet évènement se déclenche lorsqu'un utilisateur valide ou re-valide ses choix et que la TC String mise à jour est prête à être exposée.                                                                                                                                  |
| **cmpuiclosed**        | Cet évènement se déclenche lorsqu'un utilisateur ferme l'UI affichée en cliquant sur le bouton fermer (si activé) et donc que la TC String courante est inchangée par la CMP.                                                                                             |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://cmp.docs.sirdata.net/cmp-api/fonctionnement.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
