v0.1.0
OpenAPI 3.1.0

Modulate API Internal

Internal API for registered Google workload identities

Server:https://uat.modulate-api.es.flute.com

UAT

Client Libraries

Health

​

Liveness probe reporting the running build tag. The deploy gate polls this endpoint before docs and releases go live; use it to confirm which build UAT is currently serving.

Health Operations

Health check

​

Returns service status and database connectivity. No authentication required.

Responses

  • application/json
  • application/json
Request Example for get/api/partner/health
curl https://uat.modulate-api.es.flute.com/api/partner/health
Health check
{
  "data": {
    "status": "ok",
    "version": "v1",
    "database": "connected",
    "build": "partner-api-v202608201200"
  },
  "meta": {
    "request_id": "req_abc123",
    "api_version": "v1",
    "timestamp": "2025-01-15T10:30:00Z"
  },
  "errors": []
}

Account

​

Who am I: the verified Google service-account principal behind your bearer token, its organization or system scope, and the rate-limit policy applied to it. Start here to confirm a freshly minted identity token is accepted.

Get the authenticated service-account principal

​

Returns the Google service-account principal behind the bearer token — its principal id, permissions, explicit organization or system scope, and the rate-limit policy that applies to it. Organization, key, and prefix fields are null for a system-scoped principal. This is the fastest way to confirm a minted identity token is accepted.

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/me
curl https://uat.modulate-api.es.flute.com/api/partner/me \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get the service-account principal
{
  "data": {
    "principal_id": "opaque-internal-subject",
    "principal_type": "google_service_account",
    "organization_id": null,
    "organization_name": null,
    "key_id": null,
    "key_prefix": null,
    "label": "Arise workload",
    "environment": "uat",
    "scopes": [
      "partner:read"
    ],
    "permissions": [
      "partner:read"
    ],
    "scope": {
      "kind": "system",
      "organization_id": null
    },
    "rate_limits": {
      "standard_per_minute": 1200,
      "ai_per_minute": 5,
      "window_seconds": 60,
      "guidance_per_minute": 600,
      "hard_per_minute": 1200,
      "burst_per_10_seconds": 300
    }
  },
  "meta": {
    "request_id": "req_internal_me",
    "api_version": "v1"
  },
  "errors": []
}

Get rate-limit status for the authenticated principal

​

Reports the live window for the Google service-account principal that authenticated this request. The keys collection is empty for a service-account caller; budget lives on data.principal. Source response models own the schema — this override supplies examples and prose only.

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/rate-limit
curl https://uat.modulate-api.es.flute.com/api/partner/rate-limit \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get service-account rate-limit status
{
  "data": {
    "organization_id": null,
    "generated_at": "2026-08-20T06:04:16Z",
    "window_seconds": 60,
    "source": "live",
    "default_limits": {
      "standard_per_minute": 1200,
      "ai_per_minute": 5
    },
    "principal": {
      "principal_id": "opaque-internal-subject",
      "principal_type": "google_service_account",
      "standard": {
        "used": 73,
        "limit": 1200,
        "remaining": 1127,
        "reset_at": "2026-08-20T06:05:16Z"
      },
      "burst": {
        "used": 0,
        "limit": 300,
        "remaining": 300,
        "reset_at": "2026-08-20T06:05:16Z"
      },
      "endpoint_limits": {
        "ai": {
          "used": 0,
          "limit": 5,
          "remaining": 5,
          "reset_at": "2026-08-20T06:05:16Z"
        }
      }
    },
    "keys": []
  },
  "meta": {
    "request_id": "req_internal_rl",
    "api_version": "v1"
  },
  "errors": []
}

Merchants

​

The merchant portfolio visible to your principal's scope: paged listings, full merchant detail, and current lifecycle status.

List merchants

​

Paginated list of merchants in the partner's portfolio with filtering and sorting.

Query Parameters

  • Page number

  • Items per page

  • Filter by merchant status (active, closed, terminated, or other)

  • Search by DBA name or merchant ID

  • ISO-8601 timestamp (e.g. 2026-08-30T00:00:00Z; no offset means UTC). Returns merchants approved or closed at or after this time. It does not track other field edits (name, address, agent), so pair it with a periodic full sync.

  • Sort field

  • Sort direction

  • Filter by PCI compliance status

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants
curl 'https://uat.modulate-api.es.flute.com/api/partner/merchants?page=1&page_size=200&status=active&sort_by=dba_name&sort_order=asc' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
List active merchants
{
  "data": [
    {
      "merchant_id": "925700000233734",
      "dba_name": "Sunrise Coffee Co",
      "legal_name": "Sunrise Coffee LLC",
      "status": "active",
      "processor": "TSYS",
      "mcc_code": "5812",
      "state": "CA",
      "city": "San Francisco",
      "onboarding_date": "2024-03-15T00:00:00+00:00",
      "last_data_refresh": "2025-01-15T10:30:00+00:00",
      "primary_agent_id": "8842",
      "primary_agent_name": "Jordan Patel",
      "partner_office_id": "120",
      "partner_office_name": "Golden Gate Payments",
      "pci_compliance": {
        "status": "compliant",
        "saq_due_date": "2025-12-31T00:00:00+00:00",
        "last_updated": "2025-01-10T00:00:00+00:00"
      }
    },
    {
      "merchant_id": "925700000198472",
      "dba_name": "The Barber Lounge",
      "legal_name": "TBL Enterprises Inc",
      "status": "active",
      "processor": "TSYS",
      "mcc_code": "7241",
      "state": "TX",
      "city": "Austin",
      "onboarding_date": "2023-11-01T00:00:00+00:00",
      "last_data_refresh": "2025-01-15T10:30:00+00:00",
      "primary_agent_id": null,
      "primary_agent_name": null,
      "partner_office_id": "401",
      "partner_office_name": null,
      "pci_compliance": null
    }
  ],
  "meta": {
    "request_id": "req_abc123",
    "api_version": "v1",
    "page": 1,
    "page_size": 200,
    "total_count": 2,
    "total_pages": 1,
    "has_next": false,
    "has_prev": false,
    "source": "risecrm",
    "as_of": "2025-01-15T10:30:00+00:00"
  },
  "errors": []
}

Get merchant detail

​

Returns full detail for a single merchant in the partner's portfolio.

Path Parameters

  • Merchant ID

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}
curl https://uat.modulate-api.es.flute.com/api/partner/merchants/925700000233734 \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get merchant detail
{
  "data": {
    "merchant_id": "925700000233734",
    "dba_name": "Sunrise Coffee Co",
    "legal_name": "Sunrise Coffee LLC",
    "status": "active",
    "processor": "TSYS",
    "mcc_code": "5812",
    "state": "CA",
    "city": "San Francisco",
    "address_line1": "123 Market St",
    "postal_code": "94105",
    "onboarding_date": "2024-03-15T00:00:00+00:00",
    "last_data_refresh": "2025-01-15T10:30:00+00:00",
    "primary_agent_id": "8842",
    "primary_agent_name": "Jordan Patel",
    "partner_office_id": "120",
    "partner_office_name": "Golden Gate Payments",
    "funding_program": "NEXT_DAY",
    "funding_program_code": "NXDY"
  },
  "meta": {
    "request_id": "req_def456",
    "api_version": "v1",
    "source": "risecrm",
    "as_of": "2025-01-15T10:30:00+00:00"
  },
  "errors": []
}

Get merchant status

​

Returns a concise status summary for a merchant.

Path Parameters

  • Merchant ID

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}/status
curl https://uat.modulate-api.es.flute.com/api/partner/merchants/925700000233734/status \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get merchant status
{
  "data": {
    "merchant_id": "925700000233734",
    "status": "active",
    "onboarding_date": "2024-03-15T00:00:00+00:00",
    "close_date": null,
    "processor": "TSYS"
  },
  "meta": {
    "request_id": "req_ghi789",
    "api_version": "v1",
    "source": "risecrm",
    "as_of": "2025-01-15T10:30:00+00:00"
  },
  "errors": []
}

Compliance

​

PCI compliance standing per merchant: the current status and the history of changes behind it. These operations also appear under PCI Compliance — same endpoints, grouped by program name.

Get merchant compliance status

​

Returns current PCI compliance status for a merchant in the partner's portfolio.

Path Parameters

  • Merchant ID

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}/compliance
curl https://uat.modulate-api.es.flute.com/api/partner/merchants/925700000233734/compliance \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get compliance status
{
  "data": {
    "merchant_id": "925700000233734",
    "status": "compliant",
    "saq": {
      "type": "SAQ A",
      "version": "4.0",
      "status_date": "2025-01-10T00:00:00+00:00",
      "due_date": "2025-12-31T00:00:00+00:00",
      "last_changed": "2025-01-10T00:00:00+00:00",
      "remediation": null
    },
    "scan": {
      "status": "Pass",
      "remediation_required": false,
      "last_scan_date": "2025-01-05T00:00:00+00:00",
      "next_scan_date": "2025-04-05T00:00:00+00:00"
    },
    "compliant_through_another_provider": false,
    "last_updated": "2025-01-10T14:30:00+00:00"
  },
  "meta": {
    "request_id": "req_comp01",
    "api_version": "v1",
    "source": "pci",
    "as_of": "2025-01-15T10:30:00+00:00"
  },
  "errors": []
}

Get merchant compliance history

​

Returns paginated compliance history for a merchant with optional date range filtering.

Path Parameters

  • Merchant ID

Query Parameters

  • Page number

  • Items per page

  • Start date filter (ISO-8601)

  • End date filter (ISO-8601)

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}/compliance/history
curl 'https://uat.modulate-api.es.flute.com/api/partner/merchants/925700000233734/compliance/history?page=1&page_size=25' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get compliance history
{
  "data": [
    {
      "recorded_at": "2025-01-10T00:00:00+00:00",
      "status": "compliant",
      "saq_type": "SAQ A",
      "saq_status_date": "2025-01-10T00:00:00+00:00",
      "next_scan_date": "2025-04-05T00:00:00+00:00"
    },
    {
      "recorded_at": "2024-10-15T00:00:00+00:00",
      "status": "non_compliant",
      "saq_type": "SAQ A",
      "saq_status_date": "2024-10-15T00:00:00+00:00",
      "next_scan_date": "2025-01-05T00:00:00+00:00"
    }
  ],
  "meta": {
    "request_id": "req_comp02",
    "api_version": "v1",
    "page": 1,
    "page_size": 25,
    "total_count": 2,
    "total_pages": 1,
    "has_next": false,
    "has_prev": false,
    "source": "pci",
    "as_of": "2025-01-15T10:30:00+00:00"
  },
  "errors": []
}

PCI Compliance

​

PCI program view of the compliance endpoints: current standing and change history for a merchant. Identical to the operations under Compliance.

Get merchant compliance status

​

Returns current PCI compliance status for a merchant in the partner's portfolio.

Path Parameters

  • Merchant ID

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}/compliance
curl https://uat.modulate-api.es.flute.com/api/partner/merchants/925700000233734/compliance \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get compliance status
{
  "data": {
    "merchant_id": "925700000233734",
    "status": "compliant",
    "saq": {
      "type": "SAQ A",
      "version": "4.0",
      "status_date": "2025-01-10T00:00:00+00:00",
      "due_date": "2025-12-31T00:00:00+00:00",
      "last_changed": "2025-01-10T00:00:00+00:00",
      "remediation": null
    },
    "scan": {
      "status": "Pass",
      "remediation_required": false,
      "last_scan_date": "2025-01-05T00:00:00+00:00",
      "next_scan_date": "2025-04-05T00:00:00+00:00"
    },
    "compliant_through_another_provider": false,
    "last_updated": "2025-01-10T14:30:00+00:00"
  },
  "meta": {
    "request_id": "req_comp01",
    "api_version": "v1",
    "source": "pci",
    "as_of": "2025-01-15T10:30:00+00:00"
  },
  "errors": []
}

