Memberships

Membership Charges

A MembershipCharge represents a charge for a Membership.

The MembershipCharge object

Attributes

  • iduuidrequired

    The ID of the membership charge

  • membershipobjectrequired

    Summary details of the membership this charge relates to

  • processorstringrequired

    The processor of the payment

  • processor_dataobjectrequired
  • amountintegerrequired

    The amount of the charge, in the smallest units

  • original_amountintegeroptional

    The original amount of the charge, in the smallest units

  • currencystringrequired

    The code of the currency for the charge

  • taxstringrequired

    The amount of tax calculated for this charge

  • statusstringrequired

    The status of the charge

  • descriptionstringrequirednullable

    A description of the charge

  • can_download_receiptbooleanrequired

    Whether a receipt is available for this charge

  • amount_refundedintegerrequired

    The total amount refunded for this charge

  • refundedbooleanrequired

    Whether this charge has been fully refunded

  • refundsobject[]required

    An array of refunds against this charge

  • site_iduuidrequired

    The ID of the site this charge belongs to

  • The first date of the billing period

  • billing_period_todaterequired

    The last date of the billing period

  • processing_atdate-timeoptional

    The datetime when the charge started processing

  • created_atdate-timerequired

    The datetime when the charge was created

  • updated_atdate-timerequired

    The datetime when the charge was last updateed

{
  "id": "00000000-0000-0000-0000-000000000000",
  "membership": {
    "id": "00000000-0000-0000-0000-000000000000",
    "membership_number": "00000014",
    "type_name": "Gold Membership",
    "customer_id": "00000000-0000-0000-0000-000000000000",
    "customer_name": "Jane Jones"
  },
  "processor": "adyen",
  "processor_data": {
    "cardholder_name": "Mrs J Jones",
    "last_4": 4001,
    "processor_type": "Cash",
    "processor_type_id": "64a9f3b2c3d8e1f4a5b6c7d8"
  },
  "amount": 3995,
  "original_amount": 3995,
  "currency": "gbp",
  "tax": 1000,
  "status": "succeeded",
  "description": "Free-form text from the resource.",
  "can_download_receipt": false,
  "amount_refunded": 1,
  "refunded": false,
  "refunds": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "status": "succeeded",
      "amount": 995,
      "currency": "gbp",
      "notes": "Gesture of good will",
      "failure_reason": "invalid_details",
      "refunded_by": {
        "id": "00000000-0000-0000-0000-000000000000",
        "full_name": "Jane Jenkins"
      },
      "processor_data": {
        "processor": "adyen",
        "processor_id": "re_64301e0b2df9d11814010ea6"
      },
      "created_at": "2026-01-15T09:30:00+00:00",
      "updated_at": "2026-01-15T09:30:00+00:00"
    }
  ],
  "site_id": "00000000-0000-0000-0000-000000000000",
  "billing_period_from": "2026-01-15",
  "billing_period_to": "2026-01-15",
  "processing_at": "2026-01-15T09:30:00+00:00",
  "created_at": "2026-01-15T09:30:00+00:00",
  "updated_at": "2026-01-15T09:30:00+00:00"
}
get/customers/membership-charges/{membershipChargeId}

Retrieve a MembershipCharge

getMembershipCharge

Use this endpoint to retrieve a single MembershipCharge by its ID.

Path parameters

Responses

  • 200

    The MembershipCharge was successfully retrieved.

  • 401

    The user is unauthenticated

  • 404

    The resource couldn't be found

get/customers/membership-charges/{membershipChargeId}/receipt

Download the receipt for this charge

getReceipt

Returns a temporary download_url for the PDF receipt of the given MembershipCharge. The URL expires 10 minutes after it's issued.

Path parameters

Responses

  • 200

    The membership charge receipt URL was successfully retrieved.

  • 401

    The user is unauthenticated

  • 404

    The resource couldn't be found

post/customers/membership-charges/{membershipChargeId}/refund

Refund a MembershipCharge

actionRefundMembershipCharge

Initiates a refund for some or all of the amount on a MembershipCharge. The refund is processed asynchronously through the payment processor.

Path parameters

