Procurify Public API

The public API from Procurify — 2 operation(s) for public.

Operations 2

GET /api/public/v1/pay/transactions/ List Transactions #
GET /api/public/v1/payments/ List Payments #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/procurify-public-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

procurify-public-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Procurify API Documentation Public API
  version: ''
  description: '# Disclaimer


    - Procurify’s API is evolving and is subject to change at any time.'
servers:
- url: https://{user_domain}.procurify.com
  description: Your Procurify domain
  variables:
    user_domain:
      default: your-domain
      description: Your procurify domain
tags:
- name: Public
paths:
  /api/public/v1/pay/transactions/:
    get:
      operationId: public_v1_pay_transactions_list
      description: 'Returns a list of all closed (fully captured, not just authorizations)

        transactions across all issued cards on the platform, regardless of the

        cards current status.'
      summary: List Transactions
      parameters:
      - in: query
        name: end_date
        schema:
          type: string
          format: date-time
      - name: page
        required: false
        in: query
        description: A page number within the paginated result set.
        schema:
          type: integer
      - name: page_size
        required: false
        in: query
        description: Number of results to return per page.
        schema:
          type: integer
      - in: query
        name: reconciliation_status
        schema:
          type: integer
          enum:
          - pending
          - reviewed
        description: 'The reconciliation status of the transaction designated by accounts payable


          * `reviewed` - Reviewed

          * `pending` - Pending'
      - in: query
        name: start_date
        schema:
          type: string
          format: date-time
      tags:
      - Public
      security:
      - RemoteAuthentication: []
      - M2MAuthentication: []
      - BasicAuthentication: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedTransactionList'
          description: ''
  /api/public/v1/payments/:
    get:
      operationId: public_v1_payments_list
      summary: List Payments
      parameters:
      - in: query
        name: bill_groups
        schema:
          type: array
          items:
            type: integer
        description: Filter payments by a comma-separated list of bill group IDs.
        explode: false
        style: form
      - in: query
        name: created_at_after
        schema:
          type: string
          format: date-time
        description: Filter payments created on or after this date.
      - in: query
        name: created_at_before
        schema:
          type: string
          format: date-time
        description: Filter payments created on or before this date.
      - in: query
        name: currency
        schema:
          type: integer
        description: Filter payments by currency ID.
      - in: query
        name: ids
        schema:
          type: array
          items:
            type: integer
        description: Filter payments by a comma-separated list of payment IDs.
        explode: false
        style: form
      - in: query
        name: invoice_number
        schema:
          type: string
        description: Filter payments by exact bill invoice number.
      - in: query
        name: order_by
        schema:
          type: string
          enum:
          - -created_at
          - -updated_at
          - created_at
          - updated_at
        description: Order results by field. Prefix with '-' for descending order.
      - name: page
        required: false
        in: query
        description: A page number within the paginated result set.
        schema:
          type: integer
      - name: page_size
        required: false
        in: query
        description: Number of results to return per page.
        schema:
          type: integer
      - in: query
        name: payment_amount
        schema:
          type: number
        description: Filter payments with an amount equal to this value.
      - in: query
        name: processing_date_after
        schema:
          type: string
          format: date-time
        description: Filter payments with a processing date on or after this date.
      - in: query
        name: processing_date_before
        schema:
          type: string
          format: date-time
        description: Filter payments with a processing date on or before this date.
      - in: query
        name: status
        schema:
          type: array
          items:
            type: string
            enum:
            - approved
            - denied
            - draft
            - failed
            - paid
            - pending_approval
            - processing
            - scheduled
        description: 'Filter payments by status. Accepts a comma-separated list of statuses.


          * `draft` - draft

          * `pending_approval` - pending_approval

          * `approved` - approved

          * `denied` - denied

          * `paid` - paid

          * `processing` - processing

          * `failed` - failed

          * `scheduled` - scheduled'
        explode: false
        style: form
      - in: query
        name: updated_at_after
        schema:
          type: string
          format: date-time
        description: Filter payments updated on or after this date.
      - in: query
        name: updated_at_before
        schema:
          type: string
          format: date-time
        description: Filter payments updated on or before this date.
      - in: query
        name: vendor
        schema:
          type: integer
        description: Filter payments by vendor ID.
      tags:
      - Public
      security:
      - RemoteAuthentication: []
      - M2MAuthentication: []
      - BasicAuthentication: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedPaymentResponseList'
          description: ''
