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

# Obtén los artefactos de configuración del delegated-grant de AWS

> Genera los artefactos de onboarding del delegated-grant de AWS para una suscripción con sink de AWS (`sqs`, `eventbridge`): la trust policy de IAM entre cuentas y un enlace de consola quick-create de CloudFormation que el cliente aplica en su propia cuenta de AWS para crear el rol de entrega que Streaming Hub asume. En la primera obtención se genera un valor de correlación `sts:ExternalId` no secreto y se incrusta en ambos artefactos; una nueva obtención lo reutiliza (artefactos estables). Nunca se almacena ni se devuelve ninguna credencial de AWS — el rol se asume por entrega, protegido por la condición `ExternalId`. Un sink que no es de AWS devuelve `422 validation_error`.



## OpenAPI

````yaml es/openapi/v3-current/streaming-hub.yaml get /v1/subscriptions/{id}/setup-artifacts
openapi: 3.1.0
info:
  title: Lerian Streaming Hub API
  version: v1.0.0
  contact:
    email: contact@lerian.studio
    name: Lerian Studio
    url: https://lerian.studio
  license:
    name: Lerian Studio General License
  description: >-
    La API de control-plane de Streaming Hub. Streaming Hub es el borde
    gestionado de entrega de eventos de Lerian: consume CloudEvents del backbone
    de streaming interno de la plataforma y los distribuye a los destinos
    externos propios de cada tenant — webhooks, Amazon SQS, RabbitMQ, Amazon
    EventBridge o una bandeja de entrada de tipo pull. Esta API permite a un
    tenant explorar el catálogo de eventos alimentado por el manifest, crear y
    gestionar suscripciones de entrega, verificar y rotar sus credenciales, leer
    la salud de entrega y hacer pull de los eventos a los que tiene derecho.


    Los errores ahora se sirven como documentos RFC 9457
    `application/problem+json`. Cada error propio del hub incluye `type`,
    `title`, `status`, `detail` y un `code` estable y de baja cardinalidad
    legible por máquina sobre el que ramifican los clientes; para respuestas
    `5xx` el campo `detail` se sanitiza centralmente al valor estático
    `"internal error"`, de modo que ninguna causa interna se filtre al llamador.
    Las operaciones de mutación requieren un header `X-Idempotency` para
    semántica at-most-once; una petición reproducida (replay) devuelve la
    respuesta original byte a byte con `X-Idempotency-Replayed: true`. El
    catálogo y la superficie de eventos pull están acotados por tenant a través
    del JWT bearer; los endpoints operacionales de sonda (`/healthz`, `/readyz`,
    `/version`, `/runtime`, `/metrics`) no requieren autenticación. Streaming
    Hub es de código cerrado bajo la Lerian Studio General License.
servers:
  - url: https://streaming-hub.sandbox.lerian.net
security:
  - BearerAuth: []
tags:
  - name: Catalog
    description: >-
      Explora el catálogo de tipos de evento disponibles para suscripción,
      alimentado por el manifest.
  - name: Subscriptions
    description: >-
      Crea, lee, actualiza y elimina suscripciones de entrega, y gestiona el
      ciclo de vida de verificación del destino (ping, verify, credential,
      delegated grant, rotación de secreto, health).
  - name: Event Delivery
    description: >-
      Haz pull de los eventos a los que tienes derecho para una suscripción de
      tipo pull (lectura cursor-as-acknowledgment).
  - name: Admin
    description: >-
      Análisis forense de operador entre tenants. Requiere un scope de
      autorización de operador.
  - name: Operational
    description: >-
      Sondas de liveness, readiness, build, runtime y métricas sin
      autenticación.
paths:
  /v1/subscriptions/{id}/setup-artifacts:
    get:
      tags:
        - Subscriptions
      summary: Obtén los artefactos de configuración del delegated-grant de AWS
      description: >-
        Genera los artefactos de onboarding del delegated-grant de AWS para una
        suscripción con sink de AWS (`sqs`, `eventbridge`): la trust policy de
        IAM entre cuentas y un enlace de consola quick-create de CloudFormation
        que el cliente aplica en su propia cuenta de AWS para crear el rol de
        entrega que Streaming Hub asume. En la primera obtención se genera un
        valor de correlación `sts:ExternalId` no secreto y se incrusta en ambos
        artefactos; una nueva obtención lo reutiliza (artefactos estables).
        Nunca se almacena ni se devuelve ninguna credencial de AWS — el rol se
        asume por entrega, protegido por la condición `ExternalId`. Un sink que
        no es de AWS devuelve `422 validation_error`.
      operationId: getSubscriptionSetupArtifacts
      parameters:
        - $ref: '#/components/parameters/SubscriptionId'
      responses:
        '200':
          description: Los artefactos del delegated-grant.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SetupArtifactsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '500':
          description: >-
            Un fallo de infraestructura, o el deployment no configuró el ARN del
            principal del hub / la URL del template de configuración necesarios
            para renderizar los artefactos. `error` es `internal_error`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - BearerAuth: []
