Loopwise Docs
Admin APIQueries

Payments Query

Query operations for payments in the Loopwise Admin API

Note: The Loopwise Admin API is currently under development and not yet available for public use. This documentation is provided for preview purposes only.

Overview

The Payments API allows you to retrieve information about payments in your school. Payments represent financial transactions made by users when purchasing courses, memberships, events, digital downloads, and other products. This API provides access to payment details, refund information, and filtering capabilities.

Available Queries

payments

Returns a paginated list of payments for the authenticated school.

Parameters:

ParameterTypeDescription
filterAdminPaymentFilterFilter criteria (see Filtering)
pageIntPage number for pagination
perPageIntNumber of items per page (default: 20, max: 50)
limitIntAlternative to perPage

Returns:

  • AdminPaymentPage object with:
    • nodes: Array of AdminPayment objects
    • currentPage: Current page number
    • hasNextPage: Whether there are more pages
    • hasPreviousPage: Whether there are previous pages
    • nodesCount: Total number of items in the current page
    • totalPages: Total number of pages

Example:

query {
  payments(
    filter: {
      paymentState: { eq: "paid" },
      paidAt: { gte: 1704067200 }
    },
    page: 1,
    perPage: 10
  ) {
    nodes {
      id
      tradeNo
      amount
      currency
      paymentType
      paidAt
      user {
        id
        email
        name
      }
      lineitems {
        name
        amount
        itemType
      }
    }
    currentPage
    hasNextPage
    hasPreviousPage
    nodesCount
    totalPages
  }
}

AdminPayment Object

The AdminPayment object contains the following fields:

FieldTypeDescription
idString!Unique identifier
userAdminUser!The user who made the payment
tradeNoStringUnique trade/transaction number from the payment gateway
currencyString!Currency code (e.g., TWD, USD) in ISO 4217 format
currencySymbolString!Currency symbol (e.g., $, NT$)
amountFloat!Payment amount
refundedAmountFloatAmount that has been refunded
refundAmountFloat!Returns the refund amount if the payment is refunding, otherwise returns the refunded amount
discountAmountFloatDiscount amount applied to this payment
paymentTypeStringPayment method (e.g., credit, atm, cvs, web_atm, barcode, line_pay)
paidAtIntUnix timestamp when the payment was completed
refundedAtIntUnix timestamp when the payment was refunded
expiredAtIntUnix timestamp when the payment expired
affiliateCodeStringAffiliate tracking code, if applicable
remarkStringAdditional remarks or notes
lineitems[Lineitem]List of purchased items in this payment
invoiceInvoiceAssociated invoice, if issued
installmentIntInstallment period for credit card payments, if applicable
createdAtInt!Unix timestamp when the payment record was created
updatedAtInt!Unix timestamp when the payment record was last updated

Filtering

The payments query supports filtering through the filter parameter. The following filter fields are available:

Filter FieldTypeDescription
idStringOperatorFilter by payment ID
amountFloatOperatorFilter by payment amount
paymentStateStringOperatorFilter by payment state (not_paid, paid, expired, failed, manual_enrolled, refunding, refunded)
paidAtIntOperatorFilter by payment timestamp (Unix timestamp)
refundedAtIntOperatorFilter by refund timestamp (Unix timestamp)
createdAtIntOperatorFilter by creation timestamp (Unix timestamp)
tradeNoStringOperatorFilter by trade/transaction number

StringOperator Filters

OperatorDescriptionExample
eqEqual to{ tradeNo: { eq: "T20250101001" } }
neqNot equal to{ paymentState: { neq: "expired" } }
inIn a list of values{ paymentState: { in: ["paid", "refunding"] } }
ninNot in a list of values{ paymentState: { nin: ["expired", "failed"] } }
likeContains substring (case-sensitive){ tradeNo: { like: "T2025" } }
containsContains substring (case-insensitive){ tradeNo: { contains: "T2025" } }

IntOperator Filters

OperatorDescriptionExample
eqEqual to{ paidAt: { eq: 1704067200 } }
gtGreater than{ paidAt: { gt: 1704067200 } }
gteGreater than or equal{ paidAt: { gte: 1704067200 } }
ltLess than{ paidAt: { lt: 1735689600 } }
lteLess than or equal{ paidAt: { lte: 1735689600 } }

