query paymentsAuthenticated

Lists payments as a Relay-style, cursor-paginated connection.

Page forward by starting with first: N, then passing the previous response's pageInfo.endCursor back as after (repeat while pageInfo.hasNextPage); page backward with last + before. Scope the results with one of orgId / agencyId / configurationId and/or a start/end date range via PaymentsInput. See PaymentConnection for the response shape. Results are ordered newest first.

Returns PaymentConnection!

Arguments

ArgumentTypeDescription
inputPaymentsInput

Example request

curl -X POST 'https://graph.clientloop.com/' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <api-key>' \
  -d '{
    "query": "query Payments($input: PaymentsInput) { payments(input: $input) { edges { node { id orgId provider configurationId originalAmount amount currency status date expectedSettlementDate expectedFundsAvailableDate contactId paymentSessionId paymentPlanId } cursor } pageInfo { hasNextPage hasPreviousPage startCursor endCursor } } }",
    "variables": {
      "input": {
        "first": 42,
        "after": "example",
        "last": 42,
        "before": "example",
        "orgId": "abc123",
        "agencyId": "abc123",
        "configurationId": "abc123",
        "start": "example",
        "end": "example"
      }
    }
  }'
const response = await fetch('https://graph.clientloop.com/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer <api-key>',
  },
  body: JSON.stringify({
    query: `
      query Payments($input: PaymentsInput) {
        payments(input: $input) {
          edges {
            node {
              id
              orgId
              provider
              configurationId
              originalAmount
              amount
              currency
              status
              date
              expectedSettlementDate
              expectedFundsAvailableDate
              contactId
              paymentSessionId
              paymentPlanId
            }
            cursor
          }
          pageInfo {
            hasNextPage
            hasPreviousPage
            startCursor
            endCursor
          }
        }
      }
    `,
    variables: {
      "input": {
        "first": 42,
        "after": "example",
        "last": 42,
        "before": "example",
        "orgId": "abc123",
        "agencyId": "abc123",
        "configurationId": "abc123",
        "start": "example",
        "end": "example"
      }
    },
  }),
});

const { data, errors } = await response.json();
<?php

$body = <<<'JSON'
{
  "query": "query Payments($input: PaymentsInput) { payments(input: $input) { edges { node { id orgId provider configurationId originalAmount amount currency status date expectedSettlementDate expectedFundsAvailableDate contactId paymentSessionId paymentPlanId } cursor } pageInfo { hasNextPage hasPreviousPage startCursor endCursor } } }",
  "variables": {
    "input": {
      "first": 42,
      "after": "example",
      "last": 42,
      "before": "example",
      "orgId": "abc123",
      "agencyId": "abc123",
      "configurationId": "abc123",
      "start": "example",
      "end": "example"
    }
  }
}
JSON;

$ch = curl_init('https://graph.clientloop.com/');
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_POST => true,
  CURLOPT_HTTPHEADER => [
    'Content-Type: application/json',
    'Authorization: Bearer <api-key>',
  ],
  CURLOPT_POSTFIELDS => $body,
]);

$response = curl_exec($ch);
curl_close($ch);

$result = json_decode($response, true);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

var body = """
{
  "query": "query Payments($input: PaymentsInput) { payments(input: $input) { edges { node { id orgId provider configurationId originalAmount amount currency status date expectedSettlementDate expectedFundsAvailableDate contactId paymentSessionId paymentPlanId } cursor } pageInfo { hasNextPage hasPreviousPage startCursor endCursor } } }",
  "variables": {
    "input": {
      "first": 42,
      "after": "example",
      "last": 42,
      "before": "example",
      "orgId": "abc123",
      "agencyId": "abc123",
      "configurationId": "abc123",
      "start": "example",
      "end": "example"
    }
  }
}
""";

var request = HttpRequest.newBuilder(URI.create("https://graph.clientloop.com/"))
    .header("Content-Type", "application/json")
    .header("Authorization", "Bearer <api-key>")
    .POST(HttpRequest.BodyPublishers.ofString(body))
    .build();

var response = HttpClient.newHttpClient()
    .send(request, HttpResponse.BodyHandlers.ofString());

System.out.println(response.body());
using System.Net.Http;
using System.Text;

var body = """
{
  "query": "query Payments($input: PaymentsInput) { payments(input: $input) { edges { node { id orgId provider configurationId originalAmount amount currency status date expectedSettlementDate expectedFundsAvailableDate contactId paymentSessionId paymentPlanId } cursor } pageInfo { hasNextPage hasPreviousPage startCursor endCursor } } }",
  "variables": {
    "input": {
      "first": 42,
      "after": "example",
      "last": 42,
      "before": "example",
      "orgId": "abc123",
      "agencyId": "abc123",
      "configurationId": "abc123",
      "start": "example",
      "end": "example"
    }
  }
}
""";

