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

# Get an approval

> **Scope:** `read`.



## OpenAPI

````yaml /openapi.json get /v1/approvals/{id}
openapi: 3.0.3
info:
  title: PanoQore API
  version: v1
  description: >-
    The REST form of the panoqore.v1 contract, limited to what an API key can
    call. Generated from the contract: do not edit by hand.


    Bodies are JSON in lowerCamelCase. A field at its zero value (empty string,
    `0`, `false`, empty list) is left out of responses. 64-bit integers and
    money are strings.
servers:
  - url: https://api.panoqore.example
    description: 'Live. PLACEHOLDER: the production host has not been set'
  - url: https://api.sandbox.panoqore.example
    description: 'Sandbox. PLACEHOLDER: the sandbox host has not been set'
  - url: http://localhost:8080
    description: A server on your own machine
security:
  - bearerAuth: []
tags:
  - name: Accounts
    description: Accounts, their balances and their history.
  - name: Entries
    description: 'Balanced journal entries: post, hold pending, reverse.'
  - name: Holds
    description: Reservations on an account with no counterparty yet.
  - name: Named accounts
    description: >-
      Partner account numbers bound to wallets, and the credits reported to
      them.
  - name: Lending
    description: >-
      Lending turns loan events into balanced entries on the Lending module's
      accounts. PanoQore holds no loan terms: schedules, interest, allocation
      and credit decisions stay with the product, which tells the ledger what
      happened. Loans are told apart by the product's loan_ref, which is opaque
      and carries no PII.
  - name: Fees
    description: >-
      Fees charges a tenant's schedules as extra postings. A schedule applies
      only to an entry that names it in fee_schedule: the first debit leg pays,
      and the fee is credited to the schedule's income account.
  - name: FX
    description: Rates, quotes and conversions.
  - name: Reconciliation
    description: Partner statements, breaks and the daily control.
  - name: Reporting
    description: Periods, exports and the trial balance.
  - name: Webhooks
    description: >-
      Outbound webhooks: the same CloudEvents the event stream shows, posted to
      a tenant's HTTPS endpoints. Each delivery carries Qore-Signature: t=<unix
      seconds>,v1=<hex HMAC-SHA256 of "<t>.<body>">, made with the endpoint's
      signing secret. A delivery that is not answered 2xx within 10 seconds is
      retried: eight tries over 24 hours, then it waits for a replay. Delivery
      is at least once; drop duplicates by the event id. Managing endpoints
      needs the manage scope (tenant admins) or webhooks:manage (an API key).
  - name: Approvals
    description: >-
      Maker-checker for every change to money. One workflow for adjustments,
      reversals, freezes, limit changes, FX rates, integration-mode changes,
      named-account changes and live API keys.
  - name: Events
    description: >-
      The append-only, hash-chained event log. The same rows feed Kafka through
      the outbox.
  - name: Chart of accounts
    description: >-
      The tenant's chart of accounts: one ledger per currency or token, built
      from account modules, with internal accounts created from templates.
      Customer wallets are opened through Ledger.CreateAccount.
  - name: Tenant
    description: The tenant and what it is connected to.
  - name: Identity
    description: Who a credential is.
paths:
  /v1/approvals/{id}:
    get:
      tags:
        - Approvals
      summary: Get an approval
      description: '**Scope:** `read`.'
      operationId: Approvals_Get
      parameters:
        - name: id
          in: path
          required: true
          description: The id.
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Approval'
        '401':
          $ref: '#/components/responses/Error'
        '403':
          $ref: '#/components/responses/Error'
        '404':
          $ref: '#/components/responses/Error'
        '503':
          $ref: '#/components/responses/Error'
