> ## 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.

# Obtener un grupo de instancias

<Info>
  Requiere la acción de IAM **`compute:GetInstancePool`**. Consulte [permisos de computación](/es/compute/permissions) para obtener la lista completa, lo que cubre cada una y un ejemplo de directiva.
</Info>


## OpenAPI

````yaml /es/api-reference/specs/compute.yaml get /v1/instance-pools/{pool_id}
openapi: 3.0.3
info:
  title: Basaltic Compute API
  version: 1.0.0
  description: >
    Instancias de máquinas virtuales y las imágenes, los tipos de instancia y
    los grupos de instancias a partir de los cuales se crean. Cubre todo el
    ciclo de vida de la instancia: inicio, parada, reinicio, cambio de tamaño y
    reinstalación.
  contact:
    name: Basaltic Support
    email: ping@basaltic.sh
  license:
    name: Proprietary
    url: https://basaltic.sh/terms
servers:
  - url: https://compute.{region}.basaltic.sh
    description: Punto final de API regional
    variables:
      region:
        default: sa-saopaulo-1
        description: Código de región
security:
  - BearerAuth: []
paths:
  /v1/instance-pools/{pool_id}:
    parameters:
      - name: pool_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          example: 8f2a1c3d-4e5b-4a6f-9c0d-1e2f3a4b5c6d
    get:
      tags:
        - Compute
      summary: Obtener un grupo de instancias
      operationId: getInstancePool
      responses:
        '200':
          description: El grupo de instancias.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstancePoolResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
        - BearerAuth: []