Get merchant compliance history

​

Returns paginated compliance history for a merchant with optional date range filtering.

Path Parameters

  • Merchant ID

Query Parameters

  • Page number

  • Items per page

  • Start date filter (ISO-8601)

  • End date filter (ISO-8601)

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}/compliance/history
curl 'https://uat.modulate-api.es.flute.com/api/partner/merchants/925700000233734/compliance/history?page=1&page_size=25' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get compliance history
{
  "data": [
    {
      "recorded_at": "2025-01-10T00:00:00+00:00",
      "status": "compliant",
      "saq_type": "SAQ A",
      "saq_status_date": "2025-01-10T00:00:00+00:00",
      "next_scan_date": "2025-04-05T00:00:00+00:00"
    },
    {
      "recorded_at": "2024-10-15T00:00:00+00:00",
      "status": "non_compliant",
      "saq_type": "SAQ A",
      "saq_status_date": "2024-10-15T00:00:00+00:00",
      "next_scan_date": "2025-01-05T00:00:00+00:00"
    }
  ],
  "meta": {
    "request_id": "req_comp02",
    "api_version": "v1",
    "page": 1,
    "page_size": 25,
    "total_count": 2,
    "total_pages": 1,
    "has_next": false,
    "has_prev": false,
    "source": "pci",
    "as_of": "2025-01-15T10:30:00+00:00"
  },
  "errors": []
}

Deposits

​

TSYS ACH funding for one merchant: loaded control totals in a bounded processing-date window, the signed funding explanation behind each deposit, and the processor batches it can be tied to. Processor dates only; coverage is reported as unknown and Fiserv funding is not available.

List ACH deposits for a merchant

​

Loaded ACH entries for one merchant, newest processing date first. Defaults to the last 30 processing days; maximum date span is 90 days. C lines combine across references; other lines group by reference. Reconciled zero-net N-only groups are omitted. Counts and pagination are entry-based. Deposit IDs are opaque v2 identities: refetch stored deposits and restart pagination after this change; old control-total IDs return 404. TSYS ACH funding only: Fiserv-processed merchants and merchants without a bindable TSYS bank identity return 404 RESOURCE_NOT_FOUND with a message naming the reason; deposits are never reported as an empty page. Amounts are signed decimal dollars. Effective dates are processor dates and do not confirm receipt by the merchant's bank. meta.coverage reports loaded history and daily freshness as unknown; an empty page never means no funding.

Path Parameters

  • Merchant ID

Query Parameters

  • First processing date (YYYY-MM-DD, inclusive)

  • Last processing date (YYYY-MM-DD, inclusive)

  • Page number

  • Items per page

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}/deposits
curl 'https://uat.modulate-api.es.flute.com/api/partner/merchants/925700000233734/deposits?date_from=2026-08-17&date_to=2026-09-15&page=1&page_size=25' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
List ACH deposits for a merchant
{
  "data": [
    {
      "deposit_id": "3f1c2b9a7d5e4c6b8a0f1e2d3c4b5a69",
      "processing_date": "2026-09-10",
      "amount": "10.01",
      "entry_type": "combined",
      "batch_count": 1,
      "reference_number": null,
      "card_deposits": "11.02",
      "fees": "-1.01",
      "chargebacks": "0.00",
      "other": "0.00",
      "effective_on": "2026-09-11",
      "effective_through": "2026-09-12",
      "has_unknown_effective_date": false,
      "cycle": "EARLY",
      "status": "funded",
      "reconciled": true,
      "detail_count": 2
    }
  ],
  "meta": {
    "request_id": "req_dep01",
    "api_version": "v1",
    "page": 1,
    "page_size": 25,
    "total_count": 1,
    "total_pages": 1,
    "has_next": false,
    "has_prev": false,
    "source": "alloydb",
    "as_of": "2026-09-15T12:00:00+00:00",
    "data_coverage": "tsys_only",
    "coverage": {
      "status": "unknown",
      "message": "Historical coverage and daily freshness have not been verified. No loaded records does not mean no funding. Effective dates are processor dates and do not confirm receipt by your bank."
    },
    "applied_window": {
      "from": "2026-08-17",
      "to": "2026-09-15"
    }
  },
  "errors": []
}

Get an ACH deposit

​

Signed funding explanation for one deposit: category breakdown, every funding line, and processor batches whose reference and batch date match its deposit and fee lines. TSYS ACH funding only: Fiserv-processed merchants and merchants without a bindable TSYS bank identity return 404 RESOURCE_NOT_FOUND with a message naming the reason; deposits are never reported as an empty page. Amounts are signed decimal dollars. Effective dates are processor dates and do not confirm receipt by the merchant's bank. meta.coverage reports loaded history and daily freshness as unknown; an empty page never means no funding.

Path Parameters

  • Merchant ID

  • 32-character lowercase hexadecimal identifier from a previous response

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}/deposits/{deposit_id}
curl https://uat.modulate-api.es.flute.com/api/partner/merchants/925700000233734/deposits/3f1c2b9a7d5e4c6b8a0f1e2d3c4b5a69 \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get an ACH deposit
{
  "data": {
    "deposit_id": "3f1c2b9a7d5e4c6b8a0f1e2d3c4b5a69",
    "processing_date": "2026-09-10",
    "amount": "10.01",
    "card_deposits": "11.02",
    "fees": "-1.01",
    "chargebacks": "0.00",
    "other": "0.00",
    "effective_on": "2026-09-11",
    "effective_through": "2026-09-12",
    "has_unknown_effective_date": false,
    "cycle": "EARLY",
    "status": "funded",
    "reconciled": true,
    "detail_count": 2,
    "breakdown": [
      {
        "transaction_type": "DEPOSIT",
        "amount": "11.02"
      },
      {
        "transaction_type": "FEES",
        "amount": "-1.01"
      }
    ],
    "lines": [
      {
        "transaction_type": "DEPOSIT",
        "card_type": "VISA",
        "amount": "11.02",
        "funding_amount": "11.02",
        "effective_date": "2026-09-11",
        "batch_date": "2026-09-10",
        "reference_number": "123456",
        "description": "Batch",
        "case_number": null
      },
      {
        "transaction_type": "FEES",
        "card_type": null,
        "amount": "1.01",
        "funding_amount": "-1.01",
        "effective_date": "2026-09-12",
        "batch_date": null,
        "reference_number": null,
        "description": "Monthly fees",
        "case_number": null
      }
    ],
    "related_batches": [
      {
        "header_id": "9b8a7c6d5e4f3a2b1c0d9e8f7a6b5c4d",
        "attribution_status": "unique",
        "portal_batch_number": "123456",
        "batch_date": "2026-09-10",
        "reference_number": "123456",
        "amount": "11.02",
        "ach_deposit_amount": "11.02",
        "ach_fee_amount": null,
        "amount_comparison": "equal"
      }
    ]
  },
  "meta": {
    "request_id": "req_dep02",
    "api_version": "v1",
    "source": "alloydb",
    "as_of": "2026-09-15T12:00:00+00:00",
    "data_coverage": "tsys_only",
    "coverage": {
      "status": "unknown",
      "message": "Historical coverage and daily freshness have not been verified. No loaded records does not mean no funding. Effective dates are processor dates and do not confirm receipt by your bank."
    }
  },
  "errors": []
}

Get a processor batch related to an ACH deposit

​

One DDF batch header related to the deposit, with its child transactions when the loaded records can isolate them exactly; otherwise transaction_status is "unavailable" and the list is empty. Batch amounts are card volume before funding adjustments. TSYS ACH funding only: Fiserv-processed merchants and merchants without a bindable TSYS bank identity return 404 RESOURCE_NOT_FOUND with a message naming the reason; deposits are never reported as an empty page. Amounts are signed decimal dollars. Effective dates are processor dates and do not confirm receipt by the merchant's bank. meta.coverage reports loaded history and daily freshness as unknown; an empty page never means no funding.

Path Parameters

  • Merchant ID

  • 32-character lowercase hexadecimal identifier from a previous response

  • 32-character lowercase hexadecimal identifier from a previous response

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}/deposits/{deposit_id}/batches/{header_id}
curl https://uat.modulate-api.es.flute.com/api/partner/merchants/925700000233734/deposits/3f1c2b9a7d5e4c6b8a0f1e2d3c4b5a69/batches/9b8a7c6d5e4f3a2b1c0d9e8f7a6b5c4d \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get a processor batch related to a deposit
{
  "data": {
    "header_id": "9b8a7c6d5e4f3a2b1c0d9e8f7a6b5c4d",
    "attribution_status": "unique",
    "portal_batch_number": "123456",
    "batch_date": "2026-09-10",
    "reference_number": "123456",
    "amount": "11.02",
    "ach_deposit_amount": "11.02",
    "ach_fee_amount": null,
    "amount_comparison": "equal",
    "deposit_id": "3f1c2b9a7d5e4c6b8a0f1e2d3c4b5a69",
    "transaction_status": "exact",
    "transaction_message": null,
    "transaction_count": 2,
    "transactions": [
      {
        "transaction_id": "c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6",
        "transaction_date": "2026-09-10",
        "transaction_type": "sale",
        "amount": "12.02",
        "card_brand": "VISA",
        "card_last4": "1111"
      },
      {
        "transaction_id": "f6e5d4c3b2a1f0e9d8c7b6a5f4e3d2c1",
        "transaction_date": "2026-09-10",
        "transaction_type": "refund",
        "amount": "1.00",
        "card_brand": "VISA",
        "card_last4": "1111"
      }
    ]
  },
  "meta": {
    "request_id": "req_dep03",
    "api_version": "v1",
    "source": "alloydb",
    "as_of": "2026-09-15T12:00:00+00:00",
    "data_coverage": "tsys_only",
    "coverage": {
      "status": "unknown",
      "message": "Historical coverage and daily freshness have not been verified. No loaded records does not mean no funding. Effective dates are processor dates and do not confirm receipt by your bank."
    }
  },
  "errors": []
}

Pricing

​

TSYS pricing as boarded: a merchant's current price plan, the history of pricing changes, and a portfolio-wide listing.

Get current TSYS pricing

​

Returns the current TSYS PPM pricing configuration for a merchant.

Path Parameters

  • Merchant ID

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}/pricing/tsys/current
curl https://uat.modulate-api.es.flute.com/api/partner/merchants/925700000233734/pricing/tsys/current \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get current pricing
{
  "data": {
    "merchant_id": "925700000233734",
    "pricing_model": "IC+",
    "summary": {
      "pricing_model": "IC+",
      "pricing_text": "IC+ 25 bps eff. (15 + 10 OVF) + $0.10",
      "primary_rate_bps": 15,
      "bankcard_other_volume_fee_bps": 10,
      "amex_other_volume_fee_bps": 60,
      "pin_debit_other_volume_fee_bps": null,
      "effective_rate_bps": 25,
      "per_transaction_fee": "0.10",
      "monthly_fee": "9.95",
      "annual_fee": null,
      "exceptions": [
        {
          "card_type": "Amex",
          "rate": 2.95
        }
      ]
    },
    "categories": [
      {
        "name": "Discount",
        "items": [
          {
            "fee_item_name": "Discount Rate",
            "percent": 0.15,
            "per_item": null,
            "qual_percent": null,
            "qual_per_item": null,
            "billing_frequency": "Monthly",
            "statement_description": null
          }
        ]
      },
      {
        "name": "Authorization Trxns",
        "items": [
          {
            "fee_item_name": "Auth Fee",
            "percent": null,
            "per_item": "0.10",
            "qual_percent": null,
            "qual_per_item": null,
            "billing_frequency": "Monthly",
            "statement_description": null
          }
        ]
      }
    ],
    "as_of": "2025-01-01T00:00:00+00:00"
  },
  "meta": {
    "request_id": "req_price01",
    "api_version": "v1",
    "source": "bigquery",
    "as_of": "2025-01-01T00:00:00+00:00"
  },
  "errors": []
}