FloatOperator Filters

OperatorDescriptionExample
eqEqual to{ amount: { eq: 999.0 } }
gtGreater than{ amount: { gt: 500.0 } }
gteGreater than or equal{ amount: { gte: 500.0 } }
ltLess than{ amount: { lt: 2000.0 } }
lteLess than or equal{ amount: { lte: 2000.0 } }

Filter Examples

Find all paid payments in a date range:

query {
  payments(
    filter: {
      paymentState: { eq: "paid" },
      paidAt: { gte: 1704067200, lte: 1735689600 }
    }
  ) {
    nodes {
      id
      tradeNo
      amount
      currency
      paidAt
      user {
        id
        email
      }
    }
  }
}

Find refunded payments in a specific period:

query {
  payments(
    filter: {
      paymentState: { eq: "refunded" },
      refundedAt: { gte: 1704067200, lte: 1735689600 }
    }
  ) {
    nodes {
      id
      tradeNo
      amount
      refundedAmount
      refundedAt
      user {
        id
        email
      }
    }
  }
}

Look up a specific payment by trade number:

query {
  payments(
    filter: {
      tradeNo: { eq: "T20250101001" }
    }
  ) {
    nodes {
      id
      tradeNo
      amount
      currency
      paymentType
      paidAt
    }
  }
}

Find high-value payments:

query {
  payments(
    filter: {
      paymentState: { in: ["paid", "refunding"] },
      amount: { gte: 10000.0 }
    }
  ) {
    nodes {
      id
      amount
      currency
      paymentType
      user {
        id
        name
        email
      }
    }
  }
}

Relationships

The Payment API relates to:

  • Users: Each payment belongs to a user
  • Lineitems: A payment contains one or more line items representing purchased products
  • Invoices: A payment may have an associated invoice

Detailed Query Structure

Below is a comprehensive view of fields available in the payments query:

query {
  payments(
    filter: {
      id: { eq: "payment_123" }              # Filter by ID (StringOperator)
      amount: { gte: 100.0 }                 # Filter by amount (FloatOperator)
      paymentState: { eq: "paid" }           # Filter by state (StringOperator)
      paidAt: { gte: 1704067200 }            # Filter by paid timestamp (IntOperator)
      refundedAt: { gte: 1704067200 }        # Filter by refund timestamp (IntOperator)
      createdAt: { gte: 1704067200 }         # Filter by creation timestamp (IntOperator)
      tradeNo: { eq: "T20250101001" }        # Filter by trade number (StringOperator)
    },
    page: 1,                                  # Page number (Int)
    perPage: 20                               # Items per page (Int)
  ) {
    nodes {
      id                                      # Unique identifier (String!)
      tradeNo                                 # Trade/transaction number (String)

      # Financial information
      amount                                  # Payment amount (Float!)
      currency                                # Currency code (String!)
      currencySymbol                          # Currency symbol (String!)
      discountAmount                          # Discount applied (Float)
      refundedAmount                          # Amount refunded (Float)
      refundAmount                            # Current refund amount (Float!)

      # Payment details
      paymentType                             # Payment method (String)
      installment                             # Credit card installment period (Int)
      affiliateCode                           # Affiliate tracking code (String)
      remark                                  # Additional notes (String)

      # Timestamps (Unix)
      paidAt                                  # When payment was completed (Int)
      refundedAt                              # When payment was refunded (Int)
      expiredAt                               # When payment expired (Int)
      createdAt                               # When record was created (Int!)
      updatedAt                               # When record was last updated (Int!)

      # Related objects
      user {                                  # Payment user (AdminUser!)
        id
        email
        name
      }
      lineitems {                             # Purchased items ([Lineitem])
        name
        amount
        itemType
      }
      invoice {                               # Associated invoice (Invoice)
        id
        number
        state
      }
    }

    # Pagination information
    currentPage                               # Current page number (Int!)
    hasNextPage                               # Whether there are more pages (Boolean!)
    hasPreviousPage                           # Whether there are previous pages (Boolean!)
    nodesCount                                # Number of items on current page (Int!)
    totalPages                                # Total number of pages (Int!)
  }
}

On this page