Skip to content

Authentication

An application provides your with a Client ID and Secret Key that you need to create an authenticated OAuth2 session you can use to communicate with Wink and TripPay APIs.

Here are the steps to create an authenticated session.

Step 1. Retrieve an access token on staging or in our production environment:

You will, most likely, be working with a robust OAuth2 library for your language, which will do all the heavy lifting for you. Our examples will show the most basic usage from the command line using curl.

Terminal window
curl -X POST https://staging-iam.wink.travel/oauth2/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
-d "client_id=<YOUR_CLIENT_ID>" \
-d "client_secret=<YOUR_SECRET_KEY>"
Terminal window
curl -X POST https://iam.wink.travel/oauth2/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
-d "client_id=<YOUR_CLIENT_ID>" \
-d "client_secret=<YOUR_SECRET_KEY>"

This will return an access token, along with other OAuth2 response data:

{
"access_token": "abc123"
}

When you make a call to any of our endpoints, include the following in the header:

  • Wink-Version = 2.0 Latest - See our API docs for other available versions.
  • Authorization = Bearer ${access_token} Insert your access token.

A scope is a permission your access token carries. When you request a token, you pass a space-delimited list of scopes in the scope parameter, and the token can only reach the areas those scopes cover. With the client_credentials grant you set the scopes on your token request — see the curl examples above and the Postman walkthrough.

Scopes are named section.action, where the action is one of:

  • read — view resources (safe GET requests)
  • write — create and update resources (POST / PUT / PATCH)
  • remove — delete resources (DELETE)

Wink groups permissions by functional area. Request only the scopes your integration needs:

Scope groupScopesWhat they unlockRisk
Accountaccount.read account.write account.removeManaging entities, team members, settings, applicationsLow–Medium
Inventoryinventory.read inventory.write inventory.removeProperties, room-types, rate-plans, rates, add-ons, availability, activities, attractionsLow–Medium
Bookingbooking.read booking.write booking.removeSearch, view, create, cancel, and refund bookings; checkout; cancellation policiesLow–Medium
Marketingmarketing.read marketing.write marketing.removeCampaigns, perks, sales channels, WinkLinks, managed social, loyaltyLow–Medium
Contentcontent.read content.write content.removeProperty descriptions, reviews, media, maps, green-indexLow–Medium
Analyticsanalytics.read analytics.write analytics.removeReporting and analytics — revenue, leaderboardsLow–Medium
Integrationsintegrations.read integrations.write integrations.removeChannel managers, external booking systems, Google Hotel, notification endpoints, booking syncLow–Medium
Paymentpayment.read payment.write payment.removePayment processing, Stripe, Revolut, payouts, subscriptionsMedium–High
Accountingaccounting.read accounting.write accounting.removeAccounting, withdrawal ledger, reconciliationMedium–High
MCPmcp.read mcp.write mcp.removeOpens the MCP transport (/mcp) for AI agentsLow–Medium

A few things to keep in mind:

  • Request the minimum. Ask only for the scopes your integration actually uses — a token issued with broader access than necessary is a larger blast radius if leaked.
  • Unknown scopes are rejected. Requesting a scope your application isn’t registered for, or one that doesn’t exist, fails at token issuance.
  • mcp.* is only for AI-agent clients. You need it to open the MCP transport; it isn’t required for regular REST API calls. See Model Context Protocol.