Request body

  • amountintegerrequired

    The amount to refund from this charge as an integer of the smallest unit (e.g. pence)

  • notestringoptional

    A custom description of why this refund was made

Responses

  • 200

    The MembershipCharge was successfully retrieved.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

  • 422

    The request didn't pass validation

get/customers/membership-charges

List MembershipCharges

listCustomerMembershipCharges

Returns a paginated list of MembershipCharges — the historical record of every direct-debit, card or offline payment captured (or attempted) against the recurring Memberships in the caller's organisation.

Use this to power membership-billing reports, reconcile failed payments before retry, or surface a charge history on a customer's profile.

Filters cascade: omitting status returns non-pending, non-refunded charges (the default reporting view). Pass status=all to include every charge regardless of state, or pass pending/overdue to scope to the corresponding billing window. site_id is restricted server-side to the caller's accessible sites; passing a site_id the caller cannot see returns an empty result rather than 403.

Requesting the response as CSV (Accept: text/csv) elevates the permission check to reports.download; use the companion queueCustomerMembershipCharges endpoint for asynchronous CSV exports beyond a few thousand rows.

Note: an earlier docs revision listed this operation under /shop/membership-charges. The Laravel controller has always lived in customer-api, so /customers/membership-charges is the correct and canonical path.

Query parameters

  • site_idstringoptional

    Filter results by the site they belong to

  • organisation_iduuidoptional

    Filter customers that belong to the given organisation ID

  • membership_idstringoptional

    Filters charges by the membership ID

  • statusstringoptional

    Filters charges by the status

  • Filters charges to those with a 'billing period from' on or after the specified date

  • Filters charges to those with a 'billing period to' on or before the specified date

  • created_at_startdateoptional

    Filters charges to those with a 'created at' on or after the specified date

  • created_at_enddateoptional

    Filters charges to those with a 'created at' on or before the specified date

  • amount_fromintegeroptional

    Filters charges to those with an amount greater than or equal to the specified value

  • amount_tointegeroptional

    Filters charges to those with an amount less than or equal to the specified value

  • processorstringoptional

    Filters charges by the processor

  • pageintegeroptional

    The page to retrieve results from

  • per_pageintegeroptional

    The number of results to return per page

Responses

  • 200

    The MembershipCharges were successfully retrieved

  • 401

    The user is unauthenticated

get/customers/membership-charges/queue

Queue a MembershipCharges export

queueCustomerMembershipCharges

Kicks off an asynchronous CSV export of MembershipCharges matching the supplied filters. Returns immediately with a QueuedJob envelope; poll getCustomerQueuedJob until the job transitions to complete or failed. On success, the job's output contains a signed download URL for the generated CSV.

Use this in preference to the synchronous listCustomerMembershipCharges endpoint when the result set is large (more than a few thousand rows) or when the export is intended to be emailed to the requesting user — pass email=true to have the finished CSV delivered as an email attachment instead of (or alongside) the pollable download URL.

Requires the reports.download permission on every site whose charges fall in scope.

Note: an earlier docs revision exposed this operation under /shop/membership-charges/queue. The Laravel controller has always lived in customer-api, so /customers/membership-charges/queue is the correct and canonical path.

Query parameters

  • site_idstringoptional

    Filter results by the site they belong to

  • organisation_iduuidoptional

    Filter customers that belong to the given organisation ID

  • membership_idstringoptional

    Filters charges by the membership ID

  • statusstringoptional

    Filters charges by the status

  • Filters charges to those with a 'billing period from' on or after the specified date

  • Filters charges to those with a 'billing period to' on or before the specified date

  • amount_fromintegeroptional

    Filters charges to those with an amount greater than or equal to the specified value

  • amount_tointegeroptional

    Filters charges to those with an amount less than or equal to the specified value

  • processorstringoptional

    Filters charges by the processor

  • emailbooleanoptional

    When true, the completed CSV is emailed to the requesting user once the job finishes (in addition to being available via the queued-job download URL). Defaults to false.

Responses

  • 200

    The job was successfully queued

  • 400

    The request failed.

  • 401

    The user is unauthenticated