MineSec API Docs9Glue Transaction Query

Glue Transaction Query models

Generated from components.schemas. Type? is nullable; = null marks an optional field that may be omitted. Click a type name to jump to its definition.

Generated from components.schemas. ? marks an optional field, | null a nullable one. Click a type name to jump to its definition.

data class ErrorResponse(
    val status: Int,
    val path: String,
    val requestId: String,
    val title: String,
    val message: String,
)
interface ErrorResponse {
  status: number;  // int32
  path: string;
  requestId: string;
  title: string;
  message: string;
}
data class Amount(
    /** Monetary value as string */
    val value: String,
    /** ISO alpha-3 currency code */
    val currency: String,
)
interface Amount {
  /** Monetary value as string */
  value: string;
  /** ISO alpha-3 currency code */
  currency: string;
}
data class HistoryTree(
    /** The transaction ID supplied in the request */
    val selectedTransactionId: String,
    /** false when the backend cannot guarantee the full historical hierarchy */
    val treeComplete: Boolean,
    val root: HistoryTreeNode,
)
interface HistoryTree {
  /** The transaction ID supplied in the request */
  selectedTransactionId: string;
  /** false when the backend cannot guarantee the full historical hierarchy */
  treeComplete: boolean;
  root: HistoryTreeNode;
}
data class HistoryTreeNode(
    val tranId: String,
    /** Parent transaction ID; null for the root transaction */
    val linkedTranId: String? = null,
    val tranType: TranType,
    val tranStatus: TranStatus,
    val amount: Amount,
    val createdAt: String,  // date-time
    val updatedAt: String? = null,  // date-time
    /** Child transactions, in backend order */
    val children: List<HistoryTreeNode>,
)
interface HistoryTreeNode {
  tranId: string;
  /** Parent transaction ID; null for the root transaction */
  linkedTranId?: string | null;
  tranType: TranType;
  tranStatus: TranStatus;
  amount: Amount;
  createdAt: string;  // date-time
  updatedAt?: string | null;  // date-time
  /** Child transactions, in backend order */
  children: HistoryTreeNode[];
}
enum class TranType {
    SALE, REFUND, AUTH, AUTH_COMP, DEFERRED_AUTH, INSTALL, CASH_IN, CASH_OUT
}
type TranType =
  | "SALE" | "REFUND" | "AUTH" | "AUTH_COMP" | "DEFERRED_AUTH" | "INSTALL"
  | "CASH_IN" | "CASH_OUT";
enum class TranStatus {
    PROCESSING, APPROVED, DECLINED, VOIDED, REVERSED, AUTH_ONLY, ADJUSTED
}
type TranStatus =
  | "PROCESSING" | "APPROVED" | "DECLINED" | "VOIDED" | "REVERSED"
  | "AUTH_ONLY" | "ADJUSTED";
enum class PaymentMethod {
    VISA, MASTERCARD, UNIONPAY, AMEX, JCB, DISCOVER, DINERS, MAESTRO, HIMYAN, 
    NAPS, MY_DEBIT, ELO, CPACE, NAPAS, TROY, TAKAPAY, SADEEQ, ALIPAY, WECHAT, 
    VISA_QR, MASTERCARD_QR, UNIONPAY_QR, SHOPEE_PAY_QR, GRAB_PAY_QR, 
    ALIPAY_PLUS_QR, DUIT_NOW_QR, PAY_NOW, PH_QR, JCB_EMV_QR, LINEPAY_QR, 
    EZ_PAY, PI_QR, ESUNWALLET_QR, TAIWANPAY_QR, EASYWALLET_QR, JKOPAY_QR, 
    IPASSMONEY_PAY_QR, ICASH_PAY_QR, PLUSPAY_QR, PXPAYPLUS_QR, GAMA_PAY_QR, 
    OPAY_QR, LINEPAYMONEY_QR, PAYPAY_QR, BCCARD_QR, NETS_QR, NTTDATA_QR, UCARD, 
    CUP, SMARTPAY, BONUSPAY_QR, CASHLEZ_QR, UNKNOWN
}
type PaymentMethod =
  | "VISA" | "MASTERCARD" | "UNIONPAY" | "AMEX" | "JCB" | "DISCOVER"
  | "DINERS" | "MAESTRO" | "HIMYAN" | "NAPS" | "MY_DEBIT" | "ELO" | "CPACE"
  | "NAPAS" | "TROY" | "TAKAPAY" | "SADEEQ" | "ALIPAY" | "WECHAT"
  | "VISA_QR" | "MASTERCARD_QR" | "UNIONPAY_QR" | "SHOPEE_PAY_QR"
  | "GRAB_PAY_QR" | "ALIPAY_PLUS_QR" | "DUIT_NOW_QR" | "PAY_NOW" | "PH_QR"
  | "JCB_EMV_QR" | "LINEPAY_QR" | "EZ_PAY" | "PI_QR" | "ESUNWALLET_QR"
  | "TAIWANPAY_QR" | "EASYWALLET_QR" | "JKOPAY_QR" | "IPASSMONEY_PAY_QR"
  | "ICASH_PAY_QR" | "PLUSPAY_QR" | "PXPAYPLUS_QR" | "GAMA_PAY_QR"
  | "OPAY_QR" | "LINEPAYMONEY_QR" | "PAYPAY_QR" | "BCCARD_QR" | "NETS_QR"
  | "NTTDATA_QR" | "UCARD" | "CUP" | "SMARTPAY" | "BONUSPAY_QR"
  | "CASHLEZ_QR" | "UNKNOWN";