Get TSYS pricing history

​

Returns pricing change history for a merchant over a configurable lookback period.

Path Parameters

  • Merchant ID

Query Parameters

  • Lookback period in months

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}/pricing/tsys/history
curl 'https://uat.modulate-api.es.flute.com/api/partner/merchants/925700000233734/pricing/tsys/history?months=12' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get pricing history
{
  "data": {
    "merchant_id": "925700000233734",
    "changes": [
      {
        "file_date": "2025-01-01",
        "fee_category": "Discount",
        "fee_item_name": "Discount Rate",
        "old_value": 0.1,
        "new_value": 0.15,
        "change_type": "percent"
      },
      {
        "file_date": "2024-10-01",
        "fee_category": "Authorization Trxns",
        "fee_item_name": "Auth Fee",
        "old_value": "0.08",
        "new_value": "0.10",
        "change_type": "per_item"
      }
    ]
  },
  "meta": {
    "request_id": "req_price02",
    "api_version": "v1",
    "source": "bigquery",
    "as_of": "2025-01-15T10:30:00+00:00"
  },
  "errors": []
}

List portfolio TSYS pricing

​

Paginated current TSYS pricing for all merchants in the partner's portfolio. effective_rate_bps includes Other Volume Fee (OVF) where applicable.

Query Parameters

  • Page number

  • Items per page

  • Filter: IC, Tiered, or Flat Rate

  • Search by merchant ID or DBA name

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/pricing/tsys
curl 'https://uat.modulate-api.es.flute.com/api/partner/pricing/tsys?page=1&page_size=25' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
List portfolio pricing
{
  "data": [
    {
      "merchant_id": "925700000233734",
      "dba_name": "Sunrise Coffee Co",
      "pricing_model": "IC+",
      "summary": {
        "pricing_model": "IC+",
        "pricing_text": "IC+ 15 bps + $0.10",
        "primary_rate_bps": 15,
        "bankcard_other_volume_fee_bps": null,
        "amex_other_volume_fee_bps": null,
        "pin_debit_other_volume_fee_bps": null,
        "effective_rate_bps": 15,
        "per_transaction_fee": "0.10",
        "monthly_fee": "9.95",
        "annual_fee": null,
        "exceptions": []
      },
      "categories": [],
      "as_of": "2025-01-01T00:00:00+00:00"
    },
    {
      "merchant_id": "925700000198472",
      "dba_name": "The Barber Lounge",
      "pricing_model": "Flat Rate",
      "summary": {
        "pricing_model": "Flat Rate",
        "pricing_text": "2.75%",
        "primary_rate_bps": 275,
        "bankcard_other_volume_fee_bps": null,
        "amex_other_volume_fee_bps": null,
        "pin_debit_other_volume_fee_bps": null,
        "effective_rate_bps": 275,
        "per_transaction_fee": null,
        "monthly_fee": null,
        "annual_fee": null,
        "exceptions": []
      },
      "categories": [],
      "as_of": "2025-01-01T00:00:00+00:00"
    }
  ],
  "meta": {
    "request_id": "req_price03",
    "api_version": "v1",
    "page": 1,
    "page_size": 25,
    "total_count": 2,
    "total_pages": 1,
    "has_next": false,
    "has_prev": false,
    "source": "bigquery",
    "as_of": "2025-01-01T00:00:00+00:00"
  },
  "errors": []
}

Processor Profiles

​

Processor-side merchant records: the TSYS profile with its demographic change history, and the Fiserv Omaha profile where a merchant is boarded there.

Get TSYS processor profile

​

Returns the complete TSYS processor profile for a merchant in your portfolio. The profile contains 11 structured sections covering every aspect of the merchant's TSYS account configuration:

Section Description
general Merchant name, SIC code, class code, merchant type, and account status
location Street address, city, state, ZIP (9-digit codes formatted as XXXXX-XXXX), and country
hierarchy TSYS bank and agent/ISO codes that place the merchant in the processing hierarchy
card_networks Acceptance flags and network IDs for Visa, Mastercard, Amex (including OptBlue), Discover, JCB, and Diners
interchange_qualification Eligibility flags for interchange programs — Visa CPS, Supermarket, EIRF; Mastercard Merit; Discover
banking Primary, chargeback, and discount DDA/routing numbers plus bank name and ACH destination
destination_routing Transaction routing codes for deposits, adjustments, chargebacks, reversals, and batches
dates Key lifecycle dates — opened, first/last deposit, last activity, status change, and last TSYS data sync
flags Operational flags including EDC, Visa/MC eligibility, and MTD maintenance
contact Phone numbers, email, rep code, officers, and alternate name
tax Federal and state tax IDs

Sensitive data masking

Banking and tax fields are always masked in Partner API responses — only the last 4 digits are visible. There is no option to unmask these values via the API.

  • DDA/routing numbers: Displayed as ****9012
  • Tax IDs: Displayed in SSN/EIN format as ***-**-6789

Account status codes

The status field maps TSYS account status codes to human-readable labels:

Code Label
(empty) Open
I Inactive
F Fraud
S Suspect
Z No Auth
C Closed
D Delete
B No Post

Data freshness

Profile data is synced from TSYS flat files. The last_synced field (and dates.last_sync_date) indicates when the most recent data was loaded. Check meta.as_of in the response for the data freshness timestamp.

Path Parameters

  • Merchant ID

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}/processor-profile/tsys
curl https://uat.modulate-api.es.flute.com/api/partner/merchants/925700000233734/processor-profile/tsys \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get TSYS processor profile
{
  "data": {
    "mid": "925700000233734",
    "merchant_name": "Sunrise Coffee Co",
    "processor": "TSYS",
    "status": "Open",
    "status_label": "Open",
    "last_synced": "2025-01-15",
    "general": {
      "merchant_name": "Sunrise Coffee Co",
      "sic_code": "5812",
      "class_code": "R",
      "merchant_type": "Retail",
      "status": "Open",
      "status_label": "Open"
    },
    "location": {
      "address": "123 Main St",
      "city": "Austin",
      "state": "TX",
      "zip_code": "78701-1234",
      "country_code": "US"
    },
    "hierarchy": {
      "bank_code": "001234",
      "agent_code": "5678"
    },
    "card_networks": {
      "amex_id": "AMX123",
      "amex_submitter_id": "SUB456",
      "amex_cap_id": null,
      "amex_optblue": true,
      "amex_acceptance": true,
      "discover_id": "DSC789",
      "discover_map_flag": false,
      "discover_acceptance": true,
      "discover_cash_acceptance": false,
      "mc_ica": "MC123",
      "mc_acceptance": true,
      "mc_cash_acceptance": false,
      "visa_acceptance": true,
      "visa_cash_acceptance": false,
      "visa_eligibility": true,
      "mc_eligibility": true,
      "jcb_acceptance": false,
      "diners_acceptance": false,
      "diners_number": null
    },
    "interchange_qualification": {
      "visa_cps1": true,
      "visa_cps2": false,
      "visa_smk1": false,
      "visa_smk2": false,
      "visa_eps": false,
      "mc_merit": true,
      "discover_eligible": true
    },
    "banking": {
      "dda_masked": "****9012",
      "routing_masked": "****0021",
      "bank_name": "Chase",
      "ach_destination": "ACH01",
      "funding_program": "NEXT_DAY",
      "funding_program_code": "NXDY",
      "chargeback_dda_masked": "****1098",
      "chargeback_routing_masked": "****0089",
      "discount_dda_masked": null,
      "discount_routing_masked": null
    },
    "destination_routing": {
      "dest_global": "G",
      "dest_deposit": "D",
      "dest_adjustment": "A",
      "dest_chargeback": "C",
      "dest_reversal": "R",
      "dest_batch": "B"
    },
    "dates": {
      "opened_date": "2020-03-15",
      "first_deposit_date": "2020-04-01",
      "last_deposit_date": "2025-01-10",
      "last_activity_date": "2025-01-14",
      "status_change_date": null,
      "last_sync_date": "2025-01-15"
    },
    "flags": {
      "edc_flags": "E1",
      "ach_destination": "ACH01",
      "visa_eligibility": true,
      "mc_eligibility": true,
      "mtd_maintenance": false
    },
    "contact": {
      "phone_1": "512-555-0100",
      "phone_2": null,
      "email": "info@sunrisecoffee.com",
      "rep_code": "REP01",
      "officer_1": "John Smith",
      "officer_2": null,
      "other_name": null
    },
    "tax": {
      "federal_tax_id_masked": "***-**-6789",
      "state_tax_id_masked": "***-**-4321"
    }
  },
  "meta": {
    "request_id": "req_pp01",
    "api_version": "v1",
    "source": "bigquery",
    "as_of": "2025-01-15T00:00:00+00:00"
  },
  "errors": []
}

Get TSYS demographic change history

​

Returns chronological demographic-change events for a TSYS merchant — bank account/routing swaps, EIN/SSN changes, DBA & legal-name renames, MCC (SIC) drift, and principal changes — grouped by file date, with severity per change. Sensitive values (DDA, routing, EIN, SSN) are masked. Coverage flags indicate which feeds back the history (acq_merchant_detail always; mif only for banks 9257/9398).

Path Parameters

  • Merchant ID

Query Parameters

  • Include onboarding-window and known-prefill noise events that are suppressed by default.

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}/processor-profile/tsys/history
curl 'https://uat.modulate-api.es.flute.com/api/partner/merchants/925700000256909/processor-profile/tsys/history?include_noise=false' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get TSYS processor-profile history
{
  "data": {
    "mid": "925700000256909",
    "bank_code": "9257",
    "first_tracked": "2026-04-30",
    "coverage": {
      "acq_merchant_detail": true,
      "mif": true
    },
    "events": [
      {
        "date": "2026-08-18",
        "change_count": 1,
        "severity": "high",
        "changes": [
          {
            "field": "routing",
            "category": "banking",
            "old": "****0021",
            "new": "****0089",
            "severity": "high"
          }
        ]
      }
    ]
  },
  "meta": {
    "request_id": "req_tsys_history",
    "api_version": "v1",
    "source": "alloydb",
    "as_of": "2026-08-20T08:00:00Z"
  },
  "errors": []
}

Get Fiserv Omaha processor profile

​

Returns the complete Fiserv Omaha processor profile for a merchant in your portfolio. The profile contains 11 structured sections covering every aspect of the merchant's Fiserv Omaha account configuration:

Section Description
processing System/Principal/Agent hierarchy, deposit type, fee/auth grids, dates
fees Transaction fees — batch header, sales, returns, chargeback, retrieval, ACH reject, TIN, EIDS
amex Amex OptBlue enrollment and program
banking DDA, routing, account type, hold/float days, disbursement flags
compliance TIN status, tax ID, TIN type, IRS name, TURF code
terminal EMV, PIN, mag stripe, POS type, TransArmor, terminal count
statement_settings Statement hold, mail destination, IC detail, debit fee print options
association Per-brand passthrough fee flags for Visa Credit/Debit, MC Credit/Debit, Discover
limits_and_risk Auth/sale/return limits, daily estimates, risk thresholds, velocity controls
contact Name, email, phone, CS phone, language, address
correspondence Statement mail, 12B letters, confirm letters, help desk

Sensitive data masking

