Transactions

A single endpoint returns the app's Partner-API payout ledger as a paginated object: "list" — GET /api/v1/apps/:app/transactions. Each row is one transaction with a stable id for MERGE / dedup, its own ISO currency, a full processed_at timestamp, and the gross / net / shopify_fee split.


GET/api/v1/apps/:app/transactions

Transactions

The app's Partner-API transaction ledger — the payout rows behind the revenue metric. Each row has a stable id, its own ISO currency, and a full processed_at timestamp (not just a day), plus the gross / net / shopify_fee split per row. Optional type and date-range filters; date filters apply to processed_at. Test transactions are excluded by default.

Path parameter

  • Name
    app
    Type
    string
    Description

    The team app's ULID.

Query parameters

  • Name
    type
    Type
    string
    Description

    Filter by Partner transaction type: APP_SUBSCRIPTION_SALE, APP_USAGE_SALE, APP_ONE_TIME_SALE, APP_SALE_ADJUSTMENT, APP_SALE_CREDIT, REFERRAL_TRANSACTION, APP_REFUND.

  • Name
    include_test
    Type
    boolean
    Description

    Include Shopify test transactions. Default false.

  • Name
    start_date
    Type
    string
    Description

    YYYY-MM-DD. Filters on processed_at (inclusive).

  • Name
    end_date
    Type
    string
    Description

    YYYY-MM-DD. Must be greater than or equal to start_date.

  • Name
    sort
    Type
    string
    Description

    Sort column: processed_at (default), created_at, gross_amount, net_amount.

  • Name
    order
    Type
    string
    Description

    asc or desc (default desc).

  • Name
    page
    Type
    integer
    Description

    Page to return. Default 1.

  • Name
    per_page
    Type
    integer
    Description

    Rows per page. Default 50, maximum 100.

Request

GET
/api/v1/apps/:app/transactions
curl -G https://ranksyapp.com/api/v1/apps/01JN4HKQX0000000000000000/transactions \
  -H "Authorization: Bearer rk_live_..." \
  -d type=APP_SUBSCRIPTION_SALE \
  -d start_date=2026-05-01 \
  -d end_date=2026-05-31

Response

{
  "object": "list",
  "url": "/api/v1/apps/01JN4HKQX0000000000000000/transactions",
  "page": 1,
  "per_page": 50,
  "total_count": 318,
  "has_more": true,
  "metadata": {
    "summary": { "total_transactions": 318 },
    "filters": {
      "type": "APP_SUBSCRIPTION_SALE",
      "include_test": false,
      "start_date": "2026-05-01",
      "end_date": "2026-05-31",
      "sort": "processed_at",
      "order": "desc"
    }
  },
  "data": [
    {
      "id": "9912034",
      "type": "APP_SUBSCRIPTION_SALE",
      "type_label": "Subscription sale",
      "shop": "acme-store.myshopify.com",
      "amount": 19.0,
      "gross_amount": 19.0,
      "net_amount": 15.2,
      "shopify_fee": 3.8,
      "currency": "USD",
      "processed_at": "2026-05-01T00:00:00+00:00",
      "created_at": "2026-05-01T04:12:00+00:00"
    }
  ]
}

Transactions are the rows behind the aggregate revenue series in the revenue metrics.


Response shape

The standard object: "list" envelope. This list is not date-windowed in the series sense, so there is no coverage block, and currency sits on each row (per-transaction payout currency) rather than on the envelope.

  • Name
    object
    Type
    string
    Description

    Always "list".

  • Name
    url
    Type
    string
    Description

    The endpoint path.

  • Name
    page
    Type
    integer
    Description

    Current page number.

  • Name
    per_page
    Type
    integer
    Description

    Rows per page.

  • Name
    total_count
    Type
    integer
    Description

    Total transactions across all pages, after filters.

  • Name
    has_more
    Type
    boolean
    Description

    Whether further pages exist.

  • Name
    metadata
    Type
    object
    Description

    Carries summary.total_transactions (the filtered total) and the echoed filters.

  • Name
    data
    Type
    array
    Description

    The transaction rows for this page.

Transaction row

  • Name
    id
    Type
    string
    Description

    Stable Partner-API transaction id. Use it to MERGE / dedup downstream.

  • Name
    type
    Type
    string
    Description

    Partner transaction type, e.g. APP_SUBSCRIPTION_SALE.

  • Name
    type_label
    Type
    string
    Description

    Human-readable label for type, e.g. Subscription sale.

  • Name
    shop
    Type
    string
    Description

    The paying store's myshopify.com domain.

  • Name
    amount
    Type
    number
    Description

    Alias of gross_amount, in currency.

  • Name
    gross_amount
    Type
    number
    Description

    Gross amount before Shopify's fee, in currency.

  • Name
    net_amount
    Type
    number
    Description

    Amount after Shopify's fee, in currency.

  • Name
    shopify_fee
    Type
    number
    Description

    Shopify's fee for this transaction, in currency.

  • Name
    currency
    Type
    string
    Description

    ISO code for this transaction's payout currency (can differ per row).

  • Name
    processed_at
    Type
    string
    Description

    ISO timestamp when the transaction processed.

  • Name
    created_at
    Type
    string
    Description

    ISO timestamp when the row was created.


Pagination

Walk the result set with page and per_page (default 50, maximum 100), and check has_more / total_count to know when to stop. total_count and metadata.summary are computed after your filters, so paging never changes them within a single filtered query.


Errors

Beyond the universal 401 / 403 / 422 / 429 (see Errors), this endpoint returns:

  • 409 — the app's Shopify Partner integration isn't usable: partner_integration_not_connected, partner_integration_unauthorized (reconnect in Ranksy), or partner_integration_pending (first sync still running — retry shortly).

A bad query parameter (unknown type, malformed date, out-of-range per_page) surfaces as a 422.

Was this page helpful?