enum class EntryMode {
    NFC, SWIPE, CHIP, FALLBACK, MANUAL_KEYED, MERCHANT_PRESENT, 
    CONSUMER_PRESENT, RETRIEVE, UNKNOWN
}
type EntryMode =
  | "NFC" | "SWIPE" | "CHIP" | "FALLBACK" | "MANUAL_KEYED"
  | "MERCHANT_PRESENT" | "CONSUMER_PRESENT" | "RETRIEVE" | "UNKNOWN";
enum class CvmPerformed {
    NO_CVM, SIGNATURE, PIN, OFFLINE_PIN, CDCVM, PIN_BYPASSED
}
type CvmPerformed =
  | "NO_CVM" | "SIGNATURE" | "PIN" | "OFFLINE_PIN" | "CDCVM"
  | "PIN_BYPASSED";
enum class HostMessageFormat {
    MOCK, MPGS_AP, CARD_NOW, TWOC2P, CARDWORKS, SHIFT4, SHIFT4_HD, PAY_STORE, 
    POMELO, EFT_PAY, EZPAY, BANKNBOX, IULINK, RAZER, WALLYT, GCAG, POSTBRIDGE, 
    RENDEZVOUS, STD_JSON, S2M_SELECT, VAULTSPAY, SMART_VISTA, SADAD, AIRWALLEX, 
    AIRWALLEX_EU, WORLDPAY, CASHPLUS, PSS, RAWBANK, NEOCASH, CASHLEZ, QRIS, 
    MASARAT, BONUSPAY, ALTO, AXS, CARDINFOLINK, BBL, ONERWAY, ACB, KEENU, 
    SELECT_STANDARD, SELECT_MANUAL_MODE, SELECT_AUTO_MODE, SELECT_V24_MODE, 
    STD_JSON_BSD, STD_JSON_YEDPAY
}
type HostMessageFormat =
  | "MOCK" | "MPGS_AP" | "CARD_NOW" | "TWOC2P" | "CARDWORKS" | "SHIFT4"
  | "SHIFT4_HD" | "PAY_STORE" | "POMELO" | "EFT_PAY" | "EZPAY" | "BANKNBOX"
  | "IULINK" | "RAZER" | "WALLYT" | "GCAG" | "POSTBRIDGE" | "RENDEZVOUS"
  | "STD_JSON" | "S2M_SELECT" | "VAULTSPAY" | "SMART_VISTA" | "SADAD"
  | "AIRWALLEX" | "AIRWALLEX_EU" | "WORLDPAY" | "CASHPLUS" | "PSS"
  | "RAWBANK" | "NEOCASH" | "CASHLEZ" | "QRIS" | "MASARAT" | "BONUSPAY"
  | "ALTO" | "AXS" | "CARDINFOLINK" | "BBL" | "ONERWAY" | "ACB" | "KEENU"
  | "SELECT_STANDARD" | "SELECT_MANUAL_MODE" | "SELECT_AUTO_MODE"
  | "SELECT_V24_MODE" | "STD_JSON_BSD" | "STD_JSON_YEDPAY";
