Direct bookings on your own domain with Guesty, in rand

    For a South African villa operator, Guesty's own payment processing was not an option for card payments in rand. Here is what we built instead, and the four decisions that made it safe.


    If you run villas or guesthouses in South Africa on Guesty, you may have hit the same wall we did. Guesty holds availability, builds quotes and syncs calendars with the OTAs. But for this South African operator, Guesty's own payment processing was not an option for card payments in rand, so the official booking engine would have stopped one step short of the step that matters.

    The usual workaround is a redirect: send the guest to a third-party payment page and hope they come back. For international guests booking a six-figure stay, that handoff is exactly where trust drops. The question we were asked was simple: can the guest see live availability, get a real quote and pay by card, in rand, without leaving the operator's domain — and can every one of those bookings land in Guesty as if the booking engine had taken it?

    The answer is yes, and the shape of the build matters more than any single integration. The diagram below is the shape; the four decisions follow.

    The booking's states: dates, quote, hold in Guesty, card payment on the site, signed webhook, reservation confirmed — with the safeguards for expired holds and late payments

    A booking is confirmed only by a verified payment. Guest journey on the left, system of record on the right.

    Guesty stays the source of truth

    The first decision is the one that keeps the operations team sane. Availability, rates and reservations live in Guesty; the website reads them and writes back to them, and never keeps a second truth of its own. When a guest picks dates, the calendar they see is Guesty's calendar, and the quote they see is built from the same nightly rates and fees the reservations team manages in Guesty. A price the website shows is a price the operator can honour, because it is the operator's price.

    When the guest commits, the website creates a real reservation in Guesty in a held state with an expiry, so the nights are blocked for other guests, and for the OTAs, while the payment is in flight.

    Payment happens on the domain, in rand

    For the card payment we integrated a South African gateway, while Guesty kept availability and reservations. The guest enters card details on the operator's site, in rand, and the gateway handles 3-D Secure in the same frame. A visible fallback opens the payment in its own window for the rare issuer whose authentication will not run framed.

    Two details here are worth copying. Payment methods are pinned to card only, because an instant confirmation needs an instant payment; an EFT that may clear tomorrow cannot hold a night tonight. And every payment carries the booking reference from the moment the link is created, so money is never a mystery deposit that finance has to match by hand.

    The webhook is the only authority

    Payment pages lie by omission. A guest who closes the window, a 3-D Secure step that completes after the page has moved on, a browser that never returns to your thank-you page — none of these tell you whether money moved. The only thing that does is the signed notification from the gateway, verified against its signature before anything is written.

    So the booking page never declares a payment successful on its own. It waits for the verified event, and if that event has not arrived within a reasonable window it says so honestly ("we have not received confirmation yet") with a retry and a contact route, rather than the two worst possible messages: a false "paid" or a false "cancelled". Confirmation, the guest email and the payment record in Guesty all flow from the verified event, and from nothing else.

    Holds expire on a schedule, and late money is a first-class case

    Held nights must come back on sale if nobody pays. A scheduled worker releases expired holds, but it is built to refuse rather than guess: it will not release a hold if a payment might be in flight, and it never touches a reservation a person has already dealt with. The uncomfortable truth we designed around is that a card session started before the hold expires can complete after it. Money that arrives after a release is therefore stored first and flagged for a person, never silently refunded and never silently ignored.

    That is also why the whole thing reconciles. Every rand that arrives is matched to a booking or explicitly marked as unmatched for review, and the day's payments can be squared against the gateway's settlement and the ledger without anyone re-keying anything.

    What to check before you start

    If you are an operator considering this, five questions will tell you whether a partner has done it before. Does the quote come from your PMS rates or from a copy? Where does the card entry actually happen, and in which currency? What is the single source of truth for "paid"? What happens to a hold when nobody pays, and what happens to money that arrives after the hold is gone? And can finance see every booking, payment and release with a name and a timestamp against it?

    We built this for Cape Mesa, a collection of private villas on Cape Town's Atlantic Seaboard; the case study shows the guest's journey from the collection to a confirmed stay. If your operation runs on Guesty and your guests pay in rand, we are happy to walk through how the same pattern would fit yours.

    Frequently asked

    Can Guesty take card payments for a South African operator?

    Guesty's own processor is not offered to South African operators at the time of writing; Guesty's documentation points to external payment processors instead. For this operator we integrated a local gateway with the website, while Guesty remained the system of record for availability and reservations.

    Does the guest ever leave the operator's website?

    Not in the normal flow. Availability, quote, guest details and card payment all happen on the operator's domain. A separate window is used only as a fallback for a card issuer whose authentication will not run inside the page.

    How does the reservations team see a website booking?

    Exactly as any other reservation in Guesty, with the payment recorded against it and the confirmation sent by Guesty's own automation once the payment has been verified.

    Tell us what you're building.

    We take on three to four projects a quarter and reply to every enquiry within two working days. Tell us about the site or system you have in mind and we'll say honestly whether we're the right fit.

    Geneva
    Madrid
    Porto
    Cape Town

    Or email us directly: vincit@carbonmediasolutions.com · WhatsApp us

    We respond to all enquiries within 48 hours. Your details are never shared.