using var client = new HttpClient();
using var content = new StringContent(body, Encoding.UTF8, "application/json");
client.DefaultRequestHeaders.Add("Authorization", "Bearer <api-key>");

var response = await client.PostAsync("https://graph.clientloop.com/", content);
var result = await response.Content.ReadAsStringAsync();

Types

input PaymentsInput

Filter and pagination for the payments connection.

Pagination is Relay cursor-based, not page/offset based — see the Relay Connections spec. Page forward with first + after, or backward with last + before; never mix the two directions in a single call. Cursors are opaque strings taken from a previous response's pageInfo (or edges[].cursor) — treat them as black boxes, don't build or parse them yourself.

Scope the list by supplying at most one of orgId, agencyId, or configurationId (omit all three to list every payment), and optionally a start/end payment-date range. Results are ordered newest first.

FieldTypeDescription
firstInt

Forward pagination: return at most the first N payments from the start of the result window. Pair with after to walk forward. Do not combine with last/before. When omitted (and no last), a default page size is used.

afterString

Forward pagination cursor: return the payments that come after this cursor. Use the pageInfo.endCursor from the previous page. Pair with first.

lastInt

Backward pagination: return at most the last N payments nearest the end of the result window. Pair with before to walk backward. Do not combine with first/after.

beforeString

Backward pagination cursor: return the payments that come before this cursor. Use the pageInfo.startCursor from the previous page. Pair with last.

orgIdID

List payments for this org. Mutually exclusive with agencyId / configurationId.

agencyIdID

List payments for this agency. Mutually exclusive with orgId / configurationId.

configurationIdID

List payments for this provider configuration. Mutually exclusive with orgId / agencyId.

startString

Inclusive lower bound on payment date (ISO 8601). Filters on the payment's date.

endString

Inclusive upper bound on payment date (ISO 8601). Filters on the payment's date.

type PaymentConnection

A page of payments following the Relay Connection spec. edges holds the payments in this page (each with its cursor) and pageInfo describes whether more pages exist in each direction plus the cursors that bound this page.

Typical "load more" loop: read edges[].node for the data, then if pageInfo.hasNextPage is true request the next page with payments(input: { first: N, after: pageInfo.endCursor, ...same filters }).

FieldTypeDescription
edges[PaymentEdge!]!

The payments in this page, ordered newest first.

pageInfoPageInfo!

Pagination metadata for this page: hasNextPage/hasPreviousPage and the startCursor/endCursor bounds.

type PaymentEdge

A single element of a PaymentConnection page: the payment itself (node) plus the opaque cursor that points at it. Pass a cursor back as after (forward) or before (backward) to page relative to this row.

FieldTypeDescription
nodePayment!

The payment at this position in the page.

cursorString!

Opaque cursor identifying this payment's position, for use as after or before.

type PageInfo

PageInfo type for cursor-based pagination following the Relay specification for cursor based pagination.

FieldTypeDescription
hasNextPageBoolean!
hasPreviousPageBoolean!
startCursorString
endCursorString

type Payment

FieldTypeDescription
idID!

Unique id of the payment (a bare KSUID).

orgIdID

The platform organization that facilitated this payment.

providerPaymentProvider

Payment provider that was used to process this payment

configurationIdID

ID of the payment provider configuration that facilitated this payment

originalAmountAmount!

Original amount for the payment. If this payment has only been authorized and is in a pending state this will be the amount authorized for the payment.

amountAmount!

Amount of the payment. This may differ from the orginal amount if the captured payment amount is different than the authorized amount.

currencyCurrency!

Currency of the payment

statusPaymentStatus!

Status of the payment

dateDateTime!

The date the payment was created. If payments are pre-created pending, this date will be updated when the payment is actually completed.

expectedSettlementDateString

The estimates date funds will be settled.

expectedFundsAvailableDateString

The estimated date funds will be available to the merchant.

sourcePaymentSource

Integration source details for this payment.

contactIdID

Optional ID of the platform contact associated with this payment.

paymentSessionIdID

ID of the payment session that facilitated this payment

paymentPlanIdID

ID of the payment plan that generated this payment

paymentSessionPaymentSession

Payment session that facilitated this payment

enum PaymentProvider

  • NMI
  • Plaid
  • CLP

scalar Amount

A monetary amount with up to two decimal places. Ex. 111.11

scalar Currency

Three letter ISO 4217 currency code. Ex. USD

