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

# Get Account Statement

> Returns a statement of the account's activity over a period, formatted as JSON, CSV, or PDF. JSON is returned inline; CSV and PDF are rendered and uploaded, and this endpoint responds with a time-limited download link instead of the file itself. Statements are available from 2026-01-01 onwards, the date balance history began being recorded; a period starting before that floor is rejected.



## OpenAPI

````yaml /products/meridian-accounts/api-reference/meridian-accounts.json get /v1/accounts/{accountId}/statement
openapi: 3.1.1
info:
  title: Meridian API
  version: '1.0'
  description: API documentation for Meridian services
  contact:
    name: Meridian
    url: https://mnai.com
    email: support@mnai.com
  license:
    name: Proprietary
    url: https://mnai.com
servers:
  - url: https://sandbox-api.va.meridianpay.com
    description: Sandbox
  - url: https://api.va.mnai.com
    description: Production
security: []
paths:
  /v1/accounts/{accountId}/statement:
    get:
      tags:
        - Accounts
      summary: Get Account Statement
      description: >-
        Returns a statement of the account's activity over a period, formatted
        as JSON, CSV, or PDF. JSON is returned inline; CSV and PDF are rendered
        and uploaded, and this endpoint responds with a time-limited download
        link instead of the file itself. Statements are available from
        2026-01-01 onwards, the date balance history began being recorded; a
        period starting before that floor is rejected.
      operationId: getAccountStatement
      parameters:
        - name: X-Meridian-Api-Key
          in: header
          description: >-
            Server-to-server (HMAC) requests only. Partner API key issued by
            Meridian during provisioning.
          schema:
            type: string
          example: your-api-key
        - name: X-Meridian-Timestamp
          in: header
          description: >-
            Server-to-server (HMAC) requests only. Current time in milliseconds
            since the Unix epoch. Must be within 60 seconds of the request.
          schema:
            type: string
          example: '1749566400000'
        - name: X-Meridian-Program-Id
          in: header
          description: >-
            Server-to-server (HMAC) requests only. Identifies the program
            context for the request.
          schema:
            type: string
          example: your-program-id
        - name: X-Meridian-User-Id
          in: header
          description: >-
            Server-to-server (HMAC) requests only. Identifies the Meridian user
            targeted by the request. Required for MULTI_USER integrations; omit
            for SINGLE_USER.
          schema:
            type: string
          example: user_123
        - name: accountId
          in: path
          description: >-
            ID of the balance account to fetch a statement for: the `id`
            returned by `GET /v1/accounts`.
          required: true
          schema:
            type: string
        - name: from
          in: query
          description: First day of the statement period, inclusive (YYYY-MM-DD).
          required: true
          schema:
            type: string
        - name: to
          in: query
          description: Last day of the statement period, inclusive (YYYY-MM-DD).
          required: true
          schema:
            type: string
        - name: format
          in: query
          description: >-
            Response format: `json` (default, returned inline), `csv`, or `pdf`
            (both returned as a presigned download link). Case-insensitive:
            `CSV`, `Csv`, and `csv` are all accepted.
          schema:
            type: string
      responses:
        '200':
          description: >-
            For format=json, the statement itself (MeridianStatementResponse).
            For format=csv or format=pdf, a MeridianStatementLinkResponse (url,
            expiresAt) pointing at the rendered file instead.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/StatementResponse'
                  - $ref: '#/components/schemas/StatementLinkResponse'
              examples:
                json_statement:
                  $ref: '#/components/examples/GetAccountStatementJsonUsdMonth'
                csv_download_link:
                  $ref: '#/components/examples/GetAccountStatementCsvDownloadLink'
                pdf_download_link:
                  $ref: '#/components/examples/GetAccountStatementPdfDownloadLink'
        '400':
          description: >-
            The requested period, format, or account identifier is invalid, or
            the account is not a balance account
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeridianError'
        '401':
          description: Missing or invalid authentication
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeridianError'
        '403':
          description: >-
            The authenticated caller is not permitted: JWT scope missing, or the
            partner API key lacks entitlement, user ownership, or user-type
            match
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeridianError'
        '404':
          description: The requested account was not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeridianError'
        '422':
          description: >-
            No statement can be produced for this account: it predates the
            balance history statements are assembled from. Requesting a
            different period does not help.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeridianError'
      security:
        - meridian-account-jwt: []
        - partner-api-key: []