Banking and compliance fields are always masked — only the last 4 digits are visible. There is no option to unmask these values via the API.

  • DDA/routing numbers: Displayed as ****4567
  • Tax IDs: Displayed in SSN/EIN format as ***-**-6726

Data freshness

Profile data is synced from Fiserv AccessOne. The last_synced field indicates when the most recent data was loaded. Check meta.as_of in the response for the data freshness timestamp.

Path Parameters

  • Merchant ID

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}/processor-profile/omaha
curl https://uat.modulate-api.es.flute.com/api/partner/merchants/407150230115438/processor-profile/omaha \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get Fiserv Omaha processor profile
{
  "data": {
    "mid": "407150230115438",
    "mpaid": "MPAID123",
    "merchant_name": "Polar Bear Ice Cream",
    "processor": "Fiserv Omaha FSP",
    "status": "Open",
    "last_synced": "2026-03-06T12:00:00+00:00",
    "processing": {
      "sys_prin_agent": "4291/2300/0100",
      "deposit_type": "ETC",
      "etc_type": "MOTO",
      "etc_cutoff": "EST",
      "fee_grid": "GRID01",
      "auth_grid": "AUTH01",
      "auth_level": "L3",
      "discount_table": "PROMO01",
      "avg_ticket": 25.5,
      "open_date": "2024-01-15",
      "last_batch_activity": "2026-03-05",
      "last_active_date": "2026-03-06",
      "next_review_date": "2027-01-15"
    },
    "fees": {
      "batch_header": 0,
      "sales_trans": 0.1,
      "return_trans": 0.1,
      "chargeback": 25,
      "retrieval": 15,
      "ach_reject": 25,
      "invalid_tin": 100,
      "eids": 0.05
    },
    "amex": {
      "optblue": true,
      "program": "CT43 OptBlue"
    },
    "banking": {
      "disbursement_method": "ACH",
      "dda_number_masked": "****3210",
      "routing_number_masked": "****1234",
      "account_type": "C",
      "hold_days": 2,
      "float_days": 1,
      "currency": "USD",
      "deficit_flag": "Y",
      "include_adjustments": true,
      "include_deposits": true,
      "include_discounts": false,
      "include_generic_debit": false
    },
    "compliance": {
      "tin_status": "IRS Validated",
      "tin_status_raw": "VALID - IRS Match",
      "tin_validation_date": "2025-06-15",
      "tax_id_masked": "***-**-6726",
      "tin_type": "EIN",
      "irs_name": "Polar Bear LLC",
      "business_owner_match": "Y",
      "site_access": "Storefront",
      "turf_code": "TURF01"
    },
    "terminal": {
      "emv_enabled": true,
      "pin_capable": false,
      "mag_stripe": "Full Track Read",
      "pos_type": "9",
      "terminal_count": 3,
      "transarmor_active": true,
      "security_level": "01",
      "encryption_type": "AES",
      "token_type": "TOKEN01",
      "verify_value": "VERIFY123"
    },
    "statement_settings": {
      "hold_flag": false,
      "mail_to": "M",
      "ic_detail": "D",
      "debit_fee_print": "S"
    },
    "association": {
      "visa_credit": {
        "dues_assessments": true,
        "apf_acq_support": true,
        "fanf_nabu": true,
        "isa": false,
        "cross_border": true,
        "trans_integrity": false,
        "misuse_auth": false,
        "zero_floor": true,
        "cvc2": false,
        "kilobyte": false,
        "data_usage": false
      },
      "visa_debit": {
        "dues_assessments": true,
        "apf_acq_support": true,
        "fanf_nabu": false,
        "isa": false,
        "cross_border": false,
        "trans_integrity": false,
        "misuse_auth": false,
        "zero_floor": true,
        "cvc2": false,
        "kilobyte": false,
        "data_usage": false
      },
      "mc_credit": {
        "dues_assessments": true,
        "apf_acq_support": true,
        "fanf_nabu": true,
        "isa": false,
        "cross_border": false,
        "trans_integrity": false,
        "misuse_auth": false,
        "zero_floor": false,
        "cvc2": true,
        "kilobyte": false,
        "data_usage": false
      },
      "mc_debit": {
        "dues_assessments": false,
        "apf_acq_support": false,
        "fanf_nabu": false,
        "isa": false,
        "cross_border": false,
        "trans_integrity": false,
        "misuse_auth": false,
        "zero_floor": false,
        "cvc2": false,
        "kilobyte": false,
        "data_usage": false
      },
      "discover": {
        "dues_assessments": true,
        "apf_acq_support": false,
        "fanf_nabu": false,
        "isa": false,
        "cross_border": false,
        "trans_integrity": false,
        "misuse_auth": false,
        "zero_floor": false,
        "cvc2": false,
        "kilobyte": false,
        "data_usage": true
      }
    },
    "limits_and_risk": {
      "limits": {
        "max_auth_amount": 5000,
        "max_sale_amount": 5000,
        "max_return_amount": 1000,
        "daily_fund_limit": 10000,
        "thirty_day_limit": 100000
      },
      "estimates": {
        "avg_ticket": 25.5,
        "daily_auth_count": 50,
        "daily_auth_amount": 1250,
        "daily_deposit": 1000,
        "weekly_deposit": 5000,
        "weekly_batches": 7
      },
      "risk_thresholds": {
        "key_entered_pct": 10,
        "return_vol_pct": 5,
        "return_count_pct": 3,
        "mtd_chargeback_pct": 0.5,
        "voice_auth_pct": 1,
        "below_floor_pct": 2
      },
      "velocity_controls": {
        "daily_trans_per_card": 2,
        "same_amt_auths": 3,
        "same_amt_pct": 5,
        "cardholder_occurrences": 10,
        "max_tktos": 5,
        "auth_decline_pct": 8
      }
    },
    "contact": {
      "name": "Jane Doe",
      "email": "jane@polarbear.com",
      "phone": "555-123-4567",
      "cs_phone": "800-555-0199",
      "language": "EN",
      "address": "456 Arctic Ave",
      "city": "Anchorage",
      "state": "AK",
      "zip": "99501"
    },
    "correspondence": {
      "statement_mail": "M",
      "letter_12b": "S",
      "confirm_letters": "Y",
      "help_desk": "HC"
    }
  },
  "meta": {
    "request_id": "req_omaha01",
    "api_version": "v1",
    "source": "bigquery",
    "as_of": "2026-03-06T12:00:00+00:00"
  },
  "errors": []
}

Transactions

​

Settled card transactions from the processor: portfolio and per-merchant listings plus daily summaries.

List transactions across portfolio

​

Paginated transaction detail list across all merchants in the partner portfolio. Defaults to the last 30 days; maximum date span is 90 days (stricter than the per-merchant route). Pass processor=tsys or processor=fiserv to narrow the merchant set before querying — recommended for large portfolios. Includes TSYS and Fiserv settled transactions. The feed can lag processor batch ingestion; same-day activity is not guaranteed. Dates before 2025-06-01 use legacy history; later dates use Atlas. auth_code carries the Atlas approval code when available; earlier legacy rows preserve authorization codes when available.

Query Parameters

  • Start date (YYYY-MM-DD)

  • End date (YYYY-MM-DD)

  • Deprecated and ignored. Dates are processor business dates and carry no time of day, so no timezone is applied. An unknown IANA zone name returns 422.

  • Page number

  • Items per page

  • Filter by card brand (Visa, Mastercard, etc.)

  • Filter by card type (credit, debit)

  • Filter by settlement batch ID

  • Filter to one merchant in the portfolio

  • Optional processor filter (tsys or fiserv). Suggested for large portfolios to shrink the merchant set before querying. Omitting scans the full portfolio.

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/transactions
curl 'https://uat.modulate-api.es.flute.com/api/partner/transactions?date_from=2025-01-01&date_to=2025-01-31&timezone=UTC&page=1&page_size=25&processor=tsys' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
List portfolio transactions
{
  "data": [
    {
      "merchant_id": "925700000233734",
      "transaction_id": "txn_2a15174ddee7b321eb30172aa6fd41aa",
      "processor": "tsys",
      "date": "2025-01-15",
      "card_brand": "Visa",
      "card_type": "credit",
      "card_last4": "4242",
      "sale_amount": "125.50",
      "refund_amount": "0.00",
      "net_amount": "125.50",
      "batch_id": "20250115001",
      "auth_code": "A12345"
    },
    {
      "merchant_id": "925700000111111",
      "transaction_id": "txn_af6c5682002e97f6cce26e51b8649797",
      "processor": "tsys",
      "date": "2025-01-15",
      "card_brand": "Mastercard",
      "card_type": "debit",
      "card_last4": "8910",
      "sale_amount": "42.00",
      "refund_amount": "0.00",
      "net_amount": "42.00",
      "batch_id": "20250115002",
      "auth_code": "B67890"
    }
  ],
  "meta": {
    "request_id": "req_txn_portfolio",
    "api_version": "v1",
    "page": 1,
    "page_size": 25,
    "total_count": 2,
    "total_pages": 1,
    "has_next": false,
    "has_prev": false,
    "source": "bigquery",
    "as_of": "2025-01-15T10:30:00+00:00",
    "timezone": "UTC"
  },
  "errors": []
}

Get daily transaction summary

​

Returns daily aggregated settled transaction totals for a TSYS or Fiserv merchant over a date range. Defaults to the last 30 days; maximum date span is 365 days (wider ranges return 422). The feed can lag processor batch ingestion; same-day activity is not guaranteed. Dates before 2025-06-01 use the legacy history source; later dates use Atlas.

Path Parameters

  • Merchant ID

Query Parameters

  • Start date (YYYY-MM-DD)

  • End date (YYYY-MM-DD)

  • Deprecated and ignored. Dates are processor business dates and carry no time of day, so no timezone is applied. An unknown IANA zone name returns 422.

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}/transactions/daily
curl 'https://uat.modulate-api.es.flute.com/api/partner/merchants/925700000233734/transactions/daily?date_from=2025-01-01&date_to=2025-01-03&timezone=UTC' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get daily transaction summary
{
  "data": [
    {
      "date": "2025-01-01",
      "transaction_count": 47,
      "volume": "12450.00",
      "refund_count": 2,
      "refund_volume": "150.00",
      "net_volume": "12300.00",
      "batch_count": 3
    },
    {
      "date": "2025-01-02",
      "transaction_count": 52,
      "volume": "14200.00",
      "refund_count": 1,
      "refund_volume": "75.00",
      "net_volume": "14125.00",
      "batch_count": 3
    },
    {
      "date": "2025-01-03",
      "transaction_count": 38,
      "volume": "9800.00",
      "refund_count": 0,
      "refund_volume": "0.00",
      "net_volume": "9800.00",
      "batch_count": 2
    }
  ],
  "meta": {
    "request_id": "req_txn01",
    "api_version": "v1",
    "source": "bigquery",
    "as_of": "2025-01-15T10:30:00+00:00",
    "timezone": "UTC"
  },
  "errors": []
}

List transactions

​

Paginated settled transaction detail list for a TSYS or Fiserv merchant with card brand and batch filters. Defaults to the last 30 days; maximum date span is 365 days (wider ranges return 422). The feed can lag processor batch ingestion; same-day activity is not guaranteed. auth_code is the processor approval code when available on Atlas rows. Earlier history preserves legacy authorization codes. merchant_reference is nullable. Pages reach at most the first 500,000 rows of a query (page x page_size); deeper pages return 422. Narrow the window instead of paging deeper: one portfolio day (~275k rows) fits, so sync day by day.

Path Parameters

  • Merchant ID

