> ## Documentation Index
> Fetch the complete documentation index at: https://docs.firma.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Vérifier les enregistrements DNS

> Vérifier que tous les enregistrements DNS requis (SPF, DKIM, DMARC) sont correctement configurés. Appelez ceci après avoir ajouté tous les enregistrements DNS de l'étape de finalisation. Une fois vérifié, le domaine est prêt à envoyer des emails.



## OpenAPI

````yaml api-reference/v01.30.00/openapi-v01.30.00.fr.json post /company/domains/{id}/verify-dns
openapi: 3.0.3
info:
  title: API Partenaire Firma
  description: >-
    API RESTful pour la signature de documents et la gestion de modèles.


    **Authentification** : Tous les endpoints nécessitent une authentification
    par clé API via l'en-tête `Authorization`. Utilisez votre clé API
    directement sans préfixe (par exemple, `your-api-key`). Le préfixe Bearer
    est optionnel mais pas obligatoire.


    **Fonctionnalités de sécurité** :

    - Validation des entrées avec des schémas Zod incluant des messages d'erreur
    détaillés au niveau des champs

    - Jetons JWT signés RSA-256 pour l'accès aux modèles intégrés


    **Limitation de débit** : Les limites de débit sont hiérarchisées selon le
    type d'opération :

    - Opérations de lecture (GET) : 200 requêtes par minute

    - Opérations d'écriture (POST/PUT/PATCH/DELETE) : 120 requêtes par minute

    - Opérations CRUD sur les webhooks : 60 requêtes par minute

    - Test de webhook : 10 requêtes par minute

    - Régénération/expiration de clé API : 1 requête par minute

    - Rotation du secret de webhook : 1 requête par minute


    Lorsque les limites de débit sont dépassées, l'API renvoie une réponse `429
    Too Many Requests` avec les en-têtes suivants :

    - `X-RateLimit-Limit` : Nombre maximal de requêtes par minute pour cet
    endpoint

    - `X-RateLimit-Remaining` : Requêtes restantes dans la fenêtre actuelle

    - `X-RateLimit-Reset` : Horodatage Unix de la réinitialisation de la limite

    - `Retry-After` : Secondes à attendre avant de pouvoir réessayer


    **Gestion des erreurs** : Toutes les erreurs renvoient des réponses JSON
    structurées avec `error` (message lisible par un humain), `code`
    (identifiant lisible par une machine) et `details` (erreurs de validation au
    niveau des champs, le cas échéant).


    **Intégration de l'Éditeur de Modèles intégré** : L'Éditeur de Modèles Firma
    peut être intégré dans votre application à l'aide d'une bibliothèque
    JavaScript autonome.


    ```html

    <!-- Charger la bibliothèque de l'Éditeur de Modèles Firma -->

    <script
    src="https://api.firma.dev/functions/v1/embed-proxy/template-editor.js"></script>


    <script>

    // Générer d'abord un jeton JWT via l'API

    fetch('https://api.firma.dev/functions/v1/signing-request-api/generate-template-token',
    {
      method: 'POST',
      headers: {
        'Authorization': 'YOUR_API_KEY',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        companies_workspaces_templates_id: 'template-id'
      })
    })

    .then(res => res.json())

    .then(data => {
      // Initialiser l'éditeur avec le jeton JWT
      window.FirmaTemplateEditor.init({
        container: '#firma-editor-container',
        jwt: data.token,
        templateId: 'template-id',
        theme: 'dark',
        readOnly: false,
        onSave: (savedData) => {
          console.log('Template saved:', savedData);
        },
        onError: (error) => {
          console.error('Editor error:', error);
        },
        onLoad: (template) => {
          console.log('Template loaded:', template);
        }
      });
    });

    </script>

    ```
  version: 01.30.00
  contact:
    name: API Support
    url: https://firma.com/support
servers:
  - url: https://api.firma.dev/functions/v1/signing-request-api
    description: API de Production - Recommandée (Actuelle)
  - url: https://api.firma.dev/api/v1
    description: API de Production - Prévue
security:
  - ApiKeyAuth: []
tags:
  - name: Company
    description: Informations et paramètres de l'entreprise
  - name: Workspaces
    description: Opérations de gestion des Espaces de Travail
  - name: Templates
    description: Opérations de gestion des Modèles
  - name: Signing Requests
    description: Opérations de Demande de Signature de documents
  - name: Custom Fields
    description: >-
      Gestion des définitions de champs personnalisés pour les espaces de
      travail, modèles et demandes de signature
  - name: Webhooks
    description: Configuration et gestion des webhooks
  - name: JWT Management
    description: Génération et révocation de jetons JWT pour les modèles intégrés
  - name: Workspace Settings
    description: Configuration et paramètres de l'espace de travail
  - name: Email Domains
    description: >-
      Configuration et vérification de domaine e-mail pour l'envoi d'e-mails de
      demande de signature depuis des domaines personnalisés
  - name: Email Templates
    description: >-
      Gestion des modèles d'e-mail pour la personnalisation des notifications de
      demande de signature au niveau de l'espace de travail et de l'entreprise
  - name: Signer Terms
    description: >-
      Conditions d'utilisation / déclarations de consentement personnalisées
      pour le signataire, au niveau de l'entreprise avec des surcharges par
      espace de travail et par langue
paths:
  /company/domains/{id}/verify-dns:
    post:
      tags:
        - Email Domains
      summary: Vérifier les enregistrements DNS
      description: >-
        Vérifier que tous les enregistrements DNS requis (SPF, DKIM, DMARC) sont
        correctement configurés. Appelez ceci après avoir ajouté tous les
        enregistrements DNS de l'étape de finalisation. Une fois vérifié, le
        domaine est prêt à envoyer des emails.
      operationId: verifyCompanyDomainDns
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: ID du domaine
      responses:
        '200':
          description: Résultat de la vérification DNS
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DomainVerifyDnsResponse'
              examples:
                verified:
                  summary: Tous les enregistrements vérifiés
                  value:
                    verified: true
                    message: Domain is fully verified and ready to send emails
                    domain:
                      id: 123e4567-e89b-12d3-a456-426614174000
                      domain: acme.com
                      verification_status: 2
                      domain_status: 1
                      is_primary: true
                    dns_records:
                      - type: TXT
                        name: '@'
                        value: v=spf1 include:amazonses.com ~all
                        status: verified
                      - type: CNAME
                        name: resend._domainkey
                        value: resend._domainkey.amazonses.com
                        status: verified
                      - type: TXT
                        name: _dmarc
                        value: v=DMARC1; p=none;
                        status: verified
                pending:
                  summary: Certains enregistrements en attente
                  value:
                    verified: false
                    message: >-
                      Some DNS records are not yet verified. Please check your
                      DNS configuration.
                    domain:
                      id: 123e4567-e89b-12d3-a456-426614174000
                      domain: acme.com
                      verification_status: 2
                      domain_status: 0
                    dns_records:
                      - type: TXT
                        name: '@'
                        value: v=spf1 include:amazonses.com ~all
                        status: verified
                      - type: CNAME
                        name: resend._domainkey
                        value: resend._domainkey.amazonses.com
                        status: pending
                      - type: TXT
                        name: _dmarc
                        value: v=DMARC1; p=none;
                        status: pending
        '400':
          description: Domaine non finalisé
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: Domain not finalized
                message: >-
                  Please finalize domain setup first by calling POST
                  /company/domains/{id}/finalize
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitError'
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: TypeScript
          label: '@firma-dev/sdk'
          source: |-
            import { FirmaClient } from "@firma-dev/sdk";

            const firma = new FirmaClient({ apiKey: "YOUR_API_KEY" });

            const response = await firma.emailDomains.verifyCompanyDomainDns({
                id: "id"
            });
            console.log(response);
components:
  schemas:
    DomainVerifyDnsResponse:
      type: object
      properties:
        verified:
          type: boolean
          description: Indique si tous les enregistrements DNS sont vérifiés
        message:
          type: string
        domain:
          $ref: '#/components/schemas/Domain'
        dns_records:
          type: array
          items:
            $ref: '#/components/schemas/DomainDnsRecord'
          description: Statut de chaque enregistrement DNS
      description: Résultat de la vérification DNS
      required:
        - verified
        - message
        - domain
    Error:
      type: object
      properties:
        error:
          type: string
          description: Message d'erreur lisible par un humain
        message:
          type: string
          description: Description détaillée de l'erreur
        details:
          type: object
          description: Détails d'erreur supplémentaires
          additionalProperties: true
      required:
        - error
    Domain:
      type: object
      description: >-
        Configuration de domaine email pour l'envoi des emails de Demande de
        Signature
      properties:
        id:
          type: string
          format: uuid
          description: Identifiant unique du domaine
        domain:
          type: string
          description: Le nom de domaine (par exemple, 'example.com')
        verification_status:
          type: integer
          enum:
            - 0
            - 1
            - 2
          description: >-
            Statut de vérification de propriété du domaine : 0=en attente,
            1=propriété vérifiée (enregistrement TXT confirmé), 2=finalisé
            (enregistré chez le fournisseur email)
        domain_status:
          type: integer
          enum:
            - 0
            - 1
          description: >-
            Statut d'envoi d'emails : 0=enregistrements DNS en attente de
            vérification, 1=entièrement vérifié et prêt à envoyer
        is_primary:
          type: boolean
          description: >-
            Indique si c'est le domaine principal pour l'envoi d'emails depuis
            cet Espace de Travail
        verification_token:
          type: string
          description: >-
            Jeton à ajouter comme enregistrement TXT pour la vérification de
            propriété du domaine. Retourné uniquement quand
            verification_status=0.
        resend_domain_id:
          type: string
          nullable: true
          description: ID de domaine du fournisseur email externe (usage interne)
        dns_records:
          type: array
          nullable: true
          description: >-
            Enregistrements DNS requis pour l'envoi d'emails. Retourné
            uniquement après la finalisation du domaine (verification_status=2).
          items:
            $ref: '#/components/schemas/DomainDnsRecord'
        date_created:
          type: string
          format: date-time
          description: Horodatage de création du domaine
        date_changed:
          type: string
          format: date-time
          description: Horodatage de dernière mise à jour du domaine
      required:
        - id
        - domain
        - domain_status
        - verification_status
    DomainDnsRecord:
      type: object
      description: Enregistrement DNS requis pour la vérification du domaine email
      properties:
        type:
          type: string
          enum:
            - TXT
            - CNAME
            - MX
          description: Type d'enregistrement DNS
        name:
          type: string
          description: >-
            Nom/hôte de l'enregistrement DNS (par exemple, 'resend._domainkey'
            ou '@')
        value:
          type: string
          description: Valeur de l'enregistrement DNS
        ttl:
          type: string
          description: Durée de vie (par exemple, 'Auto' ou en secondes)
        priority:
          type: integer
          nullable: true
          description: Priorité pour les enregistrements MX
        status:
          type: string
          enum:
            - pending
            - verified
            - failed
          description: Statut de vérification de cet enregistrement spécifique
  responses:
    UnauthorizedError:
      description: Non Autorisé - Clé API invalide ou manquante
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Unauthorized
            message: Invalid API key
    NotFoundError:
      description: Non Trouvé - La ressource n'existe pas
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Not Found
            message: The requested resource was not found
    RateLimitError:
      description: Trop de requêtes - Limite de débit dépassée
      headers:
        X-RateLimit-Limit:
          schema:
            type: integer
          description: Nombre maximum de requêtes par minute
        X-RateLimit-Remaining:
          schema:
            type: integer
          description: Requêtes restantes
        X-RateLimit-Reset:
          schema:
            type: integer
          description: Timestamp Unix de la réinitialisation
        Retry-After:
          schema:
            type: integer
          description: Secondes avant de pouvoir réessayer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Rate Limit Exceeded
            message: Too many requests. Please wait before retrying.
            details:
              retry_after: 45
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        Clé API pour l'authentification. Utilisez votre clé API directement sans
        préfixe (par exemple, 'your-api-key'). Le préfixe Bearer est optionnel
        mais pas obligatoire.

````