enum class ActionType {
    NEW, ADJUST, VOID, AUTH_COMP, LINK_REFUND, CONFIRM, MERCHANT_PRESENT_QR, 
    CONSUMER_PRESENT_QR, NOTIFIED, INQUIRY, CLOSE, INCREMENTAL_AUTH
}
type ActionType =
  | "NEW" | "ADJUST" | "VOID" | "AUTH_COMP" | "LINK_REFUND" | "CONFIRM"
  | "MERCHANT_PRESENT_QR" | "CONSUMER_PRESENT_QR" | "NOTIFIED" | "INQUIRY"
  | "CLOSE" | "INCREMENTAL_AUTH";
enum class ActionStatus {
    PROCESSING, SUCCESS, REJECTED, TIMEOUT, REVERSED, TO_BE_REVERSE
}
type ActionStatus =
  | "PROCESSING" | "SUCCESS" | "REJECTED" | "TIMEOUT" | "REVERSED"
  | "TO_BE_REVERSE";
enum class BatchStatus {
    OPEN, SETTLED, SETTLE_FAILED, SETTLEMENT_IN_PROGRESS
}
type BatchStatus =
  | "OPEN" | "SETTLED" | "SETTLE_FAILED" | "SETTLEMENT_IN_PROGRESS";
/** Geo-fence outcome decided by the caller (SRS/TMS) before the request reached Enabler */
enum class GeoResult {
    NA, ALLOWED, FLAGGED, DENIED
}
/** Geo-fence outcome decided by the caller (SRS/TMS) before the request reached Enabler */
type GeoResult = "NA" | "ALLOWED" | "FLAGGED" | "DENIED";
/**
 * The Installment Plan applied to a transaction. Plan-owned attributes come from the resolved
 * MMS configuration
 */
data class Installment(
    val planId: String,
    /** The plan's display name at the time it was applied */
    val planName: String,
    val installmentCount: Int,
    val interestModel: InterestModel,
    val installmentType: InstallmentType,
    val revolving: Revolving? = null,
    /**
     * Issuer/acquirer enrolment or approval reference, normalised from the authorisation response;
     * absent if the host returned none
     */
    val issuerPreapprovalReference: String? = null,
)
/**
 * The Installment Plan applied to a transaction. Plan-owned attributes come from the resolved
 * MMS configuration
 */