Query Parameters

  • Start date (YYYY-MM-DD)

  • End date (YYYY-MM-DD)

  • Deprecated and ignored. Dates are processor business dates and carry no time of day, so no timezone is applied. An unknown IANA zone name returns 422.

  • Page number

  • Items per page

  • Filter by card brand (Visa, Mastercard, etc.)

  • Filter by card type (credit, debit)

  • Filter by settlement batch ID

  • Exact normalized merchant reference (lowercase, leading zero and ASCII whitespace padding removed)

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}/transactions
curl 'https://uat.modulate-api.es.flute.com/api/partner/merchants/925700000233734/transactions?date_from=2025-01-01&date_to=2025-01-31&timezone=UTC&page=1&page_size=25' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
List transactions
{
  "data": [
    {
      "merchant_id": "925700000233734",
      "transaction_id": "txn_2a15174ddee7b321eb30172aa6fd41aa",
      "processor": "tsys",
      "date": "2025-01-15",
      "card_brand": "Visa",
      "card_type": "credit",
      "card_last4": "4242",
      "sale_amount": "125.50",
      "refund_amount": "0.00",
      "net_amount": "125.50",
      "batch_id": "20250115001",
      "auth_code": "A12345"
    },
    {
      "merchant_id": "925700000233734",
      "transaction_id": "txn_af6c5682002e97f6cce26e51b8649797",
      "processor": "tsys",
      "date": "2025-01-15",
      "card_brand": "Mastercard",
      "card_type": "debit",
      "card_last4": "8910",
      "sale_amount": "42.00",
      "refund_amount": "0.00",
      "net_amount": "42.00",
      "batch_id": "20250115001",
      "auth_code": "A12345"
    }
  ],
  "meta": {
    "request_id": "req_txn02",
    "api_version": "v1",
    "page": 1,
    "page_size": 25,
    "total_count": 2,
    "total_pages": 1,
    "has_next": false,
    "has_prev": false,
    "source": "bigquery",
    "as_of": "2025-01-15T10:30:00+00:00",
    "timezone": "UTC"
  },
  "errors": []
}

Gateway Transactions

​

Gateway-level transaction records for merchants on a supported gateway, with per-transaction detail lookups.

List gateway transactions

​

Paginated gateway transactions for a merchant with action type and status filters.

Path Parameters

  • Merchant ID

Query Parameters

  • Page number

  • Items per page

  • Lookback period in days

  • Filter by action type

  • Filter by status

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}/gateway-transactions
curl 'https://uat.modulate-api.es.flute.com/api/partner/merchants/925700000233734/gateway-transactions?page=1&page_size=25&days=30' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
List NMI gateway transactions
{
  "data": [
    {
      "gateway_transaction_id": "8734291056",
      "gateway": "nmi",
      "order_id": "ORD-20250115-001",
      "action_type": "sale",
      "status": "complete",
      "amount": "59.99",
      "card_type": "visa",
      "last_four": "4242",
      "timestamp": "2025-01-15T14:32:00+00:00",
      "auth_code": "A12345"
    },
    {
      "gateway_transaction_id": "8734291057",
      "gateway": "nmi",
      "order_id": null,
      "action_type": "refund",
      "status": "complete",
      "amount": "25.00",
      "card_type": "mastercard",
      "last_four": "8910",
      "timestamp": "2025-01-15T15:10:00+00:00",
      "auth_code": null
    }
  ],
  "meta": {
    "request_id": "req_gw01",
    "api_version": "v1",
    "page": 1,
    "page_size": 25,
    "total_count": 2,
    "total_pages": 1,
    "has_next": false,
    "has_prev": false,
    "source": "nmi",
    "as_of": "2025-01-15T15:30:00+00:00"
  },
  "errors": []
}

Get gateway transaction

​

Returns detail for a single gateway transaction.

Path Parameters

  • Merchant ID

  • Gateway transaction ID

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}/gateway-transactions/{gateway_txn_id}
curl https://uat.modulate-api.es.flute.com/api/partner/merchants/925700000233734/gateway-transactions/8734291056 \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get NMI gateway transaction
{
  "data": {
    "gateway_transaction_id": "8734291056",
    "gateway": "nmi",
    "order_id": "ORD-20250115-001",
    "action_type": "sale",
    "status": "complete",
    "amount": "59.99",
    "card_type": "visa",
    "last_four": "4242",
    "timestamp": "2025-01-15T14:32:00+00:00",
    "auth_code": "A12345"
  },
  "meta": {
    "request_id": "req_gw02",
    "api_version": "v1",
    "source": "nmi",
    "as_of": "2025-01-15T15:30:00+00:00"
  },
  "errors": []
}

Statements

​

List statements across portfolio

​

Paginated metadata-only statement list across all merchants in the partner portfolio, one statement month per request: year and month are required (a request without them returns 422). Page through each month, then move to the next; a month typically answers in a few seconds. The per-merchant statement list needs no filter.

Query Parameters

  • Page number

  • Items per page

  • Statement year. Required on this route (with month).

  • Statement month (1-12). Required on this route (with year).

  • Filter by statement type

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/statements
curl 'https://uat.modulate-api.es.flute.com/api/partner/statements?page=1&page_size=1000&year=2025&month=1' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
List portfolio statements
{
  "data": [
    {
      "statement_id": "tsys_100001",
      "merchant_id": "925700000233734",
      "period": "2025-01",
      "statement_type": "standard",
      "source": "tsys",
      "available_at": "2025-02-03T00:00:00+00:00",
      "has_pdf": true,
      "is_primary": true
    },
    {
      "statement_id": "fiserv_200001",
      "merchant_id": "925700000198472",
      "period": "2025-01",
      "statement_type": "standard",
      "source": "fiserv",
      "available_at": "2025-01-31",
      "has_pdf": true,
      "is_primary": true
    },
    {
      "statement_id": "custom_abc123",
      "merchant_id": "925700000233734",
      "period": "2025-01",
      "statement_type": "custom",
      "source": "cadence",
      "available_at": "2025-02-05T12:00:00+00:00",
      "has_pdf": true,
      "is_primary": true
    }
  ],
  "meta": {
    "request_id": "req_stmt01",
    "api_version": "v1",
    "page": 1,
    "page_size": 1000,
    "total_count": 3,
    "total_pages": 1,
    "has_next": false,
    "has_prev": false,
    "source": "bigquery",
    "as_of": "2025-01-15T10:30:00+00:00"
  },
  "errors": []
}

List statements

​

Paginated list of processor and custom statements for a merchant.

Path Parameters

  • Merchant ID

Query Parameters

  • Page number

  • Items per page

  • Filter by year

  • Filter by month

  • Filter by statement type

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}/statements
curl 'https://uat.modulate-api.es.flute.com/api/partner/merchants/925700000233734/statements?page=1&page_size=25&year=2025&month=1' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
List merchant statements
{
  "data": [
    {
      "statement_id": "custom_abc123",
      "merchant_id": "925700000233734",
      "period": "2025-01",
      "statement_type": "custom",
      "source": "cadence",
      "available_at": "2025-02-05T12:00:00+00:00",
      "has_pdf": true,
      "is_primary": true
    },
    {
      "statement_id": "tsys_100001",
      "merchant_id": "925700000233734",
      "period": "2025-01",
      "statement_type": "standard",
      "source": "tsys",
      "available_at": "2025-02-03T00:00:00+00:00",
      "has_pdf": true,
      "is_primary": false
    }
  ],
  "meta": {
    "request_id": "req_stmt02",
    "api_version": "v1",
    "page": 1,
    "page_size": 25,
    "total_count": 2,
    "total_pages": 1,
    "has_next": false,
    "has_prev": false,
    "source": "bigquery",
    "as_of": "2025-01-15T10:30:00+00:00"
  },
  "errors": []
}

Get statement metadata

​

Returns metadata for a single statement including period, type, and availability.

Path Parameters

  • Merchant ID

  • Statement ID

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}/statements/{statement_id}
curl https://uat.modulate-api.es.flute.com/api/partner/merchants/925700000233734/statements/tsys_100001 \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get statement metadata
{
  "data": {
    "statement_id": "tsys_100001",
    "merchant_id": "925700000233734",
    "period": "2025-01",
    "statement_type": "standard",
    "source": "tsys",
    "available_at": "2025-02-03T00:00:00+00:00",
    "has_pdf": true,
    "total_volume": "125000.00",
    "total_fees": "3250.00",
    "total_settled": "121750.00"
  },
  "meta": {
    "request_id": "req_stmt03",
    "api_version": "v1",
    "source": "bigquery",
    "as_of": "2025-01-15T10:30:00+00:00"
  },
  "errors": []
}

Download statement PDF

​

Download a statement as raw PDF stream or base64-encoded JSON. Use ?format=base64 for JSON delivery.

Path Parameters

  • Merchant ID

  • Statement ID

Query Parameters

  • Delivery format: stream (raw PDF) or base64 (JSON envelope)

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}/statements/{statement_id}/pdf
curl 'https://uat.modulate-api.es.flute.com/api/partner/merchants/925700000233734/statements/tsys_100001/pdf?format=base64' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Download statement PDF (base64)
{
  "data": {
    "statement_id": "tsys_100001",
    "format": "base64",
    "content_type": "application/pdf",
    "size_bytes": 45230,
    "pdf_base64": "JVBERi0xLjQK..."
  },
  "meta": {
    "request_id": "req_stmt04",
    "api_version": "v1",
    "source": "gcs",
    "as_of": "2025-01-15T10:30:00+00:00"
  },
  "errors": []
}

Residuals

​

List available reports

​

Returns the list of available residual report months for the partner's organization.

Query Parameters

  • ISO-8601 timestamp for incremental sync

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/residuals/reports
curl https://uat.modulate-api.es.flute.com/api/partner/residuals/reports \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
List available reports
{
  "data": [
    {
      "year": 2025,
      "month": 1,
      "available_at": "2025-02-05T00:00:00Z",
      "report_run_id": "rpt_2025_01_a1b2c3d4e5f6",
      "report_status": "final",
      "data_cutoff_at": "2025-02-05T00:00:00+00:00",
      "generated_at": "2025-01-15T10:30:00+00:00"
    },
    {
      "year": 2024,
      "month": 12,
      "available_at": "2025-01-05T00:00:00Z",
      "report_run_id": "rpt_2024_12_f6e5d4c3b2a1",
      "report_status": "final",
      "data_cutoff_at": "2025-01-05T00:00:00+00:00",
      "generated_at": "2025-01-15T10:30:00+00:00"
    }
  ],
  "meta": {
    "request_id": "req_res01",
    "api_version": "v1",
    "source": "bigquery",
    "as_of": "2025-01-15T10:30:00+00:00"
  },
  "errors": []
}

Get payout summary

​

Returns aggregated payout summary including volume, profit, and agent payout for a month.

Path Parameters

  • Report year

  • Report month

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/residuals/reports/{year}/{month}/summary
curl https://uat.modulate-api.es.flute.com/api/partner/residuals/reports/2025/1/summary \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get payout summary
{
  "data": {
    "year": 2025,
    "month": 1,
    "payout_before_adjustments": "45000.00",
    "total_adjustments": "500.00",
    "total_withholds": "-1200.00",
    "net_payout": "44300.00",
    "merchant_count": 142,
    "total_volume": "2500000.00",
    "total_transactions": 18500,
    "average_split_pct": 50,
    "payout_variance_vs_prior_month": "2100.00",
    "payout_variance_pct": 4.9
  },
  "meta": {
    "request_id": "req_res02",
    "api_version": "v1",
    "source": "bigquery",
    "as_of": "2025-01-15T10:30:00+00:00",
    "report_run_id": "rpt_2025_01_a1b2c3d4e5f6",
    "report_status": "final",
    "data_cutoff_at": "2025-02-05T00:00:00+00:00",
    "generated_at": "2025-01-15T10:30:00+00:00"
  },
  "errors": []
}

