openapi: 3.1.0
info:
  version: 2.0.0
  title: Monerium API
  description: >
    API for developers to integrate Monerium payments, wallets, and user
    onboarding functionalities into their applications.
  termsOfService: https://monerium.com/policies/business-terms-of-service/
  contact:
    name: Monerium
    url: https://monerium.com
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
servers:
  - url: https://api.monerium.app
    description: >-
      Production API - real money. Stable environment, publicly available. May
      be lagging behind other environments.
  - url: https://api.monerium.dev
    description: >-
      Sandbox API - fake money. Stable environment, publicly available. Parity
      with production server while simulating periphery services.
paths:
  /:
    get:
      operationId: welcome
      summary: Welcome
      description: Returns a welcome message with a link to documentation and socials.
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  hello:
                    type: string
                    example: Welcome to the Monerium API
                  docs:
                    type: string
                    example: https://docs.monerium.com
                  twitter:
                    type: string
                    example: https://twitter.com/monerium
        '400':
          description: Bad Request
      security: []
      tags:
        - start
  /auth:
    post:
      operationId: auth
      summary: Authorization
      description: >
        <span style="display: inline-block;padding: 2px 8px;margin:
        0px;background-color: rgb(123, 31, 162);color: rgb(255, 255,
        255);vertical-align: middle;line-height: 1.6;border-radius:
        4px;font-weight: 600;font-size: 12px;">
          OAuth
        </span>


        Initiates user authorization. Redirects users through the [Authorization
        Code Flow](/oauth#authorization) (HTTP 307), or completes authorization
        immediately for existing customers using [Sign in with Ethereum
        (SIWE)](/oauth#sign-in-with-ethereum-siwe).

        The resulting authorization code is exchanged for an access token via
        [POST /auth/token](#operation/auth-token).
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              oneOf:
                - allOf:
                    - title: Authorization code flow
                      properties:
                        client_id:
                          $ref: '#/components/schemas/AuthClientID'
                        code_challenge:
                          description: >-
                            PKCE challenge derived from the `code_verifier`. Use
                            the same `code_verifier` when requesting an access
                            token.
                          type: string
                          example: 9Y__uhKapn7GO_ElcaQpd8C3hdOyqTzAU4VXyR2iEV0
                        code_challenge_method:
                          description: >-
                            Method used to generate the challenge. Monerium only
                            supports `S256`.
                          type: string
                          enum:
                            - S256
                        redirect_uri:
                          description: >-
                            The URL to redirect to after authorization. Required
                            if more than one redirect URL is registered; must
                            match a registered URL exactly.
                          type: string
                        state:
                          description: >-
                            Opaque value returned with the redirect. Recommended
                            for CSRF protection.
                          type: string
                        email:
                          description: >-
                            You can prefill the email field for login and sign
                            up steps to ensure the user uses the correct email.
                          type: boolean
                          example: true
                        skip_kyc:
                          description: >-
                            You can skip the KYC onboarding steps in the
                            Authorization Flow during testing.
                          type: boolean
                          example: true
                        auth_mode:
                          description: >-
                            Controls which auth screen to show first when the
                            user is not authenticated. Defaults to the start
                            screen.
                          type: string
                          example: login
                          enum:
                            - login
                            - signup
                      required:
                        - client_id
                        - code_challenge
                - allOf:
                    - title: SIWE
                      properties:
                        client_id:
                          $ref: '#/components/schemas/AuthClientID'
                        code_challenge:
                          description: >-
                            PKCE challenge derived from the `code_verifier`. Use
                            the same `code_verifier` when requesting an access
                            token.
                          type: string
                          example: 9Y__uhKapn7GO_ElcaQpd8C3hdOyqTzAU4VXyR2iEV0
                        code_challenge_method:
                          description: >-
                            Method used to generate the challenge. Monerium only
                            supports `S256`.
                          type: string
                          enum:
                            - S256
                        authentication_method:
                          description: >-
                            Set to `siwe` to use Sign in with Ethereum. Only
                            applicable for existing Monerium customers who have
                            already linked an address.
                          type: string
                          enum:
                            - siwe
                        redirect_uri:
                          description: >-
                            The URL to redirect to after authorization. Required
                            if more than one redirect URL is registered; must
                            match a registered URL exactly.
                          type: string
                        message:
                          description: >-
                            An
                            [EIP-4361](https://eips.ethereum.org/EIPS/eip-4361)
                            compatible SIWE message. Must include
                            `expiration-time` and a `resources` array containing
                            the Monerium SIWE URL and the application's privacy
                            policy and terms of service URLs.
                          type: string
                        signature:
                          description: >-
                            Signature for the SIWE message. Must include the
                            `0x` prefix.
                          type: string
                        state:
                          description: >-
                            Opaque value returned with the redirect. Recommended
                            for CSRF protection.
                          type: string
                      required:
                        - client_id
                        - code_challenge
                        - authentication_method
                        - message
                        - signature
      responses:
        '302':
          description: FOUND
          headers:
            Location:
              description: |
                Redirect URI with either:
                  - authorization code as: `http://localhost:3000/monerium?code=LFG4269`
                  - error as: `http://localhost:3000/monerium?error=invalid_request&error_description=No+such+client+ID`
              schema:
                type: string
        '307':
          description: TEMPORARY REDIRECT
          headers:
            Location:
              description: >-
                Uri to authorization flow. Customer has to go through the
                Monerium onboarding screen and will eventually give the
                application permission to read their data.
              schema:
                type: string
              example: >-
                https://sandbox.monerium.dev/partners/a15806ac-e6d6-11ed-891c-2ea11c960b3f/auth?client_id=a08bfa22-e6d6-11ed-891c-2ea11c960b3f&code_challenge=9Y__uhKapn7GO_ElcaQpd8C3hdOyqTzAU4VXyR2iEV0&redirect_uri=http%3A%2F%2Flocalhost%3A3000&response_type=code
        '400':
          description: Bad Request
      security: []
      tags:
        - auth
      x-codeSamples:
        - lang: bash
          label: Authorization code flow
          source: >-
            curl -i 'https://api.monerium.dev/auth' \

            --header 'Content-Type: application/x-www-form-urlencoded' \

            --data-urlencode
            'code_challenge=9Y__uhKapn7GO_ElcaQpd8C3hdOyqTzAU4VXyR2iEV0' \

            --data-urlencode 'client_id=a08bfa22-e6d6-11ed-891c-2ea11c960b3f' \

            --data-urlencode 'redirect_uri=http://localhost:3000' \

            --data-urlencode 'code_challenge_method=S256'
        - lang: bash
          label: SIWE
          source: >-
            curl -X POST 'https://api.monerium.dev/auth' \

            --header 'Content-Type: application/x-www-form-urlencoded' \

            --data-urlencode 'client_id=a08bfa22-e6d6-11ed-891c-2ea11c960b3f' \

            --data-urlencode
            "code_challenge=9Y__uhKapn7GO_ElcaQpd8C3hdOyqTzAU4VXyR2iEV0" \

            --data-urlencode "code_challenge_method=S256" \

            --data-urlencode "redirect_uri=http://localhost:3000" \

            --data-urlencode "authentication_method=siwe" \

            --data-urlencode
            "signature=0x9ae6f01c9b53847812b2e10b8dbbb159d3b0c73f0e3235041430d7bf0e76172c7e7a9cd5a758f49609d3237f7df923b753bfc73e612208e77680a7a9960e744700"
            \

            --data-urlencode 'message=example.com wants you to sign in with your
            Ethereum account:

            0xf9ca5763A2d7a908d9a565567C80C069eCDd1B52


            Allow AppName to access my data on Monerium


            URI: https://example.com/callback

            Version: 1

            Chain ID: 1

            Nonce: 8YOaY6qkvyf7F5lx

            Issued At: 2024-08-24T14:23:00Z

            Expiration Time: 2024-08-24T15:23:00Z

            Resources:

            - https://monerium.com/siwe

            - https://example.com/privacy-policy

            - https://example.com/terms-of-service'
    get:
      operationId: auth-get
      summary: Authorization
      description: >
        <span style="display: inline-block;padding: 2px 8px;margin:
        0px;background-color: rgb(123, 31, 162);color: rgb(255, 255,
        255);vertical-align: middle;line-height: 1.6;border-radius:
        4px;font-weight: 600;font-size: 12px;">
          OAuth
        </span>


        Same as [POST /auth](#operation/auth) using a GET request with the same
        properties as query parameters.
      security: []
      tags:
        - auth
      x-codeSamples:
        - lang: bash
          label: CLI
          source: >-
            curl
            https://api.monerium.dev/auth?code_challenge=9Y__uhKapn7GO_ElcaQpd8C3hdOyqTzAU4VXyR2iEV0&client_id=a08bfa22-e6d6-11ed-891c-2ea11c960b3f&redirect_uri=http://localhost:3000&code_challenge_method=S256
  /auth/context:
    get:
      operationId: auth-context
      summary: Context
      description: >-
        Returns details about the currently authenticated user, including their
        roles and accessible profiles.
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserContext'
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
      security:
        - BearerAuth: []
      tags:
        - auth
      x-codeSamples:
        - lang: bash
          label: curl
          source: |-
            curl https://api.monerium.dev/auth/context \
            -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
  /auth/token:
    post:
      operationId: auth-token
      summary: Access token
      description: >
        Obtain an OAuth 2.0 access token. Supports three grant types:


        - `authorization_code`: Exchange the code received after the [OAuth
        authorization flow](/oauth#authorization) for an access token.

        - `refresh_token`: Use a refresh token to obtain a new access token
        without user interaction. See [Refresh the access
        token](/oauth#5-refresh-the-access-token).

        - `client_credentials`: Authenticate directly with your client ID and
        secret. Used by [Whitelabel](/whitelabel#authentication) and
        [Private](/private#authentication) applications.
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              oneOf:
                - allOf:
                    - description: Authorization code flow
                      title: Authorization code flow
                      properties:
                        client_id:
                          $ref: '#/components/schemas/AuthClientID'
                        grant_type:
                          type: string
                          enum:
                            - authorization_code
                        code:
                          description: >
                            The authorization code that was acquired from
                            authorization flow.
                          type: string
                          example: BvTYQprmQzKt8YSn3xsTWQ
                        code_verifier:
                          description: >-
                            The random string used to generate the
                            `code_challenge` in the PKCE authorization flow.
                          type: string
                          example: >-
                            KO2yF8CUSxU8KJepixDmXdiCOFTMMZFLDmVjNd4J2VhbFUSSgU1lXl0aYyWYK8hIZIEH9bEBDeJ78CIuNoeOIcZOybzzqFlIGedtclJ7ZTKF6GmRBZ4fdMvg6OXnf2dl
                        redirect_uri:
                          description: >
                            The same `redirect_uri` that was used to acquire the
                            `authorization_code`.
                          type: string
                          example: http://localhost:3000/monerium
                      required:
                        - code
                        - grant_type
                        - client_id
                        - code_verifier
                        - redirect_uri
                - allOf:
                    - description: Fetch updated access token with refresh token.
                      title: Refresh token
                      properties:
                        client_id:
                          $ref: '#/components/schemas/AuthClientID'
                        grant_type:
                          type: string
                          enum:
                            - refresh_token
                        refresh_token:
                          description: >
                            The refresh token acquired from the authorization
                            flow
                          type: string
                      required:
                        - client_id
                        - grant_type
                        - refresh_token
                - allOf:
                    - description: Client credentials.
                      title: Client credentials
                      properties:
                        client_id:
                          $ref: '#/components/schemas/CredentialsClientID'
                        grant_type:
                          type: string
                          enum:
                            - client_credentials
                        client_secret:
                          description: Client secret created when the app was registered.
                          type: string
                      required:
                        - client_id
                        - grant_type
                        - client_secret
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessToken'
        '400':
          description: BAD REQUEST
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                wrongClientId:
                  summary: Wrong client ID
                  value:
                    code: 400
                    status: Bad Request
                    message: >-
                      The client is not authorized to request a token using this
                      method.
                refreshTokenError:
                  summary: Refresh token error
                  value:
                    code: 400
                    status: Bad Request
                    message: Client id must be the same from previous token.
      security: []
      tags:
        - auth
      x-codeSamples:
        - lang: bash
          label: Auth code
          source: >-
            curl --location --request POST 'https://api.monerium.dev/auth/token'
            \

            --header 'Content-Type: application/x-www-form-urlencoded' \

            --data-urlencode 'grant_type=authorization_code' \

            --data-urlencode 'client_id=a08bfa22-e6d6-11ed-891c-2ea11c960b3f' \

            --data-urlencode 'code=BvTYQprmQzKt8YSn3xsTWQ' \

            --data-urlencode
            'code_verifier=KO2yF8CUSxU8KJepixDmXdiCOFTMMZFLDmVjNd4J2VhbFUSSgU1lXl0aYyWYK8hIZIEH9bEBDeJ78CIuNoeOIcZOybzzqFlIGedtclJ7ZTKF6GmRBZ4fdMvg6OXnf2dl'
            \

            --data-urlencode 'redirect_uri=http://localhost:3000'
        - lang: bash
          label: Refresh token
          source: >-
            curl --location --request POST 'https://api.monerium.dev/auth/token'
            \

            --header 'Content-Type: application/x-www-form-urlencoded' \

            --data-urlencode 'grant_type=refresh_token' \

            --data-urlencode 'client_id=1337' \

            --data-urlencode 'refresh_token=ay5GEeN4Q8ywCgKykxZN6Q'
        - lang: bash
          label: Client credentials
          source: >-
            curl --location --request POST 'https://api.monerium.dev/auth/token'
            \

            --header 'Content-Type: application/x-www-form-urlencoded' \

            --data-urlencode 'grant_type=client_credentials' \

            --data-urlencode 'client_id=1b3a17ef-460f-47b0-84c6-4495e18589b3' \

            --data-urlencode 'client_secret=samplepassword'
  /webhooks:
    get:
      operationId: list-subscriptions
      summary: List subscriptions
      description: >
        <span style="display: inline-block;padding: 2px 8px;margin:
        0px;background-color: rgb(44, 108, 167);color: rgb(255, 255,
        255);vertical-align: middle;line-height: 1.6;border-radius:
        4px;font-weight: 600;font-size: 12px;">
          Whitelabel
        </span>

        <span style="display: inline-block;padding: 2px 8px;margin: 0px 0px 0px
        4px;background-color: rgb(46, 125, 50);color: rgb(255, 255,
        255);vertical-align: middle;line-height: 1.6;border-radius:
        4px;font-weight: 600;font-size: 12px;">
          Private
        </span>


        List all webhook subscriptions for the authenticated user.

        The response includes the details of each subscription, such as the URL,
        secret, and event types.
      parameters:
        - $ref: '#/components/parameters/AcceptHeaderV2'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  subscriptions:
                    type: array
                    items:
                      $ref: '#/components/schemas/WebhookSubscription'
        '401':
          description: Unauthorized
        '500':
          description: Internal Server Error
      security:
        - BearerAuth: []
      tags:
        - webhooks
    post:
      operationId: create-subscription
      summary: Create subscription
      description: >
        <span style="display: inline-block;padding: 2px 8px;margin:
        0px;background-color: rgb(44, 108, 167);color: rgb(255, 255,
        255);vertical-align: middle;line-height: 1.6;border-radius:
        4px;font-weight: 600;font-size: 12px;">
          Whitelabel
        </span>

        <span style="display: inline-block;padding: 2px 8px;margin: 0px 0px 0px
        4px;background-color: rgb(46, 125, 50);color: rgb(255, 255,
        255);vertical-align: middle;line-height: 1.6;border-radius:
        4px;font-weight: 600;font-size: 12px;">
          Private
        </span>


        Create webhook subscription to receive notifications like [profile
        update](#operation/webhook-profile-updated) on specified endpoint.

        [Subscription created](#operation/webhook-subscription-created)
        notification is sent during subscription creation to validate if
        receiver is able to handle further notifications.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                url:
                  description: The URL where the notification will be sent.
                  type: string
                  example: https://yourdomain.com/webhook
                secret:
                  description: >
                    A secret key used to verify the authenticity of webhook
                    notifications.

                    Each notification is sent with a webhook-signature header,
                    which contains a minified JSON payload encrypted using the
                    secret key via the HMAC-SHA256 scheme.

                    The secret key must be a base64-encoded, random value
                    between 24 and 64 bytes, prefixed with `whsec_`.
                  type: string
                  example: whsec_mUt3nH+3wx/djdHf8RHn9yJMMiAhq10b
                types:
                  description: >
                    An array of event types that the webhook will subscribe to.
                    If not specified, default events types are subscribed to.


                    Default event types:

                    - `iban.updated`

                    - `profile.updated`
                  type: array
                  items:
                    type: string
                    enum:
                      - iban.updated
                      - order.created
                      - order.updated
                      - profile.updated
                  example:
                    - iban.updated
                    - profile.updated
              required:
                - url
                - secret
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookSubscription'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '500':
          description: Internal Server Error
      security:
        - BearerAuth: []
      tags:
        - webhooks
      x-codeSamples:
        - lang: bash
          label: CLI
          source: |-
            curl -X POST 'https://api.monerium.dev/webhooks' \
            -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
            -H "Content-Type: application/json" \
            --data-raw '{
              "url": "https://yourdomain.com/webhook",
              "secret": "YOUR_SECRET",
            }'
  /webhooks/{subscription}:
    patch:
      operationId: update-subscription
      summary: Update subscription
      description: >
        <span style="display: inline-block;padding: 2px 8px;margin:
        0px;background-color: rgb(44, 108, 167);color: rgb(255, 255,
        255);vertical-align: middle;line-height: 1.6;border-radius:
        4px;font-weight: 600;font-size: 12px;">
          Whitelabel
        </span>

        <span style="display: inline-block;padding: 2px 8px;margin: 0px 0px 0px
        4px;background-color: rgb(46, 125, 50);color: rgb(255, 255,
        255);vertical-align: middle;line-height: 1.6;border-radius:
        4px;font-weight: 600;font-size: 12px;">
          Private
        </span>


        Update an existing webhook subscription to change the URL, secret, or
        event types.

        The updated subscription will be validated by sending a [subscription
        created](#operation/webhook-subscription-created) notification to the
        new URL.
      parameters:
        - $ref: '#/components/parameters/AcceptHeaderV2'
        - name: subscription
          in: path
          description: The ID of the webhook subscription
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                state:
                  description: >
                    The state of the webhook subscription. If set to `inactive`,
                    the webhook will not send notifications.

                    If set to `active`, the webhook will send notifications as
                    usual.
                  type: string
                  example: active
                  enum:
                    - active
                    - inactive
                types:
                  description: >
                    An array of event types that the webhook will subscribe to.
                    If not specified, default events types are subscribed to.


                    Default event types:

                    - `iban.updated`

                    - `profile.updated`
                  type: array
                  items:
                    type: string
                    enum:
                      - iban.updated
                      - order.created
                      - order.updated
                      - profile.updated
                  example:
                    - iban.updated
                    - profile.updated
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookSubscription'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '404':
          description: Not Found (subscription does not exist)
        '500':
          description: Internal Server Error
      security:
        - BearerAuth: []
      tags:
        - webhooks
  /countries:
    get:
      operationId: get-countries
      summary: List countries
      description: >-
        Returns a list of countries with their risk tiers for
        [KYC](/kyc-guide-individuals) and [KYB](/kyb-guide-corporates)
        onboarding.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  countries:
                    type: array
                    items:
                      type: object
                      required:
                        - name
                        - code
                        - nationality
                        - residency
                      properties:
                        name:
                          description: Name of the country.
                          type: string
                        code:
                          description: Two-letter country code ISO 3166-1 alpha-2.
                          type: string
                        nationality:
                          description: Risk category for nationality.
                          type: string
                          enum:
                            - low
                            - medium
                            - high
                            - restricted
                            - prohibited
                        residency:
                          description: Risk category for residency.
                          type: string
                          enum:
                            - low
                            - medium
                            - high
                            - restricted
                            - prohibited
                  total:
                    type: integer
              example:
                countries:
                  - name: France
                    code: FR
                    nationality: low
                    residency: low
                total: 1
      security: []
      tags:
        - profiles
  /profiles:
    post:
      operationId: create-profile
      summary: Create profile
      description: >
        <span style="display: inline-block;padding: 2px 8px;margin:
        0px;background-color: rgb(44, 108, 167);color: rgb(255, 255,
        255);vertical-align: middle;line-height: 1.6;border-radius:
        4px;font-weight: 600;font-size: 12px;">
          Whitelabel
        </span>


        Create a new profile. The `kind` determines whether the `personal` or
        `corporate`

        body structure is used in the subsequent form, verifications, and share
        endpoints.

        The `kind` cannot be changed after creation.
      parameters:
        - $ref: '#/components/parameters/AcceptHeaderV2'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  description: Optional partner-supplied profile ID.
                  $ref: '#/components/schemas/UUID'
                kind:
                  description: >-
                    Determines whether the profile is personal or corporate, and
                    which body structure to use in subsequent PATCH endpoints.
                  $ref: '#/components/schemas/ProfileKind'
              required:
                - kind
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Profile'
              example:
                id: 4f079ef8-6d26-11eb-9bc8-acde48001122
                kind: personal
                name: Jane Doe
                state: incomplete
                details:
                  state: incomplete
                form:
                  state: incomplete
                verifications:
                  - kind: idDocument
                    state: incomplete
                  - kind: proofOfResidency
                    state: incomplete
        '400':
          description: BAD REQUEST
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenPartnerError'
        '409':
          description: >
            Conflict


            This error occurs when a profile with the specified ID already
            exists.
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                    format: int32
                    enum:
                      - 409
                  status:
                    type: string
                    enum:
                      - Conflict
                  message:
                    type: string
                    enum:
                      - Profile already exists
      security:
        - BearerAuth: []
      tags:
        - profiles
      x-codeSamples:
        - lang: bash
          label: CLI
          source: |-
            curl -X POST 'https://api.monerium.dev/profiles' \
            -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
            -H "Accept: application/vnd.monerium.api-v2+json" \
            --data-raw '{"kind": "personal"}'
    get:
      operationId: profiles
      summary: Profiles
      description: Retrieves a list of all profiles that your application has access to.
      parameters:
        - $ref: '#/components/parameters/AcceptHeaderV2'
        - name: state
          in: query
          description: Filter the list on the state of profiles
          required: false
          schema:
            $ref: '#/components/schemas/ProfileState'
        - name: kind
          in: query
          description: Filter the list on the kind of profiles
          required: false
          schema:
            $ref: '#/components/schemas/ProfileKind'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  profiles:
                    $ref: '#/components/schemas/Profiles'
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
      security:
        - BearerAuth: []
      tags:
        - profiles
      x-codeSamples:
        - lang: bash
          label: CLI
          source: >-
            curl https://api.monerium.dev/profiles?state=approved&kind=personal
            \

            -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \

            -H "Accept: application/vnd.monerium.api-v2+json"
  /profiles/{profile}:
    get:
      operationId: profile
      summary: Profile
      description: >-
        Retrieves details about a single profile, including the state of each
        section (`details`, `form`, `verifications`).
      parameters:
        - $ref: '#/components/parameters/AcceptHeaderV2'
        - name: profile
          in: path
          description: The ID of the profile
          required: true
          schema:
            $ref: '#/components/schemas/UUID'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Profile'
              example:
                kind: personal
                state: incomplete
                details:
                  state: incomplete
                form:
                  state: incomplete
                verifications:
                  - kind: idDocument
                    state: incomplete
                  - kind: proofOfResidency
                    state: incomplete
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
      security:
        - BearerAuth: []
      tags:
        - profiles
      x-codeSamples:
        - lang: bash
          label: CLI
          source: >-
            curl
            https://api.monerium.dev/profiles/4f079ef8-6d26-11eb-9bc8-acde48001122
            \

            -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \

            -H "Accept: application/vnd.monerium.api-v2+json"
  /profiles/{profile}/share:
    post:
      operationId: share-profile-kyc
      summary: Share KYC data
      description: >
        <span style="display: inline-block;padding: 2px 8px;margin:
        0px;background-color: rgb(44, 108, 167);color: rgb(255, 255,
        255);vertical-align: middle;line-height: 1.6;border-radius:
        4px;font-weight: 600;font-size: 12px;">
          Whitelabel
        </span>


        Reuse KYC data from a third-party provider (e.g. Sumsub) to populate the
        profile's

        `details` and `verifications`.


        Monerium uses the supplied token to fetch data from the provider and
        updates the

        relevant sections. Each section that receives sufficient data
        transitions to

        `pending`; any that remain incomplete stay `incomplete`.
      parameters:
        - $ref: '#/components/parameters/AcceptHeaderV2'
        - name: profile
          in: path
          description: The ID of the profile
          required: true
          schema:
            $ref: '#/components/schemas/UUID'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                provider:
                  description: The KYC data provider.
                  type: string
                  example: sumsub
                  enum:
                    - sumsub
                personal:
                  description: Token for a personal profile applicant.
                  type: object
                  properties:
                    token:
                      description: Provider-issued applicant token.
                      type: string
                      example: husheu817472
                  required:
                    - token
              required:
                - provider
                - personal
            example:
              provider: sumsub
              personal:
                token: husheu817472
      responses:
        '202':
          description: >
            Accepted


            The KYC data import has been initiated. Subscribe to the
            [`profile.updated`](#operation/webhook-profile-updated) webhook to
            monitor progress.
        '400':
          description: BAD REQUEST
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenPartnerError'
      security:
        - BearerAuth: []
      tags:
        - profiles
      x-codeSamples:
        - lang: bash
          label: CLI
          source: >-
            curl -X POST
            'https://api.monerium.dev/profiles/4f079ef8-6d26-11eb-9bc8-acde48001122/share'
            \

            -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \

            -H "Accept: application/vnd.monerium.api-v2+json" \

            --data-raw '{
              "provider": "sumsub",
              "personal": {
                "token": "husheu817472"
              }
            }'
  /profiles/{profile}/details:
    patch:
      operationId: patch-profile-details
      summary: Update profile details
      description: >
        <span style="display: inline-block;padding: 2px 8px;margin:
        0px;background-color: rgb(44, 108, 167);color: rgb(255, 255,
        255);vertical-align: middle;line-height: 1.6;border-radius:
        4px;font-weight: 600;font-size: 12px;">
          Whitelabel
        </span>


        Submit the compliance details for a profile. Updates only the `details`
        section without affecting other sections.


        > **KYC reliance model only.** Most integrations should use [POST
        /profiles/{profile}/share](#operation/share-profile-kyc) to populate
        details via Sumsub instead.
      parameters:
        - $ref: '#/components/parameters/AcceptHeaderV2'
        - name: profile
          in: path
          description: The ID of the profile
          required: true
          schema:
            $ref: '#/components/schemas/UUID'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              oneOf:
                - title: Personal
                  properties:
                    personal:
                      description: Details for an individual
                      type: object
                      allOf:
                        - $ref: '#/components/schemas/PersonalDetails'
                        - type: object
                          properties:
                            idDocument:
                              $ref: '#/components/schemas/IdDocument'
                - title: Corporate
                  properties:
                    corporate:
                      description: Details for a company
                      type: object
                      $ref: '#/components/schemas/CorporateDetails'
      responses:
        '202':
          description: >
            Accepted


            The applicant details have been received and will be processed by
            Monerium.
          content:
            application/json:
              schema:
                type: object
        '400':
          description: BAD REQUEST
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenPartnerError'
        '409':
          description: >
            Conflict


            This error occurs when the profile details have already been
            approved and need not be submitted again.
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                    format: int32
                    enum:
                      - 409
                  status:
                    type: string
                    enum:
                      - Conflict
                  message:
                    type: string
                    enum:
                      - >-
                        The profile details have already been approved and need
                        not be submitted again
      security:
        - BearerAuth: []
      tags:
        - profiles
      x-codeSamples:
        - lang: bash
          label: CLI
          source: >-
            curl -X PATCH
            'https://api.monerium.dev/profiles/30f730fd-e51f-11ed-9e13-cacb9390199c/details'
            \

            -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \

            -H "Accept: application/vnd.monerium.api-v2+json" \

            --data-raw '{
              "personal": {
                "firstName": "Jane",
                "lastName": "Doe"
              }
            }'
  /profiles/{profile}/form:
    patch:
      operationId: patch-profile-form
      summary: Update profile form
      description: >
        <span style="display: inline-block;padding: 2px 8px;margin:
        0px;background-color: rgb(44, 108, 167);color: rgb(255, 255,
        255);vertical-align: middle;line-height: 1.6;border-radius:
        4px;font-weight: 600;font-size: 12px;">
          Whitelabel
        </span>


        Submit additional data for a profile used for risk calculations (e.g.
        purpose of account, source of funds). Updates only the `form` section
        without affecting other sections.
      parameters:
        - $ref: '#/components/parameters/AcceptHeaderV2'
        - name: profile
          in: path
          description: The ID of the profile
          required: true
          schema:
            $ref: '#/components/schemas/UUID'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              oneOf:
                - title: Personal
                  properties:
                    personal:
                      description: Form for an individual
                      $ref: '#/components/schemas/PersonalForm'
                - title: Corporate
                  properties:
                    corporate:
                      description: Form for a company
                      $ref: '#/components/schemas/CorporateForm'
      responses:
        '202':
          description: |
            Accepted

            The form data has been received and will be processed by Monerium.
          content:
            application/json:
              schema:
                type: object
        '400':
          description: BAD REQUEST
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenPartnerError'
        '409':
          description: >
            Conflict


            This error occurs when the profile details have already been
            approved and need not be submitted again.
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                    format: int32
                    enum:
                      - 409
                  status:
                    type: string
                    enum:
                      - Conflict
                  message:
                    type: string
                    enum:
                      - >-
                        The profile details have already been approved and need
                        not be submitted again
      security:
        - BearerAuth: []
      tags:
        - profiles
      x-codeSamples:
        - lang: bash
          label: CLI
          source: >-
            curl -X PATCH
            'https://api.monerium.dev/profiles/30f730fd-e51f-11ed-9e13-cacb9390199c/form'
            \

            -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \

            -H "Accept: application/vnd.monerium.api-v2+json" \

            --data-raw '{
              "personal": {
                "purposeOfAccount": "payments"
              }
            }'
  /profiles/{profile}/verifications:
    patch:
      operationId: patch-profile-verifications
      summary: Update profile verifications
      description: >
        <span style="display: inline-block;padding: 2px 8px;margin:
        0px;background-color: rgb(44, 108, 167);color: rgb(255, 255,
        255);vertical-align: middle;line-height: 1.6;border-radius:
        4px;font-weight: 600;font-size: 12px;">
          Whitelabel
        </span>


        Submit verifications for a profile. Only the verifications provided are
        updated. `sourceOfFunds` is submitted here by all partners when
        required; other verification kinds are populated automatically when
        using the Sumsub share flow.
      parameters:
        - $ref: '#/components/parameters/AcceptHeaderV2'
        - name: profile
          in: path
          description: The ID of the profile
          required: true
          schema:
            $ref: '#/components/schemas/UUID'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              oneOf:
                - title: Personal
                  properties:
                    personal:
                      description: Verifications for an individual
                      $ref: '#/components/schemas/UpdatePersonalVerifications'
                - title: Corporate
                  properties:
                    corporate:
                      description: Verifications for a company
                      $ref: '#/components/schemas/UpdateCorporateVerifications'
      responses:
        '202':
          description: >
            Accepted


            The verification data has been received and will be processed by
            Monerium.
          content:
            application/json:
              schema:
                type: object
        '400':
          description: BAD REQUEST
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenPartnerError'
        '409':
          description: >
            Conflict


            This error occurs when the profile details have already been
            approved and need not be submitted again.
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                    format: int32
                    enum:
                      - 409
                  status:
                    type: string
                    enum:
                      - Conflict
                  message:
                    type: string
                    enum:
                      - >-
                        The profile details have already been approved and need
                        not be submitted again
      security:
        - BearerAuth: []
      tags:
        - profiles
      x-codeSamples:
        - lang: bash
          label: CLI
          source: >-
            curl -X PATCH
            'https://api.monerium.dev/profiles/30f730fd-e51f-11ed-9e13-cacb9390199c/verifications'
            \

            -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \

            -H "Accept: application/vnd.monerium.api-v2+json" \

            --data-raw '{
              "personal": [
                {
                  "kind": "sourceOfFunds",
                  "documents": [
                    {
                      "kind": "sourceOfFunds",
                      "fileId": "a1b2c3d4-0000-0000-0000-000000000001"
                    }
                  ]
                }
              ]
            }'
  /addresses:
    post:
      operationId: link-address
      summary: Link address
      description: >
        Links a blockchain address to Monerium by verifying ownership via a
        signature. Supports EOA signatures as well as Smart Contract Account
        (SCA/Safe) signatures via
        [ERC-1271](https://eips.ethereum.org/EIPS/eip-1271), both onchain and
        offchain.
      parameters:
        - $ref: '#/components/parameters/AcceptHeaderV2'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                profile:
                  description: Profile ID that owns the address.
                  $ref: '#/components/schemas/UUID'
                address:
                  $ref: '#/components/schemas/Address'
                chain:
                  description: >-
                    The blockchain network where the address is located. Note
                    that allowed values differ between sandbox and production
                    environments.
                  $ref: '#/components/schemas/Chain'
                message:
                  description: >-
                    Fixed message to be signed with the private key
                    corresponding to the given address.
                    </br></br><strong><code>I hereby declare that I am the
                    address owner.</code></strong>
                  type: string
                  example: I hereby declare that I am the address owner.
                signature:
                  oneOf:
                    - $ref: '#/components/schemas/SignatureEOA'
                      title: EOA address
                    - $ref: '#/components/schemas/SignatureSafeOnchain'
                      title: Safe onchain
                    - $ref: '#/components/schemas/SignatureSafeOffchain'
                      title: Safe offchain
              required:
                - address
                - message
                - chain
                - signature
      responses:
        '201':
          description: |
            **CREATED**

            Monerium was able to validate the signature and link the wallet.
          content:
            application/json:
              schema:
                type: object
        '202':
          description: >
            **ACCEPTED**


            The Monerium infrastructure will validate if the onchain signature
            has taken place and link the address.
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                    example: 202
                  status:
                    type: string
                    example: Accepted
        '400':
          description: BAD REQUEST
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                code: 400
                status: Bad Request
                message: Validation errors
                errors:
                  address: Address missing
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
      security:
        - BearerAuth: []
      tags:
        - addresses
      x-codeSamples:
        - lang: bash
          label: CLI
          source: |-
            curl -X POST 'https://api.monerium.dev/addresses' \
            -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
            -H "Accept: application/vnd.monerium.api-v2+json" \
            --data-raw '{
              "profile": "a78d8ff2-e51f-11ed-9e13-cacb9390199c",
              "address": "0x59cFC408d310697f9D3598e1BE75B0157a072407",
              "chain": "gnosis",
              "message": "I hereby declare that I am the address owner.",
              "signature": "0x5rc0b4cb4efbb577cb0c19d1cb23c7cc4912d2138b3267ee4799c88a68e203a5d568bec12f5da2b3a416f9bb03257b472a1605bf489bcdb805c2c029c212d3a5120505f52546da16217f630339cd332d6049f11cf15a1a82939663a58b02d129c40607c0c290ace726c89c35228b6485f5d3796d6c10df5b8a0de196092797bfe7e1f"
            }'
    get:
      operationId: addresses
      summary: Addresses
      description: >-
        List of addresses that have been connected. You can filter the addresses
        by the chain they are connected to.
      parameters:
        - $ref: '#/components/parameters/AcceptHeaderV2'
        - name: profile
          in: query
          description: >-
            Return addresses for a given profile ID. By default the caller
            profile ID is used.
          required: false
          schema:
            $ref: '#/components/schemas/UUID'
        - name: chain
          in: query
          description: Filter the list on the chain
          required: false
          schema:
            $ref: '#/components/schemas/Chain'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  addresses:
                    type: array
                    items:
                      $ref: '#/components/schemas/AddressObject'
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
      security:
        - BearerAuth: []
      tags:
        - addresses
      x-codeSamples:
        - lang: bash
          label: CLI
          source: >-
            curl
            https://api.monerium.dev/addresses?profile=a78d8ff2-e51f-11ed-9e13-cacb9390199c&chain=ethereum
            \

            -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \

            -H "Accept: application/vnd.monerium.api-v2+json"
  /addresses/{address}:
    get:
      operationId: address
      summary: Address
      description: >-
        Get details for a single address by using the address public key after
        the address has been successfully linked to Monerium.
      parameters:
        - $ref: '#/components/parameters/AcceptHeaderV2'
        - name: address
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/Address'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddressObject'
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
      security:
        - BearerAuth: []
      tags:
        - addresses
      x-codeSamples:
        - lang: bash
          label: CLI
          source: >-
            curl
            https://api.monerium.dev/addresses/0x59cFC408d310697f9D3598e1BE75B0157a072407
            \

            -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \

            -H "Accept: application/vnd.monerium.api-v2+json"
  /balances/{chain}/{address}:
    get:
      operationId: balances
      summary: Balances
      description: Retrieves the balance for an address on a given chain.
      parameters:
        - name: address
          in: path
          description: Address
          required: true
          schema:
            $ref: '#/components/schemas/Address'
        - name: chain
          in: path
          description: Chain name
          required: true
          schema:
            $ref: '#/components/schemas/Chain'
        - name: currency
          in: query
          description: >-
            Currency to return the balance for. If not provided `eur` is used.
            Can be used multiple times to get multiple currencies.
          required: false
          schema:
            $ref: '#/components/schemas/Currency'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Balances'
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
      security:
        - BearerAuth: []
      tags:
        - addresses
      x-codeSamples:
        - lang: bash
          label: curl
          source: >-
            curl
            https://api.monerium.dev/balances/ethereum/0x59cFC408d310697f9D3598e1BE75B0157a072407
            \

            -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
  /ibans:
    post:
      operationId: request-iban
      summary: Request IBAN
      description: >
        Create an IBAN for a specified address and chain. All incoming EUR
        payments will automatically be routed to the linked address on that
        chain. Any linked address can use this IBAN for outgoing payments.
      parameters:
        - $ref: '#/components/parameters/AcceptHeaderV2'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                address:
                  $ref: '#/components/schemas/Address'
                chain:
                  $ref: '#/components/schemas/Chain'
              required:
                - address
                - chain
      responses:
        '202':
          description: >
            **ACCEPTED**


            The Monerium infrastructure will provision the IBAN and connect it
            to the address. This process can take a few seconds.
          content:
            application/json:
              schema:
                type: object
        '304':
          description: >
            **Not modified**


            An IBAN already exists for the profile. Your application can [move
            the existing IBAN to the address](#operation/move-iban).
          content:
            application/json:
              schema:
                type: object
        '400':
          description: BAD REQUEST
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                code: 400
                status: Bad Request
                message: Validation errors
                errors:
                  iban: Address missing
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
      security:
        - BearerAuth: []
      tags:
        - ibans
      x-codeSamples:
        - lang: bash
          label: CLI
          source: |-
            curl -X POST 'https://api.monerium.dev/ibans' \
            -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
            -H "Accept: application/vnd.monerium.api-v2+json" \
            --data-raw '{
              "address": "0x59cFC408d310697f9D3598e1BE75B0157a072407",
              "chain": "gnosis"
            }'
    get:
      operationId: ibans
      summary: IBANs
      description: >-
        List of IBANs that have been created. You can filter by the address, or
        the chain they are connected to.
      parameters:
        - $ref: '#/components/parameters/AcceptHeaderV2'
        - name: profile
          in: query
          description: >-
            Return the list for the profile ID. By default the caller profile is
            used.
          required: false
          schema:
            $ref: '#/components/schemas/UUID'
        - name: chain
          in: query
          description: Filter the list on the chain
          required: false
          schema:
            $ref: '#/components/schemas/Chain'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  ibans:
                    type: array
                    items:
                      $ref: '#/components/schemas/IBANObject'
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
      security:
        - BearerAuth: []
      tags:
        - ibans
      x-codeSamples:
        - lang: bash
          label: CLI
          source: >-
            curl
            https://api.monerium.dev/ibans?profile=a78d8ff2-e51f-11ed-9e13-cacb9390199
            \

            -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \

            -H "Accept: application/vnd.monerium.api-v2+json"
  /ibans/{iban}:
    get:
      operationId: iban
      summary: IBAN
      description: Get details for a single IBAN.
      parameters:
        - $ref: '#/components/parameters/AcceptHeaderV2'
        - name: iban
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/IBAN'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IBANObject'
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
      security:
        - BearerAuth: []
      tags:
        - ibans
      x-codeSamples:
        - lang: bash
          label: CLI
          source: |-
            curl https://api.monerium.dev/ibans/EE73I9684012278810458214196 \
            -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
            -H "Accept: application/vnd.monerium.api-v2+json"
    patch:
      operationId: move-iban
      summary: Move IBAN
      description: >
        Move an existing IBAN to a specified address an chain. All incoming EUR
        payments will automatically be routed to the address on that chain.
      parameters:
        - $ref: '#/components/parameters/AcceptHeaderV2'
        - name: iban
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/IBAN'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                address:
                  $ref: '#/components/schemas/Address'
                chain:
                  $ref: '#/components/schemas/Chain'
              required:
                - address
                - chain
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
        '400':
          description: BAD REQUEST
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                code: 400
                status: Bad Request
                message: Validation errors
                errors:
                  iban: Address missing
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
      security:
        - BearerAuth: []
      tags:
        - ibans
      x-codeSamples:
        - lang: bash
          label: CLI
          source: >-
            curl -X PATCH
            'https://api.monerium.dev/ibans/EE73I9684012278810458214196' \

            -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \

            -H "Accept: application/vnd.monerium.api-v2+json" \

            --data-raw '{
              "address": "0x59cFC408d310697f9D3598e1BE75B0157a072407",
              "chain": "gnosis"
            }'
  /orders:
    post:
      operationId: post-orders
      summary: Place order
      description: >
        An order represents an instruction to transfer funds from one account to
        another.

        The transfer can occur within the blockchain ecosystem (cross-chain) or
        from a blockchain account to a traditional bank account via SEPA.


        An order requires a signature from the wallet owner to authorize the
        processing of the order.

        The wallet owner signs a specific message to prove ownership and consent
        for the transaction.


        Attaching a supporting document for amounts above 15,000 EUR is
        required. Supporting document can be an invoice or an agreement.
      parameters:
        - $ref: '#/components/parameters/AcceptHeaderV2'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewOrder'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
        '202':
          description: >
            **ACCEPTED**


            The order has been accepted and is pending signature confirmation
            for multi-signature wallets.

            The Monerium infrastructure will verify the onchain signature and
            process the order once confirmed.
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                    example: 202
                  status:
                    type: string
                    example: Accepted
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
      externalDocs:
        description: Read more about how to upload a file.
        url: /api#tag/files/operation/upload-file
      security:
        - BearerAuth: []
      tags:
        - orders
      x-codeSamples:
        - lang: bash
          label: CLI
          source: |-
            curl -X POST 'https://api.monerium.dev/orders' \
            -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
            --data-raw '{
              "address": "0x5731Ffc2747A25a8132A5d11768F95941Ae9c6ee",
              "currency": "eur",
              "chain": "ethereum",
              "kind": "redeem",
              "amount": "4",
              "counterpart": {
                "identifier": { "standard": "iban", "iban": "EE521273842688571285" },
                "details": {
                  "firstName": "Satoshi",
                  "lastName": "Nakamoto",
                  "country": "FR"
                }
              },
              "message": "Send EUR 4 to EE52...1285 at 2024-06-07T18:25:19.948Z",
              "signature": "0x5rc0b4cb4efbb577cb0c19d1cb23c7cc4912d2138b3267ee4799c88a68e203a5d568bec12f5da2b3a416f9bb03257b472a1605bf489bcdb805c2c029c212d3a5120505f52546da16217f630339cd332d6049f11cf15a1a82939663a58b02d129c40607c0c290ace726c89c35228b6485f5d3796d6c10df5b8a0de196092797bfe7e1f",
              "memo": "Powered by Monerium"
            }'
    get:
      operationId: orders
      summary: Orders
      description: |
        Retrieves all orders for the caller profile.
        Query parameters can be used to filter and sort the result.
      parameters:
        - $ref: '#/components/parameters/AcceptHeaderV2'
        - name: address
          in: query
          description: Get all orders belonging to a specific blockchain address.
          schema:
            example: '0x798728D5410aB4FB49d2C277A49baC5048aB43ca'
            $ref: '#/components/schemas/Address'
        - name: txHash
          in: query
          description: The blockchains transaction hash.
          schema:
            type: string
            example: '0x692ff12125b71c167b3ea90bddb3b28edd60941851cb0cdd852cc3b6d79311cd'
        - name: profile
          in: query
          description: >-
            The profile ID which the order belongs to. By default the caller
            profile ID is used.
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            $ref: '#/components/schemas/UUID'
        - name: memo
          in: query
          schema:
            $ref: '#/components/schemas/Memo'
        - name: state
          in: query
          description: >
            Get all orders in a particular state:


            - `pending`: The order is being processed (e.g., review,
            minting/burning tokens, or sending/receiving SEPA payment).

            - `processed`: The order has been completed successfully.

            - `rejected`: The order was rejected, possibly due to compliance
            reasons or insufficient funds.
          schema:
            type: string
            enum:
              - pending
              - processed
              - rejected
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  orders:
                    type: array
                    items:
                      $ref: '#/components/schemas/Order'
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
      security:
        - BearerAuth: []
      tags:
        - orders
      x-codeSamples:
        - lang: bash
          label: curl
          source: |-
            curl https://api.monerium.dev/orders \
            -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
            -H "Accept: application/vnd.monerium.api-v2+json"
  /orders/{orderId}:
    get:
      operationId: order
      summary: Order
      description: >
        Retrieve the details of an existing order. Supply the unique order ID
        from either an order creation or the order list, and Monerium will
        return the corresponding order information
      parameters:
        - $ref: '#/components/parameters/AcceptHeaderV2'
        - name: orderId
          in: path
          description: The ID of the order
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
      security:
        - BearerAuth: []
      tags:
        - orders
      x-codeSamples:
        - lang: bash
          label: curl
          source: >-
            curl
            https://api.monerium.dev/orders/b48f7ca4-e51f-11ed-9e13-cacb9390199c
            \

            -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \

            -H "Accept: application/vnd.monerium.api-v2+json"
  /files:
    post:
      operationId: upload-file
      summary: File upload
      description: Upload documents for KYC onboarding and order support.
      parameters: []
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  description: |
                    Path to the file.

                    Maximum length filename: **100**</br>
                    Maximum size: **5 MB**</br>
                    Allowed file types: **PDF**, **JPEG**</br>
                  type: string
                  example: doc.pdf
                  title: file
              required:
                - file
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    description: File ID
                    type: string
                    example: 3ebc51a8-044f-11ed-8b1f-4a76448b7b21
                  name:
                    description: File name
                    type: string
                    example: doc.pdf
                  type:
                    description: File type
                    type: string
                    example: application/pdf
                  size:
                    description: File size
                    type: integer
                    example: 595101
                  hash:
                    type: string
                    example: >-
                      f2d8e62b44c59079536910eeb595f91833874a44aafc42c73c80588d91e7796b
                  meta:
                    type: object
                    properties:
                      uploadedBy:
                        description: User ID of the uploader
                        type: string
                        example: 6d510620-f6c9-11ec-81c1-62a51ab3b761
                      createdAt:
                        type: string
                        format: date
                        example: '2024-07-15T15:03:11.990387Z'
                      updatedAt:
                        type: string
                        format: date
                        example: '2024-07-15T15:03:11.990387Z'
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
      security:
        - BearerAuth: []
      tags:
        - files
      x-codeSamples:
        - lang: bash
          label: CLI
          source: curl --form file='@doc.pdf' https://api.monerium.dev/files
  /tokens:
    get:
      operationId: tokens
      summary: Tokens
      description: >-
        Returns supported tokens with their tickers, decimals, and contract
        addresses per chain. For icons, integration examples, and supported
        standards, see the [Tokens](/tokens) section in the developer docs.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Tokens'
      security:
        - BearerAuth: []
      tags:
        - tokens
      x-codeSamples:
        - lang: bash
          label: CLI
          source: |-
            curl https://api.monerium.dev/tokens \
            -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
  /swap:
    post:
      operationId: create-swap-quote
      summary: Swap quote
      description: >
        Preview endpoint for getting a USDC/EURe swap quote. Currently available
        only in the sandbox environment on Arbitrum Sepolia. The API is subject
        to change before general availability; check the Swap guide before
        integrating or updating your implementation.


        Provide `takerAmount` to quote a sell amount, or `makerAmount` to quote
        a buy amount. Exactly one amount field is required.
      parameters:
        - $ref: '#/components/parameters/AcceptHeaderV2'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SwapQuoteRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SwapQuote'
        '400':
          description: BAD REQUEST
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
      security:
        - BearerAuth: []
      tags:
        - swap
      x-codeSamples:
        - lang: bash
          label: CLI
          source: |-
            curl -X POST 'https://api.monerium.dev/swap' \
            -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
            -H "Accept: application/vnd.monerium.api-v2+json" \
            --data-raw '{
              "takerToken": "0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d",
              "makerToken": "0x1DfA293078Cfb70c7AB85fa451b5A7687e50da3B",
              "takerAmount": "10.00"
            }'
  /swap/commit:
    post:
      operationId: commit-swap-quote
      summary: Commit swap quote
      description: >
        Preview endpoint for committing a swap quote. Monerium checks liquidity
        and balances, then returns a signed quote that can be executed on the
        settlement contract. The API is subject to change before general
        availability; check the Swap guide before integrating or updating your
        implementation.


        The signed quote is short-lived and can only be executed on the
        `chainId` returned in the response.
      parameters:
        - $ref: '#/components/parameters/AcceptHeaderV2'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SwapCommitQuoteRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SwapCommittedQuote'
        '400':
          description: BAD REQUEST
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
        '503':
          description: SERVICE UNAVAILABLE
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - BearerAuth: []
      tags:
        - swap
      x-codeSamples:
        - lang: bash
          label: CLI
          source: |-
            curl -X POST 'https://api.monerium.dev/swap/commit' \
            -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
            -H "Accept: application/vnd.monerium.api-v2+json" \
            --data-raw '{
              "chainId": 421614,
              "taker": "0x59cFC408d310697f9D3598e1BE75B0157a072407",
              "takerToken": "0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d",
              "makerToken": "0x1DfA293078Cfb70c7AB85fa451b5A7687e50da3B",
              "takerAmount": "10.00"
            }'
  /signatures:
    get:
      operationId: get-signatures
      summary: Get pending signatures
      description: >-
        Returns pending signatures for the authenticated user, filterable by
        address, chain, and kind (`order`, `linkAddress`).
      parameters:
        - $ref: '#/components/parameters/AcceptHeaderV2'
        - name: address
          in: query
          description: Filter by blockchain address
          required: false
          schema:
            $ref: '#/components/schemas/Address'
        - name: chain
          in: query
          description: Filter by blockchain network
          required: false
          schema:
            $ref: '#/components/schemas/Chain'
        - name: kind
          in: query
          description: Filter by signature request kind
          required: false
          schema:
            type: string
            enum:
              - linkAddress
              - order
        - name: profile
          in: query
          description: >-
            UUID of the profile (defaults to authenticated user's default
            profile)
          required: false
          schema:
            $ref: '#/components/schemas/UUID'
      responses:
        '200':
          description: Successful response with pending signatures
          headers:
            X-Total-Count:
              description: Total number of signatures returned
              schema:
                type: integer
          content:
            application/json:
              schema:
                type: object
                properties:
                  pending:
                    type: array
                    items:
                      $ref: '#/components/schemas/PendingSignature'
                  total:
                    description: Total number of pending signatures
                    type: integer
              examples:
                orderSignature:
                  summary: Order signature example
                  value:
                    pending:
                      - id: 550e8400-e29b-41d4-a716-446655440000
                        kind: order
                        chain: ethereum
                        address: '0x1234567890123456789012345678901234567890'
                        amount: '100.50'
                        counterpart:
                          identifier:
                            standard: iban
                            iban: GB33BUKB20201555555555
                          details:
                            name: John Doe
                        currency: eur
                        createdAt: '2024-01-15T10:30:00Z'
                    total: 1
                linkAddressSignature:
                  summary: Link address signature example
                  value:
                    pending:
                      - kind: linkAddress
                        chain: polygon
                        address: '0xabcdefabcdefabcdefabcdefabcdefabcdefabcd'
                        createdAt: '2024-01-15T09:15:00Z'
                    total: 1
                emptyResult:
                  summary: No pending signatures
                  value:
                    pending: []
                    total: 0
        '400':
          description: Bad request - invalid parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
        '404':
          description: Not found - profile or signatures not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - BearerAuth: []
      tags:
        - signatures
      x-codeSamples:
        - lang: bash
          label: CLI
          source: |-
            curl https://api.monerium.dev/signatures \
            -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
            -H "Accept: application/vnd.monerium.api-v2+json"
components:
  parameters:
    AcceptHeaderV2:
      name: Accept
      in: header
      required: true
      description: Accept header to specify API version 2
      schema:
        type: string
        example: application/vnd.monerium.api-v2+json
  schemas:
    Address:
      description: The public key of the blockchain account.
      type: string
      example: '0x59cFC408d310697f9D3598e1BE75B0157a072407'
      pattern: ^0x[0-9a-fA-F]{40}$
    Currency:
      description: >-
        Three-letter [ISO currency
        code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase.
      type: string
      enum:
        - eur
        - usd
        - gbp
        - isk
    BankAccount:
      description: Used for generic bank account details, when IBAN is not available.
      type: object
      properties:
        standard:
          description: >-
            The standard of the bank account. This is used to identify generic
            bank account.
          type: string
          example: account
          enum:
            - account
        accountNumber:
          description: The account number of the bank account.
          type: string
          example: '1234567890'
        address:
          description: Address of the bank account holder.
          type: string
          example: 1725 Slough Avenue in Scranton, PA
        bic:
          description: The BIC (Bank Identifier Code) of the bank.
          type: string
          example: DEUTDEDBFRA
      required:
        - standard
        - accountNumber
        - address
    Balances:
      type: object
      properties:
        address:
          $ref: '#/components/schemas/Address'
        chain:
          $ref: '#/components/schemas/Chain'
        balances:
          description: The amount owned of currency
          type: array
          items:
            type: object
            properties:
              currency:
                $ref: '#/components/schemas/Currency'
              amount:
                description: The amount of currency.
                type: string
                example: '123.45'
    Chain:
      example: ethereum
      oneOf:
        - title: Ethereum
          type: string
          enum:
            - ethereum
          description: Ethereum mainnet
        - title: Gnosis
          type: string
          enum:
            - gnosis
          description: Gnosis Chain
        - title: Polygon
          type: string
          enum:
            - polygon
          description: Polygon PoS
        - title: Arbitrum
          type: string
          enum:
            - arbitrum
          description: Arbitrum
        - title: Linea
          type: string
          enum:
            - linea
          description: Linea
        - title: Base
          type: string
          enum:
            - base
          description: Base
        - title: Noble
          type: string
          enum:
            - noble
          description: Noble
        - title: Sepolia
          type: string
          enum:
            - sepolia
          description: Sepolia testnet
        - title: Chiado
          type: string
          enum:
            - chiado
          description: Chiado Gnosis testnet
        - title: Amoy
          type: string
          enum:
            - amoy
          description: Amoy Polygon testnet
        - title: Arbitrum Sepolia
          type: string
          enum:
            - arbitrumsepolia
          description: Arbitrum Sepolia testnet
        - title: Linea Sepolia
          type: string
          enum:
            - lineasepolia
          description: Linea Sepolia testnet
        - title: Base Sepolia
          type: string
          enum:
            - basesepolia
          description: Base Sepolia testnet
        - title: Noble Grand
          type: string
          enum:
            - grand
          description: Noble Grand testnet
    ChainMultiSig:
      allOf:
        - $ref: '#/components/schemas/Chain'
    CountryCode:
      description: >-
        Two-letter country code [ISO 3166-1
        alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)
      type: string
      example: FR
      maxLength: 2
      minLength: 2
    IBAN:
      description: >-
        The IBAN is a unique identifier for a bank account across different
        countries and includes a two-letter country code, two check digits, and
        a number of alphanumeric characters. It may include spaces for
        readability but should be stored without spaces.
      type: string
      example: EE127310138155512606682602
      pattern: ^(?:[A-Z]{2}[0-9]{2}(?:\s?[0-9A-Z]{4}){1,7}\s?[0-9A-Z]{1,4})$
    Memo:
      description: >
        UTF-8 Payment reference / memo. Can be used as filter parameters when
        querying

        orders.
      type: string
      example: Powered by Monerium
      maxLength: 140
      minLength: 5
    ReferenceNumber:
      description: >
        UTF-8 Payment reference. Structured identifier for a transaction or
        order, typically used for automatic payment reconciliation
      type: string
      example: RF123456789
      maxLength: 35
      minLength: 0
    SignatureEOA:
      description: >-
        The signature hash of signing the `message` with the private key
        associated with the given address.
      type: string
      example: >-
        0x5rc0b4cb4efbb577cb0c19d1cb23c7cc4912d2138b3267ee4799c88a68e203a5d568bec12f5da2b3a416f9bb03257b472a1605bf489bcdb805c2c029c212d3a5120505f52546da16217f630339cd332d6049f11cf15a1a82939663a58b02d129c40607c0c290ace726c89c35228b6485f5d3796d6c10df5b8a0de196092797bfe7e1f
      pattern: ^0x[0-9a-fA-F]{130}$
    SignatureSafeOnchain:
      description: >-
        For Safe onchain signatures, set the value to `0x`. Monerium will verify
        the signature via [ERC-1271](https://eips.ethereum.org/EIPS/eip-1271)
        for up to 5 days.
      type: string
      example: >-
        0x5rc0b4cb4efbb577cb0c19d1cb23c7cc4912d2138b3267ee4799c88a68e203a5d568bec12f5da2b3a416f9bb03257b472a1605bf489bcdb805c2c029c212d3a5120505f52546da16217f630339cd332d6049f11cf15a1a82939663a58b02d129c40607c0c290ace726c89c35228b6485f5d3796d6c10df5b8a0de196092797bfe7e1f
      enum:
        - 0x
      pattern: ^0x$
    SignatureSafeOffchain:
      description: >-
        Safe [offchain
        signature](https://docs.safe.global/sdk/protocol-kit/guides/signatures/messages#off-chain-messages).
        Ensure the threshold of owner signatures is met before submitting.
        Verified via [ERC-1271](https://eips.ethereum.org/EIPS/eip-1271).
      type: string
      example: >-
        0x5rc0b4cb4efbb577cb0c19d1cb23c7cc4912d2138b3267ee4799c88a68e203a5d568bec12f5da2b3a416f9bb03257b472a1605bf489bcdb805c2c029c212d3a5120505f52546da16217f630339cd332d6049f11cf15a1a82939663a58b02d129c40607c0c290ace726c89c35228b6485f5d3796d6c10df5b8a0de196092797bfe7e1f
    AddressObject:
      type: object
      properties:
        profile:
          description: The profile id that owns the address
          $ref: '#/components/schemas/UUID'
        address:
          $ref: '#/components/schemas/Address'
        chains:
          description: list of chains that this address has been connected to
          type: array
          items:
            $ref: '#/components/schemas/Chain'
    IBANObject:
      type: object
      properties:
        iban:
          $ref: '#/components/schemas/IBAN'
        name:
          description: >-
            The name of the IBAN owner. This can be a corporate or an
            individual.
          type: string
          example: Jane Doe
        bic:
          description: Bank Identifier Code (BIC) of the bank associated with this IBAN.
          type: string
          example: EAPFESM2XXX
        profile:
          description: The profile id that owns the IBAN
          $ref: '#/components/schemas/UUID'
        address:
          description: The address that this IBAN is connected to
          $ref: '#/components/schemas/Address'
        chain:
          description: The chain that this IBAN is connected to
          $ref: '#/components/schemas/Chain'
    NewOrder:
      type: object
      properties:
        id:
          description: The unique identifier of the order.
          $ref: '#/components/schemas/UUID'
        address:
          description: The address to redeem from. Can be any Monerium linked address.
          $ref: '#/components/schemas/Address'
        currency:
          $ref: '#/components/schemas/Currency'
        chain:
          $ref: '#/components/schemas/Chain'
        kind:
          description: >-
            Identifier specifying the nature of the order. </br></br> Redeem
            order is when tokens are burned on blockchain and sent to bank.
          type: string
          enum:
            - redeem
        amount:
          description: >-
            The quantity of money sent, represented as a series of digits,
            possibly followed by a decimal point and up to two additional
            digits. The amount must be a non-negative value.
          type: string
          example: '1000'
        counterpart:
          $ref: '#/components/schemas/Counterpart'
        message:
          description: >-
            A string message that the wallet owner must sign to authorize the
            processing of the order. This signed message verifies the consent of
            the wallet owner, ensuring that the transaction can proceed securely
            and legitimately.
          oneOf:
            - title: IBAN
              description: >
                For outgoing SEPA payments, the message is composed as such:


                <code>Send \<CURRENCY\> \<AMOUNT\> to \<IBAN\> at
                \<TIMESTAMP\></code>

                </br>


                Where:


                * `CURRENCY`: The order currency, the three-letter [ISO currency
                code](https://www.iso.org/iso-4217-currency-codes.html), in
                uppercase.

                * `AMOUNT`: The order amount.

                * `IBAN`: The counterpart IBAN in either a) uppercase with no
                spaces or b) in shortened format

                * `TIMESTAMP`: the timestamp in
                [RFC3339](https://tools.ietf.org/html/rfc3339) format accurate
                to the minute. The timestamp must be within 5 minutes of the
                current time or any time in the future.


                While full IBAN length may vary, the shortened format is always
                11 characters, where the first four and last four characters are
                shown, the rest are replaced with three dots: `EE12...2602`.


                Example with full IBAN:


                <code>Send EUR 1.23 to EE127310138155512606682602 at
                2024-07-12T12:02:49Z</code>


                Example with shortened IBAN:


                <code>Send EUR 1.23 to EE12...2602 at
                2024-07-12T12:02:49Z</code>
              type: string
              example: Send EUR 1 to EE127310138155512606682602 at 2024-07-12T12:02:49Z
            - title: Cross-chain transaction
              description: >
                For Cross-chain transaction, the message is composed as such:


                <code>Send \<CURRENCY\> \<AMOUNT\> to \<ADDRESS\> on \<CHAIN\>
                at \<TIMESTAMP\></code>

                </br>


                Where:


                * `CURRENCY`: The order currency, the three-letter [ISO currency
                code](https://www.iso.org/iso-4217-currency-codes.html), in
                uppercase.

                * `AMOUNT`: The order amount.

                * `ADDRESS`: the recipient blockchain address
                `counterpart.identifier.address`.

                * `CHAIN`: the recipient blockchain
                `counterpart.identifier.chain`.

                * `TIMESTAMP`: the timestamp in
                [RFC3339](https://tools.ietf.org/html/rfc3339) format accurate
                to the minute. The timestamp must be within 5 minutes of the
                current time or any time in the future.


                Example:


                <code>Send EUR 1.23 to
                0x4B4c34f35b0Bb9Af56418FAdD4677ce45ADF7760 on ethereum at
                2024-07-12T12:02:49Z</code>
              type: string
              pattern: >-
                ^Send\s([A-Z]{3})\s(\d+(\.\d{1,2})?)\sto\s([A-Z]{2}\d{2}\s?([A-Z0-9]{4}\s?){1,7}[A-Z0-9]{1,4})\sat\s(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}Z)$
              example: Send EUR 1 to EE127310138155512606682602 at 2024-07-12T12:02:49Z
        signature:
          oneOf:
            - $ref: '#/components/schemas/SignatureEOA'
              title: EOA address
            - $ref: '#/components/schemas/SignatureSafeOnchain'
              title: Safe onchain
            - $ref: '#/components/schemas/SignatureSafeOffchain'
              title: Safe offchain
        memo:
          $ref: '#/components/schemas/Memo'
        referenceNumber:
          $ref: '#/components/schemas/ReferenceNumber'
        supportingDocumentId:
          description: >-
            File ID, required for orders with amount greater or equal to
            €15,000.
          example: 3ebc51a8-044f-11ed-8b1f-4a76448b7b21
          $ref: '#/components/schemas/UUID'
      required:
        - address
        - currency
        - chain
        - kind
        - amount
        - signature
        - message
        - counterpart
    Order:
      type: object
      properties:
        id:
          allOf:
            - $ref: '#/components/schemas/UUID'
            - description: The ID of the order.
              example: 8c0fd7b1-01da-11ed-89c1-52c47a86c354
        kind:
          description: >-
            Issue orders are created when payment is received and the token,
            e.g. EURe, is minted to the specified address and chain.

            Redeem orders are created for sending outgoing payments. The tokens,
            e.g. EURe, are burned from the specified address and chain and then
            sent to the Counterpart.
          type: string
          example: redeem
          enum:
            - issue
            - redeem
        profile:
          description: Unique identifier of the profile involved in the order.
          example: 312c5cc4-4b06-11ed-a6cf-bac9bf26c37c
          $ref: '#/components/schemas/UUID'
        address:
          example: '0x798728D5410aB4FB49d2C277A49baC5048aB43ca'
          $ref: '#/components/schemas/Address'
        chain:
          $ref: '#/components/schemas/Chain'
        currency:
          $ref: '#/components/schemas/Currency'
        amount:
          description: The order amount.
          type: string
          example: '999'
        counterpart:
          $ref: '#/components/schemas/CounterpartResponse'
        memo:
          $ref: '#/components/schemas/Memo'
        referenceNumber:
          $ref: '#/components/schemas/ReferenceNumber'
        state:
          description: >
            The state of the order:


            - `placed`: The order has been created but not yet processed.

            - `pending`: The order is awaiting fulfillment (e.g., review,
            minting/burning tokens, or sending/receiving SEPA payment).

            - `processed`: The order has been completed successfully.

            - `rejected`: The order was rejected, possibly due to compliance
            reasons or insufficient funds.
          type: string
          example: rejected
          enum:
            - placed
            - pending
            - processed
            - rejected
        meta:
          type: object
          properties:
            placedAt:
              description: >-
                When was the order placed. The timestamp in
                [RFC3339](https://tools.ietf.org/html/rfc3339) format. It
                includes the date, time to the second, and optional fractional
                seconds, followed by 'Z' to indicate UTC time.
              $ref: '#/components/schemas/TimeStamp'
            processedAt:
              description: >-
                When was the order processed. Only visible when the order has
                been processed. The timestamp in
                [RFC3339](https://tools.ietf.org/html/rfc3339) format. It
                includes the date, time to the second, and optional fractional
                seconds, followed by 'Z' to indicate UTC time.
              $ref: '#/components/schemas/TimeStamp'
            rejectedReason:
              description: >-
                Message stating why the order was rejected.  Only visible when
                the order has been rejected.
              type: string
              example: Declined due to insufficient funds.
            supportingDocumentId:
              description: The UUID of an File ID.
              type: string
              example: 3ebc51a8-044f-11ed-8b1f-4a76448b7b21
            txHashes:
              description: >-
                The blockchain transaction hashes for the mint or burn
                associated with this order. Only present once the order has been
                processed on-chain.
              type: array
              items:
                type: string
              example:
                - >-
                  0x692ff12125b71c167b3ea90bddb3b28edd60941851cb0cdd852cc3b6d79311cd
          required:
            - placedAt
      required:
        - id
        - kind
        - profile
        - address
        - chain
        - currency
        - amount
        - counterpart
        - memo
        - state
        - meta
      title: Order
    AccessToken:
      type: object
      properties:
        access_token:
          description: Bearer token used to authenticate API requests.
          type: string
        expires_in:
          description: The duration in seconds for which the access token is valid.
          type: integer
          example: 3600
        refresh_token:
          description: >-
            A token used to obtain a new access token after the current one
            expires.
          type: string
          example: cowYzCowQxGPUl4p15iwKA
        token_type:
          description: The type of token returned. In this case, it is always 'Bearer'.
          type: string
          example: Bearer
      example:
        access_token: EoWmpc2uSZar6h2bKgh
        expires_in: 3600
        refresh_token: cowYzCowQxGPUl4p15iwKA
        token_type: Bearer
    Profiles:
      type: array
      items:
        $ref: '#/components/schemas/ProfileSummary'
    ProfilePersonal:
      type: object
      properties:
        id:
          description: >-
            Unique identifier of the profile. The Profile ID is the main
            identifier used to represent ownership of other API resources
          type: string
          example: 4f079ef8-6d26-11eb-9bc8-acde48001122
        kind:
          type: string
          enum:
            - personal
        name:
          description: The Profile name. This can be a corporate or an individual.
          type: string
          example: Jane Doe
        state:
          $ref: '#/components/schemas/ProfileState'
        details:
          description: KYC details section with its current state.
          $ref: '#/components/schemas/ProfileSection'
        form:
          description: Additional data section used for risk calculations.
          $ref: '#/components/schemas/ProfileSection'
        verifications:
          description: Verifications for an individual
          $ref: '#/components/schemas/PersonalVerifications'
    ProfileCorporate:
      type: object
      properties:
        id:
          description: >-
            Unique identifier of the profile. The Profile ID is the main
            identifier used to represent ownership of other API resources
          type: string
          example: 4f079ef8-6d26-11eb-9bc8-acde48001122
        kind:
          type: string
          enum:
            - corporate
        name:
          description: The Profile name. This can be a corporate or an individual.
          type: string
          example: Jane Doe
        state:
          $ref: '#/components/schemas/ProfileState'
        details:
          description: KYC details section with its current state.
          $ref: '#/components/schemas/ProfileSection'
        form:
          description: Additional data section used for risk calculations.
          $ref: '#/components/schemas/ProfileSection'
        verifications:
          description: Verifications for a company
          $ref: '#/components/schemas/CorporateVerifications'
    Profile:
      oneOf:
        - $ref: '#/components/schemas/ProfilePersonal'
          title: Personal
        - $ref: '#/components/schemas/ProfileCorporate'
          title: Corporate
      title: Profile
    Tokens:
      type: array
      items:
        type: object
        properties:
          currency:
            $ref: '#/components/schemas/Currency'
          ticker:
            description: The traditional currency abbreviation.
            enum:
              - EUR
              - GBP
              - USD
              - ISK
          symbol:
            description: The official symbol of the token used in DeFi platforms.
            enum:
              - EURe
              - GBPe
              - USDe
              - ISKe
          chain:
            $ref: '#/components/schemas/Chain'
          address:
            description: The address of the token.
            type: string
            example: '0x905419e7a1f96a973ab8988ba19c84135c6f7122'
          decimals:
            description: Number of decimals used in the asset.
            type: string
      example:
        - currency: eur
          ticker: EUR
          symbol: EURe
          chain: ethereum
          address: '0x3231cb76718cdef2155fc47b5286d82e6eda273f'
          decimals: 18
        - currency: gbp
          ticker: GBP
          symbol: GBPe
          chain: ethereum
          address: '0x7ba92741bf2a568abc6f1d3413c58c6e0244f8fd'
          decimals: 18
        - currency: isk
          ticker: ISK
          symbol: ISKe
          chain: ethereum
          address: '0xc642549743a93674cf38d6431f75d6443f88e3e2'
          decimals: 18
        - currency: usd
          ticker: USD
          symbol: USDe
          chain: ethereum
          address: '0xbc5142e0cc5eb16b47c63b0f033d4c2480853a52'
          decimals: 18
        - currency: eur
          ticker: EUR
          symbol: EURe
          chain: polygon
          address: '0x18ec0A6E18E5bc3784fDd3a3634b31245ab704F6'
          decimals: 18
        - currency: gbp
          ticker: GBP
          symbol: GBPe
          chain: polygon
          address: '0x75792CBDb361d80ba89271a079EfeE62c29FA324'
          decimals: 18
        - currency: isk
          ticker: ISK
          symbol: ISKe
          chain: polygon
          address: '0xf1bBf27A9D659D326efBfa5D284EBaeFB803983D'
          decimals: 18
        - currency: usd
          ticker: USD
          symbol: USDe
          chain: polygon
          address: '0x64E97c1a6535afD4a313eF46F88A64a34250B719'
          decimals: 18
    SwapAmount:
      description: >-
        Decimal token amount as a string. The API accepts decimal strings, while
        contract calls use raw token units.
      type: string
      example: '10.00'
    SwapQuoteRequest:
      type: object
      properties:
        takerToken:
          description: Token the taker sells.
          $ref: '#/components/schemas/Address'
        makerToken:
          description: Token the taker receives.
          $ref: '#/components/schemas/Address'
        takerAmount:
          description: >-
            Amount of taker token to sell. Mutually exclusive with
            `makerAmount`.
          $ref: '#/components/schemas/SwapAmount'
        makerAmount:
          description: Amount of maker token to buy. Mutually exclusive with `takerAmount`.
          $ref: '#/components/schemas/SwapAmount'
      oneOf:
        - required:
            - takerAmount
        - required:
            - makerAmount
      required:
        - takerToken
        - makerToken
    SwapCommitQuoteRequest:
      allOf:
        - $ref: '#/components/schemas/SwapQuoteRequest'
        - type: object
          properties:
            chainId:
              description: EVM chain ID where the quote will be executed.
              type: integer
              format: int64
              example: 421614
            taker:
              description: Wallet address that will execute the settlement contract call.
              $ref: '#/components/schemas/Address'
          required:
            - chainId
            - taker
    SwapQuote:
      type: object
      properties:
        takerToken:
          description: Token the taker sells.
          $ref: '#/components/schemas/Address'
        makerToken:
          description: Token the taker receives.
          $ref: '#/components/schemas/Address'
        takerAmount:
          $ref: '#/components/schemas/SwapAmount'
        makerAmount:
          $ref: '#/components/schemas/SwapAmount'
        price:
          description: Maker amount divided by taker amount.
          $ref: '#/components/schemas/SwapAmount'
        priceImpact:
          description: Price impact percentage.
          type: string
          example: '0.12'
        takerAmountUsd:
          description: Estimated USD value of the taker amount.
          $ref: '#/components/schemas/SwapAmount'
        makerAmountUsd:
          description: Estimated USD value of the maker amount.
          $ref: '#/components/schemas/SwapAmount'
      required:
        - takerToken
        - makerToken
        - takerAmount
        - makerAmount
        - price
        - priceImpact
        - takerAmountUsd
        - makerAmountUsd
    SwapSignature:
      description: >-
        Monerium signature used by the settlement contract to verify the
        committed quote.
      type: string
      example: >-
        0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1b
      pattern: ^0x[0-9a-fA-F]{130}$
    SwapCommittedQuote:
      allOf:
        - $ref: '#/components/schemas/SwapQuote'
        - type: object
          properties:
            id:
              description: >-
                Quote ID. Convert the UUID to `bytes16` by removing hyphens
                before calling the settlement contract.
              type: string
              format: uuid
              example: b48f7ca4-e51f-11ed-9e13-cacb9390199c
            chainId:
              description: EVM chain ID where the quote was signed.
              type: integer
              format: int64
              example: 421614
            nonce:
              description: Settlement nonce. Can only be used once.
              type: integer
              format: int64
              example: 42
            expiry:
              description: Unix timestamp when the signed quote expires.
              type: integer
              format: int64
              example: 1779175954
            signature:
              $ref: '#/components/schemas/SwapSignature'
          required:
            - id
            - chainId
            - nonce
            - expiry
            - signature
    Counterpart:
      description: >-
        The counterpart represents the other party involved in a financial
        transaction, such as the recipient of a payment or the payer. The
        counterpart can be either an individual or a corporate. It includes
        identifying information such as account details, name, and country.
      type: object
      properties:
        identifier:
          description: Counterpart account information.
          oneOf:
            - title: IBAN
              type: object
              required:
                - standard
                - iban
              properties:
                standard:
                  description: >-
                    An International Bank Account Number (IBAN) is used to send
                    and receive payments from bank accounts. The IBAN may
                    contain spaces.
                  type: string
                  example: iban
                  enum:
                    - iban
                iban:
                  $ref: '#/components/schemas/IBAN'
            - title: Cross-chain
              type: object
              required:
                - standard
                - address
                - chain
              properties:
                standard:
                  description: >-
                    Used to send cross chain transaction from one wallet to
                    another on a different blockchain.
                  type: string
                  example: chain
                  enum:
                    - chain
                address:
                  $ref: '#/components/schemas/Address'
                chain:
                  $ref: '#/components/schemas/Chain'
        details:
          description: >-
            Details about the counterpart that can be either a corporate or an
            individual.
          oneOf:
            - title: Individual
              type: object
              description: The counterpart is an individual.
              required:
                - firstName
                - lastName
                - country
              properties:
                firstName:
                  description: >-
                    The first name of the individual. The middle name(s) can
                    also be included here.
                  type: string
                  example: Satoshi
                  minLength: 2
                lastName:
                  description: The last name of the individual.
                  type: string
                  example: Nakamoto
                  minLength: 2
                country:
                  description: >-
                    The two-letter country code (ISO 3166-1 alpha-2)
                    representing the country where the counterpart lives. For
                    more information, refer to the [ISO 3166-1 alpha-2
                    standard](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).
                  $ref: '#/components/schemas/CountryCode'
            - title: Corporation
              type: object
              description: >-
                Only one naming method is required. Either companyName or
                firstName and lastName
              required:
                - companyName
                - country
              properties:
                companyName:
                  description: Used for outgoing payments when the recipient is a company
                  type: string
                  example: Monerium
                country:
                  description: >-
                    The two-letter country code (ISO 3166-1 alpha-2)
                    representing the country where the counterpart is located.
                    For more information, refer to the [ISO 3166-1 alpha-2
                    standard](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).
                  $ref: '#/components/schemas/CountryCode'
      required:
        - identifier
        - details
    CounterpartResponse:
      description: >-
        The counterpart represents the other party involved in a financial
        transaction, such as the recipient of a payment or the payer. The
        counterpart can be either an individual or a corporate. It includes
        identifying information such as account details, name, and country.
      type: object
      properties:
        identifier:
          description: Counterpart account information.
          oneOf:
            - title: IBAN
              type: object
              required:
                - standard
                - iban
              properties:
                standard:
                  description: >-
                    An International Bank Account Number (IBAN) is used to send
                    and receive payments from bank accounts. The IBAN may
                    contain spaces.
                  type: string
                  example: iban
                  enum:
                    - iban
                iban:
                  $ref: '#/components/schemas/IBAN'
            - title: Cross-chain
              type: object
              required:
                - standard
                - address
                - chain
              properties:
                standard:
                  description: >-
                    Used to send cross chain transaction from one wallet to
                    another on a different blockchain.
                  type: string
                  example: chain
                  enum:
                    - chain
                address:
                  $ref: '#/components/schemas/Address'
                chain:
                  $ref: '#/components/schemas/Chain'
            - $ref: '#/components/schemas/BankAccount'
              title: Bank Account
        details:
          description: Details about the counterpart. Empty for cross-chain orders.
          oneOf:
            - title: Redeem orders for individuals
              type: object
              description: The counterpart is an individual.
              required:
                - firstName
                - lastName
                - country
              properties:
                firstName:
                  description: >-
                    The first name of the individual. The middle name(s) can
                    also be included here.
                  type: string
                  example: Satoshi
                  minLength: 2
                lastName:
                  description: The last name of the individual.
                  type: string
                  example: Nakamoto
                  minLength: 2
                country:
                  description: >-
                    The two-letter country code (ISO 3166-1 alpha-2)
                    representing the country where the counterpart lives. For
                    more information, refer to the [ISO 3166-1 alpha-2
                    standard](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).
                  $ref: '#/components/schemas/CountryCode'
            - title: Redeem orders for corporations
              type: object
              required:
                - companyName
                - country
              properties:
                companyName:
                  description: Used for outgoing payments when the recipient is a company
                  type: string
                  example: Monerium
                country:
                  description: >-
                    The two-letter country code (ISO 3166-1 alpha-2)
                    representing the country where the counterpart is located.
                    For more information, refer to the [ISO 3166-1 alpha-2
                    standard](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).
                  $ref: '#/components/schemas/CountryCode'
            - title: Issue orders
              type: object
              required:
                - name
              properties:
                name:
                  description: The sender name. This can be a corporate or an individual.
                  type: string
                  example: Monerium
      required:
        - details
        - identifier
    Error:
      description: The generic Error object structure for API error responses.
      type: object
      properties:
        code:
          description: The HTTP error code associated with the error.
          type: integer
          format: int32
        status:
          description: A brief status message corresponding to the error code.
          type: string
        message:
          description: A detailed message explaining the error.
          type: string
        errors:
          type: object
          additionalProperties:
            type: string
      required:
        - code
        - status
        - message
    UnauthorizedError:
      description: Returned when the request is not authenticated.
      type: object
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            code:
              description: The error code for unauthorized access.
              type: integer
              format: int32
              enum:
                - 401
            status:
              description: The status message for unauthorized access.
              type: string
              enum:
                - Unauthorized
            message:
              description: A short message about the error.
              type: string
              enum:
                - Not authenticated
    ForbiddenError:
      description: >-
        Returned when the authenticated user does not have permission to access
        the requested resource.
      type: object
      properties:
        code:
          description: The error code for forbidden access.
          type: integer
          format: int32
          enum:
            - 403
        status:
          description: The status for forbidden access.
          type: string
          enum:
            - Forbidden
        message:
          description: A short message about the error.
          type: string
          example: User user@example.com is forbidden
    ForbiddenPartnerError:
      description: >-
        Returned when the application does not have the required partner
        privileges for this endpoint. Contact the Monerium team to request
        access.
      type: object
      properties:
        code:
          description: The error code for forbidden access.
          type: integer
          format: int32
          enum:
            - 403
        status:
          description: The status for forbidden access.
          type: string
          enum:
            - Forbidden
        message:
          description: A short message about the error.
          type: string
          example: >-
            Application from partner partner@example.com is not allowed to
            submit KYC data
    UUID:
      type: string
      format: UUID
      example: a78d8ff2-e51f-11ed-9e13-cacb9390199c
      pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
    AuthClientID:
      description: The Authorization Code Flow client ID of your application.
      type: string
      $ref: '#/components/schemas/UUID'
    CredentialsClientID:
      description: The Client Credentials client ID of your application.
      type: string
      $ref: '#/components/schemas/UUID'
    PersonalDetails:
      description: >-
        Personal information such as name, address, nationality, and date of
        birth.
      type: object
      properties:
        firstName:
          description: First name
          type: string
          example: Jane
        lastName:
          description: Last name
          type: string
          example: Doe
        address:
          description: Street and building number where the person lives.
          type: string
          example: Pennylane 123
        postalCode:
          description: Postal code where the person lives.
          type: string
          example: '7890'
        city:
          description: City where the person lives.
          type: string
          example: Liverpool
        country:
          description: >-
            Two-letter country code [ISO 3166-1
            alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) where the
            person lives
          example: GB
          $ref: '#/components/schemas/CountryCode'
        countryState:
          description: State/County where the person lives.
          type: string
          example: Merseyside
        nationality:
          description: >-
            Two-letter country code [ISO 3166-1
            alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) for the
            person's nationality.
          example: GB
          $ref: '#/components/schemas/CountryCode'
        birthday:
          description: The person's date of birth in `YYYY-MM-DD` format.
          type: string
          format: date
          example: '1990-05-15'
          pattern: ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|1\d|2\d|3[01])$
      required:
        - firstName
        - lastName
        - address
        - postalCode
        - city
        - country
        - nationality
        - birthday
    PersonalForm:
      description: >-
        Personal form capturing occupation, profession, fund origins, and
        financial information for risk assessment.
      type: object
      properties:
        occupation:
          description: >-
            The occupation code representing the individual's current employment
            status.
          type: string
          example: OCCUPATION_EMPLOYED
          enum:
            - OCCUPATION_STUDENT
            - OCCUPATION_EMPLOYED
            - OCCUPATION_SELF_EMPLOYED
            - OCCUPATION_UNEMPLOYED
            - OCCUPATION_RETIRED
        profession:
          description: >-
            The profession code representing the individual's professional
            field.
          type: string
          example: PROFESSION_ACCOUNTANCY
          enum:
            - PROFESSION_ACCOUNTANCY
            - PROFESSION_ADMINISTRATIVE
            - PROFESSION_AGRICULTURE
            - PROFESSION_ARTS_ENTERTAINMENT_MEDIA
            - PROFESSION_BROKER_DEALER
            - PROFESSION_CATERING_HOSPITALITY_TOURISM
            - PROFESSION_CHARITY
            - PROFESSION_CONSTRUCTION_REAL_ESTATE
            - PROFESSION_DEALER_HIGH_VALUE_GOODS
            - PROFESSION_DEALER_PRECIOUS_METALS
            - PROFESSION_EDUCATION
            - PROFESSION_EMERGENCY_SERVICES
            - PROFESSION_EXTRACTIVE_INDUSTRY
            - PROFESSION_FINANCIAL_SERVICES_BANKING
            - PROFESSION_FINANCIAL_SERVICES_INSURANCE
            - PROFESSION_FINANCIAL_SERVICES_OTHER
            - PROFESSION_FINANCIAL_SERVICES_PRIVATE_BANKING
            - PROFESSION_GAMBLING
            - PROFESSION_GOVERNMENT
            - PROFESSION_HEALTH_CARE
            - PROFESSION_INFORMATION_TECHNOLOGY
            - PROFESSION_LEGAL
            - PROFESSION_MANUFACTURING
            - PROFESSION_MARKETING
            - PROFESSION_MILITARY
            - PROFESSION_MONEY_SERVICE_BUSINESS
            - PROFESSION_PENSIONER
            - PROFESSION_PUBLIC_PROCUREMENT
            - PROFESSION_RETAIL_SALES
        fundOrigin:
          description: The code representing the origins of the individual's funds.
          type: string
          example: FUND_ORIGIN_SALARY
          enum:
            - FUND_ORIGIN_SALARY
            - FUND_ORIGIN_DIVIDENDS
            - FUND_ORIGIN_INHERITANCE
            - FUND_ORIGIN_SAVINGS
            - FUND_ORIGIN_INVESTMENT
            - FUND_ORIGIN_GIFT
            - FUND_ORIGIN_MINING
            - FUND_ORIGIN_REAL_ESTATE
            - FUND_ORIGIN_LOAN
        annualIncome:
          description: The code representing the individual's annual income range.
          type: string
          example: ANNUAL_INCOME_UNDER_10K
          enum:
            - ANNUAL_INCOME_UNDER_10K
            - ANNUAL_INCOME_FROM_10K_TO_50K
            - ANNUAL_INCOME_FROM_50K_TO_150K
            - ANNUAL_INCOME_FROM_150K_TO_300K
            - ANNUAL_INCOME_MORE_THAN_300K
        monthlyTurnover:
          description: The code representing the individual's monthly turnover range.
          type: string
          example: TURNOVER_UNDER_10K
          enum:
            - TURNOVER_UNDER_10K
            - TURNOVER_10K_TO_50K
            - TURNOVER_50K_TO_150K
            - TURNOVER_150K_TO_500K
            - TURNOVER_MORE_THAN_500K
        monthlyTransactionCount:
          description: >-
            The code representing the number of transactions the individual
            makes each month.
          type: string
          example: TRANSACTION_COUNT_UNDER_5
          enum:
            - TRANSACTION_COUNT_UNDER_5
            - TRANSACTION_COUNT_5_TO_50
            - TRANSACTION_COUNT_50_TO_100
            - TRANSACTION_COUNT_100_TO_200
            - TRANSACTION_COUNT_MORE_THAN_200
        activities:
          description: List of codes representing the individual's financial activities.
          type: array
          items:
            type: string
            enum:
              - ACTIVITY_COMMERCE_SELLING
              - ACTIVITY_COMMERCE_BUYING
              - ACTIVITY_INVESTING_CRYPTO
              - ACTIVITY_OTHER
        activityOther:
          description: >-
            A description of the other activity if the code `ACTIVITY_OTHER` is
            chosen.
          type: string
          example: farming airdrops
        publicFunction:
          description: >-
            Indicates whether the individual holds a politically exposed person
            (PEP) status.
          type: boolean
        fundOwner:
          description: Indicates whether the individual is the owner of the funds.
          type: boolean
        usCitizen:
          description: Indicates whether the individual is a United States citizen.
          type: boolean
        usTaxPerson:
          description: >-
            Indicates whether the individual is subject to US tax obligations
            (e.g. holds a US tax identification number or is a US resident for
            tax purposes).
          type: boolean
        tin:
          description: >-
            Tax Identification Number (TIN) assigned by the individual's tax
            authority. Format varies by country (e.g. SSN in the US, NI number
            in the UK).
          type: string
          example: 123-45-6789
        taxResidenceCountry:
          description: >-
            Two-letter country code [ISO 3166-1
            alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) for the
            tax residency.
          example: GB
          $ref: '#/components/schemas/CountryCode'
      required:
        - occupation
        - profession
        - fundOrigin
        - annualIncome
        - monthlyTurnover
        - monthlyTransactionCount
        - activities
        - publicFunction
        - fundOwner
        - usCitizen
        - usTaxPerson
        - tin
        - taxResidenceCountry
    PersonalVerifications:
      description: >-
        A list of verifications for personal onboarding. Available kinds are
        `sourceOfFunds` (all partners), and `idDocument`, `facialSimilarity`,
        `proofOfResidency` (KYC reliance model only).
      type: array
      items:
        type: object
        properties:
          kind:
            description: The type of the verification.
            type: string
            enum:
              - idDocument
              - facialSimilarity
              - proofOfResidency
              - sourceOfFunds
          state:
            $ref: '#/components/schemas/SectionState'
        required:
          - kind
          - state
    CorporateDetails:
      description: >
        Company information such as name, registration number, address, and
        details of representatives, final beneficiaries, and directors.
      type: object
      properties:
        name:
          description: Name of the company.
          type: string
          example: Jane Doe's things
        registrationNumber:
          description: The company's registration number.
          type: string
          example: 123456
        registrationDate:
          description: The company's registration date.
          type: string
          format: date
          example: '2022-02-01'
          pattern: ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|1\d|2\d|3[01])$
        vatNumber:
          description: The company's VAT number.
          type: string
          example: 1234
        website:
          description: The company's website.
          type: string
          example: https://janedoe.com/
        address:
          description: Street and building number where the corporate is located.
          type: string
          example: Pennylane 123
        postalCode:
          description: Postal code where the corporate is located.
          type: string
          example: '7890'
        city:
          description: City where the corporate is located.
          type: string
          example: Liverpool
        country:
          description: >-
            Two-letter country code [ISO 3166-1
            alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) where the
            corporate is located
          example: GB
          $ref: '#/components/schemas/CountryCode'
        countryState:
          description: State/County where the corporate is located.
          type: string
          example: Merseyside
        representatives:
          description: >-
            List of individuals representing the company and authorized to act
            on its behalf.
          type: array
          items:
            type: object
            required:
              - idDocument
            properties:
              idDocument:
                $ref: '#/components/schemas/IdDocument'
            allOf:
              - $ref: '#/components/schemas/PersonalDetails'
        finalBeneficiaries:
          description: List of beneficial owner that owns 25% or more in a company.
          type: array
          items:
            type: object
            required:
              - ownershipPercentage
            properties:
              ownershipPercentage:
                description: Ownership in % that is between 25% and 100%.
                type: string
                format: number
                example: 25
                maximum: 100
                minimum: 25
                pattern: >-
                  ^(?:25(?:\.0{1,2})?|2[6-9](?:\.\d{1,2})?|[3-9]\d(?:\.\d{1,2})?|100(?:\.0{1,2})?)$
            allOf:
              - $ref: '#/components/schemas/PersonalDetails'
        directors:
          description: >-
            List of Individual who has powers to legally bind the company (power
            of procuration).
          type: array
          items:
            type: object
            allOf:
              - $ref: '#/components/schemas/PersonalDetails'
      required:
        - name
        - registrationNumber
        - address
        - postalCode
        - city
        - country
        - countryState
        - representatives
        - finalBeneficiaries
        - directors
    CorporateForm:
      description: >-
        Corporate form capturing service description, legal form, purpose,
        activity, fund origins, and financial information for risk assessment.
      type: object
      properties:
        service:
          description: A brief description of the company's services.
          type: string
        legalForm:
          description: The legal form of the company.
          type: string
          example: LEGAL_FORM_PRIVATE_LIMITED
          enum:
            - LEGAL_FORM_PUBLIC_LIMITED
            - LEGAL_FORM_PRIVATE_LIMITED
            - LEGAL_FORM_PARTNERSHIPS
            - LEGAL_FORM_SOLE_TRADERS_PROPRIETORSHIPS
            - LEGAL_FORM_PUBLIC_AUTHORITIES
            - LEGAL_FORM_NON_PROFIT
            - LEGAL_FORM_BRANCHES
            - LEGAL_FORM_OTHER
        purpose:
          description: The code representing the primary purpose of the company.
          type: string
          example: PURPOSE_COLLECTING_PAYMENTS
          enum:
            - PURPOSE_COLLECTING_PAYMENTS
            - PURPOSE_PAYING_FOR_GOODS
            - PURPOSE_BUY_SELL_CRYPTO_CURRENCIES
            - PURPOSE_ENGAGE_IN_DEFI
            - PURPOSE_OTHER
        activity:
          description: The code representing the company's main activity.
          type: string
          example: ACTIVITY_ECOMMERCE
          enum:
            - ACTIVITY_ACCOMMODATION_FOOD_TRAVEL
            - ACTIVITY_ACCOUNTING_LEGAL_CONSULTANCY
            - ACTIVITY_ADULT_ENTERTAINMENT
            - ACTIVITY_ADVERTISING
            - ACTIVITY_AGRICULTURE
            - ACTIVITY_ARTS_ENTERTAINMENT
            - ACTIVITY_CHARITY
            - ACTIVITY_CONSTRUCTION
            - ACTIVITY_DEALER_HIGH_VALUE_GOODS
            - ACTIVITY_ECOMMERCE
            - ACTIVITY_EDUCATION
            - ACTIVITY_EXTRACTIVE_INDUSTRY
            - ACTIVITY_GAMBLING
            - ACTIVITY_HEALTH_SERVICES
            - ACTIVITY_MANUFACTURING
            - ACTIVITY_MARKETPLACE
            - ACTIVITY_MEDIA
            - ACTIVITY_MULTI_LEVEL_MARKETING
            - ACTIVITY_PERSONAL_INVESTMENT
            - ACTIVITY_PUBLIC_SECTOR
            - ACTIVITY_REAL_ESTATE
            - ACTIVITY_RETAIL
            - ACTIVITY_SOCIAL_WORK
            - ACTIVITY_SOFTWARE_TECHNOLOGY
            - ACTIVITY_TELECOM
            - ACTIVITY_TRANSPORTATION
            - ACTIVITY_UTILITIES
            - ACTIVITY_CRYPTO_SERVICES
            - ACTIVITY_FINANCIAL_INSTITUTION
            - ACTIVITY_OTHER
        fundOrigin:
          description: The code representing the origins of the company's funds.
          type: string
          example: FUND_ORIGIN_REVENUE
          enum:
            - FUND_ORIGIN_REVENUE
            - FUND_ORIGIN_PROFIT_DIVIDENDS
            - FUND_ORIGIN_LOAN
            - FUND_ORIGIN_INVESTMENTS
            - FUND_ORIGIN_CUSTOMER_FUNDS
            - FUND_ORIGIN_THIRD_PARTIES_FUNDS
        monthlyTurnover:
          description: The code representing the company's monthly turnover range.
          type: string
          example: TURNOVER_UNDER_100K
          enum:
            - TURNOVER_UNDER_100K
            - TURNOVER_100K_TO_250K
            - TURNOVER_MORE_THAN_250K
        monthlyTransactionCount:
          description: >-
            The code representing the number of transactions the company
            typically makes each month.
          type: string
          example: TRANSACTION_COUNT_UNDER_100
          enum:
            - TRANSACTION_COUNT_UNDER_100
            - TRANSACTION_COUNT_100_TO_250
            - TRANSACTION_COUNT_MORE_THAN_250
      required:
        - service
        - purpose
        - activity
        - fundOrigin
        - monthlyTurnover
        - monthlyTransactionCount
    CorporateVerifications:
      description: A list of verifications required for corporate onboarding.
      type: array
      items:
        type: object
        properties:
          kind:
            type: string
            enum:
              - sourceOfFunds
              - corporateName
              - corporateAddress
              - registrationNumber
              - dateOfRegistration
              - beneficialOwnership
              - powerOfAttorney
          state:
            $ref: '#/components/schemas/SectionState'
        required:
          - kind
          - state
    IdDocument:
      description: Details of the ID document used to verify the person's identity.
      type: object
      properties:
        number:
          description: The document number.
          type: string
          example: A1234566788
        kind:
          description: >-
            The type of ID document. Must verify the person's name, birthday,
            and nationality.
          type: string
          example: passport
          enum:
            - passport
            - nationalIdentityCard
      required:
        - number
        - kind
    SectionState:
      description: >
        The state of a profile section:


        * `incomplete`: The partner can still submit or update this section.

        * `pending`: All required information has been provided; awaiting
        review.

        * `approved`: The section has been approved.

        * `rejected`: Final rejection; no resubmission possible.
      type: string
      example: incomplete
      enum:
        - incomplete
        - pending
        - approved
        - rejected
    ProfileSection:
      description: A profile section with its current state.
      type: object
      properties:
        state:
          $ref: '#/components/schemas/SectionState'
    ProfileState:
      description: >
        The state of the profile lifecycle:


        * `created`: The profile has been created but no data has been submitted
        yet.

        * `incomplete`: One or more sections still require information. The
        partner can submit or update data.

        * `pending`: All required information has been provided and the profile
        is awaiting review. Further submissions are blocked until the state
        transitions to `approved`, `rejected`, or back to `incomplete`.

        * `approved`: The profile is active and all Monerium services are
        available.

        * `rejected`: Final rejection — the applicant details did not meet
        compliance requirements.
      type: string
      example: incomplete
      enum:
        - created
        - incomplete
        - pending
        - approved
        - rejected
    ProfileKind:
      description: String identifier specifying the type of the profile.
      type: string
      example: personal
      enum:
        - corporate
        - personal
    ProfileSummary:
      type: object
      properties:
        id:
          description: >-
            Unique identifier of the profile. The Profile ID is the main
            identifier used to represent ownership of other API resources.
          example: 4f079ef8-6d26-11eb-9bc8-acde48001122
          $ref: '#/components/schemas/UUID'
        kind:
          description: String identifier specifying the type of the profile.
          type: string
          example: corporate
          enum:
            - corporate
            - personal
        name:
          description: The Profile name. This can be a corporate or an individual.
          type: string
          example: user@example.com
        state:
          $ref: '#/components/schemas/ProfileState'
    TimeStamp:
      description: >-
        The timestamp in [RFC3339](https://tools.ietf.org/html/rfc3339) format.
        It includes the date, time to the second, and optional fractional
        seconds, followed by 'Z' to indicate UTC time.
      type: string
      format: date-time
      example: '2024-07-29T12:21:58.777884Z'
      pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z$
    UserContext:
      type: object
      properties:
        userId:
          description: Unique identifier of the User.
          $ref: '#/components/schemas/UUID'
        email:
          description: An email address associated with the account.
          type: string
          format: email
          example: user@example.com
        name:
          description: The user name or alias. You can treat this as metadata.
          type: string
          example: user@example.com
        roles:
          description: List of Role
          type: array
          items:
            type: string
            enum:
              - admin
          default: []
        auth:
          description: Information about how the user was authenticated.
          type: object
          properties:
            method:
              description: The authentication method.
              type: string
              example: password
              enum:
                - password
                - resource
                - jwt
                - apikey
                - bearer
            subject:
              description: >-
                Identifier used during the authentication. The identifier used
                changes with the authentication method. When authenticated as a
                partner, the partnerID will be used. When using oauth, the
                client_id will be used.
              type: string
              example: user@example.com
            verified:
              description: Boolean set to true after email address confirmation.
              type: boolean
              example: true
        defaultProfile:
          description: >-
            Unique identifier of the default profile. The default profile allows
            the API consumer to use the simpler API endpoints omitting the
            profile ID from the structure.
          example: 4f079ef8-6d26-11eb-9bc8-acde48001122
          $ref: '#/components/schemas/UUID'
        profiles:
          description: >-
            List containing information about every profiles accessible to the
            User.
          type: array
          items:
            $ref: '#/components/schemas/ProfileSummary'
    WebhookSubscription:
      type: object
      properties:
        id:
          description: Unique identifier of the webhook subscription.
          $ref: '#/components/schemas/UUID'
        url:
          description: The URL to which the webhook events will be sent.
          type: string
          format: uri
          example: https://example.com/webhook
        types:
          description: List of event types that trigger the webhook.
          type: array
          example:
            - iban.updated
            - profile.updated
        state:
          description: The state of the webhook subscription.
          type: string
          example: active
          enum:
            - active
            - inactive
      required:
        - id
        - url
        - types
        - state
    PendingSignature:
      type: object
      properties:
        id:
          description: Order ID (only present for order kind signatures)
          type: string
          format: uuid
          example: 550e8400-e29b-41d4-a716-446655440000
        kind:
          description: The type of signature request
          type: string
          example: order
          enum:
            - linkAddress
            - order
        chain:
          description: The blockchain network name
          $ref: '#/components/schemas/Chain'
        address:
          description: The blockchain address requiring signature
          $ref: '#/components/schemas/Address'
        amount:
          description: >-
            Monetary amount as a decimal string (only present for order kind
            signatures)
          type: string
          example: '100.50'
        counterpart:
          description: >-
            Payment counterpart information (only present for order kind
            signatures)
          $ref: '#/components/schemas/CounterpartResponse'
        currency:
          description: Currency code (only present for order kind signatures)
          $ref: '#/components/schemas/Currency'
        createdAt:
          description: Timestamp when the signature request was created
          $ref: '#/components/schemas/TimeStamp'
      required:
        - kind
        - chain
        - address
        - createdAt
    VerificationDocument:
      description: A document attached to a verification.
      type: object
      properties:
        kind:
          description: The kind of document.
          type: string
          enum:
            - passport
            - nationalIdentityCard
            - drivingLicense
            - residencePermit
            - proofOfResidency
            - sourceOfFunds
            - companyFilePDF
            - other
        fileId:
          description: ID of a previously uploaded file.
          $ref: '#/components/schemas/UUID'
        side:
          description: >-
            The side of the document. Required for identity cards and similar
            two-sided documents.
          type: string
          enum:
            - front
            - back
      required:
        - fileId
    UpdatePersonalVerifications:
      description: >-
        A list of verifications for personal onboarding. Available kinds are
        `sourceOfFunds` (all partners), and `idDocument`, `facialSimilarity`,
        `proofOfResidency` (KYC reliance model only).
      type: array
      items:
        type: object
        properties:
          kind:
            description: The type of the verification.
            type: string
            enum:
              - idDocument
              - facialSimilarity
              - proofOfResidency
              - sourceOfFunds
          documents:
            description: Documents to attach to this verification.
            type: array
            items:
              $ref: '#/components/schemas/VerificationDocument'
        required:
          - kind
    UpdateCorporateVerifications:
      description: >-
        A list of verifications required for corporate onboarding. Profile-level
        verifications (company documents) omit `personId`. Person-scoped
        verifications (for representatives, directors, or beneficial owners)
        include a `personId` obtained from the profile response.
      type: array
      items:
        type: object
        properties:
          kind:
            type: string
            enum:
              - sourceOfFunds
              - corporateName
              - corporateAddress
              - registrationNumber
              - dateOfRegistration
              - beneficialOwnership
              - powerOfAttorney
              - idDocument
              - proofOfResidency
          personId:
            description: >-
              Person ID for person-scoped verifications (representatives,
              directors, beneficial owners). Omit for profile-level company
              document verifications.
            $ref: '#/components/schemas/UUID'
          documents:
            description: Documents to attach to this verification.
            type: array
            items:
              $ref: '#/components/schemas/VerificationDocument'
        required:
          - kind
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Access token obtained from the `/auth/token` endpoint.
tags:
  - name: start
    x-displayName: Getting started
    description: >
      New to the Monerium API? See the [Getting Started](/) guide for setup
      instructions, environment details, and integration walkthroughs.


      Endpoints marked <span style="display: inline-block;padding: 2px
      8px;margin: 0px;background-color: rgb(44, 108, 167);color: rgb(255, 255,
      255);vertical-align: middle;line-height: 1.6;border-radius:
      4px;font-weight: 600;font-size: 12px;">Whitelabel</span> or <span
      style="display: inline-block;padding: 2px 8px;margin:
      0px;background-color: rgb(46, 125, 50);color: rgb(255, 255,
      255);vertical-align: middle;line-height: 1.6;border-radius:
      4px;font-weight: 600;font-size: 12px;">Private</span> are only available
      to those application types.
  - name: auth
    x-displayName: Authentication
    description: >-
      Endpoints for authorization and token management. See the
      [OAuth](/oauth#authorization), [Whitelabel](/whitelabel#authentication),
      and [Private](/private#authentication) guides for integration
      walkthroughs.
  - name: profiles
    x-displayName: Profiles
    description: >-
      A profile represents a customer undergoing KYC/KYB onboarding (personal or
      corporate) and is the owner of associated IBANs and addresses. See the
      [Onboarding guide](/whitelabel#onboarding) for the full flow.
  - name: addresses
    x-displayName: Addresses
    description: >-
      Link a blockchain address to a profile with a cryptographic proof of
      ownership. See the [Link a wallet](/whitelabel#link-wallet) guide for
      signing walkthroughs including EOA and smart contract wallets.
  - name: ibans
    x-displayName: IBANs
    description: >-
      Provision and manage IBANs linked to blockchain addresses. Incoming SEPA
      payments are automatically minted as EURe to the linked address. See the
      [EUR IBAN](/whitelabel#eur-iban) guide.
  - name: orders
    x-displayName: Orders
    description: >-
      An order represents a fund movement: an issue (EURe minted on incoming
      payment) or a redeem (EURe burned for an outgoing SEPA payment or
      cross-chain transfer). See the [Orders](/whitelabel#orders) guide.
  - name: signatures
    x-displayName: Signatures
    description: >-
      Fetch pending signature requests for linking addresses and approving
      orders. Used with smart contract wallets that sign on-chain. See the [Link
      a wallet](/whitelabel#link-wallet) guide.
  - name: files
    x-displayName: Files
    description: >-
      Upload files to obtain a `fileId` for use in profile verifications and
      orders above €15,000. See the [Onboarding guide](/whitelabel#onboarding)
      for verification requirements.
  - name: webhooks
    x-displayName: Webhooks
    description: >-
      Receive real-time event notifications for profile approvals, IBAN
      provisioning, and order state changes. See the
      [Webhooks](/whitelabel#webhooks) guide for registration and signature
      verification details.
  - name: tokens
    x-displayName: Tokens
    description: >-
      Supported e-money tokens with contract addresses and chain details. For
      icons, integration examples, and supported standards, see the
      [Tokens](/tokens) section in the developer docs.
  - name: swap
    x-displayName: Swap
    description: >-
      Preview USDC/EURe swap endpoints for sandbox on Arbitrum Sepolia. See the
      [Swap](/swap) guide for the full client flow.
  - name: changes
    x-displayName: Changelog
    description: >
      ### 2026-05-20:

      * [POST /profiles](#operation/create-profile) - Documented 409 Conflict
      response when a profile with the specified ID already exists.

      * [PATCH
      /profiles/{profile}/verifications](#operation/patch-profile-verifications)
      - Reverted verification type `facialSimilarityMotion` back to
      `facialSimilarity` to match the wire value.


      ### 2026-05-19:

      * [POST /swap](#operation/create-swap-quote), [POST
      /swap/commit](#operation/commit-swap-quote) - Added preview endpoints for
      quoting and committing USDC/EURe swaps in sandbox on Arbitrum Sepolia.


      ### 2026-05-15:

      * Updated identity enums to match the `@monerium/identity` package:
      `ProfessionCode`, `PersonalActivityCode`, `CorporateActivityCode`,
      `FundOriginCode`, `CorporateFundOriginCode`, `MonthlyTurnoverCode`,
      `CorporateMonthlyTurnoverCode`, `MonthlyTransactionCountCode`,
      `CorporateMonthlyTransactionCountCode`, and `CorporatePurposeCode`.


      ### 2026-05-08:

      * [PATCH
      /profiles/{profile}/verifications](#operation/patch-profile-verifications)
      - Each verification item now takes a `documents` array instead of a single
      `fileId`. Each document has `kind`, `fileId`, and an optional `side`.
      Corporate verifications support a `personId` field to submit documents for
      a specific person (representative, director, or beneficial owner).

      * [PATCH
      /profiles/{profile}/verifications](#operation/patch-profile-verifications)
      - Updated verification type `facialSimilarity` to `facialSimilarityMotion`
      for better alignment with the wire value.


      ### 2026-05-07:

      *  [PATCH /profiles/{profile}/form](#operation/patch-profile-form) -
      `PersonalForm`: renamed `taxId` to `tin` and added `taxResidenceCountry`
      as a required field.


      ### 2026-05-06:

      * [GET /profiles](#operation/profiles), [GET
      /profiles/{profile}](#operation/profile), [POST
      /profiles](#operation/create-profile), [GET
      /auth/context](#operation/auth-context), [Webhook
      profile.updated](#operation/webhook-profile-updated) - `ProfileState` and
      `SectionState`: renamed `submitted` to `pending`.


      ### 2026-04-29:

      * [PATCH
      /profiles/{profileId}/verifications](#operation/patch-profile-verifications)
      - Separated request schemas (`UpdatePersonalVerifications` and
      `UpdateCorporateVerifications`) from response schemas.

      * `Profile` response schema now explicitly uses `oneOf` to return either a
      `ProfilePersonal` or `ProfileCorporate` structure based on the `kind`.

      * Verification items in profile responses now correctly document the
      `state` property.


      ### 2026-04-28:

      * [GET /countries](#operation/get-countries) - Added countries endpoint to
      fetch supported countries and their details.


      ### 2026-04-27:

      * [POST /auth](#operation/auth), [GET /auth](#operation/auth-get) - Added
      `auth_mode` query parameter to control initial auth screen (`login` or
      `signup`) when the user is not authenticated.


      ### 2026-04-08:

      * [POST /profiles](#operation/create-profile) - New endpoint to create a
      profile. Replaces `POST /auth/signup` as the entry point for partner-led
      onboarding. Requires `kind` (`personal` or `corporate`), which determines
      the body structure used in subsequent PATCH and share endpoints.

      * [POST /auth/signup](#operation/auth-signup) - Deprecated; use [POST
      /profiles](#operation/create-profile) instead.

      * [GET /profiles/{profile}](#operation/profile) - Response now includes
      `details`, `form`, and `verifications` sections, each with their own
      `state`.

      * [POST /profiles/{profile}/share](#operation/share-profile-kyc) - New
      endpoint to reuse KYC data from a third-party provider (e.g. Sumsub).
      Populates `details` and `verifications` automatically. `form` must still
      be submitted separately via `PATCH /profiles/{profile}/form`.

      * [PATCH /profiles/{profile}/details](#operation/patch-profile-details),
      [PATCH /profiles/{profile}/form](#operation/patch-profile-form), [PATCH
      /profiles/{profile}/verifications](#operation/patch-profile-verifications)
      - New partial-update endpoints. Preferred over the PUT variants.

      * [PATCH
      /profiles/{profile}/verifications](#operation/patch-profile-verifications)
      - Each verification item takes a `kind` and a `fileId` directly.

      * [PUT /profiles/{profile}/details](#operation/submit-profile-details),
      [PUT /profiles/{profile}/form](#operation/submit-profile-form), [PUT
      /profiles/{profile}/verifications](#operation/submit-profile-verifications)
      - Deprecated; use the PATCH variants instead.

      * `enhancedDueDiligence` renamed to `sourceOfFunds` in verification kinds.

      * `ProfileState` simplified: removed `pending` and `blocked`. Active
      states are `created`, `incomplete`, `submitted`, `approved`, `rejected`.
      The `submitted` state blocks further submissions until the profile
      transitions to `approved`, `rejected`, or `incomplete`.

      * `info_required` state renamed to `incomplete` across profile and section
      states.



      ### 2026-02-25:

      * Orders now include `txHashes` in the `meta` field, containing the
      blockchain transaction hashes for the mint or burn. Only present once the
      order has been processed on-chain.



      ### 2026-02-17:

      * Removed `skip_create_account` from Athorization endpoint query
      parameters as it is no longer used in the flow. Use the Link Address and
      Request IBAN endpoints instead.

      * Enabled KYC testing in the Authorization flow. By default the `skip_kyc`
      parameter is `false`.



      ### 2026-02-02:

      * Add missing 202 Status for Order creation endpoint.

      * Add /signatures documentation to fetch pending signature requests.


      ### 2026-01-22:

      * Base chain supported.


      ### 2025-11-14:

      * Orders now support the `referenceNumber` field for structured SEPA
      reference info (max 35 characters). The field is available in the [POST
      /place-order](#operation/post-orders) request, [GET
      /order/{id}](#operation/order) and [GET /orders](#operation/orders)
      responses, as well as in order webhooks.

      * WIP Order memo field - Effective 15th of December, the `memo` field in
      incoming SEPA payments will hold only unstructured remittance text.
      Structured reference will be provided exclusively in the `referenceNumber`
      field. Please ensure your integration uses `referenceNumber` for
      structured references before this change takes effect.


      ### 2025-07-17:

      * Noble testnet chain identifier is now `grand`, previously `noble`.

      * Noble chain identifier, `noble`, documented.

      * Linea and Linea Sepolia chain identifiers, `linea` and `lineasepolia`
      documented.


      ### 2024-11-11:

      * [GET/POST  /auth](#operation/auth) changes to query parameters.
          * added `email`: You can prefill the email field for login and sign up steps to ensure the user uses the correct email.
          * added `skip_kyc`: You can skip the KYC onboarding steps in the Authorization Flow and use the the details, additional data, and verifications API endpoints after you have gotten the authorization.
          * changed `skip_create_account`: changed skipCreateAccount to snake case for consistency.

      ### 2024-10-22:

      * WIP [GET /orders](#operation/orders) -  We're updating the orders
      response to return an object with an orders key containing an array of all
      orders.
        This new structure makes it easier to handle pagination and extend the response with additional metadata in the future.
        We plan to release this upgrade within 5th of November.

      ### 2024-10-07:

      * [POST /orders](#operation/post-orders) - Introduced a short format IBAN
      in the message.


      ### 2024-10-04:

      * [Webhook for Subscription
      notification](#operation/webhook-profile-updated) - A notification that is
      used to validate if webhook receiver can handle further notifications.

      * [PUT /profiles/{profile}/form](#operation/submit-profile-form) - profile
      form is extracted from profile details into a separate endpoint.

      * [PUT
      /profiles/{profile}/verifications](#operation/submit-profile-verifications)
      - profile verifications is extracted from profile details into a separate
      endpoint.

      * Arbitrum and Arbitrum Sepolia chains supported.


      ### 2024-09-27

      * [GET /balances](#operation/balances) - added a new endpoint to retrieve
      the account balances. Removed the deprecated `GET
      /profiles/{profile}/balances` endpoint.


      ### 2024-09-09

      * [POST /auth](#operation/auth) - removed required `version=v2` argument
      from the request. Clarified required parameters

      for the oauth flow.


      ### 2024-08-30

      * [POST /auth](#operation/auth) - added required `version=v2` and Sign in
      with Ethereum (SIWE) flow.


      ### 2024-08-19:

      * [PUT /profiles/{profile}/details](#operation/submit-profile-details) -
      added form and verifications for personal and corporate profiles (WIP).


      ### 2024-08-09:

      * [POST /webhooks](#operation/create-subscription) - A new endpoint to
      register webhook subscription and receive notifications like profile
      updates.

      * [Webhook for Profile notifications](#operation/webhook-profile-updated)
      - A webhook notification about profile updates.


      ### 2024-07-15:


      * [PATCH /ibans/{iban}](#operation/move-iban) - Changed from PUT to PATCH
      request.

      * [PUT /profiles/{profile}/details](#operation/submit-profile-details) -
      added 409 response when submitting details for an already approved
      profile.


      ### 2024-06-20:

      * [POST /auth/signup](#operation/auth-signup) - Added a 304 response when
      trying to sign up existing users. This will require explicit authorization
      from the user using the authorization flow.

      * [PUT /ibans/{iban}](#operation/move-iban) - New endpoint released to
      move existing IBANs to another wallet address.
webhooks:
  subscription.created:
    post:
      operationId: webhook-subscription-created
      summary: Subscription created
      description: >
        This notification is used to validate if receiver is able to handle
        webhook notifications.

        Your webhook endpoint must respond with a `200 OK` status code to
        indicate successful receipt.

        If the delivery fails, the subscription won't be created.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                type:
                  description: The type of the event.
                  type: string
                  example: subscription.created
                  enum:
                    - subscription.created
                timestamp:
                  $ref: '#/components/schemas/TimeStamp'
      responses:
        '200':
          description: Webhook received successfully
      security: []
      tags:
        - webhooks
      x-codeSamples:
        - lang: curl4
          label: CURL
          source: >
            curl -X POST "https://your-webhook-url.com/webhooks" \

            -H "Content-Type: application/json" \

            -H "webhook-id: 3f3d820e-d01c-4c56-8be4-b20053225679" \

            -H "webhook-timestamp: 1723207444" \

            -H "webhook-signature:
            v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=" \

            -d '{
              "type": "subscription.created",
              "timestamp": "2024-08-09T12:44:04.777884Z"
            }'
  order.created:
    post:
      operationId: webhook-order-created
      summary: Order created
      description: >
        This notification represents an order creation.


        It's send as a POST request to the endpoint specified during
        [subscription creation](#operation/create-subscription).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                type:
                  description: The type of the event.
                  type: string
                  example: order.created
                  enum:
                    - order.created
                timestamp:
                  $ref: '#/components/schemas/TimeStamp'
                data:
                  $ref: '#/components/schemas/Order'
      responses:
        '200':
          description: Webhook received successfully
      security: []
      tags:
        - webhooks
  order.updated:
    post:
      operationId: webhook-order-updated
      summary: Order updated
      description: >
        This notification represents an order update event. It's sent when an
        order is processed or rejected.


        It's send as a POST request to the endpoint specified during
        [subscription creation](#operation/create-subscription).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                type:
                  description: The type of the event.
                  type: string
                  example: order.updated
                  enum:
                    - order.updated
                timestamp:
                  $ref: '#/components/schemas/TimeStamp'
                data:
                  $ref: '#/components/schemas/Order'
      responses:
        '200':
          description: Webhook received successfully
      security: []
      tags:
        - webhooks
  profile.updated:
    post:
      operationId: webhook-profile-updated
      summary: Profile updated
      description: >-
        Sent when a profile's state changes. Your endpoint must respond with
        `200 OK`; failed deliveries are retried with exponential backoff up to
        10 times over 12 hours.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                type:
                  description: The type of the event.
                  type: string
                  example: profile.updated
                  enum:
                    - profile.updated
                timestamp:
                  $ref: '#/components/schemas/TimeStamp'
                data:
                  $ref: '#/components/schemas/Profile'
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '500':
          description: Internal Server Error
      security: []
      tags:
        - webhooks
      x-codeSamples:
        - lang: curl4
          label: CURL
          source: >
            curl -X POST "https://your-webhook-url.com/webhooks" \

            -H "Content-Type: application/json" \

            -H "webhook-id: 3f3d820e-d01c-4c56-8be4-b20053225679" \

            -H "webhook-timestamp: 1723207444" \

            -H "webhook-signature:
            v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=" \

            -d '{
              "type": "profile.updated",
              "timestamp": "2024-08-09T12:44:04.777884Z",
              "data": {
                "id": "4f079ef8-6d26-11eb-9bc8-acde48001122",
                "kind": "personal",
                "name": "Jane Doe",
                "state": "pending"
              }
            }'
  iban.updated:
    post:
      operationId: webhook-iban-updated
      summary: IBAN updated
      description: >-
        Sent when an IBAN is updated. Your endpoint must respond with `200 OK`;
        failed deliveries are retried with exponential backoff up to 10 times
        over 12 hours.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                type:
                  description: The type of the event.
                  type: string
                  example: iban.updated
                  enum:
                    - iban.updated
                timestamp:
                  $ref: '#/components/schemas/TimeStamp'
                data:
                  $ref: '#/components/schemas/IBANObject'
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '500':
          description: Internal Server Error
      security: []
      tags:
        - webhooks
      x-codeSamples:
        - lang: curl4
          label: CURL
          source: >
            curl -X POST "https://your-webhook-url.com/webhooks" \

            -H "Content-Type: application/json" \

            -H "webhook-id: 3f3d820e-d01c-4c56-8be4-b20053225679" \

            -H "webhook-timestamp: 1723207444" \

            -H "webhook-signature:
            v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=" \

            -d '{
              "type": "iban.updated",
              "timestamp": "2024-08-09T12:44:04.777884Z",
              "data": {
                  "iban": "IS53 5615 1329 5713 7808 3320 63",
                  "chain": "ethereum",
                  "address": "0x2031c090b74352227bDD0AF8E1e5F5aD1Af31062",
                  "profile": "0bbc7d54-87de-11ef-8b78-7e558e00ec92",
                  "state": "approved"
              }
            }'
