Payments API Reference

Query payment transactions, deposits, installment logs, and refund status for payments managed by Hermon.

Date & Timezone Handling: All timestamps in responses are UTC, formatted as ISO 8601 (2026-01-15T10:30:00.000Z). Date-range filters accept either date-only YYYY-MM-DD (which expands to UTC day boundaries) or full ISO 8601 timestamps.
Amounts: All monetary values are in major currency units (e.g. 997.50 for $997.50). The currency field is returned as an ISO 4217 code (e.g. USD, EUR).
VAT Calculation: VAT details are computed based on provider-reported data and org configuration. vat_exempt indicates whether the payment was exempted from VAT.

List Payments

Retrieve a paginated list of payments. Results can be filtered by status, lead, contract, and assigned setter, closer, or triager.

GET/api/external/payments

Query Parameters

ParameterTypeRequiredDescription
pageintegerOptionalPage number for pagination. Default: 1
limitintegerOptionalNumber of items per page. Default: 10, Max: 100
statusstringOptionalFilter by payment status. See Payment Status Values.
lead_idstring (UUID)OptionalUUID of the lead to filter payments by.
contract_idstring (UUID)OptionalUUID of the contract to filter payments by.
setterstringOptionalEmail address of the setter to filter by.
triagerstringOptionalEmail address of the triager to filter by.
closerstringOptionalEmail address of the closer to filter by.
due_date_fromstringOptionalLower bound for due_date. Accepts YYYY-MM-DD or ISO 8601.
due_date_tostringOptionalUpper bound for due_date. Accepts YYYY-MM-DD or ISO 8601.
paid_date_fromstringOptionalLower bound for paid_at. Same format rules as due_date_from.
paid_date_tostringOptionalUpper bound for paid_at. Same format rules as due_date_to.
created_fromstringOptionalLower bound for created_at.
created_tostringOptionalUpper bound for created_at.
Totals Information:
  • totals aggregates net amounts across all pages matching filters.
  • totals_page aggregates net amounts for the current page only.
  • If payments span multiple currencies, the root amount defaults to null and aggregates are listed in a by_currency array.

Code Examples

curl -X GET "https://api.hermon.io/api/external/payments?page=1&limit=10&status=REFUNDED&setter=sales-setter@mailinator.com&closer=hermon@mailinator.com&triager=triager@mailinator.com&lead_id=e799c30f-9da7-4fd7-9552-83b96a9bfac2&contract_id=d5e0fb5d-5b14-45cf-81d8-2a0eb7a49224" \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_your_key_here"

Response Example

