> ## 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 usan un envelope plano `{"error":"<token>"}` (un token de baja
    cardinalidad y legible por máquina — nunca RFC 9457 problem+json). 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
      additionalProperties: false
      description: >-
        The flat error envelope used across the `/v1` and `/admin` surfaces. It
        carries a single low-cardinality, machine-readable token and never leaks
        secret material or internal detail. (A `403` from the authorization
        decision point is the one exception — its body is plain text.)
      properties:
        error:
          type: string
          description: The machine-readable error token.
          examples:
            - not_found
      required:
        - error
  responses:
    Unauthorized:
      description: >-
        La autenticación falló, o no hay contexto de tenant confiable. `error`
        es `unauthorized` (cuerpo uniforme — no se revela ninguna razón).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: >-
        El punto de decisión de autorización denegó la petición. El cuerpo es
        texto plano (no el envelope de error JSON).
      content:
        text/plain:
          schema:
            type: string
    NotFound:
      description: >-
        El recurso está ausente, soft-deleted o pertenece a otro tenant — un
        `error` uniforme de `not_found` (sin oráculo de existencia).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ValidationError:
      description: >-
        Un fallo de formato corregible por el llamador — `error` es
        `validation_error`.
      content:
        application/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.

````