components:
  schemas:
    StatementResponse:
      type: object
      title: Statement Response
      description: An account statement for a period
      required:
        - accountId
        - currency
        - from
        - to
        - generatedAt
        - depositInstructions
        - openingBalance
        - closingBalance
        - totalCredits
        - totalDebits
        - summary
        - days
      properties:
        accountId:
          type: string
          description: ID of the account this statement covers
          example: acc_01JMERUSDRET001
        accountDisplayName:
          type:
            - string
            - 'null'
          description: Display name of the account
        holderName:
          type:
            - string
            - 'null'
          description: Name of the account holder
        currency:
          type: string
          description: ISO 4217 currency code of the account
          example: USD
        from:
          type: string
          description: First day covered by the statement, inclusive
          example: '2026-03-01'
          format: date
        to:
          type: string
          description: Last day covered by the statement, inclusive
          example: '2026-03-31'
          format: date
        generatedAt:
          type: string
          description: Timestamp when the statement was generated
          example: '2026-04-01T00:05:00Z'
          format: date-time
        depositInstructions:
          type: array
          description: Deposit instructions for the account
          items:
            $ref: '#/components/schemas/DepositInstruction'
        openingBalance:
          type: string
          description: Balance at the start of the period
          example: '1000.00'
        closingBalance:
          type: string
          description: Balance at the end of the period
          example: '1250.00'
        totalCredits:
          type: string
          description: Total credits posted during the period
          example: '500.00'
        totalDebits:
          type: string
          description: Total debits posted during the period
          example: '250.00'
        summary:
          type: array
          description: Totals grouped by transaction type
          items:
            $ref: '#/components/schemas/StatementSummaryLine'
        days:
          type: array
          description: One entry per calendar day with activity, in chronological order
          items:
            $ref: '#/components/schemas/StatementDay'
    StatementLinkResponse:
      type: object
      title: Statement Link Response
      description: A time-limited download link for a rendered statement file
      required:
        - url
        - expiresAt
      properties:
        url:
          type: string
          description: Presigned URL to download the rendered statement
          example: >-
            https://meridian-statements.s3.amazonaws.com/statements/partner/account/file.csv
        expiresAt:
          type: string
          description: When the download link expires
          example: '2026-04-01T12:05:00Z'
          format: date-time
    MeridianError:
      type: object
      title: MeridianError
      description: >-
        Represents an error response from the Meridian API, including validation
        errors and an optional error code.
      required:
        - message
      properties:
        validationErrors:
          type: array
          description: >-
            An array of validation errors that occurred during the processing of
            the request. This field is optional and may be empty if there are no
            validation errors.
          items:
            $ref: '#/components/schemas/ValidationError'
        errorCode:
          type: string
          description: >-
            Machine-readable code identifying the failure. Absent when the
            failure is fully described by `validationErrors`. Clients should
            tolerate codes added in the future.
          enum:
            - UNAUTHORIZED
            - FORBIDDEN
            - NOT_FOUND
            - INVALID_REQUEST
            - INTERNAL_ERROR
            - INFORMATION_REQUEST_NOT_EDITABLE
            - INVALID_USER_TYPE
            - SINGLE_USER_KEY_NOT_ALLOWED
            - USER_ID_HEADER_REQUIRED
            - USER_ID_HEADER_NOT_ALLOWED
            - PDF_PAGE_LIMIT_EXCEEDED
            - PDF_PASSWORD_PROTECTED
            - PDF_UNREADABLE
        message:
          type: string
          description: >-
            A human-readable message describing the error. This field is
            required and should provide a clear explanation of the error that
            occurred.
    DepositInstruction:
      type: object
      title: Deposit Instruction
      description: Deposit instruction for funding an account
      required:
        - id
        - createdAt
        - updatedAt
        - status
        - rail
        - supportedCurrencies
        - fields
        - disclosures
      properties:
        id:
          type: string
          description: Unique identifier of the deposit instruction
          example: depinst_01JMERACH001
        createdAt:
          type: string
          description: Timestamp when the deposit instruction was created
          example: '2026-04-30T14:00:00Z'
          format: date-time
        updatedAt:
          type: string
          description: Timestamp when the deposit instruction was last updated
          example: '2026-04-30T14:00:00Z'
          format: date-time
        status:
          type: string
          description: Lifecycle status of the deposit instruction
          example: ACTIVE
        note:
          type:
            - string
            - 'null'
          description: Optional operator note about this deposit instruction
        rail:
          $ref: '#/components/schemas/DepositInstructionRail'
        supportedCurrencies:
          type: array
          description: Currencies supported by this deposit instruction
          items:
            type: string
            enum:
              - EUR
              - USD
              - GBP
              - PHP
              - MXN
              - ZAR
              - USDC_ETH
              - USDC_SOL
              - USDT_ETH
              - USDT_SOL
              - USDC_BASE
              - USDT_BASE
              - USDC_POLY
              - USDT_POLY
        fields:
          type: array
          description: Fields required for this deposit instruction
          items:
            $ref: '#/components/schemas/DepositInstructionField'
        disclosures:
          type: array
          description: Disclosures associated with this deposit instruction
          items:
            $ref: '#/components/schemas/DepositInstructionDisclosure'
    StatementSummaryLine:
      type: object
      title: Statement Summary Line
      description: Total movement for one transaction type over the period
      required:
        - label
        - count
        - total
      properties:
        label:
          type: string
          description: Human-readable label for the transaction type
          example: Deposits
        count:
          type: integer
          description: Number of transactions of this type
          example: 12
        total:
          type: string
          description: Total amount moved by this transaction type
          example: '7250.00'
    StatementDay:
      type: object
      title: Statement Day
      description: One calendar day of statement activity
      required:
        - date
        - openingBalance
        - closingBalance
        - entries
      properties:
        date:
          type: string
          description: Calendar day, UTC
          example: '2026-03-05'
          format: date
        openingBalance:
          type: string
          description: Balance at the start of the day
          example: '1000.00'
        closingBalance:
          type: string
          description: Balance at the end of the day
          example: '1100.00'
        entries:
          type: array
          description: Transactions that occurred on this day, in chronological order
          items:
            $ref: '#/components/schemas/StatementEntry'
    ValidationError:
      type: object
      title: ValidationError
      description: >-
        Represents a validation error that occurred during the processing of a
        request to the Meridian API. One of the following types of validation
        errors may be present: InvalidFormat, InvalidValue, MissingValue,
        UnprocessableValue, UnexpectedVerificationError, MissingRequestBody,
        MissingPathParameter, MissingQueryParameter, or NotFound. Each
        validation error includes a reference to the field that caused the error
        and a message describing the error.
      required:
        - type
      properties:
        type:
          type: string
          description: Identifies which ValidationError this is.
          enum:
            - InvalidFormat
            - InvalidValue
            - MissingPathParameter
            - MissingQueryParameter
            - MissingRequestBody
            - MissingValue
            - NotFound
            - UnexpectedVerificationError
            - Unknown
            - UnprocessableValue
      discriminator:
        propertyName: type
        mapping:
          InvalidFormat:
            $ref: '#/components/schemas/InvalidFormat'
          InvalidValue:
            $ref: '#/components/schemas/InvalidValue'
          MissingPathParameter:
            $ref: '#/components/schemas/MissingPathParameter'
          MissingQueryParameter:
            $ref: '#/components/schemas/MissingQueryParameter'
          MissingRequestBody:
            $ref: '#/components/schemas/MissingRequestBody'
          MissingValue:
            $ref: '#/components/schemas/MissingValue'
          NotFound:
            $ref: '#/components/schemas/NotFound'
          UnexpectedVerificationError:
            $ref: '#/components/schemas/UnexpectedVerificationError'
          Unknown:
            $ref: '#/components/schemas/Unknown'
          UnprocessableValue:
            $ref: '#/components/schemas/UnprocessableValue'
    DepositInstructionRail:
      type: object
      title: Deposit Instruction Rail
      description: Payment rail information
      required:
        - type
        - label
      properties:
        type:
          type: string
          description: Rail type identifier
          example: US.USD.ACH
        label:
          type: string
          description: Human-readable label for the rail
          example: ACH
    DepositInstructionField:
      type: object
      title: Deposit Instruction Field
      description: Field shown as part of a deposit instruction
      required:
        - key
        - label
        - value
        - copyable
      properties:
        key:
          type: string
          description: Field key
          example: routingNumber
        label:
          type: string
          description: Human-readable label for the field
          example: Routing number
        value:
          type: string
          description: Field value
          example: '026073150'
        copyable:
          type: boolean
          description: Whether the field value can be copied
          example: true
        note:
          type:
            - string
            - 'null'
          description: Optional note about the field
    DepositInstructionDisclosure:
      type: object
      title: Deposit Instruction Disclosure
      description: A notice or warning to display alongside the deposit instruction
      required:
        - kind
        - text
      properties:
        kind:
          type: string
          description: Kind of disclosure, e.g. `notice` or `warning`
          example: notice
        text:
          type: string
          description: Text of the disclosure, intended for display to the end user
    StatementEntry:
      type: object
      title: Statement Entry
      description: One ledger leg on a statement
      required:
        - occurredAt
        - type
        - description
        - direction
        - amount
        - balanceBefore
        - balanceAfter
        - isFee
        - statusAsOfPeriodEnd
      properties:
        occurredAt:
          type: string
          description: Timestamp when the transaction occurred
          example: '2026-03-05T14:00:00Z'
          format: date-time
        type:
          type: string
          description: What the transaction is, without the party on the other side of it
          example: Deposit
        description:
          type: string
          description: >-
            Human-readable description of the transaction, naming the other
            party
          example: Deposit from Maria Santos Trading
        reference:
          type:
            - string
            - 'null'
          description: Reference identifier for the transaction
        direction:
          type: string
          description: Whether the amount is a debit or a credit
          example: CREDIT
          enum:
            - DEBIT
            - CREDIT
        amount:
          type: string
          description: Unsigned transaction amount
          example: '500.00'
        balanceBefore:
          type: string
          description: Account balance immediately before this entry
          example: '1000.00'
        balanceAfter:
          type: string
          description: Account balance immediately after this entry
          example: '1500.00'
        isFee:
          type: boolean
          description: Whether this entry is a fee nested under its parent transaction
          example: false
        statusAsOfPeriodEnd:
          type: string
          description: >-
            Ledger status of this entry as of the end of the statement period.
            The statement totals are derived from the balance each entry
            actually moved (balanceAfter minus balanceBefore), not from this
            status, so an entry that moved the balance is counted whatever its
            status. This field explains an entry whose amount is non-zero while
            balanceBefore and balanceAfter are equal: such an entry is printed
            for visibility and contributes nothing to the totals.
          example: SETTLED
          enum:
            - SETTLED
            - IN_FLIGHT
            - FAILED
    InvalidFormat:
      title: InvalidFormat
      description: The provided value exists, but its format is invalid for the field.
      allOf:
        - $ref: '#/components/schemas/ValidationError'
        - type: object
          required:
            - fieldRef
          properties:
            fieldRef:
              type: string
              description: The field or parameter that triggered the validation error.
            message:
              type: string
              description: A human-readable explanation of the validation failure.
    InvalidValue:
      title: InvalidValue
      description: >-
        The provided value is syntactically valid, but not accepted for the
        field.
      allOf:
        - $ref: '#/components/schemas/ValidationError'
        - type: object
          required:
            - fieldRef
          properties:
            fieldRef:
              type: string
              description: The field or parameter that triggered the validation error.
            message:
              type: string
              description: A human-readable explanation of the validation failure.
    MissingPathParameter:
      title: MissingPathParameter
      description: A required path parameter was not supplied.
      allOf:
        - $ref: '#/components/schemas/ValidationError'
        - type: object
          required:
            - fieldRef
          properties:
            fieldRef:
              type: string
              description: The field or parameter that triggered the validation error.
            message:
              type: string
              description: A human-readable explanation of the validation failure.
    MissingQueryParameter:
      title: MissingQueryParameter
      description: A required query parameter was not supplied.
      allOf:
        - $ref: '#/components/schemas/ValidationError'
        - type: object
          required:
            - fieldRef
          properties:
            fieldRef:
              type: string
              description: The field or parameter that triggered the validation error.
            message:
              type: string
              description: A human-readable explanation of the validation failure.
    MissingRequestBody:
      title: MissingRequestBody
      description: >-
        The request body is missing or does not contain the required non-null
        fields.
      allOf:
        - $ref: '#/components/schemas/ValidationError'
        - type: object
          properties:
            message:
              type: string
              description: A human-readable explanation of the validation failure.
            fieldRef:
              type: string
              description: The field or parameter that triggered the validation error.
    MissingValue:
      title: MissingValue
      description: A required value for the field was not provided.
      allOf:
        - $ref: '#/components/schemas/ValidationError'
        - type: object
          required:
            - fieldRef
          properties:
            fieldRef:
              type: string
              description: The field or parameter that triggered the validation error.
            message:
              type: string
              description: A human-readable explanation of the validation failure.
    NotFound:
      title: NotFound
      description: The referenced principal object was not found.
      allOf:
        - $ref: '#/components/schemas/ValidationError'
        - type: object
          required:
            - fieldRef
          properties:
            fieldRef:
              type: string
              description: The field or parameter that triggered the validation error.
            message:
              type: string
              description: A human-readable explanation of the validation failure.
    UnexpectedVerificationError:
      title: UnexpectedVerificationError
      description: A downstream verification step failed while checking the value.
      allOf:
        - $ref: '#/components/schemas/ValidationError'
        - type: object
          required:
            - fieldRef
          properties:
            fieldRef:
              type: string
              description: The field or parameter that triggered the validation error.
            message:
              type: string
              description: A human-readable explanation of the validation failure.
    Unknown:
      title: Unknown
      description: >-
        A validation error occurred but the specific field could not be
        determined.
      allOf:
        - $ref: '#/components/schemas/ValidationError'
        - type: object
          properties:
            message:
              type: string
              description: A human-readable explanation of the validation failure.
            fieldRef:
              type: string
              description: The field or parameter that triggered the validation error.
    UnprocessableValue:
      title: UnprocessableValue
      description: The provided value cannot be processed into a valid result.
      allOf:
        - $ref: '#/components/schemas/ValidationError'
        - type: object
          required:
            - fieldRef
          properties:
            fieldRef:
              type: string
              description: The field or parameter that triggered the validation error.
            message:
              type: string
              description: A human-readable explanation of the validation failure.
  examples:
    GetAccountStatementJsonUsdMonth:
      value:
        accountId: acc_01JMERUSDRET001
        accountDisplayName: null
        holderName: Oak Street Holdings LLC
        currency: USD
        from: '2026-03-01'
        to: '2026-03-31'
        generatedAt: '2026-04-01T00:05:00Z'
        depositInstructions:
          - id: depinst_01JMERACH001
            createdAt: '2026-02-28T14:00:00Z'
            updatedAt: '2026-02-28T14:00:00Z'
            status: ACTIVE
            rail:
              type: US.USD.ACH
              label: ACH
            supportedCurrencies:
              - USD
            fields:
              - key: accountHolderName
                label: Account holder name
                value: Oak Street Holdings LLC
                copyable: true
              - key: routingNumber
                label: Routing number
                value: '123456789'
                copyable: true
              - key: accountNumber
                label: Account number
                value: '1133557799'
                copyable: true
              - key: institutionName
                label: Institution name
                value: Example Bank N.A.
                copyable: true
            disclosures:
              - kind: notice
                text: ACH credits only.
        openingBalance: '1000.00'
        closingBalance: '1247.50'
        totalCredits: '500.00'
        totalDebits: '252.50'
        summary:
          - label: Deposits
            count: 1
            total: '500.00'
          - label: Fees
            count: 1
            total: '2.50'
          - label: Withdrawals
            count: 1
            total: '250.00'
        days:
          - date: '2026-03-05'
            openingBalance: '1000.00'
            closingBalance: '1497.50'
            entries:
              - occurredAt: '2026-03-05T14:00:00Z'
                description: Deposit
                reference: uspay-h2vuw0jaswgpzyxluhpz2709
                direction: CREDIT
                amount: '500.00'
                balanceBefore: '1000.00'
                balanceAfter: '1500.00'
                isFee: false
                statusAsOfPeriodEnd: SETTLED
              - occurredAt: '2026-03-05T14:00:00Z'
                description: Fee
                reference: uspay-h2vuw0jaswgpzyxluhpz2709
                direction: DEBIT
                amount: '2.50'
                balanceBefore: '1500.00'
                balanceAfter: '1497.50'
                isFee: true
                statusAsOfPeriodEnd: SETTLED
          - date: '2026-03-18'
            openingBalance: '1497.50'
            closingBalance: '1247.50'
            entries:
              - occurredAt: '2026-03-18T09:30:00Z'
                description: Withdrawal
                reference: uspay-k4rtz9mcx1ns7b0pvqle3d86
                direction: DEBIT
                amount: '250.00'
                balanceBefore: '1497.50'
                balanceAfter: '1247.50'
                isFee: false
                statusAsOfPeriodEnd: SETTLED
              - occurredAt: '2026-03-18T16:45:00Z'
                description: Deposit
                reference: uspay-w8cfj2qat5ry6ukd10hnzs43
                direction: CREDIT
                amount: '300.00'
                balanceBefore: '1247.50'
                balanceAfter: '1247.50'
                isFee: false
                statusAsOfPeriodEnd: IN_FLIGHT
    GetAccountStatementCsvDownloadLink:
      value:
        url: >-
          https://prod-us-remittances-account-statements.s3.amazonaws.com/statements/partner/acc_01JMERUSDRET001/2026-03-01_2026-03-31.csv?X-Amz-Expires=43200&X-Amz-Signature=EXAMPLE
        expiresAt: '2026-04-01T12:05:00Z'
    GetAccountStatementPdfDownloadLink:
      value:
        url: >-
          https://prod-us-remittances-account-statements.s3.amazonaws.com/statements/partner/acc_01JMERUSDRET001/2026-03-01_2026-03-31.pdf?X-Amz-Expires=43200&X-Amz-Signature=EXAMPLE
        expiresAt: '2026-04-01T12:05:00Z'
  securitySchemes:
    meridian-account-jwt:
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Bearer token authentication, for client-server calls.


        Send the access token issued by `POST /v1/auth/token` as `Authorization:
        Bearer {token}`. The token carries its own program and user context, so
        the `X-Meridian-*` headers are not required. See
        [Authentication](/products/meridian-accounts/guides/authentication-overview).
      type: http
    partner-api-key:
      name: X-Meridian-Signature
      in: header
      description: >-
        Meridian HMAC header authentication, for server-to-server calls.


        Required headers:
          - `X-Meridian-Api-Key`
          - `X-Meridian-Timestamp`
          - `X-Meridian-Program-Id`
          - `X-Meridian-User-Id` (MULTI_USER integrations only)
          - `X-Meridian-Signature`

        `X-Meridian-Signature` is the HMAC SHA-256 signature of the canonical
        request string, computed per request. See
        [Authentication](/products/meridian-accounts/guides/authentication-overview)
        for how to construct it.
      type: apiKey

````