components:
  parameters:
    SubscriptionId:
      name: id
      in: path
      required: true
      description: The unique identifier of the subscription (UUIDv7).
      schema:
        type: string
        format: uuid
  schemas:
    SetupArtifactsResponse:
      type: object
      additionalProperties: false
      properties:
        externalId:
          type: string
          description: >-
            The non-secret `sts:ExternalId` correlation value pinned into the
            trust policy (minted once, stable across re-fetches).
          examples:
            - 0190a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b
        region:
          type: string
          description: The AWS region the artifacts target.
          examples:
            - us-east-1
        trustPolicy:
          type: string
          description: >-
            The cross-account IAM trust policy JSON (as a string) the customer
            applies in their AWS account.
          examples:
            - '{ "Version": "2012-10-17", "Statement": [] }'
        quickCreateUrl:
          type: string
          format: uri
          description: >-
            A CloudFormation quick-create console link that provisions the
            delivery role.
          examples:
            - https://us-east-1.console.aws.amazon.com/cloudformation/home?...
      required:
        - externalId
        - region
        - trustPolicy
        - quickCreateUrl
    Error:
      type: object
      description: >-
        Documento RFC 9457 `application/problem+json` devuelto para cada error
        propio del hub en las superficies `/v1` y `/admin`. El `code` estable es
        el campo sobre el que un cliente ramifica; `detail` es una explicación
        segura para el llamador y, para cualquier `5xx`, se sanitiza
        centralmente al valor `"internal error"` para que ninguna causa interna
        pueda filtrarse. (Un `403` emitido por el punto de decisión de
        autorización situado por delante del hub es la única excepción — su
        cuerpo es texto plano.)
      properties:
        type:
          type: string
          format: uri
          description: >-
            URI estable y versionado que identifica el tipo de problema
            (`https://errors.lerian.studio/v1/<code>`), o `about:blank` para
            problemas sin un código asignado por el hub.
          examples:
            - https://errors.lerian.studio/v1/not_found
        title:
          type: string
          description: Un resumen corto y legible por humanos — el texto del estado HTTP.
          examples:
            - Not Found
        status:
          type: integer
          description: El código de estado HTTP, replicado en el cuerpo.
          examples:
            - 404
        detail:
          type: string
          description: >-
            Explicación humana y segura para el llamador de esta ocurrencia
            específica. Para respuestas `5xx` este campo es siempre la cadena
            estática `"internal error"`.
          examples:
            - subscription not found
        code:
          type: string
          description: >-
            El token estable, de baja cardinalidad y legible por máquina sobre
            el que ramifica un cliente (por ejemplo `not_found`, `unauthorized`,
            `idempotency_conflict`, `validation_error`). Vacío para fallos de
            validación nativos de huma.
          examples:
            - not_found
      required:
        - type
        - title
        - status
  responses:
    Unauthorized:
      description: >-
        La autenticación falló, o no hay contexto de tenant confiable. `code` es
        `unauthorized` (cuerpo uniforme — no se revela ninguna razón).
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: >-
        El punto de decisión de autorización (lib-auth, situado por delante del
        hub) denegó la petición. Este 403 sigue siendo texto plano — actualmente
        no usa `application/problem+json`.
      content:
        text/plain:
          schema:
            type: string
    NotFound:
      description: >-
        El recurso está ausente, soft-deleted o pertenece a otro tenant — un
        `code` uniforme de `not_found` (sin oráculo de existencia).
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Error'
    ValidationError:
      description: >-
        Un fallo de formato corregible por el llamador — `code` es
        `validation_error`.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Un JWT bearer emitido por plugin-auth (lib-auth). La identidad del
        tenant se resuelve a partir de los claims validados del token; la
        superficie `/v1` nunca lee un tenant del cuerpo, del path ni de la
        query. Los llamadores de máquina obtienen un token vía el flujo
        client-credentials de plugin-auth. La superficie `/admin` autoriza
        contra un scope de operador y no lleva contexto de tenant.

````