Marriott TIP Internet Portal API

Partner-facing API used by Marriott's in-hotel internet (TIP) provider integration to generate a guest landing-page URL, validate a guest's room number and last name against the cloud PMS, and post an internet purchase back to the PMS. Bearer and Basic security schemes are declared and an SSO token operation is included. This is not part of any public Marriott developer program; the OpenAPI document is readable on SwaggerHub under the "marriott-api" owner and the only server it names is a Marriott UAT gateway host that is not open to the public.

OpenAPI Specification

marriott-tip-internet-portal-api-openapi.json Raw ↑
{"openapi":"3.0.4","info":{"title":"TIP Internet Portal","description":"This API can be used to generate landing page URL, validate user RN/LN in cloud PMS\nand update internet purchase in PMS.\n\nAll TIP Internet Portal API calls require a Bearer token obtained from the token generation\nendpoint defined in this specification. Clients must:\n\nIn the **Authorize** section, configure both **Basic** and **Bearer** authorization as follows:\n\n  1. First, enter your **Basic auth** credentials and call the token generation endpoint to obtain an access token.  \n  2. Then, copy the **Bearer token** from the token endpoint response and set it in the **Bearer auth** configuration.  \n  3. Use this Bearer token for all subsequent API requests.\n  4. The token remains valid for the duration, in seconds, specified by the expires_in field in the response\n  ","version":"1.0.2"},"servers":[{"url":"https://gatewaydsapuat3.marriott.com"}],"tags":[{"name":"auth","description":"Authorization related endpoints."},{"name":"landing-page","description":"Provides the landing page URL based on request inputs."},{"name":"guest-validation","description":"Validates a given RN/LN against a property in cloud PMS."},{"name":"internet-purchase-update","description":"Updates the user internet plan purchase in cloud PMS."}],"security":[{"BearerAuth":[]}],"paths":{"/v3/ent-auth/sso/token":{"post":{"tags":["auth"],"summary":"Generate access token for TIP Internet Portal APIs.","description":"Generates an access token that must be used as a Bearer token in the `Authorization`\nheader for all subsequent TIP Internet Portal API calls.","security":[{"BasicAuth":[]}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"grant_type":{"type":"string","enum":["client_credentials"],"example":"client_credentials"},"scope":{"type":"string","example":"openid"}},"required":["grant_type","scope"]}}}},"responses":{"200":{"description":"Token successfully generated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"400":{"description":"Invalid request to token endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized. Invalid client credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthorizationError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/partners/v1/internet-portal/landing-page":{"get":{"tags":["landing-page"],"summary":"Returns landing page URL for the user channel.","description":"Get landing page URL for the user channel.","parameters":[{"$ref":"#/components/parameters/CorrelationId"},{"name":"locale","in":"header","required":true,"schema":{"type":"string","example":"fr"}},{"name":"propertyCode","in":"query","required":true,"schema":{"type":"string","minLength":5,"maxLength":5,"example":"nycmq"}},{"name":"zone","in":"query","required":true,"schema":{"type":"string","enum":["GUEST","PUBLIC","CONFERENCE","MEETING","LOBBY"],"example":"GUEST"}},{"name":"L_URL","in":"query","required":true,"schema":{"type":"string","description":"Endpoint to post data to LSP/Gateway."}},{"name":"LR","in":"query","schema":{"type":"string","enum":["AF_AC","AF_MO","AF_AO1","STRICT_AS","STRICT_S","STRICT_A","STRICT_N","TCTC","STRICT_AO"],"description":null,"example":"STRICT_N"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreconnectResponse"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreconnectError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreconnectError"}}}},"401":{"description":"Authorization Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthorizationError"}}}}}}},"/partners/v1/internet-portal/guest-validation":{"post":{"tags":["guest-validation"],"summary":"Validates guest details in cloud PMS and returns member status.","description":"Validates provided guest details in cloud PMS and returns member status.","parameters":[{"$ref":"#/components/parameters/CorrelationId"}],"requestBody":{"description":"Guest details to validate in cloud PMS.","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserValidationRequest"}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuestValidationResponse"}}}},"404":{"description":"Guest details not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authorization Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthorizationError"}}}}}}},"/partners/v1/internet-portal/purchase-update":{"post":{"tags":["internet-purchase-update"],"summary":"Updates PMS with guest internet purchase details.","description":"Updates PMS with guest internet purchase details.","parameters":[{"$ref":"#/components/parameters/CorrelationId"}],"requestBody":{"description":"Internet purchase details to be updated in PMS.","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPurchaseRequest"}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternetPurchaseUpdate"}}}},"404":{"description":"Guest details not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authorization Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthorizationError"}}}}}}}},"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"},"BasicAuth":{"type":"http","scheme":"basic"}},"parameters":{"CorrelationId":{"name":"correlation-id","in":"header","required":true,"schema":{"type":"string"},"description":"Correlation identifier for tracing across services."}},"schemas":{"TokenResponse":{"type":"object","description":"Token response from the Authorization service.","properties":{"access_token":{"type":"string","description":"Access token to be used as Bearer token.","example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."},"token_type":{"type":"string","example":"bearer"},"expires_in":{"type":"integer","description":"Token expiry time in seconds.","example":3600},"scope":{"type":"string","example":"openid"}},"required":["access_token","token_type","expires_in"]},"UserPurchaseRequest":{"type":"object","required":["propertyCode","lastName","roomNumber","duration","currency","price"],"properties":{"propertyCode":{"type":"string","minLength":5,"maxLength":5,"example":"nycmq"},"lastName":{"type":"string","example":"sam"},"roomNumber":{"type":"string","example":101},"duration":{"type":"integer","example":1},"currency":{"type":"string","example":"CHF"},"price":{"type":"number","format":"double","example":41.42},"sp":{"type":"string","example":"plan1"}}},"UserValidationRequest":{"type":"object","required":["propertyCode","lastName","roomNumber","tiers"],"properties":{"roomNumber":{"type":"string"},"lastName":{"type":"string"},"propertyCode":{"type":"string","minLength":5,"maxLength":5,"example":"phxdr"},"tiers":{"type":"string","minLength":2,"maxLength":2,"example":"sp","enum":["sf","sp","fp","pp"]}}},"PreconnectResponse":{"type":"object","required":["status","landingPageURL"],"properties":{"landingPageURL":{"type":"string","format":"uri","example":"https://www.marriott.com/fr/phoenix/nycmq/landingPage?AT=CONNECT&Z=guest&LR=STRICT_N&L_URL=http://httpbin.org/post"},"status":{"type":"string","example":"success"}}},"GuestValidationResponse":{"type":"object","required":["status","memberShipLevel","duration","connectionStatus","purchased"],"properties":{"memberShipLevel":{"type":"string","example":"ELITE","enum":["ELITE","BASIC","Unknown"]},"status":{"type":"string","example":"success"},"duration":{"type":"integer","example":3},"connectionStatus":{"type":"boolean","example":true},"purchased":{"type":"boolean","example":true}}},"InternetPurchaseUpdate":{"type":"object","required":["status","duration"],"properties":{"status":{"type":"string","example":"success"},"duration":{"type":"integer","example":1}}},"Error":{"type":"object","required":["status","code","message"],"properties":{"status":{"type":"string","example":"failed"},"code":{"type":"string"},"message":{"type":"string"}}},"PreconnectError":{"type":"object","required":["status","code","message"],"properties":{"status":{"type":"string","example":"failed"},"code":{"type":"string"},"message":{"type":"string"},"landingPageURI":{"type":"string","format":"uri","example":"https://www.marriott.com/hotel-search.mi?invalidProperty=true"}}},"AuthorizationError":{"type":"object","required":["faultcode","faultstring"],"properties":{"faultcode":{"type":"string","example":"Server"},"faultstring":{"type":"string","example":"1012100 - Credentials invalid or missing."}}}}}}