Skip to content

Agentic Payments

You can search for a hotel, choose a room and complete your booking through your AI agent. Connect it to Wink and a payment wallet, then tell it where you want to stay. Wink uses the Machine Payments Protocol (MPP) to accept the wallet’s payment and return your booking confirmation.

For the complete booking flow, your agent needs Wink Booking Engine and a payment wallet.

ConnectionWhat it doesHow to add it
Wink Booking Engine — requiredFinds destinations, searches hotels and room rates, quotes and confirms bookings, and retrieves your bookings and receipts.Add https://api.wink.travel/mcp/booking-engine as a remote HTTP MCP server.
Payment wallet — required to payProvides payment credentials after you approve the purchase.Connect a wallet that supports Stripe Shared Payment Tokens. See the Link example below.
Wink Reference — optionalLooks up countries, currencies and other reference data.https://api.wink.travel/mcp/reference
Wink Docs — optionalHelps your agent read documentation and API contracts.https://docs.mcp.wink.travel/mcp

The Booking Engine MCP already includes the tools needed for the traveler booking flow, when agentic booking and payment are enabled for that environment. Wink’s separate Payment MCP is for financial operations such as ledgers and withdrawals; it is not needed to pay for a room.

  1. Open your agent’s MCP or connector settings and add the Booking Engine URL above. Give it a name such as Wink Booking.
  2. Your agent opens the Wink sign-in page in your browser. Sign in with the Wink account you want to book under.
  3. On the consent screen, choose the permissions your agent needs, then approve the connection.
  4. Return to your agent. It loads the available tools and manages authentication for subsequent MCP calls.

For this flow, select:

PermissionWhy it is needed
AI agent access (mcp.read)Allows your agent to connect to Wink MCP.
Marketing read (marketing.read)Lets the agent find your account’s booking configuration, called a customization. Your account must also have access to that configuration.
Payment write (payment.write)Lets the agent pay for the quote and confirm the booking.

Keep the sign-in permissions requested by the connection. Your MCP client handles access tokens; you do not need to copy a token into chat or set request headers. If you skipped a needed permission, reconnect through your client’s sign-in flow and approve it.

For Stripe payments, one option is Link’s agent wallet. If your client supports local MCP servers and Node.js is installed, add this entry to its MCP configuration:

{
"mcpServers": {
"link": {
"command": "npx",
"args": ["@stripe/link-cli", "--mcp"]
}
}
}

Ask your agent to connect your Link account, then follow the verification link it provides and approve the connection. Link supplies the Shared Payment Token used to pay for the booking. Link currently supports US accounts; check its spending limits before booking. See Link’s setup guide and MCP configuration.

If your agent already has a compatible wallet connected, use that connection. Wallet setup and payment approval are separate from signing in to Wink.

For example:

Find a room in Bangkok for two adults from 15 to 17 January 2027. Show me the available options, total price and cancellation terms before I choose.

Your agent can find your accessible Wink accounts and their booking configurations. If you have several, tell it which one to use. If you are booking through a supplied booking link or configuration, give that to the agent instead.

The agent then resolves your destination, checks available hotels and loads room rates for your dates. Choose a room and ask for a quote.

This payment flow currently supports one room, priced in USD, for adults only. A quote has an expiry time. Requesting one does not charge you or confirm a booking.

Check the hotel, room, dates, guests, cancellation terms and quoted total. When you are ready, ask your agent to book and complete any approval requested by your wallet.

The wallet provides a Stripe Shared Payment Token to pay for the quote.

Tempo stablecoin payments are coming soon.

After payment succeeds, your agent gives you a booking confirmation code. It can also retrieve the booking details and receipt through the Booking Engine MCP.

If payment is still processing or the response is lost, let the agent check the same payment attempt. It should reuse the quote and payment credential instead of starting a second payment. If payment is declined, ask for a fresh quote and review it before trying again.

All Wink tools below are available through the Booking Engine MCP. The MCP client sends authentication automatically using the permissions approved during sign-in.

StepTools and behavior
Select booking contextmanaging_entity_list, then customization_get_primary or customization_search for the selected account. Use a supplied customization when one is already known.
Find a destinationdestination_lookup_search_suggestions and destination_lookup_get.
Search hotels and roomsinventory_search_city or inventory_search_geo, then property_inventory_get for rates and availability.
Quote the selected roomagentic_booking_quote. Pass room details inside its request argument.
Pay and confirmObtain a Shared Payment Token from the connected wallet, then call agentic_booking_pay with request.quoteId and request.spt. Keep the same signed-in Wink user for quote and payment.
Retrieve the booking and receiptUse booking_search or booking_search_list to find the confirmed booking, then booking_get and booking_receipt_get with its booking identifier.