Get merchant residuals

​

Paginated merchant-level residual details with search, sort, and incremental sync support.

Path Parameters

  • Report year

  • Report month

Query Parameters

  • Page number

  • Items per page

  • Sort field: volume, profit, agent_payout, dba_name

  • Sort direction

  • Search by merchant name or ID

  • ISO-8601 timestamp for incremental sync

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/residuals/reports/{year}/{month}/merchants
curl 'https://uat.modulate-api.es.flute.com/api/partner/residuals/reports/2025/1/merchants?page=1&page_size=25&sort_by=agent_payout&sort_order=desc' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get merchant residuals
{
  "data": [
    {
      "merchant_id": "925700000233734",
      "dba_name": "Sunrise Coffee Co",
      "volume": "85000.00",
      "transaction_count": 620,
      "revenue": "1200.00",
      "expenses": "800.00",
      "profit": "400.00",
      "split_pct": 50,
      "agent_payout": "200.00"
    },
    {
      "merchant_id": "925700000198472",
      "dba_name": "The Barber Lounge",
      "volume": "42000.00",
      "transaction_count": 310,
      "revenue": "600.00",
      "expenses": "350.00",
      "profit": "250.00",
      "split_pct": 50,
      "agent_payout": "125.00"
    }
  ],
  "meta": {
    "request_id": "req_res03",
    "api_version": "v1",
    "page": 1,
    "page_size": 25,
    "total_count": 2,
    "total_pages": 1,
    "has_next": false,
    "has_prev": false,
    "source": "bigquery",
    "as_of": "2025-01-15T10:30:00+00:00",
    "report_run_id": "rpt_2025_01_a1b2c3d4e5f6",
    "report_status": "final",
    "data_cutoff_at": "2025-02-05T00:00:00+00:00",
    "generated_at": "2025-01-15T10:30:00+00:00"
  },
  "errors": []
}

Get adjustments

​

Returns adjustment line items for a residual report period.

Path Parameters

  • Report year

  • Report month

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/residuals/reports/{year}/{month}/adjustments
curl https://uat.modulate-api.es.flute.com/api/partner/residuals/reports/2025/1/adjustments \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get adjustments
{
  "data": [
    {
      "type": "Bonus",
      "description": "Q4 performance bonus",
      "amount": "500.00",
      "merchant_id": null
    },
    {
      "type": "Clawback",
      "description": "Early termination",
      "amount": "-200.00",
      "merchant_id": "925700000198472"
    }
  ],
  "meta": {
    "request_id": "req_res04",
    "api_version": "v1",
    "source": "bigquery",
    "as_of": "2025-01-15T10:30:00+00:00",
    "report_run_id": "rpt_2025_01_a1b2c3d4e5f6",
    "report_status": "final",
    "data_cutoff_at": "2025-02-05T00:00:00+00:00",
    "generated_at": "2025-01-15T10:30:00+00:00"
  },
  "errors": []
}

Get withholds

​

Returns withhold line items for a residual report period.

Path Parameters

  • Report year

  • Report month

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/residuals/reports/{year}/{month}/withholds
curl https://uat.modulate-api.es.flute.com/api/partner/residuals/reports/2025/1/withholds \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get withholds
{
  "data": [
    {
      "type": "Reserve",
      "description": "Rolling reserve hold",
      "amount": "-250.00",
      "merchant_id": "925700000233734",
      "merchant_name": "Sunrise Coffee Co"
    },
    {
      "type": "Chargeback",
      "description": "Chargeback recovery withhold",
      "amount": "-150.00",
      "merchant_id": "925700000198472",
      "merchant_name": "The Barber Lounge"
    }
  ],
  "meta": {
    "request_id": "req_res05",
    "api_version": "v1",
    "source": "bigquery",
    "as_of": "2025-01-15T10:30:00+00:00",
    "report_run_id": "rpt_2025_01_a1b2c3d4e5f6",
    "report_status": "final",
    "data_cutoff_at": "2025-02-05T00:00:00+00:00",
    "generated_at": "2025-01-15T10:30:00+00:00"
  },
  "errors": []
}

Get payout trend

​

Returns month-over-month payout trend data for the last N months.

Query Parameters

  • Number of months to include in trend

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/residuals/reports/trend
curl 'https://uat.modulate-api.es.flute.com/api/partner/residuals/reports/trend?months=3' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get payout trend
{
  "data": [
    {
      "year": 2024,
      "month": 11,
      "net_payout": "40500.00",
      "volume": "2200000.00",
      "merchant_count": 138
    },
    {
      "year": 2024,
      "month": 12,
      "net_payout": "42200.00",
      "volume": "2350000.00",
      "merchant_count": 140
    },
    {
      "year": 2025,
      "month": 1,
      "net_payout": "44300.00",
      "volume": "2500000.00",
      "merchant_count": 142
    }
  ],
  "meta": {
    "request_id": "req_res06",
    "api_version": "v1",
    "source": "bigquery",
    "as_of": "2025-01-15T10:30:00+00:00"
  },
  "errors": []
}

Get top merchants

​

Returns the top merchants ranked by profit for a residual report period.

Path Parameters

  • Report year

  • Report month

Query Parameters

  • Number of top merchants to return

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/residuals/reports/{year}/{month}/top-merchants
curl 'https://uat.modulate-api.es.flute.com/api/partner/residuals/reports/2025/1/top-merchants?limit=3' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get top merchants
{
  "data": [
    {
      "merchant_id": "925700000233734",
      "dba_name": "Sunrise Coffee Co",
      "profit": "1200.00",
      "volume": "180000.00",
      "agent_payout": "600.00"
    },
    {
      "merchant_id": "925700000198472",
      "dba_name": "The Barber Lounge",
      "profit": "950.00",
      "volume": "120000.00",
      "agent_payout": "475.00"
    },
    {
      "merchant_id": "925700000345678",
      "dba_name": "Metro Auto Wash",
      "profit": "800.00",
      "volume": "95000.00",
      "agent_payout": "400.00"
    }
  ],
  "meta": {
    "request_id": "req_res07",
    "api_version": "v1",
    "source": "bigquery",
    "as_of": "2025-01-15T10:30:00+00:00",
    "report_run_id": "rpt_2025_01_a1b2c3d4e5f6",
    "report_status": "final",
    "data_cutoff_at": "2025-02-05T00:00:00+00:00",
    "generated_at": "2025-01-15T10:30:00+00:00"
  },
  "errors": []
}

Create merchant export

​

Starts an async CSV export of merchant residuals. Returns 202 with an export ID to poll.

Path Parameters

  • Report year

  • Report month

Headers

  • Optional dedup key (24h TTL)

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for post/api/partner/residuals/reports/{year}/{month}/merchants/export
curl https://uat.modulate-api.es.flute.com/api/partner/residuals/reports/2025/1/merchants/export \
  --request POST \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Create merchant export
{
  "data": {
    "export_id": "550e8400-e29b-41d4-a716-446655440000",
    "status": "succeeded"
  },
  "meta": {
    "request_id": "req_exp01",
    "api_version": "v1"
  },
  "errors": []
}

Get export status

​

Check the status of an async export job (pending, running, succeeded, failed).

Path Parameters

  • Export job ID

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/residuals/exports/{export_id}
curl https://uat.modulate-api.es.flute.com/api/partner/residuals/exports/550e8400-e29b-41d4-a716-446655440000 \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get export status
{
  "data": {
    "export_id": "550e8400-e29b-41d4-a716-446655440000",
    "status": "succeeded",
    "row_count": 142,
    "created_at": "2025-01-15T10:35:00+00:00"
  },
  "meta": {
    "request_id": "req_exp02",
    "api_version": "v1"
  },
  "errors": []
}

Download export

​

Returns a signed GCS URL for downloading a completed export CSV.

Path Parameters

  • Export job ID

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/residuals/exports/{export_id}/download
curl https://uat.modulate-api.es.flute.com/api/partner/residuals/exports/550e8400-e29b-41d4-a716-446655440000/download \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Download export
{
  "data": {
    "download_url": "https://storage.googleapis.com/example-exports/residuals/..."
  },
  "meta": {
    "request_id": "req_exp03",
    "api_version": "v1"
  },
  "errors": []
}

AI portfolio insights

​

Explains one paid month of your organization's residuals: a headline, a summary, prioritized insights and opportunities, each citing the statement figures behind it. Briefs for the latest paid month are prepared in advance and return in seconds; other months are generated on request and can take up to a few minutes. Rate limited to 5 requests per minute per key.

Body·PortfolioInsightsRequest

required
application/json

