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

# `POST /v1/control/mfa/enroll`: starts or restarts enrolment.

> Available only to a session that has not yet satisfied its second factor,
and refused outright once one is confirmed - otherwise anyone who walked
past an unlocked screen could quietly replace the second factor with their
own.
# Errors

Returns `401` without a password-stage session, `409` once a second factor
is already confirmed, and `503` when the enrolment store is unreachable.



## OpenAPI

````yaml /openapi.json post /v1/control/mfa/enroll
openapi: 3.1.0
info:
  title: Esectra API
  description: >-
    Transaction screening, identity verification, and wallet risk.


    Every create route accepts `Idempotency-Key`; replaying one returns the
    original record with `200` where the first call returned `201`. `POST
    /v1/transactions` requires the header, because a duplicated transaction is a
    duplicated financial record.
  license:
    name: proprietary
    identifier: proprietary
  version: 0.1.0
servers:
  - url: https://qa.esectra.com
    description: Esectra QA Documentation
security: []
paths:
  /v1/control/mfa/enroll:
    post:
      tags:
        - Control
      summary: '`POST /v1/control/mfa/enroll`: starts or restarts enrolment.'
      description: >-
        Available only to a session that has not yet satisfied its second
        factor,

        and refused outright once one is confirmed - otherwise anyone who walked

        past an unlocked screen could quietly replace the second factor with
        their

        own.

        # Errors


        Returns `401` without a password-stage session, `409` once a second
        factor

        is already confirmed, and `503` when the enrolment store is unreachable.
      operationId: enroll_handler
      responses:
        '200':
          description: Enrolment secret and otpauth URI
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnrolmentBody'
        '401':
          description: No usable credentials
        '409':
          description: A second factor is already confirmed
        '503':
          description: A backing store could not be reached
      security:
        - session_cookie: []
components:
  schemas:
    EnrolmentBody:
      type: object
      description: The secret to put into an authenticator app.
      required:
        - otpauth_uri
        - secret
      properties:
        otpauth_uri:
          type: string
          description: The URI to render as a QR code.
        secret:
          type: string
          description: The same secret, for someone typing it in by hand.
  securitySchemes:
    session_cookie:
      type: apiKey
      in: cookie
      name: esectra_session
      description: >-
        A signed-in reviewer's session. httpOnly and SameSite=Lax; set by `POST
        /v1/control/sessions` and only usable once the second factor is met.

````