json
{
  "success": true,
  "message": "Payments fetched successfully",
  "data": [
    {
      "id": "pay_d4e5f6a7-b8c9-0123-defg-234567890123",
      "lead": {
        "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "first_name": "John",
        "last_name": "Doe",
        "email": "john.doe@example.com"
      },
      "is_mandate_payment": false,
      "amount": 997.0,
      "vat_rate": 0.21,
      "vat_amount": 209.37,
      "gross_amount": 1206.37,
      "vat_exempt": false,
      "currency": "USD",
      "due_date": "2026-02-10T00:00:00.000Z",
      "status": "PAID",
      "payment_provider": "STRIPE",
      "type": "DEPOSIT",
      "paid_at": "2026-02-10T14:30:00.000Z",
      "created_at": "2026-02-08T10:00:00.000Z"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 1,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}

Get Payment Details

Fetch detailed information for a single payment transaction by its unique UUID.

GET/api/external/payments/:id

Path Parameters

:idRequired. The unique payment UUID.

Payment Object Fields

FieldTypeDescription
idstring (UUID)Unique identifier for the payment.
leadobjectLead linked to this payment (id, first_name, last_name, email). See Payment Lead Object.
first_sourceobject | nullLead's first attribution source [Details API Only].
last_sourceobject | nullLead's last attribution source [Details API Only].
custom_fieldsarrayCustom field values [Details API Only].
is_mandate_paymentbooleanWhether the payment was charged automatically via a mandate.
payment_proofsarrayList of uploaded payment proofs. See Payment Proof Object [Details API Only].
amountnumberAmount in major currency units.
vat_ratenumberVAT rate applied (e.g. 0.21 for 21%).
vat_amountnumberVAT portion of the payment in major currency units.
gross_amountnumberTotal payment including VAT (amount + vat_amount).
vat_exemptbooleanWhether this payment is VAT exempt.
processor_fee_amountnumber | nullPayment processor fee in major units of processor fee currency [Details API Only].
cycle_gross_amountnumber | nullPer-cycle gross amount [Details API Only].
pause_credit_appliednumber | nullAmount of pause credit applied to this payment [Details API Only].
pause_credit_for_idstring | nullUUID of the payment that generated the pause credit [Details API Only].
is_pause_creditbooleanWhether this payment represents a pause credit adjustment [Details API Only].
contractobject | nullContract linked to this payment. See Payment Contract Object [Details API Only].
currencystringISO 4217 currency code (e.g. USD, EUR).
due_datestring (ISO 8601)Due date of the payment.
statusstring (enum)Current status (DRAFT, PENDING, PAID, FAILED, LOST, REFUNDED).
payment_providerstring (enum)Payment gateway (STRIPE, WHOP, MOLLIE, MANUAL).
typestring (enum)Payment type (DEPOSIT, FIRST_PAYMENT, INSTALMENT, SUBSCRIPTION_CYCLE).
paid_atstring (ISO 8601) | nullUTC timestamp when successfully paid. null if unpaid.
created_atstring (ISO 8601)UTC timestamp when the payment was created.
failure_reasonstring | nullDetailed reason if the payment failed [Details API Only].
card_last4string | nullLast 4 digits of the payment card (Stripe/Whop only) [Details API Only].
card_brandstring | nullBrand of the payment card (e.g. visa, mastercard) [Details API Only].
customer_emailstring | nullCustomer email registered with the payment provider [Details API Only].
processor_fee_currencystring | nullCurrency of the processor fee [Details API Only].
refundsarrayList of refunds processed against this payment. See Payment Refund Object [Details API Only].
payment_linksarrayStripe/Mollie payment links generated for this invoice. See Payment Link Object [Details API Only].
unmatched_paymentobject | nullUnmatched transaction details if manually reconciled [Details API Only].

Code Examples

curl -X GET "https://api.hermon.io/api/external/payments/0174f917-e7c2-4a27-9aca-2626724c04d5" \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_your_key_here"

Response Example

json
{
  "success": true,
  "message": "Payment fetched successfully",
  "data": {
    "id": "pay_d4e5f6a7-b8c9-0123-defg-234567890123",
    "lead": {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "first_name": "John",
      "last_name": "Doe",
      "email": "john.doe@example.com",
      "sales_status": {
        "id": "status_xyz789",
        "name": "Closed Won",
        "text_color": "#14532D",
        "bg_color": "#DCFCE7"
      }
    },
    "first_source": {
      "id": "src_abc",
      "name": "Facebook Ad"
    },
    "last_source": {
      "id": "src_def",
      "name": "Referral"
    },
    "custom_fields": [],
    "is_mandate_payment": false,
    "payment_proofs": [],
    "amount": 997.0,
    "vat_rate": 0.21,
    "vat_amount": 209.37,
    "gross_amount": 1206.37,
    "vat_exempt": false,
    "processor_fee_amount": 30.5,
    "cycle_gross_amount": null,
    "pause_credit_applied": null,
    "pause_credit_for_id": null,
    "is_pause_credit": false,
    "contract": {
      "id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
      "status": "SIGNED",
      "type": "PP",
      "program": {
        "name": "12-Week Coaching Program"
      },
      "payment_mandate": {
        "status": "VALID",
        "payment_provider": "STRIPE"
      },
      "subscription": null
    },
    "currency": "USD",
    "due_date": "2026-02-10T00:00:00.000Z",
    "status": "PAID",
    "payment_provider": "STRIPE",
    "type": "DEPOSIT",
    "paid_at": "2026-02-10T14:30:00.000Z",
    "created_at": "2026-02-08T10:00:00.000Z",
    "failure_reason": null,
    "card_last4": "4242",
    "card_brand": "visa",
    "customer_email": "john.doe@example.com",
    "processor_fee_currency": "USD",
    "refunds": [],
    "payment_links": [
      {
        "id": "link_abc123",
        "note": null,
        "status": "USED",
        "url": "https://pay.stripe.com/xyz",
        "provider_link_id": "pi_abc123",
        "created_at": "2026-02-08T10:00:00.000Z"
      }
    ],
    "unmatched_payment": null
  }
}

Values Reference

Payment Status Values

ValueDescription
DRAFTCreated but not yet sent/due
PENDINGAwaiting payment from client
PAIDSuccessfully paid
FAILEDPayment attempt failed
LOSTPayment deemed uncollectable
REFUNDEDPayment refunded to client

Payment Type Values

ValueDescription
FIRST_PAYMENTInitial payment (often used with subscriptions)
DEPOSITDeposit/down payment
INSTALMENTPayment plan instalment
SUBSCRIPTION_CYCLERecurring subscription charge

Payment Provider Values

ValueDescription
STRIPEStripe
WHOPWhop
MOLLIEMollie
MANUALManual / offline payment

Nested Objects Reference

Payment Lead Object (List API)

FieldTypeDescription
idstringLead ID
first_namestringFirst name
last_namestringLast name
emailstringEmail address

Payment Lead Object (Detail API)

FieldTypeDescription
idstringLead ID
first_namestringFirst name
last_namestringLast name
emailstringEmail address
sales_statusobjectCurrent lead status with id, name, text_color, bg_color

User Details Object

FieldTypeDescription
first_namestringFirst name
last_namestringLast name
profile_image_urlstringProfile image URL (null if none)
idstringClerk user ID
rolestringOrganization role

Payment Contract Object

FieldTypeDescription
idstringContract ID
statusstringContract status
typestringContract type enum
programobjectProgram with name
payment_mandateobjectMandate info with status and payment_provider (null if no mandate)
subscriptionobjectSubscription info (null for non-subscription contracts)

Refund Object

FieldTypeDescription
idstringRefund ID
amountnumberRefund amount in major units
reasonstringReason for refund
statusstring (enum)Refund status (INITIATED, SUCCEEDED, FAILED)
currencystringCurrency code
refunded_atstring (ISO 8601)When refund was processed
failure_reasonstringFailure reason (if status is FAILED)
created_atstring (ISO 8601)When refund was initiated

Payment Link Object

FieldTypeDescription
idstringLink ID
notestringOptional note about the link
statusstring (enum)Link status (ACTIVE, USED, INVALID)
urlstringPayment link URL
provider_link_idstringProvider's link identifier
created_atstring (ISO 8601)When the link was created

Payment Proof Object

FieldTypeDescription
idstringProof ID
file_namestringOriginal file name
mime_typestringMIME type (e.g. "image/jpeg")
file_size_bytesintegerFile size in bytes
uploaded_bystringClerk user ID who uploaded
created_atstring (ISO 8601)When uploaded
urlstringPre-signed download URL (expires in 1 hour)

Error Responses

401Missing or invalid API key
json
{
  "status": "error",
  "message": "Invalid or revoked API key"
}
404Resource not found
json
{
  "status": "error",
  "message": "Resource not found"
}
429Rate limit exceeded
json
{
  "status": "error",
  "message": "Too many requests"
}