interface Installment {
  planId: string;
  /** The plan's display name at the time it was applied */
  planName: string;
  installmentCount: number;  // int32
  interestModel: InterestModel;
  installmentType: InstallmentType;
  revolving?: Revolving;
  /**
   * Issuer/acquirer enrolment or approval reference, normalised from the authorisation response;
   * absent if the host returned none
   */
  issuerPreapprovalReference?: string;
}
/** Backend-calculated flags for which derived operations a transaction currently permits */
data class AllowedActions(
    val refund: Boolean? = null,  // default false
    val completion: Boolean? = null,  // default false
    val incrementalAuth: Boolean? = null,  // default false
)
/** Backend-calculated flags for which derived operations a transaction currently permits */
interface AllowedActions {
  refund?: boolean;  // default false
  completion?: boolean;  // default false
  incrementalAuth?: boolean;  // default false
}
enum class InterestModel {
    WITH_INTEREST, NO_INTEREST
}
type InterestModel = "WITH_INTEREST" | "NO_INTEREST";
enum class InstallmentType {
    REGULAR, REVOLVING
}
type InstallmentType = "REGULAR" | "REVOLVING";
data class Revolving(
    val initialPaymentAmount: Amount,
    val remainingAmount: Amount,
)
interface Revolving {
  initialPaymentAmount: Amount;
  remainingAmount: Amount;
}
/** Transaction response */
data class Transaction(
    val tranId: String,
    val tranType: TranType,
    val tranStatus: TranStatus,
    val amount: Amount,
    val paymentMethod: PaymentMethod,
    val entryMode: EntryMode,
    val accountMasked: String? = null,
    val accountBin: String? = null,
    val accountLast4: String? = null,
    val issCountryCode: String? = null,
    val cvmPerformed: CvmPerformed? = null,
    val cvmSignatureUrl: String? = null,
    val cvmSignatureBase64: String? = null,
    val aid: String? = null,
    val appName: String? = null,
    val tc: String? = null,
    val tvr: String? = null,
    val tsi: String? = null,
    val atc: String? = null,
    val profileId: String,
    /**
     * Deprecated. Use acptId instead
     * @deprecated
     */
    val acceptanceId: String? = null,
    val acptId: String,
    val sdkId: String? = null,
    val posReference: String? = null,
    /** External order ID supplied by the integrator */
    val extOrderId: String? = null,
    val trace: String,
    val description: String? = null,
    val callbackUrl: String? = null,
    /** Legacy count-only installment plan, superseded by installments */
    val installmentPlan: Int? = null,
    /** Installment applied to this SALE, if it was paid in installments */
    val installments: Installment? = null,
    val merchantName: String,
    val merchantAddr: String,
    val mcc: String,
    val primaryMid: String,
    val primaryTid: String,
    val subMid: String? = null,
    val subTid: String? = null,
    val hostMessageFormat: HostMessageFormat,
    val providerReference: String? = null,
    val providerMchId: String? = null,
    val isvId: String? = null,
    val isvName: String? = null,
    val shopId: String? = null,
    val shopName: String? = null,
    /** ID of the immediate parent transaction (e.g. the original sale for a refund) */
    val linkedTranId: String? = null,
    val linkedSrsTranId: String? = null,
    /**
     * True when at least one derived transaction points to this one. Absent when not evaluated
     * (e.g. list responses)
     */
    val hasChildren: Boolean? = null,
    val refundedAmount: Amount? = null,
    val availableRefundAmount: Amount? = null,
    val completedAmount: Amount? = null,
    val availableCompletionAmount: Amount? = null,
    val allowedActions: AllowedActions? = null,
    val preferredAcceptanceTag: String? = null,
    val extraData: String? = null,
    val rrn: String? = null,
    val approvalCode: String? = null,
    val batchId: String,
    val batchNo: String,
    val actions: List<Action>,
    val srsTranId: String? = null,
    val consumerPaymentDevice: String? = null,
    val geoResult: GeoResult? = null,
    /** Device location snapshot captured when the geo-fence check ran; passed through verbatim */
    val geoLocation: Map<String, Any?>? = null,
    /** Identifier of the geo-fence rule the caller matched */
    val geoId: String? = null,
    val createdAt: String,  // date-time
    val updatedAt: String? = null,  // date-time
)
/** Transaction response */
interface Transaction {
  tranId: string;
  tranType: TranType;
  tranStatus: TranStatus;
  amount: Amount;
  paymentMethod: PaymentMethod;
  entryMode: EntryMode;
  accountMasked?: string;
  accountBin?: string;
  accountLast4?: string;
  issCountryCode?: string;
  cvmPerformed?: CvmPerformed;
  cvmSignatureUrl?: string;
  cvmSignatureBase64?: string;
  aid?: string;
  appName?: string;
  tc?: string;
  tvr?: string;
  tsi?: string;
  atc?: string;
  profileId: string;
  /**
   * Deprecated. Use acptId instead
   * @deprecated
   */
  acceptanceId?: string;
  acptId: string;
  sdkId?: string;
  posReference?: string;
  /** External order ID supplied by the integrator */
  extOrderId?: string;
  trace: string;
  description?: string;
  callbackUrl?: string;
  /** Legacy count-only installment plan, superseded by installments */
  installmentPlan?: number;  // integer
  /** Installment applied to this SALE, if it was paid in installments */
  installments?: Installment;
  merchantName: string;
  merchantAddr: string;
  mcc: string;
  primaryMid: string;
  primaryTid: string;
  subMid?: string;
  subTid?: string;
  hostMessageFormat: HostMessageFormat;
  providerReference?: string;
  providerMchId?: string;
  isvId?: string;
  isvName?: string;
  shopId?: string;
  shopName?: string;
  /** ID of the immediate parent transaction (e.g. the original sale for a refund) */
  linkedTranId?: string;
  linkedSrsTranId?: string;
  /**
   * True when at least one derived transaction points to this one. Absent when not evaluated
   * (e.g. list responses)
   */
  hasChildren?: boolean;
  refundedAmount?: Amount;
  availableRefundAmount?: Amount;
  completedAmount?: Amount;
  availableCompletionAmount?: Amount;
  allowedActions?: AllowedActions;
  preferredAcceptanceTag?: string;
  extraData?: string;
  rrn?: string;
  approvalCode?: string;
  batchId: string;
  batchNo: string;
  actions: Action[];
  srsTranId?: string;
  consumerPaymentDevice?: string;
  geoResult?: GeoResult;
  /** Device location snapshot captured when the geo-fence check ran; passed through verbatim */
  geoLocation?: Record<string, unknown>;
  /** Identifier of the geo-fence rule the caller matched */
  geoId?: string;
  createdAt: string;  // date-time
  updatedAt?: string;  // date-time
}
/** Transaction action */
data class Action(
    val actionId: String,
    val trace: String,
    val actionType: ActionType,
    val actionStatus: ActionStatus,
    val requestId: String,
    val amount: Amount? = null,
    val tranId: String? = null,
    val reason: String? = null,
    val hostRespCode: String? = null,
    val hostRespMessage: String? = null,
    val posReference: String? = null,
    val extraData: String? = null,
    val hostRespExtra: Map<String, Any?>? = null,
    val geoResult: GeoResult? = null,
    /** Device location snapshot captured when the geo-fence check ran; passed through verbatim */
    val geoLocation: Map<String, Any?>? = null,
    /** Identifier of the geo-fence rule the caller matched */
    val geoId: String? = null,
    val createdAt: String,  // date-time
    val updatedAt: String? = null,  // date-time
)
/** Transaction action */
interface Action {
  actionId: string;
  trace: string;
  actionType: ActionType;
  actionStatus: ActionStatus;
  requestId: string;
  amount?: Amount;
  tranId?: string;
  reason?: string;
  hostRespCode?: string;
  hostRespMessage?: string;
  posReference?: string;
  extraData?: string;
  hostRespExtra?: Record<string, unknown>;
  geoResult?: GeoResult;
  /** Device location snapshot captured when the geo-fence check ran; passed through verbatim */
  geoLocation?: Record<string, unknown>;
  /** Identifier of the geo-fence rule the caller matched */
  geoId?: string;
  createdAt: string;  // date-time
  updatedAt?: string;  // date-time
}
/**
 * Lightweight transaction view returned by the transaction list endpoint. Does not include the
 * actions list, merchantAddr, callbackUrl, extraData, or preferredAcceptanceTag found on the
 * full Transaction object.
 */
