openapi: 3.1.0
info:
  title: Lean Disposable Services
  description: >-
    REST API for enrolling and managing lean disposable certificates for secure
    digital signatures.


    Authenticate every request with Basic Auth credentials and a client SSL
    certificate (mTLS). All requests require the `Content-Type:
    application/json` header.


    For the full integration guide, see the [Lean Disposable
    documentation](https://docs.namirial.app/products/leandisposable/homepage).
  version: 26.1.0.3
servers:
  - url: https://lean.namirialtsp.com/RAWS_DISPOSABLE
    description: Production environment
  - url: https://lean.test.namirialtsp.com/RAWS_DISPOSABLE
    description: Development and testing environment
tags:
  - name: Certificate
    description: >-
      Methods to validate holder data, enroll disposable certificates, and send
      OTP codes.
    externalDocs:
      description: Certificate API reference
      url: >-
        https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-enroll
  - name: Document
    description: >-
      Methods to retrieve disposable contracts and upload documents related to
      the issued certificate.
    externalDocs:
      description: Document API reference
      url: >-
        https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-documents
  - name: Utility
    description: Methods to verify service status and retrieve error information.
    externalDocs:
      description: Error methods reference
      url: >-
        https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-errors
paths:
  /api/certificate/sendOtp:
    post:
      tags:
        - Certificate
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SendOtpDto'
            examples:
              smsWithText:
                summary: SMS with custom text
                value:
                  certIdOtp: 1234567
                  deviceCode: RHIDP0000000000000
                  smsOptions:
                    textSMS: 'Your OTP code is: $OTP$'
              smsWithTemplate:
                summary: SMS with template
                value:
                  certIdOtp: 1234567
                  deviceCode: RHIDP0000000000000
                  smsOptions:
                    templateId: '1'
                    language: IT
              email:
                summary: Email OTP
                value:
                  certIdOtp: 1234567
                  deviceCode: RHIDP0000000000000
                  emailOptions:
                    templateId: '1'
                    language: IT
      responses:
        '200':
          description: OTP sent successfully. Response body is empty.
        '500':
          description: >-
            Application error. The backend returns HTTP 500 for all application
            errors, including validation failures and authentication errors.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
              examples:
                validationError:
                  summary: Validation error — missing or invalid field (code 242)
                  value:
                    code: 242
                    message: >-
                      Input parameter invalid: [{field=disposableHolder,
                      message=must not be null}]
                authError:
                  summary: Authentication or authorization error (code 11002)
                  value:
                    code: 11002
                    message: Wrong username or password
                unauthorizedMethod:
                  summary: >-
                    Authorization error — user not authorized for this method or
                    LRA (code 11002)
                  value:
                    code: 11002
                    message: Unauthorized user to call webmethod validateOtp
                certIdOtpNotFound:
                  summary: certIdOtp not found (code 62)
                  value:
                    code: 62
                    message: idOtp not found
                deviceCodeInvalid:
                  summary: deviceCode not valid (code 249)
                  value:
                    code: 249
                    message: Invalid Company
                otpNotSent:
                  summary: OTP not sent — smsOptions empty (code 99)
                  value:
                    code: 99
                    message: OTP was not sent
      operationId: sendOtp
      summary: Send OTP
      description: >-
        Sends an OTP code to the holder via SMS or email. Use `certIdOtp` and
        `deviceCode` returned by `enroll`. See
        [sendOtp](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-send-otp/lean-sendotp-method).
  /api/certificate/validate:
    post:
      tags:
        - Certificate
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ValidateOtpDto'
      responses:
        '200':
          description: OK
        '500':
          description: >-
            Application error. The backend returns HTTP 500 for all application
            errors, including validation failures and authentication errors.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
              examples:
                validationError:
                  summary: Validation error — missing or invalid field (code 242)
                  value:
                    code: 242
                    message: >-
                      Input parameter invalid: [{field=disposableHolder,
                      message=must not be null}]
                authError:
                  summary: Authentication or authorization error (code 11002)
                  value:
                    code: 11002
                    message: Wrong username or password
                unauthorizedMethod:
                  summary: >-
                    Authorization error — user not authorized for this method or
                    LRA (code 11002)
                  value:
                    code: 11002
                    message: Unauthorized user to call webmethod validateOtp
      operationId: validateCertificate
      summary: Validate certificate data
      description: >-
        Validates the OTP code entered by the holder. See
        [validate](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-send-otp/lean-sendotp-method).
  /api/certificate/{lraId}/checkData:
    post:
      tags:
        - Certificate
      parameters:
        - name: lraId
          in: path
          required: true
          schema:
            type: string
          description: Local Registration Authority (LRA) identifier.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DisposableInputDataDto'
            examples:
              otpType=SMS:
                summary: otpType=SMS
                description: >-
                  Enroll with otpType=SMS. Requires `disposableContacts.mobile`
                  in E.164 format.
                value:
                  disposableHolder:
                    firstName: Mario
                    lastName: Rossi
                    identificationType: ITALIAN_TAX_CODE
                    identificationCode: RSSMRA80A01H501U
                    identificationCountry: IT
                    birthDate: '1980-01-01'
                    birthCity: Roma
                  disposableDoc:
                    documentType: CI
                    documentNr: AA0000000
                    documentIssuer: Comune di Roma
                    documentIssuerDate: '2020-01-01'
                    documentIssuerCountry: IT
                    documentExpirationDate: '2030-01-01'
                  disposableCertificate:
                    password: Password01
                    securityCode: Security01
                    type: DISPOSABLE
                    otpType: SMS
                  disposableContacts:
                    mobile: '+390000000000'
              otpType=EMAIL:
                summary: otpType=EMAIL
                description: >-
                  Enroll with otpType=EMAIL. Requires `disposableContacts.email`
                  and EMAIL OTP enabled for the LRA.
                value:
                  disposableHolder:
                    firstName: Mario
                    lastName: Rossi
                    identificationType: ITALIAN_TAX_CODE
                    identificationCode: RSSMRA80A01H501U
                    identificationCountry: IT
                    birthDate: '1980-01-01'
                    birthCity: Roma
                  disposableDoc:
                    documentType: CI
                    documentNr: AA0000000
                    documentIssuer: Comune di Roma
                    documentIssuerDate: '2020-01-01'
                    documentIssuerCountry: IT
                    documentExpirationDate: '2030-01-01'
                  disposableCertificate:
                    password: Password01
                    securityCode: Security01
                    type: DISPOSABLE
                    otpType: EMAIL
                  disposableContacts:
                    email: mario.rossi@example.com
      responses:
        '200':
          description: OK
        '500':
          description: >-
            Application error. The backend returns HTTP 500 for all application
            errors, including validation failures and authentication errors.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
              examples:
                validationError:
                  summary: Validation error — missing or invalid field (code 242)
                  value:
                    code: 242
                    message: >-
                      Input parameter invalid: [{field=disposableHolder,
                      message=must not be null}]
                authError:
                  summary: Authentication or authorization error (code 11002)
                  value:
                    code: 11002
                    message: Wrong username or password
                unauthorizedMethod:
                  summary: >-
                    Authorization error — user not authorized for this method or
                    LRA (code 11002)
                  value:
                    code: 11002
                    message: Unauthorized user to call webmethod validateOtp
      operationId: checkData
      summary: Check holder data
      description: >-
        Validates holder data, document and certificate parameters before
        enrolling. Optional step — use it to detect validation errors before
        calling `enroll`. See
        [checkData](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-checkdata/lean-checkdata-method).
  /api/certificate/{lraId}/checkDataWitheIDAssertion:
    post:
      tags:
        - Certificate
      parameters:
        - name: lraId
          in: path
          required: true
          schema:
            type: string
          description: Local Registration Authority (LRA) identifier.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DisposableEidDataDto'
            examples:
              IT-EIDNAMIRIAL:
                summary: IT-EIDNAMIRIAL with SMS OTP
                description: >-
                  Check data with IT-EIDNAMIRIAL eID assertion. The assertion is
                  a base64-encoded JSON format with current `iat` timestamp.
                value:
                  eidAssertionHolder:
                    country: IT
                    eIDType: EIDNAMIRIAL
                    assertion: >-
                      eyJnaXZlbl9uYW1lIjoiTWFyaW8iLCJmYW1pbHlfbmFtZSI6IlJvc3NpIiwicGVyc29uX2lkZW50aWZpZXIiOiJUSU5JVC1SU1NNUkE4MEEwMUg1MDFVIiwiYmlydGhfZGF0ZSI6IjE5ODAtMDEtMDEiLCJkb2NfdHlwZSI6Ik5BVElPTkFMX0lERU5USVRZX0NBUkQiLCJjb3VudHJ5IjoiSVQiLCJycF9uYW1lIjoiTmFtaXJpYWwgVGVzdCBSUCIsInJwX2lkIjoidGVzdC1ycC0wMDEiLCJvcmlnaW5hbF9hc3NlcnRpb24iOiJiYXNlNjRfZW5jb2RlZF9zYW1sX2Fzc2VydGlvbl9oZXJlIiwiaWF0IjoxNzA5NTY4MDAwfQ==
                  contacts:
                    mobile: '+390000000000'
                  certificate:
                    fullData: false
                    otpType: SMS
                    password: Password01
                    securityCode: Security01
                    type: DISPOSABLE
      responses:
        '200':
          description: >-
            Validation successful. The holder data is valid and the LRA is
            authorized for the specified eID type. Response body is empty.
        '500':
          description: >-
            Application error. The backend returns HTTP 500 for all application
            errors, including validation failures and authentication errors.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
              examples:
                validationError:
                  summary: Validation error — missing or invalid field (code 242)
                  value:
                    code: 242
                    message: >-
                      Input parameter invalid: [{field=eidAssertionHolder,
                      message=must not be null}]
                expiredAssertion:
                  summary: Expired eID assertion (code 237)
                  value:
                    code: 237
                    message: The input saml assertion is expired
                invalidAssertion:
                  summary: Invalid eID assertion (code 239)
                  value:
                    code: 239
                    message: Invalid Eid assertion
                lraNotAuthorized:
                  summary: LRA not authorized for eID type (code 244)
                  value:
                    code: 244
                    message: Error lra not authorize for eID specified
                authError:
                  summary: Authentication or authorization error (code 11002)
                  value:
                    code: 11002
                    message: Wrong username or password
                unauthorizedMethod:
                  summary: >-
                    Authorization error — user not authorized for this method or
                    LRA (code 11002)
                  value:
                    code: 11002
                    message: >-
                      Unauthorized user to call webmethod
                      checkDataWitheIDAssertion
      operationId: checkDataWitheIDAssertion
      summary: Check holder data with eID assertion
      description: >-
        Validates holder data using an eID assertion before enrolling. Checks:
        mandatory fields, allowed values, LRA authorization for the eID type.
        See
        [checkDataWitheIDAssertion](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-checkdata/lean-checkdata-eid-assertion-method)
        and [How to enroll with eID
        assertion](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/integration-guide/lean-ig-how-to-enroll-disposable-eid-assertion).
  /api/certificate/{lraId}/enroll:
    post:
      tags:
        - Certificate
      parameters:
        - name: lraId
          in: path
          required: true
          schema:
            type: string
          description: Local Registration Authority (LRA) identifier.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DisposableInputDataDto'
            examples:
              otpType=SMS:
                summary: otpType=SMS
                description: >-
                  Enroll with otpType=SMS. Requires `disposableContacts.mobile`
                  in E.164 format.
                value:
                  disposableHolder:
                    firstName: Mario
                    lastName: Rossi
                    identificationType: ITALIAN_TAX_CODE
                    identificationCode: RSSMRA80A01H501U
                    identificationCountry: IT
                    birthDate: '1980-01-01'
                    birthCity: Roma
                  disposableDoc:
                    documentType: CI
                    documentNr: AA0000000
                    documentIssuer: Comune di Roma
                    documentIssuerDate: '2020-01-01'
                    documentIssuerCountry: IT
                    documentExpirationDate: '2030-01-01'
                  disposableCertificate:
                    password: Password01
                    securityCode: Security01
                    type: DISPOSABLE
                    otpType: SMS
                  disposableContacts:
                    mobile: '+390000000000'
              otpType=EMAIL:
                summary: otpType=EMAIL
                description: >-
                  Enroll with otpType=EMAIL. Requires `disposableContacts.email`
                  and EMAIL OTP enabled for the LRA.
                value:
                  disposableHolder:
                    firstName: Mario
                    lastName: Rossi
                    identificationType: ITALIAN_TAX_CODE
                    identificationCode: RSSMRA80A01H501U
                    identificationCountry: IT
                    birthDate: '1980-01-01'
                    birthCity: Roma
                  disposableDoc:
                    documentType: CI
                    documentNr: AA0000000
                    documentIssuer: Comune di Roma
                    documentIssuerDate: '2020-01-01'
                    documentIssuerCountry: IT
                    documentExpirationDate: '2030-01-01'
                  disposableCertificate:
                    password: Password01
                    securityCode: Security01
                    type: DISPOSABLE
                    otpType: EMAIL
                  disposableContacts:
                    email: mario.rossi@example.com
      responses:
        '200':
          description: >-
            Issued disposable certificate. See
            [DisposableIssued](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-enroll).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DisposableIssued'
        '500':
          description: >-
            Application error. The backend returns HTTP 500 for all application
            errors, including validation failures and authentication errors.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
              examples:
                validationError:
                  summary: Validation error — missing or invalid field (code 242)
                  value:
                    code: 242
                    message: >-
                      Input parameter invalid: [{field=disposableHolder,
                      message=must not be null}]
                authError:
                  summary: Authentication or authorization error (code 11002)
                  value:
                    code: 11002
                    message: Wrong username or password
                unauthorizedMethod:
                  summary: >-
                    Authorization error — user not authorized for this method or
                    LRA (code 11002)
                  value:
                    code: 11002
                    message: Unauthorized user to call webmethod validateOtp
      operationId: enroll
      summary: Enroll disposable certificate
      description: >-
        Enrolls a disposable certificate for the holder. Returns `certIdOtp` and
        `deviceCode` required by `sendOtp` and `validate`. See
        [enroll](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-enroll/lean-enroll-method).
  /api/certificate/{lraId}/enrollDisposableWitheIDAssertion:
    post:
      tags:
        - Certificate
      parameters:
        - name: lraId
          in: path
          required: true
          schema:
            type: string
          description: Local Registration Authority (LRA) identifier.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DisposableEidDataDto'
            examples:
              IT-EIDNAMIRIAL:
                summary: IT-EIDNAMIRIAL with SMS OTP
                description: >-
                  Enroll with IT-EIDNAMIRIAL eID assertion. The assertion is a
                  base64-encoded JSON with current `iat` timestamp.
                value:
                  eidAssertionHolder:
                    country: IT
                    eIDType: EIDNAMIRIAL
                    assertion: >-
                      eyJnaXZlbl9uYW1lIjoiTWFyaW8iLCJmYW1pbHlfbmFtZSI6IlJvc3NpIiwicGVyc29uX2lkZW50aWZpZXIiOiJUSU5JVC1SU1NNUkE4MEEwMUg1MDFVIiwiYmlydGhfZGF0ZSI6IjE5ODAtMDEtMDEiLCJkb2NfdHlwZSI6Ik5BVElPTkFMX0lERU5USVRZX0NBUkQiLCJjb3VudHJ5IjoiSVQiLCJycF9uYW1lIjoiTmFtaXJpYWwgVGVzdCBSUCIsInJwX2lkIjoidGVzdC1ycC0wMDEiLCJvcmlnaW5hbF9hc3NlcnRpb24iOiJiYXNlNjRfZW5jb2RlZF9zYW1sX2Fzc2VydGlvbl9oZXJlIiwiaWF0IjoxNzA5NTY4MDAwfQ==
                  contacts:
                    mobile: '+390000000000'
                  certificate:
                    fullData: false
                    otpType: SMS
                    password: Password01
                    securityCode: Security01
                    type: DISPOSABLE
      responses:
        '200':
          description: >-
            Disposable certificate enrolled successfully. Returns certificate
            details and OTP identifier (if applicable). See
            [DisposableIssued](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-enroll).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DisposableIssued'
        '500':
          description: >-
            Application error. The backend returns HTTP 500 for all application
            errors, including validation failures and authentication errors.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
              examples:
                validationError:
                  summary: Validation error — missing or invalid field (code 242)
                  value:
                    code: 242
                    message: >-
                      Input parameter invalid: [{field=eidAssertionHolder,
                      message=must not be null}]
                expiredAssertion:
                  summary: Expired eID assertion (code 237)
                  value:
                    code: 237
                    message: The input saml assertion is expired
                invalidAssertion:
                  summary: Invalid eID assertion (code 239)
                  value:
                    code: 239
                    message: Invalid Eid assertion
                lraNotAuthorized:
                  summary: LRA not authorized for eID type (code 244)
                  value:
                    code: 244
                    message: Error lra not authorize for eID specified
                authError:
                  summary: Authentication or authorization error (code 11002)
                  value:
                    code: 11002
                    message: Wrong username or password
                unauthorizedMethod:
                  summary: >-
                    Authorization error — user not authorized for this method or
                    LRA (code 11002)
                  value:
                    code: 11002
                    message: >-
                      Unauthorized user to call webmethod
                      enrollDisposableWitheIDAssertion
      operationId: enrollDisposableWitheIDAssertion
      summary: Enroll disposable certificate with eID assertion
      description: >-
        Enrolls a disposable certificate using an eID assertion. Returns
        certificate details and OTP identifier (if `otpType=SMS` or
        `otpType=EMAIL`). See
        [enrollDisposableWitheIDAssertion](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-enroll/lean-enroll-eid-assertion-method)
        and [How to enroll with eID
        assertion](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/integration-guide/lean-ig-how-to-enroll-disposable-eid-assertion).
  /api/document/{lraId}/getAwsParameter:
    get:
      tags:
        - Document
      parameters:
        - name: lraId
          in: path
          required: true
          schema:
            type: string
          description: Local Registration Authority (LRA) identifier.
        - name: serviceId
          in: query
          schema:
            type: string
          required: true
          description: The service name.
      responses:
        '200':
          description: AWS credentials for the specified service.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AwsParameterDto'
              examples:
                awsParameters:
                  summary: AWS parameters
                  value:
                    serviceId: SERVICE_NAME
                    arn: arn:aws:iam::000000000000:role/ExampleRole
                    accessKey: AKIAIOSFODNN0EXAMPLE
                    secretAccessKey: wJalrXUtnFEMI0K7MDENG0bPxRfiCYEXAMPLEKEY
        '500':
          description: >-
            Application error. The backend returns HTTP 500 for all application
            errors, including validation failures and authentication errors.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
              examples:
                missingServiceId:
                  summary: serviceId missing (code 242)
                  value:
                    code: 242
                    message: >-
                      Input parameter invalid: [{field=serviceId, message=must
                      not be empty}]
                lraNotAuthorized:
                  summary: LRA not authorized for the service (code 245)
                  value:
                    code: 245
                    message: Error lra not authorize for the specific service
                authError:
                  summary: Authentication or authorization error (code 11002)
                  value:
                    code: 11002
                    message: Wrong username or password
      operationId: getAwsParameter
      summary: Get AWS parameters
      description: >-
        Retrieves AWS credentials for the specified LRA and service. Used when a
        video identification process stores evidence on AWS. See
        [getAwsParameter](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-documents/lean-getawsparameter-method).
  /api/document/{lraId}/getDisposableContract:
    post:
      tags:
        - Document
      parameters:
        - name: lraId
          in: path
          required: true
          schema:
            type: string
          description: Local Registration Authority (LRA) identifier.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GetDisposableContractDto'
            examples:
              pdfOnly:
                summary: PDF only — blank contract (no holder data)
                value:
                  languageCode:
                    - EN
                  docTypes:
                    - 1
                  productType: DISPOSABLE
              pdfAndTxt:
                summary: PDF and TXT — blank contract
                value:
                  languageCode:
                    - EN
                  docTypes:
                    - 1
                    - 2
                  productType: DISPOSABLE
              pdfPrefilled:
                summary: PDF — pre-filled contract (with holder, doc and contacts)
                value:
                  languageCode:
                    - EN
                  docTypes:
                    - 1
                  productType: DISPOSABLE
                  disposableHolder:
                    firstName: Test
                    lastName: User
                    identificationType: NATIONAL_IDENTITY_CARD
                    identificationCode: AB0000000
                    identificationCountry: IT
                    birthCity: Rome
                    birthDate: '1980-01-01'
                  disposableDoc:
                    documentType: CI
                    documentNr: AB0000000
                    documentIssuer: COMUNE DI TEST
                    documentIssuerDate: '2015-01-01'
                    documentExpirationDate: '2030-01-01'
                    documentIssuerCountry: IT
                  disposableContacts:
                    mobile: '+390000000000'
                    email: test@example.com
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/HolderContract'
              examples:
                pdfOnly:
                  summary: PDF only — blank contract
                  value:
                    - languageCode: EN
                      docTypes: 1
                      doc: <base64-encoded PDF>
                      privacy_link: >-
                        https://docs.namirialtsp.com/documents/Mod_NAM_GDPR03D_ENG_IT.pdf
                      termsAndConditions_link: >-
                        https://docs.namirialtsp.com/documents/Mod_NAM_CA01D_ENG_IT.pdf
                      checkBoxes:
                        - >-
                          In order to sign with electronic signature the
                          Application Form, you need to accept the terms and
                          conditions by checking the boxes below:
                        - >-
                          (1) I certify the content of SECTION E - SELF
                          CERTIFICATION BY THE HOLDER
                        - >-
                          (2) I accept the General Terms and Conditions
                          (Mod.NAMCA01D) and the one-sided clauses set forth in
                          SECTION F - ONE-SIDED CLAUSES
                pdfAndTxt:
                  summary: PDF and TXT — blank contract
                  value:
                    - languageCode: EN
                      docTypes: 1
                      doc: <base64-encoded PDF>
                      privacy_link: >-
                        https://docs.namirialtsp.com/documents/Mod_NAM_GDPR03D_ENG_IT.pdf
                      termsAndConditions_link: >-
                        https://docs.namirialtsp.com/documents/Mod_NAM_CA01D_ENG_IT.pdf
                      checkBoxes:
                        - >-
                          In order to sign with electronic signature the
                          Application Form, you need to accept the terms and
                          conditions by checking the boxes below:
                        - >-
                          (1) I certify the content of SECTION E - SELF
                          CERTIFICATION BY THE HOLDER
                        - >-
                          (2) I accept the General Terms and Conditions
                          (Mod.NAMCA01D) and the one-sided clauses set forth in
                          SECTION F - ONE-SIDED CLAUSES
                    - languageCode: EN
                      docTypes: 2
                      doc: <base64-encoded TXT>
                      privacy_link: >-
                        https://docs.namirialtsp.com/documents/Mod_NAM_GDPR03D_ENG_IT.pdf
                      termsAndConditions_link: >-
                        https://docs.namirialtsp.com/documents/Mod_NAM_CA01D_ENG_IT.pdf
                      checkBoxes:
                        - >-
                          In order to sign with electronic signature the
                          Application Form, you need to accept the terms and
                          conditions by checking the boxes below:
                        - >-
                          (1) I certify the content of SECTION E - SELF
                          CERTIFICATION BY THE HOLDER
                        - >-
                          (2) I accept the General Terms and Conditions
                          (Mod.NAMCA01D) and the one-sided clauses set forth in
                          SECTION F - ONE-SIDED CLAUSES
                pdfPrefilled:
                  summary: PDF — pre-filled contract (holder data embedded in document)
                  value:
                    - languageCode: EN
                      docTypes: 1
                      doc: >-
                        <base64-encoded PDF, larger than blank — holder data
                        pre-filled>
                      privacy_link: >-
                        https://docs.namirialtsp.com/documents/Mod_NAM_GDPR03D_ENG_IT.pdf
                      termsAndConditions_link: >-
                        https://docs.namirialtsp.com/documents/Mod_NAM_CA01D_ENG_IT.pdf
                      checkBoxes:
                        - >-
                          In order to sign with electronic signature the
                          Application Form, you need to accept the terms and
                          conditions by checking the boxes below:
                        - >-
                          (1) I certify the content of SECTION E - SELF
                          CERTIFICATION BY THE HOLDER
                        - >-
                          (2) I accept the General Terms and Conditions
                          (Mod.NAMCA01D) and the one-sided clauses set forth in
                          SECTION F - ONE-SIDED CLAUSES
        '500':
          description: >-
            Application error. The backend returns HTTP 500 for all application
            errors, including validation failures and authentication errors.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
              examples:
                validationError:
                  summary: Validation error — missing or invalid field (code 242)
                  value:
                    code: 242
                    message: >-
                      Input parameter invalid: [{field=disposableHolder,
                      message=must not be null}]
                authError:
                  summary: Authentication or authorization error (code 11002)
                  value:
                    code: 11002
                    message: Wrong username or password
                unauthorizedMethod:
                  summary: >-
                    Authorization error — user not authorized for this method or
                    LRA (code 11002)
                  value:
                    code: 11002
                    message: Unauthorized user to call webmethod validateOtp
                contractNotFound:
                  summary: >-
                    Contract template not found for the given languageCode (code
                    2083)
                  value:
                    code: 2083
                    message: Contract template not found
                invalidProductType:
                  summary: Invalid or missing productType (code 242)
                  value:
                    code: 242
                    message: >-
                      Input parameter invalid: [{field=productType, message=The
                      product type should not be null}]
                invalidDocTypes:
                  summary: Missing or invalid docTypes (code 242)
                  value:
                    code: 242
                    message: >-
                      Input parameter invalid: [{field=validDocTypes,
                      message=The doc type parameter should be 1 or 2},
                      {field=docTypes, message=must not be empty}]
      operationId: getDisposableContract
      summary: Get disposable contract
      description: >-
        Returns the disposable contract (Mod_NAMCA22D), the privacy document
        URL, and the T&C document URL for the specified LRA.


        The contract is pre-filled with holder data if `disposableHolder`,
        `disposableContacts` and `disposableDoc` are all provided. If omitted,
        the contract is returned blank.


        See
        [getDisposableContract](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-documents).
  /api/document/{lraId}/getDisposableContractWitheIDAssertion:
    post:
      tags:
        - Document
      parameters:
        - name: lraId
          in: path
          required: true
          schema:
            type: string
          description: Local Registration Authority (LRA) identifier.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GetDisposableContractWithEidDto'
            examples:
              IT-EIDNAMIRIAL-prefilled:
                summary: IT-EIDNAMIRIAL with pre-filled contract
                description: >-
                  Get contract with IT-EIDNAMIRIAL eID assertion. The contract
                  will be pre-filled with holder and contact information.
                value:
                  eIDAssertionHolder:
                    country: IT
                    eIDType: EIDNAMIRIAL
                    assertion: >-
                      eyJnaXZlbl9uYW1lIjoiTWFyaW8iLCJmYW1pbHlfbmFtZSI6IlJvc3NpIiwicGVyc29uX2lkZW50aWZpZXIiOiJUSU5JVC1SU1NNUkE4MEEwMUg1MDFVIiwiYmlydGhfZGF0ZSI6IjE5ODAtMDEtMDEiLCJkb2NfdHlwZSI6Ik5BVElPTkFMX0lERU5USVRZX0NBUkQiLCJjb3VudHJ5IjoiSVQiLCJycF9uYW1lIjoiTmFtaXJpYWwgVGVzdCBSUCIsInJwX2lkIjoidGVzdC1ycC0wMDEiLCJvcmlnaW5hbF9hc3NlcnRpb24iOiJiYXNlNjRfZW5jb2RlZF9zYW1sX2Fzc2VydGlvbl9oZXJlIiwiaWF0IjoxNzA5NTY4MDAwfQ==
                  contacts:
                    mobile: '+390000000000'
                    email: example@example.com
                  cert:
                    type: DISPOSABLE
                    password: Password01
                    securityCode: Security01
                    withoutUsageLimitLRA: false
                  languageCode:
                    - EN
                  docTypes:
                    - 1
      responses:
        '200':
          description: >-
            Contract documents retrieved successfully. Returns an array of
            contract documents (Mod_NAMCA22D) with privacy and T&C links. The
            contract is pre-filled if `eIDAssertionHolder` and `contacts` are
            provided.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/HolderContract'
        '500':
          description: >-
            Application error. The backend returns HTTP 500 for all application
            errors, including validation failures and authentication errors.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
              examples:
                validationError:
                  summary: Validation error — missing or invalid field (code 242)
                  value:
                    code: 242
                    message: >-
                      Input parameter invalid: [{field=languageCode,
                      message=must not be empty}]
                expiredAssertion:
                  summary: Expired eID assertion (code 237)
                  value:
                    code: 237
                    message: The input saml assertion is expired
                invalidAssertion:
                  summary: Invalid eID assertion (code 235 or 238)
                  value:
                    code: 235
                    message: Wrong assertion
                contractNotFound:
                  summary: Contract template not found (code 2083)
                  value:
                    code: 2083
                    message: Contract template not found
                languageNotFound:
                  summary: Language not found (code 2084)
                  value:
                    code: 2084
                    message: The insert language was not found
                authError:
                  summary: Authentication or authorization error (code 11002)
                  value:
                    code: 11002
                    message: Wrong username or password
                unauthorizedMethod:
                  summary: >-
                    Authorization error — user not authorized for this method or
                    LRA (code 11002)
                  value:
                    code: 11002
                    message: >-
                      Unauthorized user to call webmethod
                      getDisposableContractWitheIDAssertion
      operationId: getDisposableContractWitheIDAssertion
      summary: Get disposable contract with eID assertion
      description: >-
        Retrieves disposable contract documents (Mod_NAMCA22D) using an eID
        assertion. Returns contract PDF/TXT, privacy document URL
        (Mod_NAMGDPR03D), and T&C document URL (Mod_NAMCA01D). The contract is
        pre-filled if `eIDAssertionHolder` and `contacts` are provided. See
        [getDisposableContractWitheIDAssertion](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-documents/lean-getDisposableContractWithEidAssertion-method)
        and [How to enroll with eID
        assertion](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/integration-guide/lean-ig-how-to-enroll-disposable-eid-assertion).
  /api/document/{lraId}/uploadAwsId:
    post:
      tags:
        - Document
      parameters:
        - name: lraId
          in: path
          required: true
          schema:
            type: string
          description: Local Registration Authority (LRA) identifier.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UploadAwsIdDto'
        required: true
      responses:
        '200':
          description: AWS ID uploaded successfully. Response body is empty.
        '500':
          description: >-
            Application error. The backend returns HTTP 500 for all application
            errors, including validation failures and authentication errors.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
              examples:
                missingFields:
                  summary: Missing required fields (code 242)
                  value:
                    code: 242
                    message: >-
                      Input parameter invalid: [{field=deviceCode, message=must
                      not be empty}, {field=awsId, message=must not be empty}]
                invalidDeviceCode:
                  summary: Invalid deviceCode/idOtp pair (code 85)
                  value:
                    code: 85
                    message: Device type missing or not allowed
                authError:
                  summary: Authentication or authorization error (code 11002)
                  value:
                    code: 11002
                    message: Wrong username or password
      operationId: uploadAwsId
      summary: Upload AWS document ID
      description: >-
        Associates an AWS identification reference to an issued disposable
        certificate. Used when a video identification process stores evidence on
        AWS.


        See
        [uploadAwsId](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-documents).
  /api/document/{lraId}/uploadDoc:
    post:
      tags:
        - Document
      parameters:
        - name: lraId
          in: path
          required: true
          schema:
            type: string
          description: Local Registration Authority (LRA) identifier.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UploadDocDto'
            examples:
              contract:
                summary: Upload a signed contract (PDF)
                value:
                  deviceCode: RHIDP0000000000000
                  idOtp: 1234567
                  typeDoc: CONTRACT
                  extension: pdf
                  file: <base64-encoded PDF>
              identificationDoc:
                summary: Upload an identification document (JPEG)
                value:
                  deviceCode: RHIDP0000000000000
                  idOtp: 1234567
                  typeDoc: IDENTIFICATION_DOC
                  extension: jpeg
                  file: <base64-encoded JPEG>
                  externalKey: external_key_sample
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadedDocumentDto'
              examples:
                success:
                  summary: Document uploaded successfully
                  value:
                    deviceCode: RHIDP0000000000000
                    filename: >-
                      1234567_a4ece4b3e9626ccfd3bac2eb77c0c1d7950be77e190a64fcf1957279e677ffc7.pdf
                    typeDoc: CONTRACT
                    externalKey: null
                    uploadDate: 1733496805136
        '500':
          description: >-
            Application error. The backend returns HTTP 500 for all application
            errors, including validation failures and authentication errors.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
              examples:
                missingFields:
                  summary: Missing required fields (code 242)
                  value:
                    code: 242
                    message: >-
                      Input parameter invalid: [{field=extension, message=must
                      not be empty}, {field=deviceCode, message=must not be
                      empty}, {field=file, message=must not be empty},
                      {field=typeDoc, message=must not be empty}]
                invalidTypeDoc:
                  summary: Invalid typeDoc value (code 242)
                  value:
                    code: 242
                    message: 'Input parameter invalid: typeDoc'
                invalidExtension:
                  summary: Invalid extension value (code 242)
                  value:
                    code: 242
                    message: 'Input parameter invalid: extension'
                invalidDeviceCode:
                  summary: Invalid deviceCode (code 85)
                  value:
                    code: 85
                    message: Device type missing or not allowed
                duplicateDocument:
                  summary: Document already uploaded (code 1027)
                  value:
                    code: 1027
                    message: The file is duplicated
                authError:
                  summary: Authentication or authorization error (code 11002)
                  value:
                    code: 11002
                    message: Wrong username or password
      operationId: uploadDoc
      summary: Upload document
      description: >-
        Stores a document linked to an issued disposable certificate. Supported
        document types: identification evidence, signed contracts (e.g. CA22D),
        audit logs, identity assertions.


        **Note**: if the disposable was issued with
        `enrollDisposableWitheIDAssertion`, the assertion is stored
        automatically — do not upload it with this method.


        See
        [uploadDoc](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-documents).
  /api/utility/errors:
    get:
      tags:
        - Utility
      parameters:
        - name: code
          in: query
          required: true
          schema:
            type: integer
            format: int32
          description: The error code to look up.
          example: 1027
        - name: language
          in: query
          required: true
          schema:
            type: string
            enum:
              - EN
              - ENG
              - IT
              - ITA
              - DE
              - DEU
              - ES
              - SPA
              - RO
              - RON
          description: >-
            Language for the error text. Use ISO 639-1 alpha-2 codes: `EN`
            (English), `IT` (Italian), `DE` (German), `ES` (Spanish), `RO`
            (Romanian). ISO 639-2 alpha-3 codes (`ENG`, `ITA`, `DEU`, `SPA`,
            `RON`) are accepted for legacy compatibility but will not be
            extended to new languages.
          example: EN
      responses:
        '200':
          description: |-
            Error description returned.

             If the error code does not exist, `errorText` is `"Unspecified error"`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorsResponse'
              examples:
                found:
                  summary: Error code found
                  value:
                    errorCode: 1027
                    errorLanguage: ENG
                    errorLanguage2: EN
                    errorText: The file is duplicated
                notFound:
                  summary: Error code not found — returns Unspecified error
                  value:
                    errorCode: 99999
                    errorLanguage: ENG
                    errorLanguage2: EN
                    errorText: Unspecified error
        '500':
          description: Application error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
              examples:
                invalidLanguage:
                  summary: Invalid language code (code 2084)
                  value:
                    code: 2084
                    message: >-
                      The insert language was not found, the allowed languages
                      are:  :[de, en, es, it, ro]
                missingParams:
                  summary: Missing required parameters (code 242)
                  value:
                    code: 242
                    message: >-
                      Input parameter invalid: [{field=errorLanguage,
                      message=must not be empty}, {field=errorLanguage,
                      message=must not be null}]
                authError:
                  summary: Authentication or authorization error (code 11002)
                  value:
                    code: 11002
                    message: Wrong username or password
      operationId: getErrors
      summary: Get error list
      description: >-
        Returns the human-readable description of an error code in the requested
        language.


        **Note**: requires `Content-Type: application/json` header.



        See
        [getErrors](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-errors).
  /api/utility/verifyLeanStatus:
    get:
      tags:
        - Utility
      responses:
        '200':
          description: Service is operational. Response body is empty.
      operationId: verifyLeanStatus
      summary: Verify Lean service status
      description: >-
        Returns HTTP 200 if the Lean Disposable service is operational. Use this
        endpoint to monitor service availability.


        If the service is completely unavailable, this endpoint will return 503
        Service Unavailable — implement appropriate error handling for this
        case.
  /api/utility/verifyStatusWs:
    get:
      tags:
        - Utility
      responses:
        '200':
          description: Service is operational. Response body is empty.
      operationId: verifyStatusWs
      summary: Verify web service status
      description: >-
        Returns HTTP 200 if the Lean Disposable web service (WS) is operational.
        Use this endpoint to monitor web service availability.


        If the service is completely unavailable, this endpoint will return 503
        Service Unavailable — implement appropriate error handling for this
        case.
  /api/utility/{lraId}/capabilities:
    get:
      tags:
        - Utility
      parameters:
        - name: lraId
          in: path
          required: true
          schema:
            type: string
          description: Local Registration Authority (LRA) identifier.
      responses:
        '200':
          description: LRA configuration.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LraCapabilitiesResponse'
              example:
                company: SPA
                config:
                  maxMobileReuseInRangeDaysDisposable: 1
                  rangeDaysMobileDisposable: 0
                otp:
                  allowed:
                    - NO_OTP
                    - EMAIL
                    - EXTERNAL_OTP
                    - SMS
                  constraintsDisposableIdentificationType:
                    - otpType: NO_OTP
                      disposableIdentificationType:
                        - DEVISU
                    - otpType: EMAIL
                      disposableIdentificationType:
                        - DEVISU
                disposableIdentificationType:
                  allowed:
                    - DEVISU
                    - CNS
                    - FIRMA
                    - THIRDPARTY
                    - WEB
                    - CIE
                    - SPID
                    - ALTRO
                eid:
                  allowed:
                    - country: IT
                      eid: SPID
                      rp:
                        - entityId: https://esp.test.namirialtsp.com/wizard
                          minimumLevel: 2
                          expirationTimespanSecond: 1800
                    - country: IT
                      eid: CIE
                      rp: []
                cert:
                  allowed:
                    - DISPOSABLE
                    - DISPOSABLE_30_DAYS
                    - LONG-LIVED
                op:
                  legalEntityId: '00000'
                  customerId: null
                  buReId:
                    disposable: ''
                legalEntity:
                  idLegalEntity: 0
                  country: IT
                contract:
                  allowed:
                    DISPOSABLE:
                      - country: IT
                        language: IT
                      - country: null
                        language: EN
        '500':
          description: >-
            Application error. The backend returns HTTP 500 for all application
            errors, including validation failures and authentication errors.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
              examples:
                lraNotFound:
                  summary: LRA not found or not authorized (code 11002)
                  value:
                    code: 11002
                    message: Unauthorized user to call webmethod getLraCapabilities
                authError:
                  summary: Authentication error (code 11002)
                  value:
                    code: 11002
                    message: Wrong username or password
      operationId: getLraCapabilities
      summary: Get LRA capabilities
      description: >-
        Retrieves the configuration of a LRA: allowed OTP types, identification
        types, eID methods, certificate types, contract templates, and One
        Platform info. See
        [getLraCapabilities](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-otherapi/lean-lraCapabilities-method).
components:
  schemas:
    AllowedEid:
      type: object
      properties:
        country:
          type: string
          description: Country code (ISO 3166-1 alpha-2).
          example: IT
        eid:
          type: string
          description: eID type.
          example: SPID
        rp:
          type: array
          items:
            $ref: '#/components/schemas/RelyingPartyDto'
          description: >-
            List of relying party configurations. Empty if no specific RP is
            configured.
      description: An allowed eID configuration.
    AwsParameterDto:
      type: object
      properties:
        serviceId:
          type: string
          description: The service name.
          example: SERVICE_NAME
        arn:
          type: string
          description: Amazon Resource Name (ARN) of the IAM role.
          example: arn:aws:iam::000000000000:role/ExampleRole
        accessKey:
          type: string
          description: AWS access key ID.
          example: AKIAIOSFODNN0EXAMPLE
        secretAccessKey:
          type: string
          description: AWS secret access key.
          example: wJalrXUtnFEMI0K7MDENG0bPxRfiCYEXAMPLEKEY
    BuReId:
      type: object
      properties:
        disposable:
          type: string
    Cert:
      type: object
      properties:
        allowed:
          type: array
          items:
            type: string
    CompanyCode:
      enum:
        - SPA
        - LTD
        - NONE
      type: string
    ConstraintsDisposableIdentificationType:
      type: object
      properties:
        otpType:
          type: string
          description: OTP type.
        disposableIdentificationType:
          type: array
          items:
            type: string
          description: Identification types allowed for this OTP type.
      description: Constraint between an OTP type and the allowed identification types.
    Contract:
      type: object
      properties:
        allowed:
          type: object
          additionalProperties:
            type: array
            items:
              type: object
              properties:
                country:
                  type:
                    - string
                    - 'null'
                  description: >-
                    Country code (ISO 3166-1 alpha-2). Null if the template
                    applies to all countries.
                language:
                  type: string
                  description: Language code (ISO 639-1 or ISO 639-2).
          description: >-
            Map of DisposableType to list of available country/language
            combinations.
      description: Available contract templates for this LRA, grouped by DisposableType.
    DisposableAddress:
      type: object
      properties:
        country:
          type: string
          description: Country.
        province:
          type: string
          description: Province.
        city:
          type: string
          description: City.
        ccat:
          type: string
          description: Cadastral code.
        street:
          type: string
          description: Street address.
        zip:
          type: string
          description: Zip/postal code.
      required:
        - country
        - province
        - city
        - street
        - zip
    DisposableCertificate:
      type: object
      properties:
        password:
          type: string
          description: Certificate PIN.
          minLength: 8
          maxLength: 32
          pattern: ^[A-Za-z0-9]+$
        securityCode:
          type: string
          description: Certificate security code.
          minLength: 8
          maxLength: 32
          pattern: ^[A-Za-z0-9]+$
        fullData:
          type: boolean
          description: 'Enroll with full profile. Default: `false`.'
        withoutUsageLimitLRA:
          type: boolean
          description: 'Omit LRA limitation of use (LoU). Default: `false`.'
        type:
          $ref: '#/components/schemas/DisposableType'
          description: Disposable certificate type.
        otpType:
          $ref: '#/components/schemas/DisposableOtpType'
        transactionLimit:
          $ref: '#/components/schemas/TransactionLimit'
        limitationOfUse:
          $ref: '#/components/schemas/LimitationOfUse'
      required:
        - password
        - securityCode
    DisposableContacts:
      type: object
      properties:
        email:
          type: string
          description: Email address of the holder. Required if `otpType=EMAIL`.
          format: email
        mobile:
          type: string
          description: >-
            Mobile phone number in E.164 format with `+` prefix (e.g.
            `+390000000000`). Required if `otpType=SMS`.
      description: >-
        Holder contact information. Required if `otpType=SMS` or
        `otpType=EMAIL`. Provide `mobile` if `otpType=SMS`, `email` if
        `otpType=EMAIL`.
    DisposableDoc:
      type: object
      properties:
        documentType:
          type: string
          description: >-
            Identity document type. See [allowed
            values](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/data-objects#disposabledoc).
          enum:
            - CI
            - PASS
            - PA
            - RP
            - CIE
            - RT
            - DC
            - AT
          x-enum-descriptions:
            CI: National identity card
            PASS: Passport
            PA: Driving license
            RP: Residence permit
            CIE: National Electronic Identity Card
            RT: Temporary residence permit
            DC: Documents for embassy/consulate personnel
            AT: Other
        documentNr:
          type: string
          description: Document number.
        documentIssuer:
          type: string
          description: Entity that issued the document.
        documentIssuerDate:
          format: date
          type: string
          description: >-
            Date on which the document was issued. ISO 8601 format `yyyy-MM-dd`.
            Other formats are not accepted.
          pattern: ^\d{4}-\d{2}-\d{2}$
        documentIssuerCountry:
          type: string
          description: Country where document was issued. ISO 3166-1 alpha-2 code.
          pattern: ^[A-Z]{2}$
        documentExpirationDate:
          format: date
          type: string
          description: >-
            Date on which the document was expires. ISO 8601 format
            `yyyy-MM-dd`. Other formats are not accepted.
          pattern: ^\d{4}-\d{2}-\d{2}$
      required:
        - documentType
        - documentNr
        - documentIssuerDate
        - documentExpirationDate
        - documentIssuerCountry
      description: >-
        Identity document information.


        Not required if one of the following conditions is true:

        - `DisposableIdentification.identificationType` is `AML`

        - `DisposableHolder.identificationType` is one of: `PASSPORT`,
        `PERSONAL_NUMBER`, `NATIONAL_IDENTITY_CARD`, `DRIVING_LICENSE`,
        `RESIDENCE_PERMIT`, `RESIDENCE_PERMIT_TEMP`, `EMBASSY_DOCUMENT`
    DisposableEidDataDto:
      type: object
      properties:
        eidAssertionHolder:
          $ref: '#/components/schemas/DisposableeIDAssertionHolder'
          description: >-
            eID assertion holder data. Contains the eID type, country, and
            base64-encoded assertion.
        certificate:
          $ref: '#/components/schemas/DisposableCertificate'
          description: >-
            Certificate configuration. Specifies password, security code,
            certificate type, and OTP type.
        contacts:
          $ref: '#/components/schemas/DisposableContacts'
          description: >-
            Contact information. Required if `certificate.otpType=SMS` (provide
            `mobile`) or `certificate.otpType=EMAIL` (provide `email`).
        buReId:
          type: string
          description: Business relation identifier (optional).
      required:
        - eidAssertionHolder
        - certificate
      description: >-
        Request body for checkDataWitheIDAssertion. Validates holder data using
        an eID assertion before enrolling.
    DisposableHolder:
      type: object
      properties:
        firstName:
          type: string
          description: >-
            First name of the holder (UTF-8). See [allowed characters
            rules](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/integration-guide/lean-faq-allowed-characters).
          maxLength: 64
        lastName:
          type: string
          description: >-
            Last name of the holder (UTF-8). See [allowed characters
            rules](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/integration-guide/lean-faq-allowed-characters).
          maxLength: 64
        identificationType:
          $ref: '#/components/schemas/DisposableHolderIdentificationType'
          description: >-
            Type of identification document. Together with `identificationCode`
            and `identificationCountry` it composes the certificate serial
            number.
        identificationCode:
          type: string
          description: >-
            Unique code of the identification document. Together with
            `identificationType` and `identificationCountry` it composes the
            certificate serial number. See [allowed characters
            rules](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/integration-guide/lean-faq-allowed-characters).
        identificationCountry:
          type: string
          description: Country where identification was issued. ISO 3166-1 alpha-2 code.
          pattern: ^[A-Z]{2}$
        birthDate:
          type: string
          format: date
          pattern: ^\d{4}-\d{2}-\d{2}$
          description: >-
            Date of birth in ISO 8601 format (`yyyy-MM-dd`). Example:
            `1980-01-01`. Note: the date is not validated semantically by the
            backend.
          example: '1980-01-01'
        birthCity:
          type: string
          description: >-
            City of birth. See [allowed characters
            rules](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/integration-guide/lean-faq-allowed-characters).
        citizenShip:
          type: string
          description: Citizenship country. ISO 3166-1 alpha-2 code.
          pattern: ^[A-Z]{2}$
      required:
        - firstName
        - lastName
        - identificationType
        - identificationCode
        - identificationCountry
    DisposableIdentification:
      type: object
      properties:
        identificationType:
          $ref: '#/components/schemas/DisposableIdentificationType'
          description: Identification method type.
      required:
        - identificationType
    DisposableIdentificationType:
      type: string
      description: >-
        Identification method type. See [allowed
        values](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-enum-types#disposableidentificationtype).
        Default: `DEVISU`.
      enum:
        - DEVISU
        - CNS
        - FIRMA
        - THIRDPARTY
        - WEB
        - CIE
        - SPID
        - AML
        - ALTRO
      x-enum-descriptions:
        DEVISU: In person.
        CNS: Italian National Service Card.
        FIRMA: Qualified digital signature.
        THIRDPARTY: Third party.
        WEB: Video identification.
        CIE: Italian National Electronic Identity Card.
        SPID: Italian SPID digital identity.
        AML: AML identification.
        ALTRO: Other.
    DisposableIdentificationTypeCapabilities:
      type: object
      properties:
        allowed:
          type: array
          items:
            type: string
          description: List of allowed identification types.
      description: Allowed DisposableIdentificationType values for this LRA.
    DisposableInputDataDto:
      type: object
      properties:
        disposableHolder:
          $ref: '#/components/schemas/DisposableHolder'
        disposableContacts:
          $ref: '#/components/schemas/DisposableContacts'
          description: >-
            Required if `otpType=SMS` (provide `mobile`) or `otpType=EMAIL`
            (provide `email`).
        disposableDoc:
          $ref: '#/components/schemas/DisposableDoc'
        disposableCertificate:
          $ref: '#/components/schemas/DisposableCertificate'
        identification:
          $ref: '#/components/schemas/DisposableIdentification'
        disposableAddress:
          $ref: '#/components/schemas/DisposableAddress'
        buReId:
          type: string
          description: Business Relation Identifier for One Platform integration.
          maxLength: 255
      required:
        - disposableHolder
        - disposableCertificate
        - disposableDoc
    DisposableIssued:
      type: object
      properties:
        cert:
          type: string
          format: binary
          description: Base64-encoded DER certificate.
        certType:
          $ref: '#/components/schemas/DisposableType'
          description: Certificate type, as specified in `disposableCertificate.type`.
        certUsageLimit:
          type: string
          description: Limitation of use (LoU) text embedded in the certificate.
        certSerialNumber:
          type: string
          description: Certificate serial number (hex).
          example: 60F2373BFCEB569E
        certIdOtp:
          type:
            - integer
            - 'null'
          format: int32
          description: >-
            OTP certificate identifier. Pass this value to `sendOtp` and
            `validate`. `null` if `otpType=NO_OTP` or `otpType=EXTERNAL_OTP`.
          example: 1234567
        deviceCode:
          type: string
          description: >-
            Device code associated with the issued certificate. Pass this value
            to `sendOtp` and `validate`.
          example: RHIDP0000000000000
    DisposableOtpType:
      type: string
      description: >-
        OTP delivery method. See [allowed
        values](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-enum-types#disposableotptype).
        Default: `SMS`.
      enum:
        - SMS
        - EMAIL
        - NO_OTP
        - EXTERNAL_OTP
      x-enum-descriptions:
        SMS: OTP sent via SMS.
        EMAIL: OTP sent via email.
        NO_OTP: No OTP required.
        EXTERNAL_OTP: OTP managed externally.
    DisposableType:
      type: string
      description: >-
        Disposable certificate type. See [allowed
        values](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-enum-types#disposabletype).
        Default: `DISPOSABLE`.
      enum:
        - DISPOSABLE
        - DISPOSABLE_30_DAYS
        - LONG_LIVED
        - DISPOSABLE_FEA
      x-enum-descriptions:
        DISPOSABLE: Valid within 60 minutes and for 60 minutes after enrollment.
        DISPOSABLE_30_DAYS: Valid within 30 days and for 60 minutes after enrollment.
        LONG_LIVED: Long-lived disposable certificate.
        DISPOSABLE_FEA: Non-qualified certificate for Advanced Electronic Signature (AES).
    DisposableeIDAssertionHolder:
      type: object
      properties:
        country:
          type: string
          description: >-
            Country code of the eID provider. ISO 3166-1 alpha-2 code. Together
            with `eIDType` identifies the eID method (e.g., IT-SPID,
            IT-EIDNAMIRIAL, AT-EID).
          pattern: ^[A-Z]{2}$
          example: IT
        eIDType:
          type: string
          description: >-
            Type of eID assertion. Together with `country` identifies the eID
            method (e.g., IT-SPID, IT-EIDNAMIRIAL, AT-EID). Allowed values
            depend on LRA configuration.
          example: SPID
        assertion:
          format: binary
          type: string
          description: Base64-encoded eID assertion. The format depends on `eIDType`.
      required:
        - country
        - eIDType
        - assertion
      description: >-
        eID assertion holder data. The `country` and `eIDType` together identify
        the eID method (e.g., IT-SPID, IT-EIDNAMIRIAL, AT-EID). The `assertion`
        format depends on the eID type.
    Eid:
      type: object
      properties:
        allowed:
          type: array
          items:
            $ref: '#/components/schemas/AllowedEid'
          description: List of allowed eID configurations.
      description: Allowed eID methods for this LRA.
    EmailOptions:
      type: object
      properties:
        templateId:
          type: string
          description: Identifier of a pre-configured email template.
        language:
          $ref: '#/components/schemas/EmailTemplateLanguage'
          description: ISO 3166-1 alpha-2 language code.
      description: Email delivery options.
    EmailTemplateLanguage:
      type: string
      description: >-
        ISO 3166-1 alpha-2 country code identifying the language of the template
        (e.g. `IT`, `EN`).
    Errors:
      type: object
      description: >-
        Application error response. The backend returns HTTP 500 for all
        application errors, including validation failures and authentication
        errors.
      properties:
        code:
          type: integer
          format: int32
          description: Application error code.
          example: 242
        message:
          type: string
          description: >-
            Human-readable error description. For validation errors (code 242),
            includes field-level details in the format `Input parameter invalid:
            [{field=..., message=...}]`.
          example: >-
            Input parameter invalid: [{field=disposableHolder, message=must not
            be null}]
      required:
        - code
        - message
    GetDisposableContractDto:
      type: object
      required:
        - languageCode
        - docTypes
        - productType
      description: Request body for getDisposableContract.
      properties:
        languageCode:
          type: array
          items:
            type: string
          description: >-
            Languages of the document. ISO 639-1 alpha-2 codes. You can specify
            more than one value.
          example:
            - IT
        docTypes:
          type: array
          items:
            type: integer
            format: int32
          description: >-
            Type of document to return. `1` = PDF, `2` = TXT. You can specify
            more than one value.
          example:
            - 1
            - 2
        productType:
          type: string
          description: >-
            Type of disposable certificate. See
            [DisposableType](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-enum-types#disposabletype).
          example: DISPOSABLE
        country:
          type: string
          description: >-
            Country where the end user is located. ISO 3166-1 alpha-2 code.
            Optional — if not specified, the default template for the given
            `languageCode` is returned. Required when a LRA needs contracts in
            the same language but for different legislations (e.g. French
            contract for France vs Belgium).
          example: IT
        disposableHolder:
          $ref: '#/components/schemas/DisposableHolder'
          description: >-
            Holder data. Optional — if provided together with
            `disposableContacts` and `disposableDoc`, the contract
            (Mod_NAMCA22D) is pre-filled.
        disposableContacts:
          $ref: '#/components/schemas/DisposableContacts'
        disposableDoc:
          $ref: '#/components/schemas/DisposableDoc'
        disposableCertificate:
          $ref: '#/components/schemas/DisposableCertificate'
          description: Disposable Certificate configuration.
    GetDisposableContractWithEidDto:
      type: object
      properties:
        eIDAssertionHolder:
          $ref: '#/components/schemas/DisposableeIDAssertionHolder'
          description: >-
            eID assertion holder data. If provided, the contract will be
            pre-filled with holder information.
        cert:
          $ref: '#/components/schemas/DisposableCertificate'
          description: Certificate configuration. Specifies certificate type and options.
        contacts:
          $ref: '#/components/schemas/DisposableContacts'
          description: >-
            Contact information. If provided, the contract will be pre-filled
            with contact details.
        languageCode:
          type: array
          items:
            type: string
          description: >-
            Languages of the document. ISO 639-1 alpha-2 codes. You can specify
            multiple values.
          example:
            - EN
        docTypes:
          type: array
          items:
            format: int32
            type: integer
          description: >-
            Document types. Allowed values: `1` (PDF), `2` (TXT). You can
            specify multiple values.
          example:
            - 1
        country:
          type: string
          description: >-
            Country code where the final user is located. ISO 3166-1 alpha-2
            code. Optional — if not specified, the default template for the
            specified `languageCode` is returned. Required when a LRA needs
            contracts in several languages but for different legislations (e.g.,
            French contract for France vs. French contract for Belgium).
          pattern: ^[A-Z]{2}$
          example: IT
      required:
        - cert
        - languageCode
        - docTypes
      description: >-
        Request body for getDisposableContractWitheIDAssertion. Returns
        disposable contract (Mod_NAMCA22D), privacy document URL, and T&C
        document URL.
    HolderContract:
      type: object
      description: A contract document returned by getDisposableContract.
      properties:
        languageCode:
          type: string
          description: Language of the document. ISO 639-1 alpha-2 code.
          example: IT
        docTypes:
          type: integer
          format: int32
          description: Document type. `1` = PDF, `2` = TXT.
          example: 2
        doc:
          type: string
          format: binary
          description: >-
            Base64-encoded document (Mod_NAMCA22D). Pre-filled with holder data
            if `disposableHolder`, `disposableContacts` and `disposableDoc` were
            provided in the request.
        privacy_link:
          type: string
          description: URL to download the privacy document (Mod_NAMGDPR03D).
          example: https://docs.namirialtsp.com/documents/Mod_NAM_GDPR03D_ITA_IT.pdf
        termsAndConditions_link:
          type: string
          description: URL to download the terms and conditions document (Mod_NAMCA01D).
          example: https://docs.namirialtsp.com/documents/Mod_NAM_CA01D_ITA_IT.pdf
        checkBoxes:
          type: array
          items:
            type: string
          description: >-
            List of checkbox label strings to be displayed to the user for
            acceptance.
    LegalEntity:
      type: object
      properties:
        idLegalEntity:
          format: int32
          type: integer
          description: Legal entity identifier.
        country:
          type: string
          description: Country code (ISO 3166-1 alpha-2).
          example: IT
      description: Legal entity information stored in the TSP.
    LimitationOfUse:
      type: object
      properties:
        withoutUsageLimitLRA:
          type: boolean
          description: 'Omit LRA limitation of use. Default: `false`.'
        language:
          type: string
          description: Language of the limitation of use text. ISO 639-1 alpha-2 code.
    LraCapabilitiesResponse:
      type: object
      properties:
        company:
          $ref: '#/components/schemas/CompanyCode'
        config:
          $ref: '#/components/schemas/LraConfiguration'
        otp:
          $ref: '#/components/schemas/Otp'
        disposableIdentificationType:
          $ref: '#/components/schemas/DisposableIdentificationTypeCapabilities'
        eid:
          $ref: '#/components/schemas/Eid'
        cert:
          $ref: '#/components/schemas/Cert'
        op:
          $ref: '#/components/schemas/OnePlatform'
        legalEntity:
          $ref: '#/components/schemas/LegalEntity'
        contract:
          $ref: '#/components/schemas/Contract'
      description: LRA configuration returned by getLraCapabilities.
    LraConfiguration:
      type: object
      properties:
        maxMobileReuseInRangeDaysDisposable:
          format: int32
          type: integer
        rangeDaysMobileDisposable:
          format: int32
          type: integer
    OnePlatform:
      type: object
      properties:
        legalEntityId:
          type: string
        customerId:
          type:
            - string
            - 'null'
        buReId:
          $ref: '#/components/schemas/BuReId'
    Otp:
      type: object
      properties:
        allowed:
          type: array
          items:
            type: string
          description: List of allowed OTP types for this LRA.
        constraintsDisposableIdentificationType:
          type: array
          items:
            $ref: '#/components/schemas/ConstraintsDisposableIdentificationType'
          description: >-
            Constraints between OTP types and identification types. Only present
            if constraints exist.
      description: >-
        Allowed OTP types and their constraints with
        DisposableIdentificationType.
    RelyingPartyDto:
      type: object
      properties:
        entityId:
          type: string
        minimumLevel:
          format: int32
          type: integer
        expirationTimespanSecond:
          format: int32
          type: integer
    SendOtpDto:
      type: object
      properties:
        certIdOtp:
          type: integer
          format: int32
          description: OTP certificate identifier returned by `enroll` (`certIdOtp`).
          example: 1234567
        deviceCode:
          type: string
          description: Device code returned by `enroll` (`deviceCode`).
          example: RHIDP0000000000000
        smsOptions:
          $ref: '#/components/schemas/SmsOptions'
          description: Required if `otpType=SMS`.
        emailOptions:
          $ref: '#/components/schemas/EmailOptions'
          description: Required if `otpType=EMAIL`.
      required:
        - certIdOtp
        - deviceCode
      description: >-
        Request body for sendOtp. See
        [sendOtp](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-send-otp/lean-sendotp-method).
    SmsOptions:
      type: object
      properties:
        templateId:
          type: string
          description: >-
            Identifier of a pre-configured SMS template. Required if `textSMS`
            is omitted.
        language:
          $ref: '#/components/schemas/EmailTemplateLanguage'
          description: ISO 3166-1 alpha-2 language code. Required if `templateId` is used.
        textSMS:
          type: string
          description: >-
            Custom SMS text. Use `$OTP$` as placeholder for the OTP code. If
            omitted, the OTP is appended at the end.
          example: 'Your OTP code is: $OTP$'
      description: >-
        SMS delivery options. Provide either `textSMS` or the
        `templateId`+`language` pair.
    TransactionLimit:
      type: object
      properties:
        value:
          format: int32
          type: integer
          description: Maximum transaction value.
        currency:
          type: string
          description: Currency code. ISO 4217.
    UploadAwsIdDto:
      type: object
      required:
        - awsId
        - deviceCode
        - idOtp
      description: Request body for uploadAwsId.
      properties:
        awsId:
          type: string
          description: AWS identification reference for the video identification evidence.
          example: HgI1MM8VuxpoXh6xozcd0gU8rPCvUN6c9HJRY27-K9A2hRm9ZVFFsVx2whuohH63
        deviceCode:
          type: string
          description: >-
            Device code of the issued certificate, returned by `enroll`
            (`deviceCode`).
          example: RHIDP0000000000000
        idOtp:
          type: integer
          format: int32
          description: OTP certificate identifier returned by `enroll` (`certIdOtp`).
          example: 1234567
        externalKey:
          type: string
          description: Optional external reference key.
          example: external_key_sample
    UploadDocDto:
      type: object
      required:
        - deviceCode
        - file
        - typeDoc
        - extension
      description: Request body for uploadDoc.
      properties:
        deviceCode:
          type: string
          description: >-
            Device code of the issued certificate, returned by `enroll`
            (`deviceCode`).
          example: RHIDP0000000000000
        idOtp:
          type: integer
          format: int32
          description: >-
            OTP certificate identifier returned by `enroll` (`certIdOtp`). Use
            `0` if the disposable has `otpType=NO_OTP`.
          example: 1234567
        typeDoc:
          type: string
          enum:
            - IDENTIFICATION_DOC
            - CONTRACT
            - AUDIT_LOG
            - IDENTITY_ASSERTION
          description: Type of document to upload.
          example: CONTRACT
        extension:
          type: string
          description: >-
            File extension (not case-sensitive). Allowed values: `pdf`, `zip`,
            `png`, `jpeg`, `jpg`, `docx`, `doc`, `odt`, `xml`, `json`, `txt`,
            `mp4`, `m4a`, `m4v`.
          example: pdf
        file:
          type: string
          description: Base64-encoded file content.
          example: <base64-encoded file>
        externalKey:
          type: string
          description: Optional external reference key.
          example: external_key_sample
    UploadedDocumentDto:
      type: object
      description: Response returned after a successful document upload.
      properties:
        deviceCode:
          type: string
          description: Device code of the certificate the document is linked to.
          example: RHIDP0000000000000
        filename:
          type: string
          description: Server-generated filename for the uploaded document.
          example: >-
            1234567_a4ece4b3e9626ccfd3bac2eb77c0c1d7950be77e190a64fcf1957279e677ffc7.pdf
        typeDoc:
          type: string
          enum:
            - IDENTIFICATION_DOC
            - CONTRACT
            - AUDIT_LOG
            - IDENTITY_ASSERTION
          description: Type of the uploaded document.
          example: CONTRACT
        externalKey:
          type:
            - string
            - 'null'
          description: >-
            External reference key, if provided in the request. `null` if not
            provided.
          example: external_key_sample
        uploadDate:
          type: integer
          format: int64
          description: Upload timestamp in epoch milliseconds.
          example: 1733496805136
    ValidateOtpDto:
      type: object
      required:
        - certIdOtp
        - deviceCode
        - otpCode
      description: >-
        Request body for validateOtp. See
        [validateOtp](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-validate-otp).
      properties:
        certIdOtp:
          type: integer
          format: int32
          description: OTP certificate identifier returned by `enroll` (`certIdOtp`).
          example: 1234567
        deviceCode:
          type: string
          description: Device code returned by `enroll` (`deviceCode`).
          example: RHIDP0000000000000
        otpCode:
          type: string
          description: OTP code entered by the user.
          example: '123456'
    DisposableHolderIdentificationType:
      type: string
      description: >-
        Type of document used for holder identification. See
        [DisposableHolderIdentificationType](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/api-references/lean-enum-types#disposableholderidentificationtype).
      enum:
        - ITALIAN_TAX_CODE
        - FOREIGN_TAX_CODE
        - PASSPORT
        - PERSONAL_NUMBER
        - NATIONAL_IDENTITY_CARD
        - DRIVING_LICENSE
        - RESIDENCE_PERMIT
        - RESIDENCE_PERMIT_TEMP
        - EMBASSY_DOCUMENT
        - AM
      x-enum-descriptions:
        ITALIAN_TAX_CODE: Italy's Codice fiscale (tax code).
        FOREIGN_TAX_CODE: Personal tax reference number issued by a national tax authority.
        PASSPORT: Passport number.
        PERSONAL_NUMBER: National personal/civic registration number.
        NATIONAL_IDENTITY_CARD: National identity card number.
        DRIVING_LICENSE: Driving license.
        RESIDENCE_PERMIT: Residence permit.
        RESIDENCE_PERMIT_TEMP: Temporary residence permit.
        EMBASSY_DOCUMENT: Documents for embassy/consulate personnel.
        AM: AML identification.
    ErrorsResponse:
      type: object
      description: Error description returned by `getErrors`.
      properties:
        errorCode:
          type: integer
          format: int32
          description: The error code.
          example: 1027
        errorLanguage:
          type: string
          description: ISO 639-2 alpha-3 language code of the response.
          example: ENG
        errorLanguage2:
          type: string
          description: ISO 639-1 alpha-2 language code of the response.
          example: EN
        errorText:
          type: string
          description: >-
            Human-readable description of the error in the requested language.
            Returns `"Unspecified error"` if the error code does not exist.
          example: The file is duplicated
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: >-
        HTTP Basic Authentication using account credentials.


        **Format**: `Authorization: Basic base64(username:password)`


        See [Authentication
        documentation](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/authentication)
        for details.
    sslCertificate:
      type: mutualTLS
      description: >-
        Mutual TLS (mTLS) authentication using the client SSL certificate
        provided by Namirial. The certificate must be presented at the TLS
        handshake level. See [Authentication
        documentation](https://docs.namirial.app/products/leandisposable/enterprise-documentation/developer-documentation/authentication)
        for details.
externalDocs:
  description: Lean Disposable documentation
  url: https://docs.namirial.app/products/leandisposable/homepage
security:
  - basicAuth: []
    sslCertificate: []
