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

# Create a Transaction using DSL

> Use this endpoint to create a transaction using a DSL file you have previously created.



## OpenAPI

````yaml /en/openapi/v3-current/ledger.yaml post /v1/organizations/{organization_id}/ledgers/{ledger_id}/transactions/dsl
openapi: 3.1.0
info:
  title: Midaz Ledger API
  description: >-
    Complete API reference for Midaz Ledger services including organization
    management, ledger operations, assets, segments, portfolios, accounts,
    account types, transactions, operations, balances, operation routes,
    transaction routes, and metadata indexes.
  version: 3.7.1
servers:
  - url: https://ledger.sandbox.lerian.net
security: []
tags:
  - name: Organizations API
  - name: Ledgers API
  - name: Assets API
  - name: Segments API
  - name: Portfolios API
  - name: Account Types API
  - name: Accounts API
  - name: Balances API
  - name: Transactions API
  - name: Operations API
  - name: Operation Routes API
  - name: Transaction Routes API
  - name: Metadata Indexes API
paths:
  /v1/organizations/{organization_id}/ledgers/{ledger_id}/transactions/dsl:
    post:
      tags:
        - Transactions API
      summary: Create a Transaction using DSL
      description: >-
        Use this endpoint to create a transaction using a DSL file you have
        previously created.
      parameters:
        - $ref: '#/components/parameters/OrganizationId'
        - $ref: '#/components/parameters/Authorization'
        - $ref: '#/components/parameters/LedgerId'
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XRequestId'
        - $ref: '#/components/parameters/XIdempotency'
        - $ref: '#/components/parameters/XTTL'
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                dsl:
                  format: binary
                  type: string
                  description: >-
                    The `.gold` file you have created with the transaction
                    information.
                  example: ''
      responses:
        '201':
          description: >-
            Indicates that the resource was successfully created and the
            operation was completed as expected.


            The response includes the `X-Idempotency-Replayed` header.


            If the value is false, the transaction was just processed. If the
            value is true, the response is a replay of a previously processed
            request.


            See [Retries and idempotency](/en/reference/retries-idempotency) for
            more details.
          headers:
            X-Idempotency-Replayed:
              $ref: '#/components/headers/XIdempotencyReplayed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateTransactionResponse'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0017:
                  $ref: '#/components/examples/Error0017'
                Error0018:
                  $ref: '#/components/examples/Error0018'
                Error0019:
                  $ref: '#/components/examples/Error0019'
                Error0021:
                  $ref: '#/components/examples/Error0021'
                Error0024:
                  $ref: '#/components/examples/Error0024'
                Error0025:
                  $ref: '#/components/examples/Error0025'
                Error0026:
                  $ref: '#/components/examples/Error0026'
          headers: {}
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0041:
                  $ref: '#/components/examples/Error0041'
                Error0042:
                  $ref: '#/components/examples/Error0042'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0043:
                  $ref: '#/components/examples/Error0043'
        '409':
          description: >-
            Conflict — this status is returned for two distinct conflict types.

            An idempotency conflict (Error0084) means the idempotency key is
            already in use by a request that is still being processed. In this
            case, the `X-Idempotency-Replayed` header is included in the
            response and set to `false`.

            An entity conflict (Error0023) means the resource already exists.
            The `X-Idempotency-Replayed` header is not relevant for this type of
            conflict.

            See [Retries and idempotency](/en/reference/retries-idempotency) for
            more details.
          headers:
            X-Idempotency-Replayed:
              $ref: '#/components/headers/XIdempotencyReplayed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0023:
                  $ref: '#/components/examples/Error0023'
                Error0084:
                  $ref: '#/components/examples/Error0084'
        '422':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0019:
                  $ref: '#/components/examples/Error0019'
                Error0167:
                  $ref: '#/components/examples/Error0167'
                Error0168:
                  $ref: '#/components/examples/Error0168'
          headers: {}
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0046:
                  $ref: '#/components/examples/Error0046'
      deprecated: true
      security:
        - bearer: []