data class TransactionExtract(
    val tranId: String,
    val tranType: TranType,
    val tranStatus: TranStatus,
    val amount: Amount,
    val paymentMethod: PaymentMethod,
    val entryMode: EntryMode,
    val accountBin: String? = null,
    val accountLast4: String? = null,
    val cvmPerformed: CvmPerformed,
    val mcc: String? = null,
    val sdkId: String? = null,
    val posReference: String? = null,
    /** External order ID supplied by the integrator */
    val extOrderId: String? = null,
    val description: String? = null,
    val trace: String,
    val merchantName: String,
    val primaryMid: String,
    val primaryTid: String,
    val subMid: String? = null,
    val subTid: String? = null,
    val hostMessageFormat: HostMessageFormat,
    val providerReference: String? = null,
    val providerMchId: String? = null,
    val isvId: String? = null,
    val isvName: String? = null,
    val shopId: String? = null,
    val shopName: String? = null,
    val profileId: String,
    val acptId: String,
    /** ID of the immediate parent transaction (e.g. the original sale for a refund) */
    val linkedTranId: String? = null,
    val linkedSrsTranId: String? = null,
    /** Legacy count-only installment plan, superseded by installments */
    val installmentPlan: Int? = null,
    /** Installment applied to this SALE, if it was paid in installments */
    val installments: Installment? = null,
    val rrn: String? = null,
    val approvalCode: String? = null,
    val batchNo: String,
    val batchId: String,
    val batchStatus: BatchStatus? = null,
    val srsTranId: String? = null,
    val consumerPaymentDevice: String? = null,
    val accountMasked: String? = null,
    val issCountryCode: String? = null,
    val aid: String? = null,
    val appName: String? = null,
    val tc: String? = null,
    val tvr: String? = null,
    val tsi: String? = null,
    val atc: String? = null,
    val cvmSignatureUrl: String? = null,
    val hostRespExtra: Map<String, Any?>? = null,
    val refundedAmount: Amount? = null,
    val availableRefundAmount: Amount? = null,
    val completedAmount: Amount? = null,
    val availableCompletionAmount: Amount? = null,
    val allowedActions: AllowedActions? = null,
    val createdAt: String,  // date-time
    val updatedAt: String? = null,  // date-time
    /**
     * Pagination cursor for this item, equal to tranId. Use as the value of
     * startingAfter/endingBefore to fetch the adjacent page.
     */
    val cursor: String,
)
/**
 * Lightweight transaction view returned by the transaction list endpoint. Does not include the
 * actions list, merchantAddr, callbackUrl, extraData, or preferredAcceptanceTag found on the
 * full Transaction object.
 */
