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

# Create Api Key

> Create a new API key for the tenant.

The API key value is returned in plain text only once. It cannot be
retrieved again, so the client must store it securely.

The key is stored as a bcrypt hash in the database for security.

Args:
    request: API key creation request
    db: Async database session
    tenant_id: Active tenant ID
    current_user: Authenticated user (must be tenant_admin or tenant_owner)

Returns:
    CreateAPIKeyResponse: Created API key with plain text value

Raises:
    HTTPException 403: If user doesn't have permission



## OpenAPI

````yaml /openapi.json post /auth/api-keys
openapi: 3.1.0
info:
  title: Factio SRI API
  description: >-
    Plataforma headless, multi-tenant, API-first para emitir comprobantes
    electrónicos válidos ante el SRI de Ecuador.


    ## Autenticación


    Soporta tres métodos:

    - **JWT Bearer por Google OAuth**: `/auth/google/callback`

    - **JWT Bearer por email/password**: `/auth/login`

    - **API Key**: header `X-API-Key` con clave generada en `/auth/api-keys`


    ## Multi-tenant


    El aislamiento por tenant combina PostgreSQL RLS y validaciones explícitas
    en backend. El `tenant_id` se resuelve desde el contexto de autenticación.


    ## Flujo de Emisión


    1. `POST /documents` — reserva secuencial y encola el documento (responde
    202)

    2. `GET /documents/{id}` — consulta el estado actual por polling

    3. Cuando `status = AUTHORIZED`, el campo `authorization_number` contiene la
    clave de autorización del SRI


    Documentación completa en https://docs.factioapp.com
  version: 0.1.0
servers:
  - url: http://localhost:8000
    description: Local
  - url: https://api.factioapp.com
    description: Producción
  - url: https://api.staging.factioapp.com
    description: Sandbox (datos de prueba, sin efecto fiscal real)
security: []
paths:
  /auth/api-keys:
    post:
      tags:
        - Authentication
      summary: Create Api Key
      description: |-
        Create a new API key for the tenant.

        The API key value is returned in plain text only once. It cannot be
        retrieved again, so the client must store it securely.

        The key is stored as a bcrypt hash in the database for security.

        Args:
            request: API key creation request
            db: Async database session
            tenant_id: Active tenant ID
            current_user: Authenticated user (must be tenant_admin or tenant_owner)

        Returns:
            CreateAPIKeyResponse: Created API key with plain text value

        Raises:
            HTTPException 403: If user doesn't have permission
      operationId: create_api_key_auth_api_keys_post
      parameters:
        - name: authorization
          in: header
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Authorization
        - name: x-api-key
          in: header
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: X-Api-Key
        - name: x-tenant-id
          in: header
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: X-Tenant-Id
        - name: factio_access_token
          in: cookie
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Factio Access Token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAPIKeyRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateAPIKeyResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    CreateAPIKeyRequest:
      properties:
        name:
          type: string
          maxLength: 255
          minLength: 1
          title: Name
          description: Human-readable name for the API key
        scopes:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Scopes
          description: Optional list of scopes/permissions
      type: object
      required:
        - name
      title: CreateAPIKeyRequest
    CreateAPIKeyResponse:
      properties:
        id:
          type: string
          format: uuid
          title: Id
          description: API key ID
        name:
          type: string
          title: Name
          description: API key name
        api_key:
          type: string
          title: Api Key
          description: API key value (shown only once)
        key_prefix:
          type: string
          title: Key Prefix
          description: Key prefix for identification
        created_at:
          type: string
          format: date-time
          title: Created At
          description: Creation timestamp
      type: object
      required:
        - id
        - name
        - api_key
        - key_prefix
        - created_at
      title: CreateAPIKeyResponse
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError

````