components:
  schemas:
    Approval:
      type: object
      properties:
        id:
          type: string
        kind:
          $ref: '#/components/schemas/ApprovalKind'
        status:
          $ref: '#/components/schemas/ApprovalStatus'
        title:
          type: string
        reason:
          type: string
        proposedBy:
          $ref: '#/components/schemas/Actor'
        approvalsRequired:
          type: integer
          format: int32
          description: 2 above tenant_policies.single_approver_max
        decisions:
          type: array
          items:
            $ref: '#/components/schemas/ApprovalDecision'
        amount:
          type: string
          description: the money at stake, when there is any Minor units, as a string.
        currency:
          type: string
        postings:
          type: array
          items:
            $ref: '#/components/schemas/PostingInput'
          description: >-
            What will happen on approval. For ADJUSTMENT and REVERSAL this is
            the entry to be posted.
        proposal:
          type: object
          additionalProperties: true
          description: kind-specific fields, schema per kind
        subjectId:
          type: string
          description: the account, entry, break or binding this is about
        breakId:
          type: string
        entryId:
          type: string
          description: the entry posted on approval
        failureCode:
          type: string
        canDecide:
          type: boolean
          description: >-
            Computed for the caller. has approve scope, did not propose it, has
            not already decided
        requiresStepUp:
          type: boolean
        createdAt:
          type: string
          format: date-time
        decidedAt:
          type: string
          format: date-time
    ApprovalKind:
      type: string
      enum:
        - ADJUSTMENT
        - REVERSAL
        - FREEZE
        - LIMIT_CHANGE
        - FX_RATE
        - INTEGRATION_MODE
        - NAMED_ACCOUNT_CHANGE
        - API_KEY
        - PERIOD_CLOSE
        - INTERNAL_ACCOUNT
        - LEDGER
        - MODULES
        - TEAM_CHANGE
        - FEE_SCHEDULE
      description: |-
        `ADJUSTMENT`: adj_

        `REVERSAL`: rev_

        `FREEZE`: frz_

        `LIMIT_CHANGE`: lim_

        `FX_RATE`: fx_

        `INTEGRATION_MODE`: mod_

        `NAMED_ACCOUNT_CHANGE`: nac_

        `API_KEY`: kyr_

        `PERIOD_CLOSE`: prd_

        `INTERNAL_ACCOUNT`: iac_

        `LEDGER`: ldg_

        `MODULES`: mdl_

        `TEAM_CHANGE`: tmc_ ; confirmed by a second tenant admin or an approver

        `FEE_SCHEDULE`: fee_
    ApprovalStatus:
      type: string
      enum:
        - WAITING
        - APPROVED
        - REJECTED
        - WITHDRAWN
        - FAILED
      description: >-
        `APPROVED`: and applied


        `FAILED`: approved, but applying it was refused (for example
        INSUFFICIENT_FUNDS)
    Actor:
      type: object
      description: 'Who did something: a person signed in to the console, or an API key.'
      properties:
        kind:
          $ref: '#/components/schemas/ActorKind'
        id:
          type: string
          description: usr_…, key_… or the job name
        displayName:
          type: string
    ApprovalDecision:
      type: object
      properties:
        by:
          $ref: '#/components/schemas/Actor'
        approved:
          type: boolean
        reason:
          type: string
        at:
          type: string
          format: date-time
    PostingInput:
      type: object
      properties:
        accountId:
          type: string
        side:
          $ref: '#/components/schemas/PostingSide'
        amount:
          type: string
          pattern: ^[0-9]+$
          example: '500000'
          description: Minor units, as a string.
        currency:
          type: string
          example: NGN
        ifMatchVersion:
          type: string
          format: int64
          description: >-
            optional optimistic lock on this account A 64-bit integer, written
            as a string.
      required:
        - accountId
        - side
        - amount
        - currency
    Error:
      type: object
      description: Every refusal on a `/v1` path has this shape. Branch on `error.code`.
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
            - details
          properties:
            code:
              type: string
              description: Stable and safe to branch on.
              example: INSUFFICIENT_FUNDS
            message:
              type: string
              description: For people. It can change.
            details:
              type: object
              additionalProperties:
                type: string
              description: Context for this code. Empty when there is none.
            request_id:
              type: string
              description: >-
                Quote it when you ask about a failure. Absent on
                `INVALID_REQUEST`, which is refused before a handler runs.
    ActorKind:
      type: string
      enum:
        - PERSON
        - API_KEY
        - SYSTEM
      description: '`SYSTEM`: worker jobs and adapters'
    PostingSide:
      type: string
      enum:
        - DEBIT
        - CREDIT
  responses:
    Error:
      description: Refused. See `error.code`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: An API key, `pk_live_…` or `pk_test_…`.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.