enum PaymentStatus

  • Pending
  • Completed
  • Finalized
  • Canceled

scalar DateTime

ISO 8601 formatted date time. Ex. 2023-11-23T14:30:00Z

type PaymentSource

The source of the payment. This is used to identify the integration and specific connection that facilitated the payment within the integration.

FieldTypeDescription
nameString

Name of the integration that facilitated this payment. This is typically the name of the integration that's using the checkout process like an ecommerce platform or CRM.

connectionIdID

The ID of the connection within the integration that facilitated this payment.

orderIdString

Optional merchant supplied order ID associated with the payment.

invoiceIdString

Optional merchant supplied invoice ID associated with the payment.

invoiceNumberString

Optional merchant supplied invoice number associated with the payment.

transactionIdString

Optional merchant supplied transaction ID associated with the payment.

contactIdString

Optional merchant supplied contact ID for which this payment session is attached.

contactNameString

Optional merchant supplied contact name for which this payment session is attached.

contactEmailString

Optional merchant supplied contact email for which this payment session is attached.

type PaymentSession

Represents a payment session a customer can use to make a payment. This session is used to configuration and setup the payment experience for an individual customer's session during checkout.

FieldTypeDescription
idID!

Unique identifier for the payment session.

orgIdID!

Organization identifier the payment session belongs to.

statusPaymentSessionStatus!

Status of the payment session.

amountAmount!

Total payment amount. Ex. 100.10

currencyCurrency!

Three letter ISO currency code. Ex. USD

callbackUrlURL

URL to receive payment session events

successUrlURL

URL to redirect after a payment session is completed by the customer

linkURL

Link to the payment session. This will be null if the session is expired or completed. This link is used to redirect the user to the payment page or may be used to embedded payment flow depending on the configuration provided.

contactIdID

ID for the contact for which this payment session is attached.

contactContact

Contact for which this payment session is attached.

contactRefPaymentSessionContactRef

Optional merchant supplied reference contact information external to the platform.

transactionRefString

Optional merchant supplied reference ID for the transaction external to the platform.

invoiceIds[String!]

Optional array of invoice IDs which this payment session is attached to. You cannot provide both invoiceIds and invoiceRefs. Note that some feature are unavailable unless at least one invoiceId or invoiceRef is provided.

invoiceRefs[PaymentSessionInvoiceRef!]

Optional array of invoice references which this payment session is attached to. You cannot provide both invoiceIds and invoiceRefs. Note that some features are unavailable unless at least one invoiceId or invoiceRef is provided.

expirationDateDateTime

Optional expiration date for the payment session. ISO 8601 format.

paymentIdID

Payment ID associated with this payment session. If the payment session status is completed, this will be populated. It may also be populated if the payment session was attached to a pre-created payment record.

createdAtDateTime!

Date the payment session was created

updatedAtDateTime!

Date the payment session was last updated

checkoutConfigurationIdID

The checkout configuration ID used for this payment session.

invoiceTotalAmount

Optional total amount due across the referenced invoices. When the payment amount exceeds this total (for example because of a surcharge or tip), financing options such as FlexPay are disabled since they cannot finance the additional amount.

brandLogoUrlURL

Optional caller-supplied URL to a logo image to display during checkout, overriding the default branding.

brandNameString

Optional caller-supplied brand or merchant name to display during checkout, overriding the organization name.

enum PaymentSessionStatus

  • Expired
  • Active
  • Completed
  • Canceled

scalar URL

A URL with protocol and port. ex. https://example.com

type Contact

FieldTypeDescription
idID!

Unique ID of the contact.

orgIdID!

ID of the organization that owns the contact.

ownerIdID!