components:
  parameters:
    OrganizationId:
      name: organization_id
      in: path
      description: The unique identifier of the Organization associated with the Ledger.
      required: true
      example: 019c96a0-0a98-7287-9a31-786e0809c769
      schema:
        type: string
    Authorization:
      name: Authorization
      in: header
      description: >-
        The authorization token. **This header is required if your environment
        has Access Manager enabled**.
      required: false
      schema:
        type: string
    LedgerId:
      name: ledger_id
      in: path
      description: The unique identifier of the associated Ledger.
      required: true
      example: 019c96a0-0ac0-7de9-9f53-9cf842a2ee5a
      schema:
        type: string
    ContentType:
      name: Content-Type
      in: header
      description: >-
        The type of media of the resource. Recommended value is
        `application/json`.
      required: false
      example: application/json
      schema:
        type: string
    XRequestId:
      name: X-Request-Id
      in: header
      description: A unique identifier used to trace and track each request.
      required: false
      example: 019c96a0-0a98-7287-9a31-786e0809c769
      schema:
        type: string
        format: uuid
    XIdempotency:
      name: X-Idempotency
      in: header
      description: >-
        A unique key that ensures transaction idempotency. If not provided, the
        system automatically generates a SHA-256 hash based on the request body.
        Keys are scoped per organization and ledger.


        Always validate the `X-Idempotency-Replayed` response header to
        distinguish new transactions from cached replays.


        See [Retries and idempotency](/en/reference/retries-idempotency) for
        best practices.
      required: false
      example: 019c96a0-10ce-75fc-a273-dc799079a99c
      schema:
        type: string
    XTTL:
      name: X-TTL
      in: header
      description: >-
        The time-to-live for the idempotency key, defined in seconds. Defaults
        to 300 seconds (5 minutes) if not provided. Only the TTL from the first
        request is used; changing it on retries has no effect.


        See [Retries and idempotency](/en/reference/retries-idempotency) for
        details.
      required: false
      example: 3600
      schema:
        type: integer
  headers:
    XIdempotencyReplayed:
      description: >-
        Indicates whether the response was replayed from cache (`true`) or is a
        fresh response from a newly processed transaction (`false`). Always
        check this header to avoid processing the same transaction twice on your
        side.


        See [Retries and idempotency](/en/reference/retries-idempotency) for
        details.
      schema:
        type: boolean
      example: false
  schemas:
    CreateTransactionResponse:
      type: object
      properties:
        id:
          type: string
          description: The unique identifier of the transaction.
          format: uuid
        parentTransactionId:
          type: string
          description: >-
            The unique identifier of the parent/original transaction for
            reversals. This field is populated by the server when a transaction
            is reverted and should be treated as read-only by clients.
          format: uuid
          nullable: true
        organizationId:
          type: string
          format: uuid
          description: The unique identifier of the Organization.
        ledgerId:
          type: string
          description: The unique identifier of the Ledger.
          format: uuid
        description:
          type: string
          description: Description of the transaction.
        route:
          type: string
          description: Specifies the Transaction Route associated with the transaction.
        routeId:
          type: string
          format: uuid
          description: >-
            The unique identifier of the Transaction Route applied to this
            transaction.
        status:
          type: object
          description: The transaction status (pending, completed, reversed).
          properties:
            code:
              type: string
              description: Transaction status code.
            description:
              type: string
              description: Transaction status description.
        amount:
          type: string
          description: The sent amount.
        assetCode:
          type: string
          description: The name of the asset used in the operation.
        chartOfAccountsGroupName:
          type: string
          description: The name of the chart-of-accounts group.
        source:
          type: array
          description: The list of accounts used as source.
          items:
            type: string
        destination:
          type: array
          description: The list of accounts used as destination.
          items:
            type: string
        createdAt:
          type: string
          format: date-time
          description: Timestamp of creation (UTC).
        updatedAt:
          type: string
          format: date-time
          description: Timestamp of last update (UTC).
        deletedAt:
          type: string
          format: date-time
          description: Timestamp of soft deletion, if applicable (UTC).
          nullable: true
        operations:
          type: array
          items:
            $ref: '#/components/schemas/OperationResponse'
        metadata:
          $ref: '#/components/schemas/Metadata'
    ErrorFormat:
      type: object
      description: The response message error.
      required:
        - code
        - title
        - message
      properties:
        code:
          type: string
          description: A unique, stable identifier for the error.
        title:
          type: string
          description: A brief summary of the issue.
        message:
          type: string
          description: Detailed guidance for resolving the error.
        fields:
          type: object
          additionalProperties: true
          description: Additional information about the fields that caused the error.
    OperationResponse:
      type: object
      properties:
        id:
          type: string
          description: The unique identifier of the Operation.
          format: uuid
        transactionId:
          type: string
          format: uuid
          description: The unique identifier of the Transaction.
        organizationId:
          type: string
          format: uuid
          description: The unique identifier of the Organization.
        ledgerId:
          type: string
          description: The unique identifier of the Ledger.
          format: uuid
        accountId:
          type: string
          description: The unique identifier of the Account.
          format: uuid
        accountAlias:
          type: string
          description: The alias for the account used in the operation.
        balanceId:
          type: string
          description: The unique identifier of the Balance.
        balanceKey:
          type: string
          description: The key identifier of the Balance.
        description:
          type: string
          description: A description for the operation.
        type:
          type: string
          description: >-
            The type of the operation. `OVERDRAFT` identifies system-generated
            companion operations on the internal `"overdraft"` balance —
            `direction` then carries the lifecycle semantics (`debit` for a
            draw, `credit` for a repayment).
          enum:
            - CREDIT
            - DEBIT
            - ON_HOLD
            - RELEASE
            - OVERDRAFT
        assetCode:
          type: string
          description: The code that identifies the sent asset.
        chartOfAccounts:
          type: string
          description: The name of the Chart-of-Accounts that the operation belongs to.
        route:
          type: string
          deprecated: true
          description: >-
            **Deprecated.** Use `routeId` instead. Will be removed in the next
            major version. The unique ID of the operation route for this
            transaction leg.
        routeId:
          type: string
          format: uuid
          description: >-
            The unique identifier of the operation route associated with this
            operation. Companion overdraft operations inherit this value from
            the primary operation that triggered them.
        routeCode:
          type: string
          maxLength: 100
          description: >-
            A human-readable code for the operation route, useful for audit
            trail and traceability.
        routeDescription:
          type: string
          description: >-
            The description of the operation route associated with this
            operation.
        direction:
          type: string
          enum:
            - debit
            - credit
          description: The direction of the operation in double-entry accounting.
        amount:
          type: object
          description: >-
            An object containing information about the amount used in the
            operation.
          properties:
            value:
              type: string
              description: The amount that will be sent.
        balance:
          type: object
          description: >-
            An object containing information about the balance before the
            operation.
          properties:
            available:
              type: string
              description: Previous available balance.
            onHold:
              type: string
              description: Amount on hold/reserved.
            version:
              type: integer
              description: Balance version, which is updated with each transaction.
            overdraftUsed:
              type: string
              description: >-
                The overdraft consumed by this balance before the operation, as
                a decimal string. `"0"` for operations that do not touch
                overdraft.
        balanceAfter:
          type: object
          description: >-
            An object containing information about the balance after the
            operation.
          properties:
            available:
              type: string
              description: Current available balance.
            onHold:
              type: string
              description: Amount on hold/reserved.
            version:
              type: integer
              description: Balance version, which is updated with each transaction.
            overdraftUsed:
              type: string
              description: >-
                The overdraft consumed by this balance after the operation, as a
                decimal string. `"0"` for operations that do not touch
                overdraft.
        status:
          type: object
          description: The transaction status (pending, completed, reversed).
          properties:
            code:
              type: string
              description: Transaction status code.
            description:
              type: string
              description: Transaction status description.
              nullable: true
        balanceAffected:
          type: boolean
          description: >-
            Indicates whether the operation had an impact on the account
            balance.
        createdAt:
          type: string
          format: date-time
          description: Timestamp of creation (UTC).
        updatedAt:
          type: string
          format: date-time
          description: Timestamp of last update (UTC).
        deletedAt:
          type: string
          format: date-time
          description: Timestamp of soft deletion, if applicable (UTC).
          nullable: true
        metadata:
          $ref: '#/components/schemas/Metadata'
    Metadata:
      type: object
      additionalProperties:
        type: string
      description: >-
        An object containing key-value pairs to add as metadata, where the field
        `name` is the key and the field `value` is the value. For example, to
        add a Cost Center, use 'costCenter': 'BR_11101997'.
  examples:
    Error0017:
      value:
        code: '0017'
        title: Invalid Script Format Error
        message: >-
          The script provided in your request is invalid or in an unsupported
          format. Please verify the script format and try again.
      summary: Invalid Script Format
    Error0018:
      value:
        code: '0018'
        title: Insufficient Funds Error
        message: >-
          The transaction could not be completed due to insufficient funds in
          the account. Please add sufficient funds to your account and try
          again.
      summary: Insufficient Funds
    Error0019:
      value:
        code: '0019'
        title: Account Ineligibility Error
        message: >-
          One or more accounts listed in the transaction are not eligible to
          participate. Please review the account statuses and try again.
      summary: Account Ineligibility
    Error0021:
      value:
        code: '0021'
        title: Parent Transaction ID Not Found
        message: >-
          The parentTransactionId {{parentTransactionId}} does not correspond to
          any existing transaction. Please review the ID and try again.
      summary: ParentTransactionID Not Found
    Error0024:
      value:
        code: '0024'
        title: Account Status Transaction Restriction
        message: >-
          The current statuses of the source and/or destination accounts do not
          permit transactions. Change the account status(es) and try again.
      summary: Account Status Transaction Restriction
    Error0025:
      value:
        code: '0025'
        title: Insufficient Account Balance Error
        message: >-
          The account {{accountId}} does not have sufficient balance. Please try
          again with an amount that is less than or equal to the available
          balance.
      summary: Insufficient Account Balance
    Error0026:
      value:
        code: '0026'
        title: Transaction Method Restriction
        message: >-
          Transactions involving {{assetCode}} are not permitted for the
          specified source and/or destination. Please try again using accounts
          that allow transactions with {{assetCode}}.
      summary: Transaction Method Restriction
    Error0041:
      summary: Token Missing
      value:
        code: '0041'
        title: Token Missing
        message: >-
          A valid token must be provided in the request header. Please include a
          token and try again.
    Error0042:
      summary: Invalid Token
      value:
        code: '0042'
        title: Invalid Token
        message: >-
          The provided token is expired, invalid or malformed. Please provide a
          valid token and try again.
    Error0043:
      summary: Insufficient Privileges
      value:
        code: '0043'
        title: Insufficient Privileges
        message: >-
          You do not have the necessary permissions to perform this action.
          Please contact your administrator if you believe this is an error.
    Error0023:
      value:
        code: '0023'
        title: Transaction Timing Restriction
        message: >-
          You can only perform another transaction using {{assetCode}} of
          {{amount}} from {{source}} to {{destination}} after
          {{timestampUnlock}}. Please wait until the specified time to try
          again.
      summary: Transaction Timing Restriction
    Error0084:
      value:
        code: '0084'
        title: Duplicate Idempotency Key
        message: >-
          The idempotency key '{{key}}' is already in use and the original
          request is still being processed. Please retry later using the same
          idempotency key.
      summary: Duplicate Idempotency Key
    Error0167:
      summary: Overdraft Limit Exceeded
      value:
        code: '0167'
        title: Overdraft Limit Exceeded
        message: >-
          The transaction would exceed the balance's configured overdraft limit.
          Reduce the transaction amount or increase the overdraft limit.
    Error0168:
      summary: Direct Operation on Internal Balance
      value:
        code: '0168'
        title: Direct Operation on Internal Balance
        message: >-
          A user-initiated operation targeted a balance with internal scope.
          Internal balances (e.g., overdraft companions) cannot be operated on
          directly.
    Error0046:
      summary: Internal Server Error
      value:
        code: '0046'
        title: Internal Server Error
        message: >-
          The server encountered an unexpected error. Please try again later or
          contact support.
  securitySchemes:
    bearer:
      type: http
      scheme: bearer

````