The quote request needs hotelIdentifier, roomRateIdentifier, checkIn, checkOut, adults, children and customizationIdentifier. Dates use YYYY-MM-DD; checkOut must follow checkIn. Set adults to at least 1 and children to 0.

The quote returns quoteId, amountUsdCents, currency, expiresAt and mppChallenges. Display USD cents as dollars: 10000 means $100.00.

Pay resultNext step
PAYMENT_SUCCEEDEDSave bookingConfirmationCode and chargeReference.
IN_PROGRESSWait briefly and retry the same quote and credential.
DECLINEDRequest a fresh quote and review it before another payment.

A successful retry returns the existing booking without charging again. Treat a timeout as an unknown outcome and retry the same payment. If it stays unresolved, contact support with the quote ID.

Payment-aware MCP clients can use agentic_booking_book with the room fields directly in arguments. The first call returns error -32042 with payment challenges. Retry the same call with the wallet credential in params._meta["org.paymentauth/credential"]; success includes result._meta["org.paymentauth/receipt"]. Error -32043 carries a payment failure and challenge: a definitive rejection needs a fresh quote, while an incomplete payment payload can retry with the same challenge. For -32603, a data.failure.reason of payment-in-progress or already-consumed means retry the same credential; the error code alone is not enough.

Use REST when building an integration that calls Wink directly over HTTP. Both the quote and payment use POST https://api.wink.travel/api/mpp/booking.

Your application needs a Wink user access token with payment.write permission to pay. Keep the same user for both calls. Send the token in Wink-Authorization, leaving Authorization available for the wallet’s payment credential. These headers apply to REST; an MCP client handles its own authentication.

Save the selected room as booking.json, replacing the example identifiers and dates with your selection. The room fields go directly in the JSON body, without a request wrapper.

{
"hotelIdentifier": "YOUR_HOTEL_ID",
"roomRateIdentifier": "YOUR_ROOM_RATE_ID",
"checkIn": "2027-01-15",
"checkOut": "2027-01-17",
"adults": 2,
"children": 0,
"customizationIdentifier": "YOUR_CUSTOMIZATION_ID"
}

Set WINK_ACCESS_TOKEN to the user’s access token and send the request:

Terminal window
curl -i https://api.wink.travel/api/mpp/booking \
-H "Wink-Authorization: Bearer $WINK_ACCESS_TOKEN" \
-H 'Content-Type: application/json' \
--data-binary @booking.json

Wink returns 402 Payment Required with a WWW-Authenticate: Payment ... challenge for each offered method. The JSON body includes quoteId, amount, currency, expiresAt and methods. Here, amount is a string in USD cents: "10000" means $100.00. Review the quote before its expiry; no payment has been taken yet.

Have the wallet fulfill the returned Stripe challenge by supplying a Shared Payment Token in payload.spt. Use the payment details from that challenge.

Set MPP_CREDENTIAL to the wallet’s encoded MPP credential, which contains the challenge and payment payload. Retry the same request body, keeping the identity header:

Terminal window
curl -i https://api.wink.travel/api/mpp/booking \
-H "Wink-Authorization: Bearer $WINK_ACCESS_TOKEN" \
-H "Authorization: Payment $MPP_CREDENTIAL" \
-H 'Content-Type: application/json' \
--data-binary @booking.json

On success, Wink returns 200 OK, a JSON body containing bookingConfirmationCode, and a Payment-Receipt header. Save the confirmation and receipt. A successful retry returns the existing booking without charging again.

ResponseWhat to do
400Correct invalid room details or a malformed credential.
401 / 403Check the user’s authentication and payment permission.
402Inspect the returned problem and challenge. A definitive payment rejection gets a fresh quote; an incomplete payment payload reuses the original challenge. Review the price before paying.
409The payment outcome is unresolved. Wait briefly, then retry the same body and credential at the booking endpoint.
429Wait for the number of seconds in Retry-After, then retry.

A 409 response has an application/problem+json body. Match its type against these exact URLs:

Problem typeMeaning
https://api.wink.travel/problems/payment-in-progressA payment attempt is still running or settlement cannot yet be confirmed.
https://api.wink.travel/problems/already-consumedThe challenge or payment proof was already used by a possibly successful attempt. This alone does not confirm the booking.

Both mean retry the same payment; do not pay a new quote. The URLs identify and document the problem; they are not payment or polling endpoints. Retry POST /api/mpp/booking, and use the problem type rather than the free-text detail to decide what to do. See the problem-type reference for all Wink payment problems.

A timeout, lost response or server error after submitting payment can also leave the outcome unknown. Retry the same payment request. If the outcome stays unresolved, contact support with the quote ID before starting another payment.