Global ID of the owning organization (Org#<id>). Deprecated; use orgId.

Deprecated: Use `orgId` instead.
nameString!

Full name of the contact.

givenNameString

Given name of the contact.

familyNameString

Family name of the contact.

emailEmail

Email address of the contact.

phonePhone

Phone number of the contact. This will be validated and normalized to the E.164 format.

deletedAtString

Set when the contact has been soft-deleted; null for an active contact.

createdAtString!

Date and time when the contact was created.

updatedAtString!

Date and time when the contact was last updated.

idvContactIdvSessionDetail

The latest Plaid identity-verification session for this contact. On the public graph this exposes the session timestamps, the captured selfie video, the captured identity documents, and the individual check outcomes; the remaining detail is private-graph only. Null when the contact has never started a session. Fetched on demand from Plaid — request it only when needed.

type PaymentSessionContactRef

Merchant provide contact information for use during a payment session.

FieldTypeDescription
contactIdID
contactNameString
contactFirstNameString
contactLastNameString
contactEmailEmail
contactPhonePhone
addressGlobalAddress

type PaymentSessionInvoiceRef

Merchant provided invoice information for use during a payment session.

FieldTypeDescription
orderIdString

The merchant provided order identifier.

invoiceIdString

The merchant provided invoice identifier.

invoiceNumberString

The merchant provided invoice number.

amountAmount

The total amount of the invoice. Ex 999.99

lines[PaymentSessionInvoiceLineItemRef!]

The line items inside the merchant provided invoice.

billingContactPaymentSessionContactRef

Billing contact information associated with the invoice

shippingContactPaymentSessionContactRef

Billing contact information associated with the invoice

scalar Email

An email address

scalar Phone

E.164 formatted phone number. Ex. +14155554345

type ContactIdvSessionDetail

Details of a contact's Plaid identity-verification session, fetched on demand from Plaid. The public graph exposes the timestamps, the captured selfie video, the captured identity documents, and the individual check outcomes; the remaining fields — including the raw Plaid pass-throughs they are derived from — are private-graph only.

FieldTypeDescription
statusContactIdvSessionStatus!

Where the verification as a whole stands. Success, Failed and PendingReview are all terminal and all carry captured identity; Active is still in progress, and Expired or Canceled never produced one.

createdAtDateTime!
completedAtDateTime
documents[ContactIdvDocument!]!

Captured identity documents, pulled out of documentary_verification: each document's category and its captured images.

selfieVideoUrlString

URL of the captured selfie video, pulled out of selfieCheck for direct access. Plaid-hosted and expiring; null when the template did not capture a selfie video.

nameMatchIdvMatchSummary

How the name that the contact supplied compared against Plaid's data sources. Null when the KYC step has not run.

dateOfBirthMatchIdvMatchSummary

How the date of birth compared against Plaid's data sources. Null when the KYC step has not run.

phoneNumberMatchIdvMatchSummary

How the phone number compared against Plaid's data sources. Null when the KYC step has not run.

addressMatchIdvMatchSummary

How the address compared against Plaid's data sources. Null when the KYC step has not run.

taxIdMatchIdvMatchSummary

How the tax id (SSN) compared against Plaid's data sources, from Plaid's id_number check. Null when the KYC step has not run.

livenessCheckIdvLivenessStatus

Whether the captured selfie passed liveness detection. Null when the selfie step has not run or captured no analysis.

facialComparisonCheckIdvFacialComparisonStatus

Whether the captured selfie matched the face on the identity document. Null when the selfie step has not run or captured no analysis.

type GlobalAddress

Address of a physical location

FieldTypeDescription
lines[String!]!

Street, unit, building number, etc.

localityString

City, town or municipality designation

administrativeAreaString

State, province or area designation

postalCodeString

Postal code or ZIP code

countryCodeString!

2-letter country code. Ex. USA

type PaymentSessionInvoiceLineItemRef

Merchant provided invoice line item information for use during a payment session.

FieldTypeDescription
numInt!
quantityFloat
priceAmount
productIdString
productSkuString
productNameString
productDescriptionString
productImageUrlURL

enum ContactIdvSessionStatus

Where a contact's verification stands. Mirrors the shared IdvSessionStatus but is declared separately so the contact graph's public surface does not depend on a type owned by the application module.

  • Active
  • Expired
  • Canceled
  • Success
  • Failed
  • PendingReview

type ContactIdvDocument

A captured identity document from a contact's Plaid documentary verification.

FieldTypeDescription
categoryString

Document category as classified by Plaid (e.g. drivers_license, id_card, passport). Null when Plaid could not classify the document.

images[ContactIdvDocumentImage!]!

Captured images for this document (e.g. originalFront, croppedBack, face).

enum IdvMatchSummary

How one value that the contact supplied compared against the data sources that Plaid checked it against. NoData means Plaid held nothing to compare with; NoInput means the contact supplied nothing to compare.

  • Match
  • PartialMatch
  • NoMatch
  • NoData
  • NoInput

enum IdvLivenessStatus

Whether the captured selfie passed liveness detection — that a live person was present rather than a photograph or a screen.

  • Success
  • Failed

enum IdvFacialComparisonStatus

How the captured selfie compared against the face on the captured identity document. NoInput means one of the two was never captured.

  • Match
  • NoMatch
  • NoInput

type ContactIdvDocumentImage

A single captured image belonging to a ContactIdvDocument. Plaid-hosted and expiring.

FieldTypeDescription
nameString

Image identifier (e.g. originalFront, croppedBack, face).

urlString

Plaid-hosted URL of the image. Expires.