> ## 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.

# List partners

> **Scope:** any one of `read`, `entries:write`.



## OpenAPI

````yaml /openapi.json get /v1/partners
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/partners:
    get:
      tags:
        - Tenant
      summary: List partners
      description: '**Scope:** any one of `read`, `entries:write`.'
      operationId: Tenancy_ListPartners
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListPartnersResponse'
        '401':
          $ref: '#/components/responses/Error'
        '403':
          $ref: '#/components/responses/Error'
        '503':
          $ref: '#/components/responses/Error'
components:
  schemas:
    ListPartnersResponse:
      type: object
      properties:
        partners:
          type: array
          items:
            $ref: '#/components/schemas/PartnerConnection'
    PartnerConnection:
      type: object
      properties:
        partner:
          type: string
          description: safehaven | nomba
        name:
          type: string
        currencies:
          type: array
          items:
            type: string
        mode:
          $ref: '#/components/schemas/PartnerConnectionMode'
        historyAccess:
          $ref: '#/components/schemas/PartnerConnectionHistoryAccess'
        hasCredential:
          type: boolean
        credentialRotatedAt:
          type: string
          format: date-time
        pendingApprovalId:
          type: string
        capabilities:
          type: array
          items:
            $ref: '#/components/schemas/PartnerConnectionCapability'
        lastWebhookAt:
          type: string
          format: date-time
        lastStatementAt:
          type: string
          format: date-time
        health:
          type: string
          description: OK | DELAYED | DOWN
        updatedBy:
          $ref: '#/components/schemas/Actor'
        updatedAt:
          type: string
          format: date-time
        credentialFields:
          type: array
          items:
            type: string
          description: >-
            what full integration asks for; empty when PanoQore cannot call this
            partner yet
        connectedAs:
          type: string
          description: the account name the partner reported when credentials were checked
        lastPolledAt:
          type: string
          format: date-time
        lastAnsweredAt:
          type: string
          format: date-time
          description: the last time the partner answered PanoQore
        failingSince:
          type: string
          format: date-time
          description: 'set while it does not: health is DELAYED, then DOWN after 10 minutes'
    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.
    PartnerConnectionMode:
      type: string
      enum:
        - LEDGER_ONLY
        - FULL
    PartnerConnectionHistoryAccess:
      type: string
      enum:
        - NONE
        - READ_API
        - UPLOAD
    PartnerConnectionCapability:
      type: object
      properties:
        id:
          type: string
          description: >-
            issue_named_accounts | check_named_accounts | inbound_credits |
            payouts | history
        title:
          type: string
        who:
          type: string
          description: PANOQORE | TENANT
        phase:
          type: string
          description: v1 | v2 | v3
    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
    ActorKind:
      type: string
      enum:
        - PERSON
        - API_KEY
        - SYSTEM
      description: '`SYSTEM`: worker jobs and adapters'
  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.