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

# Importar un archivo de zona

> Cargue un archivo maestro RFC 1035 (un archivo de zona BIND, el formato que exporta cada proveedor DNS) en una zona existente.

**Se fusiona, nunca se reemplaza.** Un RRset en el archivo reemplaza el RRset con el mismo nombre y tipo por completo; un RRset que el archivo no menciona se deja exactamente como está. Por lo tanto, una importación no puede eliminar un registro, e importar el mismo archivo dos veces es una operación no deseada en lugar de un error, lo que hace que sea seguro volver a intentarlo.

**Todo o nada.** El archivo completo se valida antes de que se escriba cualquier registro: cada registro tiene que pasar el mismo tipo, nombre, TTL y rdata comprobaciones `createRecord` se aplica, la misma regla de coexistencia CNAME, y la misma cuota de registro por zona y por organización. Un registro malo rechaza el archivo y la zona no se toca.

**Lo que se omite en lugar de importarse.** El SOA y el conjunto NS apex son de la plataforma: la zona es servida por nuestros servidores de nombres, y el NS apex es lo que el padre delega. Los registros DNSSEC (`RRSIG`, `DNSKEY`, `DS`, `NSEC`, `NSEC3`, `NSEC3PARAM`, `CDS`, `CDNSKEY`) son generados por nuestro firmante a partir de claves que su archivo no puede conocer. Los registros que el archivo coloca fuera de esta zona también se omiten. Todos ellos vuelven en `skipped` con una razón — un archivo exportado desde una zona firmada lleva todos ellos, así que rechazar el archivo sobre ellos haría que la exportación/importación sea inutilizable.

El archivo puede ser enviado como JSON (`zone_file`) o como el cuerpo de la solicitud en bruto bajo cualquier otro tipo de contenido, por lo que `curl --data-binary @db.example.com` funciona directamente. Máximo 1 MiB.

En caso de éxito, el número de serie SOA de la zona avanza una vez para toda la importación y el cambio se propaga a los servidores de nombres autorizados.


<Info>
  Requiere la acción de IAM **`dns:ImportZoneFile`**. Consulte [permisos de DNS](/es/dns/permissions) para obtener la lista completa, lo que cubre cada una y un ejemplo de política.
</Info>


## OpenAPI

````yaml /es/api-reference/specs/dns.yaml post /v1/zones/{zone_id}/import
openapi: 3.0.3
info:
  title: Basaltic DNS API
  version: 1.0.0
  description: >
    Zonas alojadas autorizadas y sus registros, firmados con DNSSEC. Una zona
    solo se sirve una vez que se verifica su propiedad; asociar una zona con una
    VPC la hace resoluble de forma privada dentro de esa red.
  contact:
    name: Basaltic Support
    email: ping@basaltic.sh
  license:
    name: Proprietary
    url: https://basaltic.sh/terms
servers:
  - url: https://dns.basaltic.sh
    description: Endpoint de API global
security:
  - BearerAuth: []
paths:
  /v1/zones/{zone_id}/import:
    post:
      tags:
        - DNS
      summary: Importar un archivo de zona
      description: >
        Cargue un archivo maestro RFC 1035 (un archivo de zona BIND, el formato
        que exporta cada proveedor DNS) en una zona existente.


        **Se fusiona, nunca se reemplaza.** Un RRset en el archivo reemplaza el
        RRset con el mismo nombre y tipo por completo; un RRset que el archivo
        no menciona se deja exactamente como está. Por lo tanto, una importación
        no puede eliminar un registro, e importar el mismo archivo dos veces es
        una operación no deseada en lugar de un error, lo que hace que sea
        seguro volver a intentarlo.


        **Todo o nada.** El archivo completo se valida antes de que se escriba
        cualquier registro: cada registro tiene que pasar el mismo tipo, nombre,
        TTL y rdata comprobaciones `createRecord` se aplica, la misma regla de
        coexistencia CNAME, y la misma cuota de registro por zona y por
        organización. Un registro malo rechaza el archivo y la zona no se toca.


        **Lo que se omite en lugar de importarse.** El SOA y el conjunto NS apex
        son de la plataforma: la zona es servida por nuestros servidores de
        nombres, y el NS apex es lo que el padre delega. Los registros DNSSEC
        (`RRSIG`, `DNSKEY`, `DS`, `NSEC`, `NSEC3`, `NSEC3PARAM`, `CDS`,
        `CDNSKEY`) son generados por nuestro firmante a partir de claves que su
        archivo no puede conocer. Los registros que el archivo coloca fuera de
        esta zona también se omiten. Todos ellos vuelven en `skipped` con una
        razón — un archivo exportado desde una zona firmada lleva todos ellos,
        así que rechazar el archivo sobre ellos haría que la
        exportación/importación sea inutilizable.


        El archivo puede ser enviado como JSON (`zone_file`) o como el cuerpo de
        la solicitud en bruto bajo cualquier otro tipo de contenido, por lo que
        `curl --data-binary @db.example.com` funciona directamente. Máximo 1
        MiB.


        En caso de éxito, el número de serie SOA de la zona avanza una vez para
        toda la importación y el cambio se propaga a los servidores de nombres
        autorizados.
      operationId: importZoneFile
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
        - $ref: '#/components/parameters/ZoneId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ZoneImportRequest'
          text/dns:
            schema:
              type: string
              description: >-
                El archivo de zona, enviado como el cuerpo de la solicitud sin
                procesar.
          text/plain:
            schema:
              type: string
              description: >-
                El archivo de zona, enviado como el cuerpo de la solicitud sin
                procesar.
      responses:
        '200':
          description: >
            El archivo se importó. Lee `skipped` antes de concluir que la zona
            coincide con el archivo.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ZoneImportResponse'
        '400':
          description: >
            El expediente fue rechazado y no se escribió nada. El mensaje nombra
            lo que estaba mal: un error de sintaxis lleva la fila y la columna,
            un registro que la zona no puede contener se nombra por propietario
            y tipo.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: >
            Un registro en el archivo entra en conflicto con uno creado
            simultáneamente, o un CNAME en el archivo comparte un nombre con
            otro tipo. Nada estaba escrito.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          $ref: '#/components/responses/InternalServerError'
      security:
        - BearerAuth: []