interface TransactionExtract {
  tranId: string;
  tranType: TranType;
  tranStatus: TranStatus;
  amount: Amount;
  paymentMethod: PaymentMethod;
  entryMode: EntryMode;
  accountBin?: string;
  accountLast4?: string;
  cvmPerformed: CvmPerformed;
  mcc?: string;
  sdkId?: string;
  posReference?: string;
  /** External order ID supplied by the integrator */
  extOrderId?: string;
  description?: string;
  trace: string;
  merchantName: string;
  primaryMid: string;
  primaryTid: string;
  subMid?: string;
  subTid?: string;
  hostMessageFormat: HostMessageFormat;
  providerReference?: string;
  providerMchId?: string;
  isvId?: string;
  isvName?: string;
  shopId?: string;
  shopName?: string;
  profileId: string;
  acptId: string;
  /** ID of the immediate parent transaction (e.g. the original sale for a refund) */
  linkedTranId?: string;
  linkedSrsTranId?: string;
  /** Legacy count-only installment plan, superseded by installments */
  installmentPlan?: number;  // integer
  /** Installment applied to this SALE, if it was paid in installments */
  installments?: Installment;
  rrn?: string;
  approvalCode?: string;
  batchNo: string;
  batchId: string;
  batchStatus?: BatchStatus;
  srsTranId?: string;
  consumerPaymentDevice?: string;
  accountMasked?: string;
  issCountryCode?: string;
  aid?: string;
  appName?: string;
  tc?: string;
  tvr?: string;
  tsi?: string;
  atc?: string;
  cvmSignatureUrl?: string;
  hostRespExtra?: Record<string, unknown>;
  refundedAmount?: Amount;
  availableRefundAmount?: Amount;
  completedAmount?: Amount;
  availableCompletionAmount?: Amount;
  allowedActions?: AllowedActions;
  createdAt: string;  // date-time
  updatedAt?: string;  // date-time
  /**
   * Pagination cursor for this item, equal to tranId. Use as the value of
   * startingAfter/endingBefore to fetch the adjacent page.
   */
  cursor: string;
}
/** Cursor-paginated list of transactions */
data class CursorPaginatedTransactionExtract(
    /** Whether more results exist beyond this page */
    val hasMore: Boolean,
    /** The request path including query parameters, as echoed back by the server */
    val requestPath: String,
    /** The requested page size (limit) */
    val requestSize: Int,
    /** The number of items actually returned in this page */
    val dataSize: Int,
    /** Total number of matching transactions across all pages */
    val totalSize: Int,
    /**
     * The cursor (tranId) of the first item in this page. Pass as startingAfter to fetch the next
     * page.
     */
    val cursorStarting: String? = null,
    /**
     * The cursor (tranId) of the last item in this page. Pass as endingBefore to fetch the
     * previous page.
     */
    val cursorEnding: String? = null,
    val data: List<TransactionExtract>,
)
/** Cursor-paginated list of transactions */
interface CursorPaginatedTransactionExtract {
  /** Whether more results exist beyond this page */
  hasMore: boolean;
  /** The request path including query parameters, as echoed back by the server */
  requestPath: string;
  /** The requested page size (limit) */
  requestSize: number;  // integer
  /** The number of items actually returned in this page */
  dataSize: number;  // integer
  /** Total number of matching transactions across all pages */
  totalSize: number;  // integer
  /**
   * The cursor (tranId) of the first item in this page. Pass as startingAfter to fetch the next
   * page.
   */
  cursorStarting?: string | null;
  /**
   * The cursor (tranId) of the last item in this page. Pass as endingBefore to fetch the
   * previous page.
   */
  cursorEnding?: string | null;
  data: TransactionExtract[];
}