Collect Stripe payments on account
Partners can collect an arbitrary patient payment without first creating an
invoice or booking. After Stripe confirms the payment, Semble creates an
unallocated payment on account for the patient and emits
paymentOnAccount.created.
Call createPaymentIntentForPaymentOnAccount, then confirm the returned client
secret with Stripe Payment Element. Semble always reuses or creates the
patient's Stripe Customer and attaches it to the PaymentIntent.
mutation CreateAccountPayment {
createPaymentIntentForPaymentOnAccount(
patientId: "PATIENT_ID"
amount: 50
date: "2026-09-08"
comment: "Deposit"
metadata: [{ key: "booking_reference", value: "BOOKING-42" }]
) {
paymentIntentId
clientSecret
stripeAccountId
error
}
}
When stripeAccountId is returned, pass it as the connected account when
loading Stripe.js. When it is null, load Stripe.js without a connected
account because the PaymentIntent belongs to the Semble platform account.
date and comment are optional and are copied to the resulting payment.
Metadata
Metadata uses string key/value entries. Keys are limited to 40 characters,
values to 500 characters, and Stripe allows 50 total keys including Semble's
reserved metadata. Partner metadata is copied to both the Stripe PaymentIntent
and the resulting PaymentOnAccount.metadata.
Semble rejects duplicate keys and keys reserved for payment routing, including
source, purpose, practice_id, patient_id, payment_date, comment,
storeCardDetails, invoice_id, bookingIds, terminal_id, and
terminal_name.
The mutation requires the createPayment right.