Residual paid month to explain.

  • Paid month, 1-12.

  • Paid year.

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for post/api/partner/residuals/explain
curl https://uat.modulate-api.es.flute.com/api/partner/residuals/explain \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "year": 2026,
  "month": 8
}'
AI portfolio insights
{
  "data": {
    "analysis_version": "residuals-explain-v2",
    "audience": "external",
    "reader_lens": "portfolio_executive",
    "period": {
      "start_month": "2026-08",
      "end_month": "2026-08",
      "months": [
        "2026-08"
      ]
    },
    "comparison_period": {
      "start_month": "2026-07",
      "end_month": "2026-07",
      "months": [
        "2026-07"
      ]
    },
    "coverage": {
      "current": {
        "requested_months": [
          "2026-08"
        ],
        "available_months": [
          "2026-08"
        ],
        "missing_months": [],
        "complete": true
      },
      "comparison": {
        "requested_months": [
          "2026-07"
        ],
        "available_months": [
          "2026-07"
        ],
        "missing_months": [],
        "complete": true
      },
      "comparable": true
    },
    "data_through": "2026-08",
    "generated_at": "2026-09-13T08:55:02+00:00",
    "from_cache": true,
    "regeneration": "cached",
    "prompt_version": "v2",
    "headline": "Net payout fell $2,308.45 as processing volume declined",
    "summary": "Net payout moved from $48,210.55 in July to $45,902.10 in August (-4.8%). Processing volume fell 2.9% while payout yield held near 76 bps, so most of the decline follows volume.",
    "key_insights": [
      {
        "category": "performance",
        "title": "Lower volume drove the payout decline",
        "description": "Net payout fell $2,308.45 from July to August. Volume fell 2.9% while payout yield held near 76 bps.",
        "impact": "-$2,308.45 (2026-08)",
        "priority": "high",
        "direction": "negative",
        "observation": "Net payout fell $2,308.45 from July to August.",
        "explanation": "Volume fell 2.9% while payout yield held near 76 bps.",
        "cause_status": "supported",
        "evidence_ids": [
          "metric:net_payout",
          "metric:volume",
          "bridge:net_payout"
        ],
        "next_step": "Review the merchants whose volume fell most in August.",
        "owner": "portfolio_owner",
        "missing_evidence": [],
        "quantified_impact": {
          "metric_evidence_id": "metric:net_payout",
          "amount": -2308.45,
          "unit": "USD",
          "period": "2026-08"
        }
      },
      {
        "category": "risk",
        "title": "Northside Grill stopped reporting",
        "description": "Northside Grill paid $1,140.20 in July and has no August statement line. The data does not show why.",
        "impact": "-$1,140.20 (2026-08)",
        "priority": "medium",
        "direction": "negative",
        "observation": "Northside Grill paid $1,140.20 in July and has no August statement line.",
        "explanation": "The data does not show why.",
        "cause_status": "unverified",
        "evidence_ids": [
          "merchant:4445091234567"
        ],
        "next_step": "Ask merchant support whether the account closed or moved processors.",
        "owner": "merchant_support",
        "missing_evidence": [
          "August account status for merchant 4445091234567"
        ],
        "quantified_impact": {
          "metric_evidence_id": "merchant:4445091234567",
          "amount": -1140.2,
          "unit": "USD",
          "period": "2026-08"
        }
      }
    ],
    "opportunities": [
      {
        "title": "Recover lapsed volume",
        "description": "Confirm whether Northside Grill can resume processing.",
        "evidence_ids": [
          "merchant:4445091234567"
        ],
        "owner": "portfolio_owner",
        "amount": null,
        "amount_evidence_id": null,
        "dependencies": [
          "Account status for merchant 4445091234567"
        ]
      }
    ],
    "unexplained_change": [],
    "data_limitations": [
      "Evidence contains source adjustment and hold labels only; it has no transaction-level refund, chargeback, pricing or contract records."
    ],
    "evidence": [
      {
        "id": "metric:net_payout",
        "kind": "metric",
        "label": "Net payout (authoritative, after adjustments and holds)",
        "link": null
      },
      {
        "id": "metric:volume",
        "kind": "metric",
        "label": "Processing volume",
        "link": null
      },
      {
        "id": "bridge:net_payout",
        "kind": "bridge",
        "label": "bridge:net_payout",
        "link": null
      },
      {
        "id": "merchant:4445091234567",
        "kind": "merchant",
        "label": "Northside Grill",
        "link": {
          "kind": "merchant",
          "label": "Northside Grill",
          "merchant_number": "4445091234567",
          "month": "2026-07",
          "agent_id": null
        }
      }
    ],
    "metrics": [
      {
        "id": "metric:net_payout",
        "label": "Net payout (authoritative, after adjustments and holds)",
        "unit": "USD",
        "current": 45902.1,
        "comparison": 48210.55,
        "change": -2308.45,
        "change_percent": -4.8
      },
      {
        "id": "metric:volume",
        "label": "Processing volume",
        "unit": "USD",
        "current": 6120400,
        "comparison": 6305900,
        "change": -185500,
        "change_percent": -2.9
      },
      {
        "id": "metric:payout_yield_bps",
        "label": "Payout yield on volume",
        "unit": "bps",
        "current": 75.7,
        "comparison": 76.6,
        "change": -0.9,
        "change_percent": -1.2
      },
      {
        "id": "metric:reporting_merchants",
        "label": "Reporting merchants",
        "unit": "count",
        "current": 412,
        "comparison": 418,
        "change": -6,
        "change_percent": -1.4
      }
    ],
    "payout_bridge": {
      "id": "bridge:net_payout",
      "identity": "net payout change = payout change + adjustments change - holds change + unexplained",
      "comparison_net_payout": 48210.55,
      "current_net_payout": 45902.1,
      "change": -2308.45,
      "lines": [
        {
          "id": "bridge:payout_before_adjustments",
          "label": "Change in payout before adjustments",
          "amount": -1950
        },
        {
          "id": "bridge:adjustments",
          "label": "Change in adjustments",
          "amount": -250
        },
        {
          "id": "bridge:holds",
          "label": "Change in holds (an increase reduces net payout)",
          "amount": -108.45
        }
      ],
      "unexplained_remainder": {
        "id": "bridge:unexplained",
        "amount": 0
      }
    },
    "agent_context": {
      "agent_id": "5f2c1a9e-8b7d-4c3e-9a1f-2d6e4b8c0f13",
      "agent_name": "Example Partners LLC",
      "processing_month": "2026-08",
      "merchant_count": 412,
      "total_payout": 45902.1,
      "avg_split_percent": 62.5,
      "top_merchants": [
        {
          "name": "Harbor Auto Care",
          "payout": 2410.35,
          "volume": 188420.1
        },
        {
          "name": "Lakeview Dental",
          "payout": 1985.6,
          "volume": 142300
        }
      ],
      "opportunity_analysis": null
    },
    "model_used": "vertex/gemini-3.8-flash",
    "persona": "external",
    "disclaimer": "This analysis is generated by AI and is provided for informational purposes only. It does not constitute financial, legal, or business advice. Insights may contain inaccuracies or incomplete information. Verify all data independently before making business decisions."
  },
  "meta": {
    "request_id": "req_ins01",
    "api_version": "v1"
  },
  "errors": []
}

Capital

​

Merchant capital program: portfolio summary, outstanding advances, per-merchant activity, and open offers.

Get capital summary

​

Org-wide funding summary: advance counts and volume, merchant fees, loans (separate), and funnel counts.

Responses

  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/capital/summary
curl https://uat.modulate-api.es.flute.com/api/partner/capital/summary \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get capital summary
{
  "data": {
    "advances": {
      "count": 14,
      "principal_total": 14000,
      "fee_total": 1235,
      "total": 15235,
      "average": 1088.2142857143,
      "first_signing_date": "2026-05-02",
      "last_signing_date": "2026-07-19"
    },
    "loans": {
      "count": 1,
      "total": 12000
    },
    "merchants": {
      "funded_count": 4,
      "with_open_offer_count": 4
    },
    "funnel": {
      "pre_offer": 3,
      "offer": 1,
      "taken": 1
    }
  },
  "meta": {
    "request_id": "req_capital_summary",
    "api_version": "v1",
    "source": "bigquery",
    "as_of": "2026-08-20T08:00:00Z"
  },
  "errors": []
}

List advances

​

Paginated instant-payout advances for the partner's merchants, sorted by signing date descending.

Query Parameters

  • Page number

  • Items per page

  • Filter by merchant

  • Earliest signing date (inclusive)

  • Latest signing date (inclusive)

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/capital/advances
curl 'https://uat.modulate-api.es.flute.com/api/partner/capital/advances?page=1&page_size=25' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
List advances
{
  "data": [
    {
      "advance_id": "adv_002",
      "merchant_id": "925700000233734",
      "merchant_name": "Sunrise Coffee Co",
      "signing_date": "2026-07-19",
      "principal_amount": 2000,
      "fee_amount": 170,
      "total_amount": 2170,
      "status": null
    },
    {
      "advance_id": "adv_001",
      "merchant_id": "925700000233734",
      "merchant_name": "Sunrise Coffee Co",
      "signing_date": "2026-05-02",
      "principal_amount": 1000,
      "fee_amount": 85,
      "total_amount": 1085,
      "status": null
    }
  ],
  "meta": {
    "request_id": "req_capital_advances",
    "api_version": "v1",
    "page": 1,
    "page_size": 25,
    "total_count": 2,
    "total_pages": 1,
    "has_next": false,
    "has_prev": false,
    "source": "bigquery",
    "as_of": "2026-08-20T08:00:00Z"
  },
  "errors": []
}

List merchant capital activity

​

Per-merchant funding rollups: advance counts, totals, and funnel stage.

Responses

  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/capital/merchants
curl https://uat.modulate-api.es.flute.com/api/partner/capital/merchants \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
List merchant capital activity
{
  "data": [
    {
      "merchant_id": "925700000233734",
      "merchant_name": "Sunrise Coffee Co",
      "funnel_stage": "taken",
      "advances": {
        "count": 2,
        "total": 3255,
        "last_signing_date": "2026-07-19"
      },
      "open_offers": []
    },
    {
      "merchant_id": "925700000256909",
      "merchant_name": "Harbor Market",
      "funnel_stage": "offer",
      "advances": {
        "count": 0,
        "total": 0,
        "last_signing_date": null
      },
      "open_offers": [
        {
          "offer_id": "offer_001",
          "offer_type": "offer",
          "merchant_id": "925700000256909",
          "merchant_name": "Harbor Market",
          "status": null,
          "amount_min": 10000,
          "amount_max": 15000,
          "term_months": 9,
          "as_of_run": "2026-08-20T07:30:00Z"
        }
      ]
    }
  ],
  "meta": {
    "request_id": "req_capital_merchants",
    "api_version": "v1",
    "page": 1,
    "page_size": 2,
    "total_count": 2,
    "total_pages": 1,
    "has_next": false,
    "has_prev": false,
    "source": "bigquery",
    "as_of": "2026-08-20T08:00:00Z"
  },
  "errors": []
}

List offers

​

Offers and pre-offers for the partner's merchants with status and offered amounts/terms.

Query Parameters

  • Filter by merchant

  • Filter by type: pre_offer or offer

  • Filter by offer status

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/capital/offers
curl https://uat.modulate-api.es.flute.com/api/partner/capital/offers \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
List current offers
{
  "data": [
    {
      "offer_id": "offer_001",
      "offer_type": "offer",
      "merchant_id": "925700000256909",
      "merchant_name": "Harbor Market",
      "status": null,
      "amount_min": 10000,
      "amount_max": 15000,
      "term_months": 9,
      "as_of_run": "2026-08-20T07:30:00Z"
    },
    {
      "offer_id": "preoffer_001",
      "offer_type": "pre_offer",
      "merchant_id": "925700000268111",
      "merchant_name": "Orchard Books",
      "status": null,
      "amount_min": 5000,
      "amount_max": 8000,
      "term_months": null,
      "as_of_run": "2026-08-20T07:30:00Z"
    }
  ],
  "meta": {
    "request_id": "req_capital_offers",
    "api_version": "v1",
    "page": 1,
    "page_size": 2,
    "total_count": 2,
    "total_pages": 1,
    "has_next": false,
    "has_prev": false,
    "source": "bigquery",
    "as_of": "2026-08-20T08:00:00Z"
  },
  "errors": []
}

Authorizations

​

Authorization records from the processor: portfolio and per-merchant listings with daily approval summaries.

List authorizations across portfolio

​

Card authorization attempts (approvals and declines) across the partner's portfolio, newest first. Defaults to the last 30 days; maximum date span is 90 days (the per-merchant route allows 365). Portfolio results cover the TSYS side of the book only (meta.data_coverage is "tsys_only"); a merchant_id filter naming a Fiserv merchant returns an empty page. Fiserv merchants are served on the per-merchant routes. TSYS history begins 2024-12-30; new authorizations land once daily, typically one day behind. Paging depth: across more than one day, pages reach the first 500,000 rows (page x page_size), or the first 50,000 with approved, card_type or card_network; deeper pages return 422. A single day (date_from equal to date_to) has no depth limit, so sync large portfolios one day at a time.

Query Parameters

  • Start date (YYYY-MM-DD)

  • End date (YYYY-MM-DD)

  • Page number

  • Items per page

  • Filter to one merchant in the portfolio

  • Filter by the raw processor card type code, passed through undecoded: the TSYS card type (e.g. 4, 5, 3, 8; proprietary extensions appear in live data) or, on the per-merchant routes, the Fiserv code: the Omaha FSP network code (e.g. 2 = Visa, 3 = Mastercard, 1 = American Express, 4 = Discover) or the AccessOne card type (e.g. 00002, 04).

  • Filter by one normalized network: amex, debit, diners, discover, ebt, fleet, jcb, mastercard, other, paypal, private_label, visa

  • true = issuer-approved authorizations (TSYS response codes 00, 10, 85; Fiserv approval status 1 or AccessOne Approved); false = declines. Rows whose outcome is absent at the source (approved: null in the payload) match neither filter.

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/authorizations
curl 'https://uat.modulate-api.es.flute.com/api/partner/authorizations?page=1&page_size=25' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
List authorizations across portfolio
{
  "data": [
    {
      "merchant_id": "672800000253062",
      "authorization_id": "auth_8a19098404dece73b7615c06b33eec6d",
      "occurred_at": "2026-08-19T11:57:28+00:00",
      "occurred_at_basis": "utc",
      "authorized_at": "2026-08-19T11:57:28+00:00",
      "authorized_at_local": null,
      "transaction_date": "2026-08-19",
      "processor": "tsys",
      "transaction_type": "authorization_request",
      "message_type": "0100",
      "card_type": "4",
      "card_brand": "Visa",
      "card_network": "visa",
      "card_bin": "411111",
      "card_last4": "1111",
      "approval_code": "123456",
      "response_code": "00",
      "approved": true,
      "amount": "3.78",
      "currency": "840",
      "cardholder_billing_amount": null,
      "cardholder_billing_currency": null
    }
  ],
  "meta": {
    "request_id": "req_auth01",
    "api_version": "v1",
    "page": 1,
    "page_size": 25,
    "total_count": 1,
    "total_pages": 1,
    "has_next": false,
    "has_prev": false,
    "source": "alloydb",
    "as_of": "2026-08-20T12:00:00+00:00",
    "data_coverage": "tsys_only",
    "applied_window": {
      "from": "2026-07-21",
      "to": "2026-08-20"
    }
  },
  "errors": []
}