components:
  schemas:
    PaymentResponseStatusEnum:
      enum:
      - draft
      - pending_approval
      - approved
      - denied
      - paid
      - processing
      - failed
      - scheduled
      type: string
    PaginatedPaymentResponseList:
      type: object
      properties:
        metadata:
          type: object
          properties:
            pagination:
              type: object
              properties:
                count:
                  type: integer
                  example: 10
                next:
                  type:
                  - string
                  - 'null'
                  format: uri
                  example: null
                previous:
                  type:
                  - string
                  - 'null'
                  format: uri
                  example: null
                page_size:
                  type: integer
                  example: 10
                num_pages:
                  type: integer
                  example: 1
                current_page:
                  type: integer
                  example: 1
          example:
            pagination:
              count: 10
              next: null
              previous: null
              page_size: 10
              num_pages: 1
              current_page: 1
        data:
          type: array
          items:
            $ref: '#/components/schemas/PaymentResponse'
    TransactionCardholder:
      type: object
      properties:
        uuid:
          type: string
        first_name:
          type: string
        last_name:
          type: string
        status:
          allOf:
          - $ref: '#/components/schemas/TransactionCardholderStatusEnum'
          readOnly: true
          description: '

            * inactive: Cardholder is still awaiting activation

            * active: Cardholder is ready to use issuing

            * required_information: Cardholder must provide extra information

            * deleted: Cardholder has been deleted and can no longer use issuing

            * disabled: Cardholder has been disabled and can no longer use issuing'
      required:
      - first_name
      - last_name
      - uuid
    TransactionTypeEnum:
      enum:
      - spend
      - credit
      type: string
    TransactionAccount:
      type: object
      properties:
        account_code:
          type: string
        account_code_description:
          type: string
        department:
          type: string
        department_branch:
          type: string
      required:
      - account_code
      - account_code_description
      - department
      - department_branch
    ReconciliationStatusEnum:
      enum:
      - pending
      - reviewed
      type: string
    TransationCardStatusEnum:
      enum:
      - pending
      - active
      - inactive
      - canceled
      - lost
      - stolen
      type: string
    TransactionFund:
      type: object
      properties:
        uuid:
          type: string
        title:
          type: string
        reason:
          type: string
        status:
          allOf:
          - $ref: '#/components/schemas/TransactionFundStatusEnum'
          readOnly: true
          description: '

            * open: The fund is open and available for use

            * closed: The fund is closed and no longer available for use'
        date_created:
          type: string
          format: date-time
        amount:
          type: string
          readOnly: true
        account:
          $ref: '#/components/schemas/TransactionAccount'
      required:
      - account
      - date_created
      - reason
      - title
      - uuid
    Transaction:
      type: object
      properties:
        id:
          type: integer
        note:
          type: string
          description: User provided additional text about this transaction
        vendor:
          $ref: '#/components/schemas/TransactionVendor'
        currency:
          type: string
          description: The currency that this transaction was handled in
        amount:
          type: string
          readOnly: true
          description: The value in the base unit of currency that this transaction was charged at
        vendor_currency:
          type: string
          description: The currency this transaction was created
        vendor_amount:
          type:
          - string
          - 'null'
          readOnly: true
          description: The value in the base unit of currency that this transaction was charged at by the vendor
        status:
          allOf:
          - $ref: '#/components/schemas/TransactionStatusEnum'
          readOnly: true
          description: '

            * capture: Deducting purchase amount from account balance

            * precapture: Funds reserved due to card usage

            * refund: Refunding the purchase amount back to account balance'
          type:
          - object
          - 'null'
        authorization_status:
          allOf:
          - $ref: '#/components/schemas/AuthorizationStatusEnum'
          readOnly: true
          description: '

            * reversed: Previously approved and held funds have been released

            * pending: Funds have been approved for a transaction and are currently held

            * closed: Look at `status` for more details, the authorization is no longer relevant'
          type:
          - object
          - 'null'
        authorization_datetime:
          type: string
          format: date-time
          description: The date that this transaction was initially authorized at
        transaction_datetime:
          type: string
          format: date-time
          description: The date that this transaction was captured
        allocation_datetime:
          type: string
          format: date-time
          description: The date that this transaction was allocated to a fund
        card:
          allOf:
          - $ref: '#/components/schemas/TransationCard'
          description: The card this transaction was created with
        receipt_attachments:
          type: array
          items:
            type: string
          readOnly: true
          description: User provided images of receipts about this transactions
        fund:
          allOf:
          - $ref: '#/components/schemas/TransactionFund'
          description: The fund this transaction is allocated to
        account:
          allOf:
          - $ref: '#/components/schemas/TransactionAccount'
          description: The chart-of-accounts entry assigned to this transaction by the cardholder or reconciler/accountant. Null when no account has been assigned.
          type:
          - object
          - 'null'
        type:
          allOf:
          - $ref: '#/components/schemas/TransactionTypeEnum'
          readOnly: true
          description: '

            * spend: A transaction that has occurred on the issuing network

            * credit: A transaction about allocating fund usage from selecting a fund in Procurify

            '
        reconciliation_status:
          allOf:
          - $ref: '#/components/schemas/ReconciliationStatusEnum'
          readOnly: true
          description: '

            * pending: Transaction has not yet been reconciled

            * reviewed: Transaction has been reviewed during reconciliation'
        cardholder:
          $ref: '#/components/schemas/TransactionCardholder'
        linked_authorization:
          type: string
          description: Any transactions which share the same linked_authorization value are part of the same lifecycle for a transaction
        custom_fields:
          type: array
          items:
            $ref: '#/components/schemas/TransactionCustomField'
          description: A list of any custom fields provided for this transaction
      required:
      - account
      - allocation_datetime
      - authorization_datetime
      - card
      - cardholder
      - currency
      - custom_fields
      - fund
      - id
      - linked_authorization
      - note
      - transaction_datetime
      - vendor
      - vendor_currency
    PaymentSourceTypeEnum:
      enum:
      - direct_debit
      - financial_account
      - external
      type: string
    TransactionCustomField:
      type: object
      properties:
        name:
          type: string
        value:
          type: string
        type:
          allOf:
          - $ref: '#/components/schemas/TransactionCustomFieldTypeEnum'
          readOnly: true
      required:
      - name
      - value
    TransactionCustomFieldTypeEnum:
      enum:
      - text
      - text_field
      - integer
      - float
      - boolean
      - dropdown
      - date
      - datetime
      type: string
    TransationCard:
      type: object
      properties:
        uuid:
          type: string
        last_four_digits:
          type: string
        status:
          allOf:
          - $ref: '#/components/schemas/TransationCardStatusEnum'
          readOnly: true
          description: '

            * pending: Card has been created but is not yet active. It cannot authorize transactions

            * active: Card has been active and is ready for use

            * inactive: Card has been locked and can no longer authorize transactions

            * canceled: Card has been canceled and can no longer authorize transactions

            * lost: Card has been reported lost and can no longer authorize transactions

            * stolen: Card has been reported stolen and no longer authorize transactions'
          type:
          - object
          - 'null'
      required:
      - last_four_digits
      - uuid
    TransactionFundStatusEnum:
      enum:
      - open
      - closed
      type: string
    TransactionVendor:
      type: object
      properties:
        name:
          type: string
        category:
          type: string
        city:
          type: string
        state:
          type: string
        country:
          type: string
        postal_code:
          type: string
      required:
      - category
      - city
      - country
      - name
      - postal_code
      - state
    TransactionStatusEnum:
      enum:
      - capture
      - precapture
      - refund
      type: string
    TransactionCardholderStatusEnum:
      enum:
      - inactive
      - active
      - requires_information
      - deleted
      - disabled
      type: string
    PaymentCreator:
      type: object
      properties:
        email:
          type: string
        first_name:
          type: string
        last_name:
          type: string
      required:
      - email
      - first_name
      - last_name
    PaginatedTransactionList:
      type: object
      properties:
        metadata:
          type: object
          properties:
            pagination:
              type: object
              properties:
                count:
                  type: integer
                  example: 10
                next:
                  type:
                  - string
                  - 'null'
                  format: uri
                  example: null
                previous:
                  type:
                  - string
                  - 'null'
                  format: uri
                  example: null
                page_size:
                  type: integer
                  example: 10
                num_pages:
                  type: integer
                  example: 1
                current_page:
                  type: integer
                  example: 1
          example:
            pagination:
              count: 10
              next: null
              previous: null
              page_size: 10
              num_pages: 1
              current_page: 1
        data:
          type: array
          items:
            $ref: '#/components/schemas/Transaction'
    AuthorizationStatusEnum:
      enum:
      - reversed
      - pending
      - closed
      type: string
    PaymentCurrencyResponse:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
      required:
      - id
      - name
    PaymentResponse:
      type: object
      properties:
        id:
          type: integer
        uuid:
          type: string
        payment_source_name:
          type:
          - string
          - 'null'
          readOnly: true
        payment_source_type:
          allOf:
          - $ref: '#/components/schemas/PaymentSourceTypeEnum'
          readOnly: true
          description: '

            * direct_debit: Payment is paid from a direct debit account

            * financial_account: Payment is paid from a financial account

            * external: Payment is paid outside of Procurify'
          type:
          - object
          - 'null'
        external_payment_source_id:
          type:
          - integer
          - 'null'
          readOnly: true
          description: External bank account ID
        creator:
          $ref: '#/components/schemas/PaymentCreator'
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        amount:
          type: string
          format: decimal
          pattern: ^-?\d{0,19}(?:\.\d{0,2})?$
        currency:
          $ref: '#/components/schemas/PaymentCurrencyResponse'
        status:
          allOf:
          - $ref: '#/components/schemas/PaymentResponseStatusEnum'
          readOnly: true
          description: '

            * draft: Payment has been created but not yet submitted for approval.

            * pending_approval: Payment is waiting for approval.

            * approved: Payment has been approved and is awaiting processing.

            * denied: Payment has been denied by an approver.

            * paid: Payment has been successfully completed.

            * processing: Payment is currently being processed.

            * failed: Payment processing has failed.

            * scheduled: Payment is scheduled for a future processing date.'
          type:
          - object
          - 'null'
        processing_date:
          type:
          - string
          - 'null'
          readOnly: true
        direct_debit_bank_account_mask:
          type:
          - string
          - 'null'
          description: Last 4 digits of direct debit account.
        vendor_name:
          type:
          - string
          - 'null'
          readOnly: true
        posted_date:
          type:
          - string
          - 'null'
          format: date
        gl_code:
          type:
          - string
          - 'null'
          readOnly: true
          description: Payment source's GL code.
        vendor_payment_method_country_code:
          type:
          - string
          - 'null'
          readOnly: true
          description: ISO 3166 country codes
        vendor_payment_method_rail:
          type:
          - string
          - 'null'
          readOnly: true
          description: 'Rails supported: ACH, FEDWIRE, PAPER_CHECK, LOCAL, etc.'
        bill_groups:
          type: array
          items:
            type: integer
          readOnly: true
          description: List of bill group IDs associated with the payment.
      required:
      - amount
      - created_at
      - creator
      - currency
      - direct_debit_bank_account_mask
      - id
      - posted_date
      - updated_at
      - uuid
  securitySchemes:
    BasicAuthentication:
      type: http
      scheme: basic
    M2MAuthentication:
      type: http
      scheme: bearer
      bearerFormat: JWT
    RemoteAuthentication:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://<your-domain>.procurify.com/oauth/authorize
          tokenUrl: https://<your-domain>.procurify.com/oauth/token
          scopes: {}
    cookieAuth:
      type: apiKey
      in: cookie
      name: sessionid