openapi: 3.0.3
info:
  title: "KifDom | Documentation de l'API"
  description: "Bienvenue sur l'API KifDom.\r\n\nCe guide d'utilisation décrit les différentes méthodes accessibles via l'API.\r\n\nL'API a été conçue pour faciliter l'accès à notre base et vous permettre d'interagir avec certains de ses aspects."
  version: 1.0.0
servers:
  -
    url: 'https://www.kifdom.com'
paths:
  /api/v1/auth/login:
    post:
      summary: "Obtenir un token d'autentification"
      operationId: obtenirUnTokenDautentification
      description: "<aside>\n    <strong><u>Note :</u></strong>\n    <br>\n    Le token d'authentification retourné possède une durée de vie d'une heure. Pensez à le renouveler avant\n    qu'il n'expire.\n    <br>\n    Pour cela, appelez la route suivante :\n    <a href=\"#authentification-POSTapi-v1-auth-refresh\" style=\"text-decoration:none\">\n        <strong><code class=\"hljs-string\">/api/v1/refresh</code></strong>\n    </a>\n</aside>"
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  access_token: '{YOUR_API_TOKEN}'
                  token_type: bearer
                  expires_in: 3600
                properties:
                  access_token:
                    type: string
                    example: '{YOUR_API_TOKEN}'
                    description: 'Le token d''autorisation, obligatoire pour interroger les endpoints marqués du tag <small class="badge badge-darkred">requires authentication</small>.<br>Dans les exemples, il est représenté par la chaine <strong><code class="hljs-string">{YOUR_AUTH_KEY}</code></strong>.'
                  token_type:
                    type: string
                    example: bearer
                    description: 'Le type d''autorisation par le biais de laquelle le token d''authorisation peut être utilisé.<br>Le token d''autorisation doit être envoyé dans l''en-tête <strong><code class="hljs-string">Authorization</code></strong> sous la forme :<br><strong><code class="hljs-string">Authorization: Bearer {YOUR_AUTH_KEY}</code></strong>.'
                  expires_in:
                    type: integer
                    example: 3600
                    description: "La durée de vie du token d'autorisation en secondes (3600 secondes = 1 heure)."
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  error:
                    code: 401
                    message: Unauthorized.
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: integer
                        example: 401
                      message:
                        type: string
                        example: Unauthorized.
      tags:
        - Authentification
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: "L'email de l'utilisateur.<br>"
                  example: myemail@provider.com
                password:
                  type: string
                  description: "Le mot de passe de l'utilisateur.<br>"
                  example: '%z*b_MgZv<8f2Uy7R'
              required:
                - email
                - password
      security: []
  /api/v1/auth/refresh:
    post:
      summary: "Rafraichir le token d'autentification"
      operationId: rafraichirLeTokenDautentification
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  access_token: '{YOUR_API_TOKEN}'
                  token_type: bearer
                  expires_in: 3600
                properties:
                  access_token:
                    type: string
                    example: '{YOUR_API_TOKEN}'
                    description: 'Le token d''autorisation, obligatoire pour interroger les endpoints marqués du tag <small class="badge badge-darkred">requires authentication</small>.<br>Dans les exemples, il est représenté par la chaine <strong><code class="hljs-string">{YOUR_AUTH_KEY}</code></strong>.'
                  token_type:
                    type: string
                    example: bearer
                    description: 'Le type d''autorisation par le biais de laquelle le token d''authorisation peut être utilisé.<br>Le token d''autorisation doit être envoyé dans l''en-tête <strong><code class="hljs-string">Authorization</code></strong> sous la forme :<br><strong><code class="hljs-string">Authorization: Bearer {YOUR_AUTH_KEY}</code></strong>.'
                  expires_in:
                    type: integer
                    example: 3600
                    description: "La durée de vie du token d'autorisation en secondes (3600 secondes = 1 heure)."
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
      tags:
        - Authentification
  /api/v1/auth/me:
    post:
      summary: 'Afficher le compte utilisateur'
      operationId: afficherLeCompteUtilisateur
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  code: 200
                  message: 'User successfully retrieved.'
                  data:
                    email: '{YOUR_EMAIL}'
                    first_name: '{YOUR_FIRST_NAME}'
                    last_name: '{YOUR_LAST_NAME}'
                    address: '{YOUR_ADDRESS}'
                    postcode: '{YOUR_POSTCODE}'
                    city: '{YOUR_CITY}'
                    country: '{YOUR_COUNTRY_CODE}'
                    phone: '{YOUR_PHONE_NUMBER}'
                properties:
                  code:
                    type: integer
                    example: 200
                    description: 'Code HTTP de la réponse.'
                  message:
                    type: string
                    example: 'User successfully retrieved.'
                    description: 'Message de la réponse.'
                  data:
                    type: object
                    properties:
                      email:
                        type: string
                        example: '{YOUR_EMAIL}'
                        description: "L'adresse email de l'utilisateur."
                      first_name:
                        type: string
                        example: '{YOUR_FIRST_NAME}'
                        description: "Le prénom de l'utilisateur."
                      last_name:
                        type: string
                        example: '{YOUR_LAST_NAME}'
                        description: "Le nom de famille de l'utilisateur."
                      address:
                        type: string
                        example: '{YOUR_ADDRESS}'
                        description: "L'adresse de résidence de l'utilisateur."
                      postcode:
                        type: string
                        example: '{YOUR_POSTCODE}'
                        description: "Le code postal de résidence de l'utilisateur."
                      city:
                        type: string
                        example: '{YOUR_CITY}'
                        description: "La ville de résidence de l'utilisateur."
                      country:
                        type: string
                        example: '{YOUR_COUNTRY_CODE}'
                        description: "Le pays de résidence de l'utilisateur."
                      phone:
                        type: string
                        example: '{YOUR_PHONE_NUMBER}'
                        description: "Le numéro de téléphone de l'utilisateur."
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
                    description: 'Message de la réponse.'
      tags:
        - Authentification
  /api/v1/auth/logout:
    post:
      summary: "Détruire le token d'autentification (déconnexion)"
      operationId: dtruireLeTokenDautentificationdconnexion
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Successfully logged out.'
                properties:
                  message:
                    type: string
                    example: 'Successfully logged out.'
                    description: 'Message de la réponse.'
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
                    description: 'Message de la réponse.'
      tags:
        - Authentification
  /api/v1/domains:
    get:
      summary: 'Afficher la liste de vos domaines'
      operationId: afficherLaListeDeVosDomaines
      description: "<aside>\n    <strong><code class=\"hljs-string\"><u>Note:</u></code></strong>\n    <br>\n    Les noms de domaine peuvent utiliser :\n    <ul>\n        <li>Soit les NS (Name Servers) de KifDom (<strong><code class=\"hljs-string\">ns1.kifdns.fr</code></strong>, <strong><code class=\"hljs-string\">ns2.kifdns.fr</code></strong>, <strong><code class=\"hljs-string\">ns3.kifdns.fr</code></strong>). Vous pourrez alors gérer vos zones DNS sur le site KifDom.fr ou via cette API.</li>\n        <li>Soit des NS que vous aurez préalablement personnalisé. Vos zones DNS seront alors gérées par un autre prestataire de votre choix, votre hébergeur par exemple.</li>\n    </ul>\n    Vous pouvez connaitre le type de NS utilisé en vous basant sur la propriété <strong><code class=\"hljs-string\">data.kifdns</code></strong>.\n    <ol>\n        <li>Si cette valeur est égale à <strong><code class=\"hljs-string\">true</code></strong> alors les NS sont ceux de KifDom, et un tableau <strong><code class=\"hljs-string\">data.dns</code></strong> contiendra vos zones DNS.</li>\n        <li>Si cette valeur est égale à <strong><code class=\"hljs-string\">false</code></strong> alors vos NS ne sont pas ceux de KifDom, et un tableau <strong><code class=\"hljs-string\">data.ns</code></strong> contiendra vos NS personnalisés.</li>\n    </ol>\n    <strong><code class=\"hljs-string\"><a href=\"#noms-de-domaine-GETapi-v1-domains\" style=\"color:inherit\">[Voir un exemple de réponse]</a></code></strong>\n</aside>"
      parameters: []
      responses:
        200:
          description: ''
          content:
            text/plain:
              schema:
                type: string
                example: "{\n    \"meta\": {\n        \"balance\": \"1350.00\",\n        \"on-hold\": \"90.00\",\n        \"total\": 14,\n        \"error\": false\n    },\n    \"data\": [\n        {\n            \"name\": \"mydomain1.fr\",\n            \"punycode_name\": \"mydomain1.fr\",\n            \"status\": \"active\",\n            \"renew\": false,\n            \"kifdns\": true,\n            \"dns\": [\n                {\n                    \"id\": 54321,\n                    \"type\": \"A\",\n                    \"name\": \"@\",\n                    \"data\": \"111.33.444.22\",\n                    \"ttl\": 1800\n                },\n                {\n                    \"id\": 54322,\n                    \"type\": \"CNAME\",\n                    \"name\": \"www\",\n                    \"data\": \"myblog.fr\",\n                    \"ttl\": 1800\n                },\n                {\n                    \"id\": 54323,\n                    \"type\": \"MX\",\n                    \"name\": \"@\",\n                    \"data\": \"mailhost1.example.com\",\n                    \"priority\": 10,\n                    \"ttl\": 1800\n                },\n                {\n                    \"id\": 54324,\n                    \"type\": \"MX\",\n                    \"name\": \"@\",\n                    \"data\": \"mailhost2.example.com\",\n                    \"priority\": 20,\n                    \"ttl\": 1800\n                }\n            ],\n            \"registry_ends_at\": \"2023-03-01T00:00:00Z\",\n            \"label\": \"MyDomain1\"\n        },\n        {\n            \"name\": \"mydomain2.fr\",\n            \"punycode_name\": \"mydomain2.fr\",\n            \"status\": \"outgoing_transfer\",\n            \"renew\": false,\n            \"kifdns\": false,\n            \"ns\": [\n                {\n                    \"id\": 65432,\n                    \"type\": \"NS\",\n                    \"name\": null,\n                    \"data\": \"ns1.myhostingcompany.net\",\n                    \"priority\": null,\n                    \"ttl\": 1800\n                },\n                {\n                    \"id\": 65433,\n                    \"type\": \"NS\",\n                    \"name\": null,\n                    \"data\": \"ns2.myhostingcompany.net\",\n                    \"priority\": null,\n                    \"ttl\": 1800\n                }\n            ],\n            \"registry_ends_at\": \"2023-03-01T00:00:00Z\",\n            \"label\": \"MyDomain2\"\n        }\n        ...ETC...\n    ]\n}"
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Token not provided'
                properties:
                  message:
                    type: string
                    example: 'Token not provided'
      tags:
        - 'Noms de domaine'
    post:
      summary: 'Créer un nom de domaine'
      operationId: crerUnNomDeDomaine
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  meta:
                    balance: '1350.00'
                    on-hold: '90.00'
                    total: 14
                    error: false
                  data:
                    code: 200
                    message: 'Domain name successfully created.'
                properties:
                  meta:
                    type: object
                    properties:
                      balance:
                        type: string
                        example: '1350.00'
                        description: "Les crédits déposés par l'utilisateur (en euros)."
                      on-hold:
                        type: string
                        example: '90.00'
                        description: "Le montant de crédits engagés par l'utilisateur dans des précommandes (en euros)."
                      total:
                        type: integer
                        example: 14
                        description: "Le nombre de domaines détenus par l'utilisateur (en euros)."
                      error:
                        type: boolean
                        example: false
                        description: 'Le status de la requête (true = Succès | false = Erreur).'
                  data:
                    type: object
                    properties:
                      code:
                        type: integer
                        example: 200
                        description: 'Code HTTP de la réponse.'
                      message:
                        type: string
                        example: 'Domain name successfully created.'
                        description: 'Message de la réponse.'
        400:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  meta:
                    on-hold: 20
                    total-domains: 14
                    credits-balance: 1350
                    error: true
                  error:
                    code: 400
                    message: 'The `price` parameter should be an integer.'
                properties:
                  meta:
                    type: object
                    properties:
                      on-hold:
                        type: integer
                        example: 20
                        description: "Le montant de crédits engagés par l'utilisateur dans des précommandes (en euros)."
                      total-domains:
                        type: integer
                        example: 14
                      credits-balance:
                        type: integer
                        example: 1350
                      error:
                        type: boolean
                        example: true
                        description: 'Le status de la requête (true = Succès | false = Erreur).'
                  error:
                    type: object
                    properties:
                      code:
                        type: integer
                        example: 400
                      message:
                        type: string
                        example: 'The `price` parameter should be an integer.'
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Token not provided'
                properties:
                  message:
                    type: string
                    example: 'Token not provided'
      tags:
        - 'Noms de domaine'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Le nom de domaine.<br>'
                  example: mydomain.fr
                renewable:
                  type: integer
                  description: 'Le renouvellement automatique du nom de domaine (0 = Non | 1 = Oui). Valeur par défaut : 1.<br>'
                  example: 0
                label:
                  type: string
                  description: 'Un libellé pour le nom de domaine. Valeur par défaut : null.<br>'
                  example: MyDomain.
              required:
                - name
  '/api/v1/domains/{domain_name}':
    get:
      summary: 'Affiche un domaine'
      operationId: afficheUnDomaine
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  meta:
                    balance: '1350.00'
                    on-hold: '90.00'
                    total: 14
                    error: false
                  domain:
                    name: mydomain1.fr
                    punycode_name: mydomain1.fr
                    status: active
                    renew: false
                    kifdns: true
                    dns:
                      -
                        id: 54321
                        type: A
                        name: '@'
                        data: 111.33.444.22
                        ttl: 1800
                      -
                        id: 54322
                        type: CNAME
                        name: www
                        data: myblog.fr
                        ttl: 1800
                      -
                        id: 54323
                        type: MX
                        name: '@'
                        data: mailhost1.example.com
                        priority: 10
                        ttl: 1800
                      -
                        id: 54324
                        type: MX
                        name: '@'
                        data: mailhost2.example.com
                        priority: 20
                        ttl: 1800
                    registry_ends_at: '2023-03-01T00:00:00Z'
                    label: MyDomain1
                properties:
                  meta:
                    type: object
                    properties:
                      balance:
                        type: string
                        example: '1350.00'
                        description: "Les crédits déposés par l'utilisateur (en euros)."
                      on-hold:
                        type: string
                        example: '90.00'
                        description: "Le montant de crédits engagés par l'utilisateur dans des précommandes (en euros)."
                      total:
                        type: integer
                        example: 14
                        description: "Le nombre de domaines détenus par l'utilisateur (en euros)."
                      error:
                        type: boolean
                        example: false
                        description: 'Le status de la requête (true = Succès | false = Erreur).'
                  domain:
                    type: object
                    properties:
                      name:
                        type: string
                        example: mydomain1.fr
                        description: 'Le nom de domaine.'
                      punycode_name:
                        type: string
                        example: mydomain1.fr
                        description: 'Le nom de domaine au format punycode (pour les noms de domaine accentués).'
                      status:
                        type: string
                        example: active
                        description: 'Le statut du nom de domaine.'
                      renew:
                        type: boolean
                        example: false
                        description: "Le status de l'auto-renouvellement du nom de domaine (true = Oui| false = Non)."
                      kifdns:
                        type: boolean
                        example: true
                        description: "L'utilisation des serveurs de noms (NS) de KifDom (true = Oui| false = Non)."
                      dns:
                        type: array
                        example:
                          -
                            id: 54321
                            type: A
                            name: '@'
                            data: 111.33.444.22
                            ttl: 1800
                          -
                            id: 54322
                            type: CNAME
                            name: www
                            data: myblog.fr
                            ttl: 1800
                          -
                            id: 54323
                            type: MX
                            name: '@'
                            data: mailhost1.example.com
                            priority: 10
                            ttl: 1800
                          -
                            id: 54324
                            type: MX
                            name: '@'
                            data: mailhost2.example.com
                            priority: 20
                            ttl: 1800
                        description: 'Liste des enregistrements DNS du nom de domaine.'
                        items:
                          type: object
                          properties:
                            id:
                              type: integer
                              example: 54321
                              description: "L'identifiant de l'enregistrement DNS de type non-NS."
                            type:
                              type: string
                              example: A
                              description: "Le type de l'enregistrement DNS de type non-NS (peut être A, AAAA, CNAME, MX ou TXT)."
                            name:
                              type: string
                              example: '@'
                              description: "Le nom de l'enregistrement DNS de type non-NS."
                            data:
                              type: string
                              example: 111.33.444.22
                              description: "La valeur de l'enregistrement DNS de type non-NS."
                            ttl:
                              type: integer
                              example: 1800
                              description: "Le TTL (Time To Live) de l'enregistrement DNS de type non-NS."
                      registry_ends_at:
                        type: string
                        example: '2023-03-01T00:00:00Z'
                        description: "La date d'expiration du nom de domaine."
                      label:
                        type: string
                        example: MyDomain1
                        description: 'Le label associé au nom de domaine (peut être null).'
        400:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  meta:
                    on-hold: 20
                    total-domains: 14
                    credits-balance: 1350
                    error: true
                  error:
                    code: 400
                    message: 'The `price` parameter should be an integer.'
                properties:
                  meta:
                    type: object
                    properties:
                      on-hold:
                        type: integer
                        example: 20
                        description: "Le montant de crédits engagés par l'utilisateur dans des précommandes (en euros)."
                      total-domains:
                        type: integer
                        example: 14
                      credits-balance:
                        type: integer
                        example: 1350
                      error:
                        type: boolean
                        example: true
                        description: 'Le status de la requête (true = Succès | false = Erreur).'
                  error:
                    type: object
                    properties:
                      code:
                        type: integer
                        example: 400
                      message:
                        type: string
                        example: 'The `price` parameter should be an integer.'
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Token not provided'
                properties:
                  message:
                    type: string
                    example: 'Token not provided'
      tags:
        - 'Noms de domaine'
    put:
      summary: 'Mettre à jour un nom de domaine'
      operationId: mettreJourUnNomDeDomaine
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  meta:
                    balance: '1350.00'
                    on-hold: '90.00'
                    total: 14
                    error: false
                  data:
                    code: 200
                    message: 'Domain name successfully updated.'
                properties:
                  meta:
                    type: object
                    properties:
                      balance:
                        type: string
                        example: '1350.00'
                        description: "Les crédits déposés par l'utilisateur (en euros)."
                      on-hold:
                        type: string
                        example: '90.00'
                        description: "Le montant de crédits engagés par l'utilisateur dans des précommandes (en euros)."
                      total:
                        type: integer
                        example: 14
                        description: "Le nombre de domaines détenus par l'utilisateur (en euros)."
                      error:
                        type: boolean
                        example: false
                        description: 'Le status de la requête (true = Succès | false = Erreur).'
                  data:
                    type: object
                    properties:
                      code:
                        type: integer
                        example: 200
                        description: 'Code HTTP de la réponse.'
                      message:
                        type: string
                        example: 'Domain name successfully updated.'
                        description: 'Message de la réponse.'
        400:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  meta:
                    on-hold: 20
                    total-domains: 14
                    credits-balance: 1350
                    error: true
                  error:
                    code: 400
                    message: 'The `renew` parameter should be an integer.'
                properties:
                  meta:
                    type: object
                    properties:
                      on-hold:
                        type: integer
                        example: 20
                        description: "Le montant de crédits engagés par l'utilisateur dans des précommandes (en euros)."
                      total-domains:
                        type: integer
                        example: 14
                      credits-balance:
                        type: integer
                        example: 1350
                      error:
                        type: boolean
                        example: true
                        description: 'Le status de la requête (true = Succès | false = Erreur).'
                  error:
                    type: object
                    properties:
                      code:
                        type: integer
                        example: 400
                      message:
                        type: string
                        example: 'The `renew` parameter should be an integer.'
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Token not provided'
                properties:
                  message:
                    type: string
                    example: 'Token not provided'
      tags:
        - 'Noms de domaine'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                renew:
                  type: integer
                  description: 'optional Le renouvellement automatique du nom de domaine (1 = Oui | 0 = Non).<br>'
                  example: 0
                label:
                  type: string
                  description: 'optional Le label associé au nom de domaine (peut être null).<br>'
                  example: MyDomain
                ns:
                  type: array
                  description: 'optional Liste des enregistrements de type NS personnalisés du nom de domaine, si présent mais vide les serveurs de noms de KifDom seront utilisés.<br>'
                  example:
                    - ns1.example.com
                    - ns2.example.com
                    - ns3.example.com
                  items:
                    type: 'string[]|empty'
    parameters:
      -
        in: path
        name: domain_name
        description: 'Le nom de domaine.<br>'
        example: mydomain.fr
        required: true
        schema:
          type: string
  '/api/v1/name-servers/{domain_name}':
    get:
      summary: 'Afficher les serveurs de nom'
      operationId: afficherLesServeursDeNom
      description: "<aside>\n    <strong><code class=\"hljs-string\"><u>Note:</u></code></strong>\n    <br>\n    Les noms de domaine peuvent utiliser :\n    <ul>\n        <li>Soit les NS (Name Servers) de KifDom (<strong><code class=\"hljs-string\">ns1.kifdns.fr</code></strong>, <strong><code class=\"hljs-string\">ns2.kifdns.fr</code></strong>, <strong><code class=\"hljs-string\">ns3.kifdns.fr</code></strong>). Vous pourrez alors gérer vos zones DNS sur le site KifDom.fr ou via cette API.</li>\n        <li>Soit des NS que vous aurez préalablement personnalisé. Vos zones DNS seront alors gérées par un autre prestataire de votre choix, votre hébergeur par exemple.</li>\n    </ul>\n    Vous pouvez connaitre le type de NS utilisé en vous basant sur la propriété <strong><code class=\"hljs-string\">data.kifdns</code></strong>.\n    <ol>\n        <li>Si cette valeur est égale à <strong><code class=\"hljs-string\">true</code></strong> alors les NS sont ceux de KifDom, et un tableau <strong><code class=\"hljs-string\">data.dns</code></strong> contiendra vos zones DNS.</li>\n        <li>Si cette valeur est égale à <strong><code class=\"hljs-string\">false</code></strong> alors vos NS ne sont pas ceux de KifDom, et un tableau <strong><code class=\"hljs-string\">data.ns</code></strong> contiendra vos NS personnalisés.</li>\n    </ol>\n    <strong><code class=\"hljs-string\"><a href=\"#noms-de-domaine-GETapi-v1-domains\" style=\"color:inherit\">[Voir un exemple de réponse]</a></code></strong>\n</aside>"
      parameters: []
      responses:
        200:
          description: ''
          content:
            text/plain:
              schema:
                type: string
                example: "{\n    \"meta\": {\n        \"balance\": \"1350.00\",\n        \"on-hold\": \"90.00\",\n        \"total\": 14,\n        \"error\": false\n    },\n    \"data\": [\n        {\n            \"id\": 12345,\n            \"type\": \"NS\",\n            \"name\": \"@\",\n            \"value\": \"ns1.kifdns.fr\",\n            \"ttl\": 1800\n        },\n        ...ETC...\n    ]\n}"
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Token not provided'
                properties:
                  message:
                    type: string
                    example: 'Token not provided'
      tags:
        - 'Serveurs de noms'
    put:
      summary: 'Mettre à jour un serveur de nom'
      operationId: mettreJourUnServeurDeNom
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  code: 200
                  message: 'Nameserver successfully updated.'
                properties:
                  code:
                    type: integer
                    example: 200
                  message:
                    type: string
                    example: 'Nameserver successfully updated.'
        400:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  meta:
                    balance: '1350.00'
                    on-hold: '90.00'
                    total: 14
                    error: false
                  error:
                    code: 400
                    message: 'Provided `value` is not accurate for this `type` of NS record.'
                properties:
                  meta:
                    type: object
                    properties:
                      balance:
                        type: string
                        example: '1350.00'
                        description: "Les crédits déposés par l'utilisateur (en euros)."
                      on-hold:
                        type: string
                        example: '90.00'
                        description: "Le montant de crédits engagés par l'utilisateur dans des précommandes (en euros)."
                      total:
                        type: integer
                        example: 14
                        description: "Le nombre de domaines détenus par l'utilisateur (en euros)."
                      error:
                        type: boolean
                        example: false
                        description: 'Le status de la requête (true = Succès | false = Erreur).'
                  error:
                    type: object
                    properties:
                      code:
                        type: integer
                        example: 400
                      message:
                        type: string
                        example: 'Provided `value` is not accurate for this `type` of NS record.'
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Token not provided'
                properties:
                  message:
                    type: string
                    example: 'Token not provided'
      tags:
        - 'Serveurs de noms'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                ns:
                  type: array
                  description: 'Tableau de valeurs des serveurs de nom.<br>'
                  example:
                    - ns1.example.com
                    - ns2.example.com
                    - ns3.example.com
                  items:
                    type: 'string[]|empty'
              required:
                - ns
    parameters:
      -
        in: path
        name: domain_name
        description: 'Le nom de domaine.<br>'
        example: mydomain.fr
        required: true
        schema:
          type: string
  /api/v1/dns-zones:
    post:
      summary: 'Créer une zone DNS'
      operationId: crerUneZoneDNS
      description: "<aside>\n    <strong><code class=\"hljs-string\"><u>Note:</u></code></strong>\n    <br>\n    Pour gérer vos zones DNS sur le site KifDom.fr ou via cette API, vous devez utiliser les NS (Name Servers) de KifDom (<strong><code class=\"hljs-string\">ns1.kifdns.fr</code></strong>, <strong><code class=\"hljs-string\">ns2.kifdns.fr</code></strong>, <strong><code class=\"hljs-string\">ns3.kifdns.fr</code></strong>).\n</aside>"
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  meta:
                    balance: '1350.00'
                    on-hold: '90.00'
                    total: 14
                    error: false
                  data:
                    code: 200
                    message: 'DNS zone successfully created.'
                properties:
                  meta:
                    type: object
                    properties:
                      balance:
                        type: string
                        example: '1350.00'
                        description: "Les crédits déposés par l'utilisateur (en euros)."
                      on-hold:
                        type: string
                        example: '90.00'
                        description: "Le montant de crédits engagés par l'utilisateur dans des précommandes (en euros)."
                      total:
                        type: integer
                        example: 14
                        description: "Le nombre de domaines détenus par l'utilisateur (en euros)."
                      error:
                        type: boolean
                        example: false
                        description: 'Le status de la requête (true = Succès | false = Erreur).'
                  data:
                    type: object
                    properties:
                      code:
                        type: integer
                        example: 200
                        description: 'Code HTTP de la réponse.'
                      message:
                        type: string
                        example: 'DNS zone successfully created.'
                        description: 'Message de la réponse.'
        400:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  meta:
                    on-hold: 20
                    total-domains: 14
                    credits-balance: 1350
                    error: true
                  error:
                    code: 400
                    message: 'Provided `value` is not accurate for this `type` of DNS record.'
                properties:
                  meta:
                    type: object
                    properties:
                      on-hold:
                        type: integer
                        example: 20
                        description: "Le montant de crédits engagés par l'utilisateur dans des précommandes (en euros)."
                      total-domains:
                        type: integer
                        example: 14
                      credits-balance:
                        type: integer
                        example: 1350
                      error:
                        type: boolean
                        example: true
                        description: 'Le status de la requête (true = Succès | false = Erreur).'
                  error:
                    type: object
                    properties:
                      code:
                        type: integer
                        example: 400
                      message:
                        type: string
                        example: 'Provided `value` is not accurate for this `type` of DNS record.'
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Token not provided'
                properties:
                  message:
                    type: string
                    example: 'Token not provided'
      tags:
        - 'Zones DNS'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                domain_name:
                  type: string
                  description: 'Le nom de domaine.<br>'
                  example: mydomain.fr
                type:
                  type: string
                  description: 'Le type de la zone DNS. (A, AAAA, CNAME, MX ou TXT).<br>'
                  example: CNAME
                name:
                  type: string
                  description: 'Le nom de zone DNS.<br>'
                  example: blog
                value:
                  type: string
                  description: 'La valeur de la zone DNS.<br>'
                  example: myblog.fr
                priority:
                  type: string
                  description: 'La priorité de la zone DNS de type MX, facultatif pour toutes les zones DNS de type non-MX.<br>'
                  example: '10'
                ttl:
                  type: integer
                  description: 'Le TTL (Time To Live) ou durée de vie en secondes de la zone DNS.<br>'
                  example: 3600
              required:
                - domain_name
                - type
                - name
                - value
                - ttl
    put:
      summary: 'Mettre à jour une zone DNS'
      operationId: mettreJourUneZoneDNS
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  code: 200
                  message: 'DNS zone successfully updated.'
                properties:
                  code:
                    type: integer
                    example: 200
                  message:
                    type: string
                    example: 'DNS zone successfully updated.'
        400:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  meta:
                    balance: '1350.00'
                    on-hold: '90.00'
                    total: 14
                    error: false
                  error:
                    code: 400
                    message: 'Provided `value` is not accurate for this `type` of DNS record.'
                properties:
                  meta:
                    type: object
                    properties:
                      balance:
                        type: string
                        example: '1350.00'
                        description: "Les crédits déposés par l'utilisateur (en euros)."
                      on-hold:
                        type: string
                        example: '90.00'
                        description: "Le montant de crédits engagés par l'utilisateur dans des précommandes (en euros)."
                      total:
                        type: integer
                        example: 14
                        description: "Le nombre de domaines détenus par l'utilisateur (en euros)."
                      error:
                        type: boolean
                        example: false
                        description: 'Le status de la requête (true = Succès | false = Erreur).'
                  error:
                    type: object
                    properties:
                      code:
                        type: integer
                        example: 400
                      message:
                        type: string
                        example: 'Provided `value` is not accurate for this `type` of DNS record.'
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Token not provided'
                properties:
                  message:
                    type: string
                    example: 'Token not provided'
      tags:
        - 'Zones DNS'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                dns_zone_id:
                  type: integer
                  description: "L'identifiant de la zone DNS.<br>"
                  example: 12345
                type:
                  type: string
                  description: 'Le type de la zone DNS. (A, AAAA, CNAME, MX ou TXT).<br>'
                  example: CNAME
                name:
                  type: string
                  description: 'Le nom de zone DNS.<br>'
                  example: blog
                value:
                  type: string
                  description: 'La valeur de la zone DNS.<br>'
                  example: myblog.fr
                priority:
                  type: string
                  description: 'La priorité de la zone DNS de type MX, facultatif pour toutes les zones DNS de type non-MX.<br>'
                  example: '10'
                ttl:
                  type: integer
                  description: 'Le TTL (Time To Live) ou durée de vie en secondes de la zone DNS.<br>'
                  example: 3600
              required:
                - dns_zone_id
                - type
                - name
                - value
                - ttl
    delete:
      summary: 'Supprimer une zone DNS'
      operationId: supprimerUneZoneDNS
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  code: 200
                  message: 'DNS zone successfully deleted.'
                properties:
                  code:
                    type: integer
                    example: 200
                  message:
                    type: string
                    example: 'DNS zone successfully deleted.'
        400:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  meta:
                    balance: '1350.00'
                    on-hold: '90.00'
                    total: 14
                    error: false
                  error:
                    code: 400
                    message: "This DNS record doesn't exists."
                properties:
                  meta:
                    type: object
                    properties:
                      balance:
                        type: string
                        example: '1350.00'
                        description: "Les crédits déposés par l'utilisateur (en euros)."
                      on-hold:
                        type: string
                        example: '90.00'
                        description: "Le montant de crédits engagés par l'utilisateur dans des précommandes (en euros)."
                      total:
                        type: integer
                        example: 14
                        description: "Le nombre de domaines détenus par l'utilisateur (en euros)."
                      error:
                        type: boolean
                        example: false
                        description: 'Le status de la requête (true = Succès | false = Erreur).'
                  error:
                    type: object
                    properties:
                      code:
                        type: integer
                        example: 400
                      message:
                        type: string
                        example: "This DNS record doesn't exists."
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Token not provided'
                properties:
                  message:
                    type: string
                    example: 'Token not provided'
      tags:
        - 'Zones DNS'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                dns_zone_id:
                  type: integer
                  description: "L'identifiant de la zone DNS.<br>"
                  example: 12345
              required:
                - dns_zone_id
  '/api/v1/dns-zones/{domain_name}':
    get:
      summary: 'Afficher les zones DNS'
      operationId: afficherLesZonesDNS
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            text/plain:
              schema:
                type: string
                example: "{\n    \"meta\": {\n        \"balance\": \"1350.00\",\n        \"on-hold\": \"90.00\",\n        \"total\": 14,\n        \"error\": false\n    },\n    \"data\": [\n        {\n            \"id\": 12345,\n            \"type\": \"NS\",\n            \"name\": \"@\",\n            \"value\": \"ns1.kifdns.fr\",\n            \"ttl\": 1800\n        },\n        ...ETC...\n    ]\n}"
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Token not provided'
                properties:
                  message:
                    type: string
                    example: 'Token not provided'
      tags:
        - 'Zones DNS'
    parameters:
      -
        in: path
        name: domain_name
        description: 'Le nom de domaine.<br>'
        example: mydomain.fr
        required: true
        schema:
          type: string
  /api/v1/preorders:
    get:
      summary: 'Afficher la liste des précommandes'
      operationId: afficherLaListeDesPrcommandes
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            text/plain:
              schema:
                type: string
                example: "{\n    \"meta\": {\n        \"balance\": \"1350.00\",\n        \"on-hold\": \"90.00\",\n        \"total\": 14,\n        \"error\": false\n    },\n    \"data\": [\n        {\n            \"name\": \"mydomain.fr\",\n            \"punycode_name\": \"mydomain.fr\",\n            \"status\": \"Précommande en cours\",\n            \"last_update\": \"2023-05-17T09:27:27.000000Z\"\n        },\n        ...ETC...\n    ]\n}"
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Token not provided'
                properties:
                  message:
                    type: string
                    example: 'Token not provided'
      tags:
        - Précommandes
    post:
      summary: 'Créer une précommande'
      operationId: crerUnePrcommande
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  meta:
                    balance: '1350.00'
                    on-hold: '90.00'
                    total: 14
                    error: false
                  data:
                    code: 200
                    message: 'Preorder successfully created.'
                properties:
                  meta:
                    type: object
                    properties:
                      balance:
                        type: string
                        example: '1350.00'
                        description: "Les crédits déposés par l'utilisateur (en euros)."
                      on-hold:
                        type: string
                        example: '90.00'
                        description: "Le montant de crédits engagés par l'utilisateur dans des précommandes (en euros)."
                      total:
                        type: integer
                        example: 14
                        description: "Le nombre de domaines détenus par l'utilisateur (en euros)."
                      error:
                        type: boolean
                        example: false
                        description: 'Le status de la requête (true = Succès | false = Erreur).'
                  data:
                    type: object
                    properties:
                      code:
                        type: integer
                        example: 200
                        description: 'Code HTTP de la réponse.'
                      message:
                        type: string
                        example: 'Preorder successfully created.'
                        description: 'Message de la réponse.'
        400:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  meta:
                    on-hold: 20
                    total-domains: 14
                    credits-balance: 1350
                    error: true
                  error:
                    code: 400
                    message: 'You already have preordered this domain name.'
                properties:
                  meta:
                    type: object
                    properties:
                      on-hold:
                        type: integer
                        example: 20
                        description: "Le montant de crédits engagés par l'utilisateur dans des précommandes (en euros)."
                      total-domains:
                        type: integer
                        example: 14
                      credits-balance:
                        type: integer
                        example: 1350
                      error:
                        type: boolean
                        example: true
                        description: 'Le status de la requête (true = Succès | false = Erreur).'
                  error:
                    type: object
                    properties:
                      code:
                        type: integer
                        example: 400
                      message:
                        type: string
                        example: 'You already have preordered this domain name.'
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Token not provided'
                properties:
                  message:
                    type: string
                    example: 'Token not provided'
      tags:
        - Précommandes
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                domain_name:
                  type: string
                  description: 'Le nom de domaine.<br>'
                  example: mydomain.fr
              required:
                - domain_name
tags:
  -
    name: Authentification
    description: ''
  -
    name: 'Noms de domaine'
    description: ''
  -
    name: 'Serveurs de noms'
    description: ''
  -
    name: 'Zones DNS'
    description: ''
  -
    name: Précommandes
    description: ''
components:
  securitySchemes:
    default:
      type: http
      scheme: bearer
      description: "<aside style=\"margin-block:0\">\n    Vous pouvez récupérer votre token d'autorisation en appelant l'API de login.\n    Pour cela, appelez la route suivante :\n    <a href=\"#authentification-POSTapi-v1-auth-login\" style=\"text-decoration:none\">\n         <strong><code class=\"hljs-string\">/api/v1/login</code></strong>\n    </a>\n    Vous devrez utiliser les identifiants (<strong><code class=\"hljs-string\">login</code></strong> et <strong><code class=\"hljs-string\">password</code></strong>) de votre compte utilisateur KifDom.\n</aside>"
security:
  -
    default: []