components:
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      description: >-
        Clave opcional generada por el cliente que hace que una creación sea
        segura para la reproducción. Al volver a intentar una solicitud con la
        misma clave, se devuelve el resultado original literalmente en lugar de
        crear un recurso duplicado. Se rechaza la reutilización de una clave con
        un cuerpo de solicitud diferente (422); una solicitud cuya clave todavía
        se está procesando devuelve 409. Los registros se mantienen durante 24
        horas. Usa un UUID o un token único similar.
      required: false
      schema:
        type: string
        maxLength: 255
      example: 550e8400-e29b-41d4-a716-446655440000
    ZoneId:
      name: zone_id
      in: path
      description: ID de zona DNS
      required: true
      schema:
        type: string
        format: uuid
      example: 550e8400-e29b-41d4-a716-446655440000
  schemas:
    ZoneImportRequest:
      type: object
      required:
        - zone_file
      properties:
        zone_file:
          type: string
          description: >
            El archivo de zona, como texto. `$ORIGIN`, `$TTL`, `$GENERATE`,
            nombres relativos y registros de varias líneas entre paréntesis son
            todos respetados; `$INCLUDE` es rechazado, porque la ruta que nombra
            se lee en nuestro sistema de archivos en lugar de en el suyo.
          example: |
            $ORIGIN example.com.
            $TTL 3600
            www   IN A     203.0.113.10
            @     IN MX    10 mail.example.com.
            dkim  IN TXT   "v=DKIM1; k=rsa; p=MIIBIjANBgkqh"
    ZoneImportResponse:
      type: object
      properties:
        import:
          $ref: '#/components/schemas/ZoneImportResult'
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
            - request_id
          properties:
            code:
              type: string
              description: Código de error que identifica el tipo de error
              example: INVALID_INPUT
            message:
              type: string
              description: Mensaje de error legible por el ser humano
              example: Invalid request parameters
            params:
              type: object
              additionalProperties: true
              description: >-
                Valores no sensibles opcionales para la interpolación de errores
                localizados, codificados por código de error. Nunca presente por
                errores del servidor.
              example:
                instances: 2
                pools: 0
            request_id:
              type: string
              format: uuid
              description: Solicitar ID para depuración
              example: 550e8400-e29b-41d4-a716-446655440000
    ZoneImportResult:
      type: object
      description: >
        Lo que hizo la importación. `records_created` más `records_replaced` es
        cada RRset tomado del archivo; cualquier cosa en `skipped` está todavía
        en el archivo pero no en la zona.
      properties:
        records_created:
          type: integer
          description: RRsets en el archivo que la zona no tenía ya.
          example: 7
        records_replaced:
          type: integer
          description: >
            RRsets que existían con el mismo nombre y tipo y fueron reemplazados
            por completo por los valores del archivo.
          example: 2
        records_by_type:
          type: object
          additionalProperties:
            type: integer
          description: Importado RRset cuenta por tipo de registro.
          example:
            A: 4
            MX: 1
            TXT: 2
        skipped:
          type: array
          items:
            $ref: '#/components/schemas/ZoneImportSkipped'
        warnings:
          type: array
          items:
            type: string
          description: >
            Registros que fueron importados, pero no exactamente como estaba
            escrito — un RRset el archivo dio más de un TTL, por ejemplo.
    ZoneImportSkipped:
      type: object
      description: Un RRset en el archivo que no se importó y por qué.
      properties:
        name:
          type: string
          example: example.com
        type:
          type: string
          example: NS
        reason:
          type: string
          example: >-
            the apex NS set is the delegation this platform's nameservers answer
            for
  responses:
    Unauthorized:
      description: Se requiere autenticación o el token no es válido
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: UNAUTHORIZED
              message: Authentication required
              request_id: 550e8400-e29b-41d4-a716-446655440000
    Forbidden:
      description: Permisos insuficientes
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: ACCESS_DENIED
              message: You don't have permission to perform this action
              request_id: 550e8400-e29b-41d4-a716-446655440000
    NotFound:
      description: No se encontró el recurso
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: NOT_FOUND
              message: Resource not found
              request_id: 550e8400-e29b-41d4-a716-446655440000
    InternalServerError:
      description: Error interno del servidor
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: INTERNAL_ERROR
              message: An internal error occurred
              request_id: 550e8400-e29b-41d4-a716-446655440000
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >+
        Un token bearer de OAuth 2.0, enviado como `Authorization: Bearer
        <token>`. Esta es la forma recomendada de autenticación.


        Obtén el token intercambiando el par de claves de acceso de una cuenta
        de servicio en `POST /v1/oauth/token` con
        `grant_type=client_credentials`. Es el flujo estándar de credenciales de
        cliente; las bibliotecas compatibles con OAuth pueden obtener y renovar
        el token por ti.


        ```

        curl -s -u "$KEY_ID:$SECRET" -d grant_type=client_credentials \
          https://iam.basaltic.sh/v1/oauth/token
        ```


        Los tokens duran una hora por defecto. El mismo par de claves de acceso
        también sirve como credencial AWS SigV4 para el endpoint de objetos
        compatible con S3, que solo acepta ese método de autenticación.


````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.