ClickFunnels Orders::Transaction API

Order Transactions

Operations 3

GET /orders/{order_id}/transactions List Transactions #
GET /orders/transactions/{id} Fetch Transaction #
POST /orders/transactions/{id}/refund Refund Transaction #

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/clickfunnels-orders-transaction-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

clickfunnels-orders-transaction-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: ClickFunnels Orders::Transaction API
  termsOfService: https://www.clickfunnels.com/terms-of-service
  contact:
    name: ClickFunnels API Team
    url: https://developers.myclickfunnels.com
  x-logo:
    url: https://statics.myclickfunnels.com/image/1126065/file/31edf05760fafe41a82f16a668ab251f.png
  description: 'The ClickFunnels REST API that powers webhooks, native integrations, and Zapier lets you manage your ClickFunnels data, automate your workflows, and recreate ClickFunnels functionality in your own apps.

    '
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
  version: 2.0.0
servers:
- url: https://{subdomain}.myclickfunnels.com/api/v2
  description: ClickFunnels API
  variables:
    subdomain:
      default: myworkspace
security:
- BearerAuth: []
tags:
- name: Orders::Transaction
  description: Order Transactions
paths:
  /orders/{order_id}/transactions:
    get:
      tags:
      - Orders::Transaction
      summary: List Transactions
      description: List transactions for an order
      operationId: listOrdersTransactions
      parameters:
      - name: order_id
        in: path
        required: true
        schema:
          type: string
      - $ref: '#/components/parameters/after'
      - $ref: '#/components/parameters/sort_order'
      - $ref: '#/components/parameters/sort_property'
      responses:
        '200':
          description: OK
          headers:
            Pagination-Next:
              $ref: '#/components/headers/PaginationNext'
            Link:
              $ref: '#/components/headers/Link'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/OrdersTransactionAttributes'
              example:
              - id: 2
                public_id: EzgTHG
                order_id: 40
                status: completed
                external_type: sale
                external_id: 6b436949b329728434b26662ee95d57a
                amount: '100.00'
                currency: USD
                reason: null
                adjusted_transaction_id: null
                result: approved
                billing_payment_instruction_id: null
                billing_payment_instruction_type: null
                arn: null
                is_rebill: false
                rebill_number: null
                created_at: null
                updated_at: null
              - id: 3
                public_id: WjodBq
                order_id: 41
                status: completed
                external_type: sale
                external_id: a8344a384a200f11c69970cca8cc5f87
                amount: '100.00'
                currency: USD
                reason: null
                adjusted_transaction_id: null
                result: approved
                billing_payment_instruction_id: null
                billing_payment_instruction_type: null
                arn: null
                is_rebill: false
                rebill_number: null
                created_at: null
                updated_at: null
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
              example:
                error: API key missing or invalid
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID.
              example:
                error: 'Not found: Record missing'
  /orders/transactions/{id}:
    get:
      tags:
      - Orders::Transaction
      summary: Fetch Transaction
      description: Retrieve a transaction for an order
      operationId: getOrdersTransactions
      parameters:
      - $ref: '#/components/parameters/id'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrdersTransactionAttributes'
              example:
                id: 4
                public_id: oaSpKq
                order_id: 42
                status: completed
                external_type: sale
                external_id: ac3a48524377eb673c500b3a53a28b36
                amount: '100.00'
                currency: USD
                reason: null
                adjusted_transaction_id: null
                result: approved
                billing_payment_instruction_id: null
                billing_payment_instruction_type: null
                arn: null
                is_rebill: false
                rebill_number: null
                created_at: null
                updated_at: null
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
              example:
                error: API key missing or invalid
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
              example:
                error: 'Not found: Record missing'
  /orders/transactions/{id}/refund:
    post:
      tags:
      - Orders::Transaction
      summary: Refund Transaction
      description: 'Refund this charge, in full, through ClickFunnels'' own refund path (the same path the in-app

        refund button uses) so the money actually moves back through the payment processor (Payments

        AI/Rebilly or Stripe).


        A refund addresses a transaction because the transaction IS the charge: refundable balance and

        refund eligibility are tracked per transaction, and the refund is recorded against this one. A

        subscription order accumulates one charge per renewal and an invoice can carry more than one,

        so neither identifies a single charge to reverse. List an order''s charges with `GET

        /orders/{order_id}/transactions` and refund the one you mean - a refundable charge has

        `external_type` `sale` or `capture`, `result: approved`, and `status` `completed` or

        `partially-refunded`.


        Partial refunds are deliberately not offered here, so this always refunds the charge''s full

        outstanding amount. Writing `status: refunded` onto an invoice is not an alternative: that is

        available only for external (self-managed) orders, and a local status write moves no money.


        Payments AI/Rebilly records the refund synchronously, so the returned transaction already

        reflects it (200). Stripe only initiates the refund and confirms it in a later webhook, so the

        response is 202 and the returned transaction can still show its pre-refund `status`; poll `GET

        /orders/transactions/{id}` for the settled state. Please refer to [our Orders Overview

        guide](https://developers.myclickfunnels.com/docs/orders) for more information about the

        different types of orders and payment processors.'
      operationId: refundOrdersTransactions
      parameters:
      - $ref: '#/components/parameters/id'
      requestBody:
        description: 'Optional refund parameters. Omit the body entirely (or send `{"orders_transaction": {}}`) to refund with defaults.'
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                orders_transaction:
                  $ref: '#/components/schemas/OrdersTransactionParametersRefund'
            example:
              orders_transaction:
                reason: requested_by_customer
      responses:
        '200':
          description: OK - the processor refunded the charge in-request (Payments AI/Rebilly), so the returned transaction already reflects it. `status` becomes `refunded`, or `partially-refunded` when earlier refunds left a remaining balance.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrdersTransactionAttributes'
              example:
                id: 4
                public_id: oaSpKq
                order_id: 42
                status: refunded
                external_type: sale
                external_id: ac3a48524377eb673c500b3a53a28b36
                amount: '100.00'
                currency: USD
                reason: requested_by_customer
                adjusted_transaction_id: null
                result: approved
                billing_payment_instruction_id: null
                billing_payment_instruction_type: null
                arn: null
                is_rebill: false
                rebill_number: null
                created_at: null
                updated_at: null
        '202':
          description: Accepted - the processor accepted the refund but settles it asynchronously (Stripe). It confirms in a later webhook, so the returned transaction can still show its pre-refund `status`; poll `GET /orders/transactions/{id}` until it settles.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrdersTransactionAttributes'
              example:
                id: 4
                public_id: oaSpKq
                order_id: 42
                status: completed
                external_type: sale
                external_id: ac3a48524377eb673c500b3a53a28b36
                amount: '100.00'
                currency: USD
                reason: null
                adjusted_transaction_id: null
                result: approved
                billing_payment_instruction_id: null
                billing_payment_instruction_type: null
                arn: null
                is_rebill: false
                rebill_number: null
                created_at: null
                updated_at: null
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
              example:
                error: API key missing or invalid
        '404':
          description: 'Not Found - the transaction does not exist, does not belong to a workspace your API key

            can access, or is not a refundable charge (already refunded, declined, not a sale, on a

            deleted order, or a payment method that does not support API refunds).


            Both bodies below mean the same thing to a caller: not refundable. Which one you get

            depends on where the record was hidden, so match on the status rather than the message.

            Fetch `GET /orders/{order_id}/transactions` and check `external_type`, `result` and

            `status` to tell the cases apart.'
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
              examples:
                not_refundable_or_inaccessible:
                  summary: Already refunded, not a charge, or outside the workspaces this key can reach
                  value:
                    error: Not found
                unknown_declined_or_deleted:
                  summary: No such transaction, a declined charge, or a charge on a deleted order
                  value:
                    error: 'Not found: Record 4 missing'
        '422':
          description: Unprocessable Entity - the request was understood but not performed. The charge keeps its previous status and no money moved, so it is safe to correct the request and retry.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
              examples:
                partial_refund_requested:
                  summary: 'Sent partial: true, or an amount'
                  value:
                    error: 'Request unprocessable: Partial refunds are not supported via this endpoint (full refund of this charge only)'
                invalid_reason:
                  summary: reason is not accepted by this order's payment processor
                  value:
                    error: 'Request unprocessable: Invalid reason ''store-credit''. Valid values: duplicate, fraudulent, requested_by_customer'
                processor_declined:
                  summary: The payment processor declined the refund
                  value:
                    error: 'Request unprocessable: Transaction not found.'
components:
  parameters:
    id:
      name: id
      in: path
      required: true
      schema:
        type: string
    sort_property:
      name: sort_property
      in: query
      description: 'Sort property of a list response. The default is id and thus the created_at order.

        If you sort by other properties, we additionally sort by id implicitly as a secondary sort property, so that you can rely on the sort order to be deterministic even if the main sort property ends up with the same values.

        '
      required: false
      schema:
        type: string
        enum:
        - id
        - updated_at
    sort_order:
      name: sort_order
      in: query
      description: Sort order of a list response. Use 'desc' to reverse the default 'asc' (ascending) sort order. Examples [in our guides](https://developers.myclickfunnels.com/docs/pagination).
      required: false
      schema:
        type: string
        enum:
        - asc
        - desc
    after:
      name: after
      in: query
      required: false
      schema:
        type: string
      description: ID of item after which the collection should be returned. More examples and info about pagination [in our guides](https://developers.myclickfunnels.com/docs/pagination).
  schemas:
    OrdersTransactionAttributes:
      type: object
      title: Payments
      description: Payments
      properties:
        id:
          type: integer
          description: Transaction ID
        public_id:
          type:
          - string
          - 'null'
          description: Transaction public ID
        order_id:
          type: integer
          description: Order ID
        status:
          type: string
          description: Status
        external_type:
          type:
          - string
          - 'null'
          description: Type
        external_id:
          type: string
          description: External ID
        amount:
          type:
          - string
          - 'null'
          description: Amount
        currency:
          type:
          - string
          - 'null'
          description: Currency
        reason:
          type:
          - string
          - 'null'
          description: Reason
        adjusted_transaction_id:
          type:
          - string
          - 'null'
          description: Adjusted transaction
        result:
          type: string
          description: Result
        billing_payment_instruction_id:
          type:
          - string
          - 'null'
          description: Billing Payment Instruction ID
        billing_payment_instruction_type:
          type:
          - string
          - 'null'
          description: Billing Payment Instruction Type
        arn:
          type:
          - string
          - 'null'
          description: ARN
        is_rebill:
          type:
          - boolean
          - 'null'
          description: Is Rebill
        rebill_number:
          type:
          - string
          - 'null'
          description: Rebill Number
        created_at:
          type:
          - string
          - 'null'
          description: Created
        updated_at:
          type:
          - string
          - 'null'
          description: Updated
      example:
        id: 1
        public_id: NpboZw
        order_id: 6
        status: completed
        external_type: sale
        external_id: 4a74b081c7ff7d8d7332e54d7d2a89df
        amount: '100.00'
        currency: USD
        reason: null
        adjusted_transaction_id: null
        result: approved
        billing_payment_instruction_id: null
        billing_payment_instruction_type: null
        arn: null
        is_rebill: false
        rebill_number: null
        created_at: null
        updated_at: null
      required:
      - adjusted_transaction_id
      - amount
      - arn
      - billing_payment_instruction_id
      - billing_payment_instruction_type
      - created_at
      - currency
      - external_id
      - external_type
      - id
      - is_rebill
      - order_id
      - public_id
      - reason
      - rebill_number
      - result
      - status
      - updated_at
    OrdersTransactionParametersRefund:
      type: object
      title: Refund Transaction
      description: 'Parameters for `POST /orders/transactions/{id}/refund`. Every field is optional - a bare POST

        (or `{"orders_transaction": {}}`) refunds the addressed charge with defaults.


        The refund is always for the charge''s full outstanding amount, so there is no amount to send.

        Partial refunds are deliberately not offered here: they are a human-gated exception, handled in

        the ClickFunnels admin.'
      required: []
      properties:
        reason:
          type: string
          description: 'Defaults to `requested_by_customer`.


            Stripe orders accept only `duplicate`, `fraudulent`, or `requested_by_customer`; any other

            value returns 422 listing the accepted set. Payments AI (Rebilly) orders treat this as a

            free-text description that is recorded on the refund and the order timeline.'
        partial:
          type: boolean
          description: 'Must be `false` or omitted. Sending `true` returns 422 rather than silently refunding the

            full charge. An `amount` field is rejected the same way - honoring it would be a partial

            refund, and ignoring it would refund more than you asked for.'
      example:
        reason: requested_by_customer
  headers:
    Link:
      description: A direct link to the next page for the cursor-based pagination. It includes the `after` and the Pagination-Next ID value.
      schema:
        type: string
    PaginationNext:
      description: ID of the last item in the current response after which more records exist. You can use it in an `after` query parameter for cursor-based pagination to get to the next page.
      schema:
        type: string
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
externalDocs:
  description: More in-depth guides and further resources
  url: https://developers.myclickfunnels.com