List authorizations for a merchant

​

Card authorization attempts (approvals and declines) for one merchant, newest first. Defaults to the last 30 days; maximum date span is 365 days. An empty result is normal for low-volume merchants. Coverage: TSYS merchants are served from the TSYS authorization file (history from 2024-12-30; new authorizations land once daily, typically one day behind). Merchants processed on Fiserv Omaha FSP are served from the Fiserv authorization feed (history from 2026-01-01 with a rolling 15-month floor; refreshed roughly hourly). Merchants on Fiserv North or Fiserv Omaha Retail are served from the Fiserv AccessOne authorization feed (refreshed daily; times are the processor's wall-clock time in authorized_at_local, with authorized_at null). meta.data_coverage reports which feed answered ("tsys_only", "fiserv_fsp" or "fiserv_accessone"; new values are added as feeds come online). Paging depth: across more than one day, pages reach the first 500,000 rows (page x page_size), or the first 50,000 with approved, card_type or card_network; deeper pages return 422. A single day (date_from equal to date_to) has no depth limit, so sync large portfolios one day at a time.

Path Parameters

  • Merchant ID

Query Parameters

  • Start date (YYYY-MM-DD)

  • End date (YYYY-MM-DD)

  • Page number

  • Items per page

  • Filter by the raw processor card type code, passed through undecoded: the TSYS card type (e.g. 4, 5, 3, 8; proprietary extensions appear in live data) or, on the per-merchant routes, the Fiserv code: the Omaha FSP network code (e.g. 2 = Visa, 3 = Mastercard, 1 = American Express, 4 = Discover) or the AccessOne card type (e.g. 00002, 04).

  • Filter by one normalized network: amex, debit, diners, discover, ebt, fleet, jcb, mastercard, other, paypal, private_label, visa

  • true = issuer-approved authorizations (TSYS response codes 00, 10, 85; Fiserv approval status 1 or AccessOne Approved); false = declines. Rows whose outcome is absent at the source (approved: null in the payload) match neither filter.

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}/authorizations
curl 'https://uat.modulate-api.es.flute.com/api/partner/merchants/672800000253062/authorizations?page=1&page_size=25' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
List authorizations for a merchant
{
  "data": [
    {
      "merchant_id": "672800000253062",
      "authorization_id": "auth_e32e3aacee3041b6b3f7e051f4d1b426",
      "occurred_at": "2026-08-19T11:51:06+00:00",
      "occurred_at_basis": "utc",
      "authorized_at": "2026-08-19T11:51:06+00:00",
      "authorized_at_local": null,
      "transaction_date": "2026-08-19",
      "processor": "tsys",
      "transaction_type": "authorization_request",
      "message_type": "0100",
      "card_type": "4",
      "card_brand": "Visa",
      "card_network": "visa",
      "card_bin": "411111",
      "card_last4": "1111",
      "approval_code": null,
      "response_code": "51",
      "approved": false,
      "amount": "8.32",
      "currency": "840",
      "cardholder_billing_amount": null,
      "cardholder_billing_currency": null
    }
  ],
  "meta": {
    "request_id": "req_auth02",
    "api_version": "v1",
    "page": 1,
    "page_size": 25,
    "total_count": 1,
    "total_pages": 1,
    "has_next": false,
    "has_prev": false,
    "source": "alloydb",
    "as_of": "2026-08-20T12:00:00+00:00",
    "data_coverage": "tsys_only",
    "applied_window": {
      "from": "2026-07-21",
      "to": "2026-08-20"
    }
  },
  "errors": []
}

Get daily authorization summary

​

Daily authorization counts, approval rate, and approved volume for one merchant. Defaults to the last 30 days; maximum date span is 365 days. A day's auth_count can exceed approved_count + declined_count: rows whose outcome is absent at the source count as authorizations but as neither approved nor declined. approval_rate counts issuer decisions only (TSYS 0100/0200; Fiserv purchases and pre-authorization requests) as approved / (approved + declined); approval_basis carries those counts. Coverage: TSYS merchants are served from the TSYS authorization file (history from 2024-12-30; new authorizations land once daily, typically one day behind). Merchants processed on Fiserv Omaha FSP are served from the Fiserv authorization feed (history from 2026-01-01 with a rolling 15-month floor; refreshed roughly hourly). Merchants on Fiserv North or Fiserv Omaha Retail are served from the Fiserv AccessOne authorization feed (refreshed daily; times are the processor's wall-clock time in authorized_at_local, with authorized_at null). meta.data_coverage reports which feed answered ("tsys_only", "fiserv_fsp" or "fiserv_accessone"; new values are added as feeds come online).

Path Parameters

  • Merchant ID

Query Parameters

  • Start date (YYYY-MM-DD)

  • End date (YYYY-MM-DD)

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}/authorizations/summary
curl https://uat.modulate-api.es.flute.com/api/partner/merchants/672800000253062/authorizations/summary \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get daily authorization summary
{
  "data": {
    "merchant_id": "672800000253062",
    "days": [
      {
        "date": "2026-08-19",
        "auth_count": 73,
        "approved_count": 72,
        "declined_count": 1,
        "approval_rate": 0.9863,
        "approval_basis": {
          "attempts": 73,
          "approved": 72,
          "declined": 1,
          "unknown": 0
        },
        "approved_amount": "714.60"
      }
    ],
    "totals": {
      "auth_count": 2709,
      "approved_count": 2521,
      "declined_count": 188,
      "approval_rate": 0.9306,
      "approval_basis": {
        "attempts": 2709,
        "approved": 2521,
        "declined": 188,
        "unknown": 0
      },
      "approved_amount": "27439.43"
    }
  },
  "meta": {
    "request_id": "req_auth03",
    "api_version": "v1",
    "source": "alloydb",
    "as_of": "2026-08-20T12:00:00+00:00",
    "data_coverage": "tsys_only",
    "applied_window": {
      "from": "2026-07-21",
      "to": "2026-08-20"
    }
  },
  "errors": []
}

Chargebacks

​

Chargeback cases: portfolio and per-merchant listings with summary counts.

List chargebacks

​

Chargeback and retrieval cases across the partner's portfolio. Two defaults apply together: status=all (every case, not just open ones) and updated_since=30 days ago (only cases with activity in that window). Pass an explicit updated_since, or from/to, to widen the window; pass status=open or status=closed to narrow by status. Note: status=open combined with the default updated_since window shows only cases that both are open AND changed recently — pass a wide explicit from to see the full open book.

Query Parameters

  • Page number

  • Items per page

  • open, closed, or all

  • Filter to one merchant

  • Filter on when a case opened (inclusive). This is not a change feed: a case opened before from but resolved inside the window will not appear. Use updated_since to sync a mirror.

  • Filter on when a case opened (inclusive). Same caveat as from — not a change feed. Use updated_since to sync a mirror.

  • Cases with any activity on or after this date. Defaults to 30 days ago on this endpoint. This is the incremental-sync filter: it catches newly-opened and newly-resolved cases. An explicit from or to suppresses the default.

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/chargebacks
curl 'https://uat.modulate-api.es.flute.com/api/partner/chargebacks?page=1&page_size=25&status=all' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
List open chargebacks
{
  "data": [
    {
      "case_id": "2026163019064",
      "merchant_id": "939802015758008",
      "merchant_name": "PERFORMANCE GOLF ZONE",
      "kind": "chargeback",
      "status": "open",
      "resolved_against": null,
      "resolved_against_description": null,
      "reason_code": "10.4",
      "reason": "Fraud Card Absent Environment",
      "amount": "125.40",
      "card_brand": "Visa",
      "transaction_reference": "24906421650000",
      "opened_at": "2026-06-12",
      "resolved_at": null,
      "respond_by": "2026-07-08",
      "source": "tsys"
    }
  ],
  "meta": {
    "request_id": "req_cb01",
    "api_version": "v1",
    "page": 1,
    "page_size": 25,
    "total_count": 1,
    "total_pages": 1,
    "has_next": false,
    "has_prev": false,
    "source": "bigquery",
    "as_of": "2026-08-04T12:00:00+00:00",
    "applied_window": {
      "updated_since": "2026-07-06",
      "from": null,
      "to": null
    }
  },
  "errors": []
}

Get chargeback summary

​

Org-wide case counts, open exposure, and the open split between chargebacks and retrieval requests.

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/chargebacks/summary
curl https://uat.modulate-api.es.flute.com/api/partner/chargebacks/summary \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Get chargeback summary
{
  "data": {
    "open_count": 6,
    "closed_count": 10049,
    "total_count": 10055,
    "open_amount": "1530.43",
    "open_chargeback_count": 6,
    "open_retrieval_count": 0,
    "merchants_with_open_cases": 1
  },
  "meta": {
    "request_id": "req_cb02",
    "api_version": "v1",
    "source": "bigquery",
    "as_of": "2026-08-04T12:00:00+00:00"
  },
  "errors": []
}

List chargebacks for a merchant

​

Chargeback and retrieval cases for one merchant, most recently opened first. Defaults to all statuses. An empty result is normal — most merchants have no open cases.

Path Parameters

  • Merchant ID

Query Parameters

  • Page number

  • Items per page

  • open, closed, or all

  • Filter on when a case opened (inclusive). This is not a change feed: a case opened before from but resolved inside the window will not appear. Use updated_since to sync a mirror.

  • Filter on when a case opened (inclusive). Same caveat as from — not a change feed. Use updated_since to sync a mirror.

  • Cases with any activity on or after this date. No default on this route — it is already a full-history drill-down for one merchant. Pass it to sync a per-merchant mirror without re-fetching everything.

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/partner/merchants/{merchant_id}/chargebacks
curl 'https://uat.modulate-api.es.flute.com/api/partner/merchants/939802015758008/chargebacks?page=1&page_size=25&status=all' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
List chargebacks for a merchant
{
  "data": [
    {
      "case_id": "2026166022107",
      "merchant_id": "939802015758008",
      "merchant_name": "PERFORMANCE GOLF ZONE",
      "kind": "retrieval",
      "status": "closed",
      "resolved_against": "merchant",
      "resolved_against_description": "Resolved against merchant",
      "reason_code": "6005",
      "reason": "Transaction Documentation Request Due to Cardholde",
      "amount": "0.00",
      "card_brand": "Discover",
      "transaction_reference": null,
      "opened_at": "2026-06-15",
      "resolved_at": "2026-07-01",
      "respond_by": null,
      "source": "tsys"
    }
  ],
  "meta": {
    "request_id": "req_cb03",
    "api_version": "v1",
    "page": 1,
    "page_size": 25,
    "total_count": 1,
    "total_pages": 1,
    "has_next": false,
    "has_prev": false,
    "source": "bigquery",
    "as_of": "2026-08-04T12:00:00+00:00",
    "applied_window": {
      "updated_since": null,
      "from": null,
      "to": null
    }
  },
  "errors": []
}

Models

​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​