components:
  schemas:
    InstancePoolResponse:
      type: object
      properties:
        instance_pool:
          $ref: '#/components/schemas/InstancePool'
    InstancePool:
      type: object
      required:
        - faults
      description: >-
        Una plantilla de lanzamiento más un recuento deseado. La creación de un
        grupo genera instancias de desired_count; un conciliador converge
        member_count hacia desired_count a medida que cambia. member_count es el
        número de miembros que tiene el grupo; live_count es el número de ellos
        que se están ejecutando. Un grupo lleva dos conjuntos de etiquetas y
        responden a diferentes preguntas. `tags` etiqueta el recurso de la
        agrupación, que es lo que una condición de IAM lee como
        `basalt:ResourceTag/<key>` y lo que un informe de costos agrupa, y no
        llega a ninguna instancia. `template.tags` es el conjunto estampado en
        cada réplica que lanza el pool.
      properties:
        autoscaling:
          $ref: '#/components/schemas/AutoscalingPolicy'
        autoscaling_status:
          $ref: '#/components/schemas/AutoscalingStatus'
        rollout_surge:
          type: boolean
          readOnly: true
          description: >-
            Capacidad de implementación temporal; desired_count sigue siendo el
            objetivo estable.
        retiring_instances:
          type: array
          readOnly: true
          items:
            $ref: '#/components/schemas/RetiringPoolMember'
        id:
          type: string
          format: uuid
          readOnly: true
          example: 8f2a1c3d-4e5b-4a6f-9c0d-1e2f3a4b5c6d
        crn:
          type: string
          readOnly: true
          description: >-
            Nombre de recurso de nube. Este es el valor que una declaración de
            directiva de IAM debe nombrar para asignar un ámbito de permiso solo
            a este grupo; una directiva escrita contra cualquier otra cosa no
            coincidirá.
          example: crn:compute:sa-saopaulo-1:my-account:instance-pool/web-pool
        name:
          description: >-
            Los nombres de los recursos no deben comenzar con el prefijo literal
            crn: ni ser UUID (en cualquier caso, en las formas canónica,
            compacta, entre corchetes o urn:uuid:).
          type: string
          example: web-asg
        description:
          type: string
          example: Front-end autoscaling group
        desired_count:
          type: integer
          minimum: 0
          maximum: 100
          example: 2
        min_count:
          type: integer
          minimum: 0
          maximum: 100
          example: 1
        max_count:
          type: integer
          minimum: 0
          maximum: 100
          description: >-
            Un valor de 0 significa que el grupo no tiene miembros hasta que se
            aumente max_count.
          example: 3
        live_count:
          type: integer
          readOnly: true
          description: >
            ¿Cuántos miembros están UP? — instancias vinculadas cuyo estado
            actual es `running`.
          example: 2
        member_count:
          type: integer
          readOnly: true
          description: >-
            Cuántas instancias contiene el grupo, en ejecución o no. Esto es lo
            que el conciliador converge hacia desired_count y lo que `status`
            refleja, así que member_count == desired_count con live_count por
            debajo significa que el grupo tiene los miembros que se le pidió y
            algunos de ellos no están activos.
          example: 2
        refresh_in_progress:
          type: boolean
          readOnly: true
          description: >-
            True mientras un reemplazo continuo solicitado a través de POST
            /v1/instance-pools/{pool_id}/refresh todavía está en ejecución. Se
            borra una vez que todos los miembros están en la plantilla actual.
            El grupo lee `scaling` para la duración, ya que ejecuta una
            instancia sobre su objetivo mientras se produce un reemplazo.
          example: false
        stale_instance_count:
          type: integer
          readOnly: true
          description: >-
            Cuántos miembros se lanzaron desde una plantilla diferente a la
            actual del grupo, es decir, cuántos reemplazaría una actualización.
            No cero después de editar `template` y antes de refrescar, que es la
            señal de que un cambio de plantilla no se ha implementado todavía.
          example: 0
        status:
          type: string
          enum:
            - active
            - scaling
            - error
            - deleting
          readOnly: true
          description: >
            Donde el pool está en contra de su objetivo.


            `active` significa member_count == desired_count — el grupo contiene
            los miembros que se le pidieron. No es una afirmación de que todos
            ellos están en marcha; lea live_count para eso.


            `scaling` significa que no lo hace, y el conciliador lo está
            convergiendo: después de una creación, después de un cambio de
            desired_count, y durante la duración de una actualización de
            instancia, que ejecuta el grupo una instancia sobre su destino
            mientras se produce un reemplazo.


            `error` significa que existe un error activo. Los fallos de
            capacidad siguen siendo elegibles para la reconciliación; la
            eliminación fallida conserva su intención de desmantelamiento y
            nunca recrea miembros. `deleting` se descompone sin un error activo.
          example: active
        faults:
          type: array
          readOnly: true
          description: >-
            Fallas activas, más reciente primero. Vacío para una agrupación
            saludable. La recuperación resuelve solo los códigos de la operación
            exitosa.
          items:
            $ref: '#/components/schemas/Fault'
        managed_by:
          type: string
          readOnly: true
          example: customer
        tags:
          allOf:
            - $ref: '#/components/schemas/Tags'
          description: >-
            Etiquetas en la propia POOL, para las condiciones de IAM
            (`basalt:ResourceTag/<key>`) y la atribución de costos. No están
            unidos a nada más: ninguna instancia que el pool lanza los lleva.
            Las etiquetas con las que se lanza una réplica son `template.tags`.
            A diferencia de los otros campos de nivel superior, `tags` no es una
            proyección de la plantilla de lanzamiento, es el propio conjunto del
            grupo, y PATCHable por sí mismo.
        template:
          allOf:
            - $ref: '#/components/schemas/InstancePoolTemplate'
          readOnly: true
          description: >
            La configuración de lanzamiento del grupo, en la forma instance
            create takes. El único lugar donde aparece: una copia plana de ella
            junto a esto eran dos ortografías de una cosa, y dos ortografías de
            deriva.
    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
    AutoscalingPolicy:
      type: object
      additionalProperties: false
      required:
        - enabled
        - metrics
      description: >
        Seguimiento de objetivos compartido por grupos de instancias y
        balanceadores de carga. Las actualizaciones reemplazan la política.
        Establezca enabled=false para conservar la configuración y usar el
        dimensionamiento manual. Cada métrica recomienda un recuento deseado; la
        recomendación más grande gana. Las observaciones faltantes, obsoletas o
        incompletas impiden la escalada interna, pero no bloquean la escalada
        externa recomendada por otra métrica válida. Las decisiones obedecen a
        los valores min_count/max_count, calentamiento, enfriamiento,
        estabilización, límites de pasos y cuotas del recurso. El estado
        sobrevive al reinicio del controlador. Las políticas activas poseen
        desired_count; se aceptan los cambios manuales y la evaluación
        automática se reanuda después del tiempo de reutilización. La telemetría
        personalizada requiere telemetry:ReadMetrics en la misma cuenta.
      properties:
        enabled:
          type: boolean
          example: true
        metrics:
          type: array
          minItems: 1
          maxItems: 5
          items:
            $ref: '#/components/schemas/ScalingMetric'
        warmup_seconds:
          type: integer
          minimum: 30
          maximum: 3600
          default: 180
        cooldown_seconds:
          type: integer
          minimum: 30
          maximum: 3600
          default: 60
        scale_down_stabilization_seconds:
          type: integer
          minimum: 60
          maximum: 3600
          default: 300
        max_scale_out_step:
          type: integer
          minimum: 1
          maximum: 100
          default: 4
        max_scale_in_step:
          type: integer
          minimum: 1
          maximum: 100
          default: 1
        drain_seconds:
          type: integer
          minimum: 30
          maximum: 3600
          default: 120
          description: >-
            Período de gracia después de la retirada de rutas y confirmaciones
            de proxy, antes de eliminar un miembro retirado. Las sesiones
            TCP/UDP de larga duración pueden terminar en la fecha límite; no se
            admiten ganchos de cierre de aplicación arbitrarios.
    AutoscalingStatus:
      type: object
      readOnly: true
      required:
        - status
        - reason
        - history
      properties:
        status:
          type: string
          enum:
            - pending
            - disabled
            - stable
            - scaling
            - waiting
            - warming_up
            - metrics_unavailable
            - stabilizing
            - cooldown
            - draining
        reason:
          type: string
          example: waiting for sustained lower demand
        evaluated_at:
          type: string
          format: date-time
        last_scaled_at:
          type: string
          format: date-time
        history:
          type: array
          maxItems: 50
          items:
            type: object
            required:
              - at
              - from
              - to
              - reason
            properties:
              at:
                type: string
                format: date-time
              from:
                type: integer
                minimum: 0
              to:
                type: integer
                minimum: 0
              reason:
                type: string
    RetiringPoolMember:
      allOf:
        - $ref: '#/components/schemas/Retirement'
        - type: object
          required:
            - instance_id
          properties:
            instance_id:
              type: string
              format: uuid
    Fault:
      type: object
      required:
        - code
        - severity
        - message
        - details
        - first_at
        - last_at
        - occurrences
      properties:
        code:
          type: string
          description: >-
            Código legible por máquina estable propiedad de la operación de
            informes.
          example: BACKUP_FAILED
        severity:
          type: string
          enum:
            - error
            - warning
        message:
          type: string
          example: Backup upload failed.
        details:
          type: object
          nullable: true
          additionalProperties: true
          description: >-
            Contexto estructurado; las cadenas heredadas se conservan en
            legacy_text.
        first_at:
          type: string
          format: date-time
          description: Primera observación en esta serie de ocurrencias activas.
        last_at:
          type: string
          format: date-time
          description: Última observación en esta serie de ocurrencias activas.
        occurrences:
          type: integer
          minimum: 1
          example: 1
    Tags:
      type: object
      additionalProperties:
        type: string
      example:
        environment: production
        team: backend
    InstancePoolTemplate:
      type: object
      description: >-
        Configuración de inicio almacenada con identidades de relación UUID
        canónicas. Convierta estas identidades a los campos de solicitud en
        InstancePoolTemplateRequest al reemplazar la plantilla. La identidad de
        la imagen se fija; la reutilización posterior del nombre o una nueva
        versión de la imagen actual no los cambia.
      properties:
        flavor_id:
          type: string
          format: uuid
        image_id:
          type: string
          format: uuid
          description: >-
            Se resolvió el UUID de imagen fijado para cada réplica hasta el
            reemplazo de plantilla.
        networks:
          type: array
          description: >-
            Interfaces por réplica. El índice 0 es la NIC principal y es
            obligatorio; el resto son extras.
          items:
            $ref: '#/components/schemas/NetworkConfigResponse'
          minItems: 1
        user_data:
          type: string
          format: byte
          description: >-
            Datos de usuario codificados en Base64 (cloud-init), estampados en
            cada réplica.
        metadata:
          $ref: '#/components/schemas/Metadata'
        tags:
          allOf:
            - $ref: '#/components/schemas/Tags'
          description: >-
            Etiquetas estampadas en cada instancia que esta plantilla lanza.
            Estas son las etiquetas de las réplicas, no las del grupo — las
            etiquetas propias del grupo son las `tags` de nivel superior, y las
            dos son independientes. Cambiarlos afecta solo a los lanzamientos
            FUTUROS. Las instancias que ya están en ejecución mantienen las
            etiquetas con las que se lanzaron, por lo que entre el cambio y una
            actualización, el grupo tiene miembros que llevan dos conjuntos de
            etiquetas diferentes; `stale_instance_count` es cuántos todavía
            están en el antiguo. POST /v1/instance-pools/{pool_id}/refresh rolls
            them onto the current template.
        iam_role:
          allOf:
            - $ref: '#/components/schemas/InstanceRole'
          description: >-
            Resumen del rol de IAM adjunto a cada réplica, visible con acceso de
            lectura de grupo sin iam:GetRole. Se omite cuando no se adjunta
            ningún rol, el rol se eliminó o pertenece a otra cuenta. Los campos
            de rol confidenciales solo están disponibles a través de la API de
            IAM.
        volumes:
          type: array
          items:
            $ref: '#/components/schemas/InstanceVolume'
          description: >
            Discos por réplica, el disco de arranque incluido — marque con
            `boot: true`. Cada réplica nueva recibe el rendimiento aprovisionado
            configurado. El rendimiento omitido utiliza la asignación incluida.
            Los volúmenes existentes y las programaciones de instantáneas no son
            compatibles en las plantillas de grupo.
    ScalingMetric:
      type: object
      additionalProperties: false
      required:
        - source
        - target_type
        - target_value
      description: >
        CPU utiliza source=cpu, target\_type=utilization y un porcentaje de
        destino \<=100. La utilización es el número de segundos de CPU por
        segundo dividido por las vCPU asignadas en todos los miembros listos. El
        escalado de CPU habilitado requiere min\_count\>=1.


        La demanda personalizada utiliza source=telemetría y
        target_type=valor_promedio. El nombre y las etiquetas de la métrica
        seleccionan series en la cuenta, la organización y la región del
        recurso. La agregación temporal se aplica dentro de cada serie antes de
        combinar series; las muestras de medidores repetidas nunca se suman como
        demanda adicional. El recuento deseado es techo (valor combinado /
        valor_objetivo): 750 trabajos pendientes con un objetivo de 100 por
        instancia recomienda 8. La demanda personalizada puede escalar un grupo
        de clientes desde 0. Los productores deben publicar ceros nuevos para
        las colas inactivas; los datos ausentes no son cero.
      properties:
        source:
          type: string
          enum:
            - cpu
            - telemetry
          example: telemetry
        target_type:
          type: string
          enum:
            - utilization
            - average_value
          example: average_value
        target_value:
          type: number
          minimum: 0
          exclusiveMinimum: true
          example: 100
        name:
          type: string
          pattern: ^[a-zA-Z_:][a-zA-Z0-9_:]{0,199}$
          example: queue_depth
        labels:
          type: object
          maxProperties: 10
          additionalProperties:
            type: string
            maxLength: 256
          description: >-
            No se pueden proporcionar etiquetas de coincidencia exacta;
            etiquetas de tenencia y __name__.
          example:
            queue: orders
        sample_aggregation:
          type: string
          enum:
            - last
            - avg
            - max
            - rate
          default: last
          description: >-
            Use last para medidores de cola; rate para contadores que aumentan
            monótonamente, con manejo de reset.
        series_aggregation:
          type: string
          enum:
            - sum
            - avg
            - max
          default: sum
        expected_series:
          type: integer
          minimum: 1
          maximum: 1000
          default: 1
          description: >-
            Cardinalidad exacta esperada; los selectores incompletos o ambiguos
            no están disponibles.
        window_seconds:
          type: integer
          minimum: 30
          maximum: 3600
          default: 120
        max_age_seconds:
          type: integer
          minimum: 30
          maximum: 3600
          default: 90
          description: >-
            Edad real de la observación más reciente por serie; no debe exceder
            window_seconds. Por defecto, el menor de 90 y la ventana.
    Retirement:
      type: object
      readOnly: true
      required:
        - requested_at
        - drain_seconds
      properties:
        requested_at:
          type: string
          format: date-time
        drain_seconds:
          type: integer
          minimum: 30
          maximum: 3600
        agent_acknowledged_at:
          type: string
          format: date-time
        drain_until:
          type: string
          format: date-time
          description: >-
            Hora de eliminación más temprana; ausente mientras la retirada está
            pendiente.
    NetworkConfigResponse:
      type: object
      required:
        - subnet
      properties:
        subnet:
          anyOf:
            - $ref: '#/components/schemas/Subnet'
            - type: object
              nullable: true
              enum:
                - null
          description: >-
            Ubicación de subred; null cuando la subred a la que se hace
            referencia ya no existe.
        mac:
          type: string
          description: >
            Dirección MAC opcional. Debe ser administrado localmente (`X2:`,
            `X6:`, `XA:`, `XE:` en el primer octet). Se genera cuando se omite.
          example: 02:1a:2b:3c:4d:5e
        security_group_ids:
          type: array
          items:
            type: string
            format: uuid
            example: c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f
          description: >
            Referencias de grupo de seguridad de ámbito de cuenta (UUID, CRN o
            nombre) para adjuntar a esta NIC. Cada uno debe ser propiedad de la
            misma cuenta. Lista vacía = sin ACL por NIC (el valor predeterminado
            de la plataforma permanece en vigor).
        floating_ip_assignment:
          type: string
          enum:
            - none
            - ipv4
            - ipv6
            - dual_stack
            - auto
          default: none
          description: >-
            Asignar IP flotantes públicas para esta NIC en el lanzamiento. Las
            familias explícitas requieren que las direcciones de los huéspedes y
            las rutas de Internet coincidan. Desconectar deja el FIP reservado.
            No existe una asignación IPv4 pública ordinaria.
        addresses:
          type: array
          items:
            $ref: '#/components/schemas/AddressRequest'
    Metadata:
      type: object
      additionalProperties:
        type: string
      example:
        environment: production
        team: backend
    InstanceRole:
      type: object
      required:
        - id
        - crn
        - name
      properties:
        id:
          type: string
          format: uuid
          example: b2c3d4e5-f6a7-8901-2345-67890abcdef1
        crn:
          type: string
          description: >-
            Identidad de rol con ámbito de cuenta, tal como se usa en los
            documentos de directiva.
          example: crn:iam::my-account:role/deploy
        name:
          type: string
          description: Nombre de rol inmutable.
          example: deploy
    InstanceVolume:
      type: object
      required:
        - size_gb
      description: >
        Un disco creado con la instancia. `boot: true` marca el que se ha
        clonado desde image_id; cada otra entrada es un volumen vacío que el
        agente invitado formatea y monta.
      properties:
        boot:
          type: boolean
          default: false
          example: false
          description: >
            Marca el disco de arranque. No necesita mount_path ni fstype — ambos
            provienen de la imagen — y el envío de cualquiera de ellos se
            rechaza en lugar de ignorarse.
        size_gb:
          type: integer
          minimum: 1
          example: 20
        volume_type:
          type: string
          example: nvme
          description: Nivel; omitido = el valor predeterminado de la región.
        performance:
          $ref: '#/components/schemas/VolumePerformanceRequest'
        mount_path:
          type: string
          example: /data
        fstype:
          type: string
          example: ext4
          description: >-
            Sistema de archivos con el que el agente invitado formatea el
            volumen.
        delete_on_termination:
          type: boolean
          default: true
          example: true
          description: Se destruye con la instancia a menos que se establezca a false.
    Subnet:
      type: object
      required:
        - id
        - crn
        - vpc
        - route_table
        - name
        - cidr_ipv4
        - gateway_ipv4
        - tags
        - created_at
        - updated_at
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        crn:
          type: string
          readOnly: true
          example: crn:network:sa-saopaulo-1:my-account:vpc/prod/subnet/prod-web
        vpc:
          $ref: '#/components/schemas/Vpc'
        route_table:
          $ref: '#/components/schemas/RouteTableSummary'
        name:
          description: >-
            Los nombres de los recursos no deben comenzar con el prefijo literal
            crn: ni ser UUID (en cualquier caso, en las formas canónica,
            compacta, entre corchetes o urn:uuid:).
          type: string
          example: prod-web
        description:
          type: string
          example: Public web-tier subnet
        cidr_ipv4:
          type: string
          example: 10.0.1.0/24
        gateway_ipv4:
          type: string
          example: 10.0.1.1
        cidr_ipv6:
          type: string
          nullable: true
          readOnly: true
          description: >-
            La IPv6 /64 de doble pila, si la subred está habilitada para v6. Su
            presencia (vs el v4 cidr_ipv4) es la forma en que un cliente
            distingue las familias de la subred.
          example: 2a13:9500:1a6:100::/64
        gateway_ipv6:
          type: string
          nullable: true
          readOnly: true
          example: 2a13:9500:1a6:100::1
        tags:
          type: object
          additionalProperties:
            type: string
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
    AddressRequest:
      type: object
      properties:
        family:
          type: string
          enum:
            - ipv4
            - ipv6
        address:
          type: string
          description: >-
            Dirección fija opcional al crear una interfaz o una instancia NIC.
            Para IPv6, use la primera dirección de un /96 alineado dentro de la
            subred /64 (los últimos 32 bits cero); el primer y el último rango
            /96 están reservados. Omita para asignación automática. Los nodos de
            base de datos administrados y la operación de dirección de adición
            requieren asignación automática.
      required:
        - family
      additionalProperties: false
    VolumePerformanceRequest:
      type: object
      additionalProperties: false
      description: >
        Rendimiento total de lectura/escritura combinado sostenido de
        aprovisionamiento independiente. Las dimensiones omitidas conservan su
        valor actual (incluido el margen en la creación). Las SSD permiten hasta
        8000 IOPS y 250 MiB/s; NVMe hasta 12000 y 500 MiB/s. El mínimo es la
        asignación incluida del volumen; las asignaciones mayores de derechos
        heredados siguen estando disponibles de forma gratuita. El rendimiento
        es de MiB/s enteros, excepto que se puede seleccionar una asignación
        heredada fraccionaria exacta para eliminar el complemento de pago. Los
        aumentos requieren cuota de cuenta, capacidad regional y almacenamiento
        saludable. Factura de extras aplicados por duración transcurrida,
        incluso mientras está separado o detenido.
      properties:
        iops:
          type: integer
          minimum: 1
          example: 6000
        throughput_mib_s:
          type: number
          minimum: 0
          example: 250
    Vpc:
      type: object
      required:
        - id
        - crn
        - name
        - cidr_ipv4
        - tags
        - created_at
        - updated_at
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        crn:
          type: string
          readOnly: true
          description: >-
            Nombre de recurso de Cloud (basado en nombre, región+ámbito de
            cuenta).
          example: crn:network:sa-saopaulo-1:my-account:vpc/prod
        name:
          type: string
          description: >-
            De 1 a 63 caracteres alfanuméricos en minúsculas y guiones. Los
            nombres de recursos no deben comenzar con el prefijo literal crn: ni
            ser UUID (en formato canónico, compacto, entre llaves o urn:uuid:,
            tanto en mayúsculas como en minúsculas).
          example: prod
        description:
          type: string
          example: Production VPC for web and app tiers
        cidr_ipv4:
          type: string
          description: >-
            Bloque CIDR IPv4 dividido por subredes. Debe ser privado (RFC 1918):
            dentro de 10.0.0.0/8, 172.16.0.0/12 o 192.168.0.0/16. Inmutable
            después de crear.
          example: 10.0.0.0/16
        cidr_ipv6:
          type: string
          nullable: true
          readOnly: true
          description: Prefijo GUA regional asociado o ULA privado.
          example: 2a13:9500:1a6:100::/60
        tags:
          type: object
          additionalProperties:
            type: string
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
    RouteTableSummary:
      type: object
      nullable: true
      additionalProperties: false
      description: >
        Tabla de rutas utilizada por una subred, sin repetir su VPC. Null cuando
        la búsqueda no propietaria ya no se resuelve, por ejemplo, durante la
        reasociación y eliminación simultáneas de la tabla anterior. Se rechaza
        la eliminación de una tabla que todavía está asociada con subredes.
      required:
        - id
        - crn
        - name
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        crn:
          type: string
          readOnly: true
          example: >-
            crn:network:sa-saopaulo-1:my-account:vpc/prod/route-table/prod-private-rt
        name:
          type: string
          example: prod-private-rt
  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
  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.