CalryOTA Docs

Integration Account

Calry Integration Account

Introduction

Integration accounts are PMS-linked accounts created on the Zepl platform to manage Host PMS connections. When onboarding a Host, you would create an Integration Account with the required configuration.This includes the following:

  • PMS Provider (The PMS system you are integrating with)
  • PMS Credentials (Could be API Key, OAuth2, Username/Password, etc.)
  • PMS Account Identifier (The unique identifier for the Host's PMS account on your system)

When you create an integration account, we do the following:

  1. Verify the credentials with the PMS
  2. Create a new integration account on the Zepl platform
  3. If the PMS system emits any webhook events, we subscribe to them using the subscription API.
  4. Return the integration account ID back. You should store this in your database for future API interactions.

This integration account ID represents a Host PMS connection on the Zepl platform, and you can use it to filter out the entities in your workspace.

Schema

The integration account schema is as follows:

FieldTypeDescription
idUUIDUnique Identifier of the integration account
namestringName of the integration account
workspaceIDUUIDUnique Identifier of the workspace this integration account belongs to
providerIntegrationProviderThe PMS system that this integration account is connected to. Explained below
accountIdentifierstringUnique identifier for the account from your system.
providerAccountIDstringUnique identifier for the account from the PMS system
authTypeIntegrationAccountAuthTypeAuthentication type. Explained below
authConfigJSONAuthentication configuration specific to the PMS provider. Explained below
markupPercentagenumberThe default markup percentage applied to the price of listings, quotes and reservations at integration account level.
defaultDiscountPercentagenumberThe default discount percentage applied to the price of listings, quotes and reservations at the workspace level. Overrides the workspace level setting if any.
createdAtDateIntegration Account creation timestamp
updatedAtDateIntegration Account updated timestamp

Integration Provider

We currently support the following PMS providers:

  • BEDS24
  • BOOKINGSYNC
  • CIIRUS
  • GUESTY
  • HOSPITABLE
  • HOSTAWAY
  • HOSTFULLY
  • HOSTFULLYSANDBOX
  • HOSTHUB
  • HOSTIFY
  • HOST_TOOLS
  • INTERHOME
  • LODGIFY
  • OWNERREZ
  • UPLISTING

When creating an integration account, pass a provider from the list above.

Integration Account Auth Type

We currently support the following authentication types:

  • API_KEY
  • ACCESS_TOKEN
  • OAUTH
  • EMAIL_PASSWORD
  • PARTNER_TOKEN

Different providers support different auth types — see the per-provider sections below for the supported types and required authConfig fields.

Integration Account Auth Config

Each PMS provider has its own authentication configuration. The required authType value and authConfig fields for each supported provider are listed below.

For providers that use OAUTH, the authConfig does not include credentials — those are populated by Zepl during the OAuth callback. Instead, pass clientRedirectURL (and optionally notificationURL) on the request itself; see the OAuth guide for the full flow.

BOOKINGSYNC

Auth Type: OAUTH

Sample Request:

{
  "provider": "BOOKINGSYNC",
  "authType": "OAUTH",
  "clientRedirectURL": "https://your-app.com/callback",
  "notificationURL": "https://your-app.com/webhook/oauth-result"
}

GUESTY

Guesty supports both Access Token and Partner Token authentication.

Auth Type: ACCESS_TOKEN

Auth Config:

{
  "client_id": "your_client_id_here",
  "client_secret": "your_client_secret_here"
}

Sample Request:

{
  "provider": "GUESTY",
  "authType": "ACCESS_TOKEN",
  "authConfig": {
    "client_id": "XXX",
    "client_secret": "XXX"
  }
}

Auth Type: PARTNER_TOKEN

Auth Config:

{
  "integration_token": "your_integration_token_here"
}

Sample Request:

{
  "provider": "GUESTY",
  "authType": "PARTNER_TOKEN",
  "authConfig": {
    "integration_token": "XXX"
  }
}

CIIRUS

Auth Type: API_KEY

Auth Config:

{
  "account_id": "your_account_id_here"
}

Sample Request:

{
  "provider": "CIIRUS",
  "authType": "API_KEY",
  "authConfig": {
    "account_id": "XXX"
  }
}

HOSTAWAY

Auth Type: ACCESS_TOKEN

Auth Config:

{
  "account_id": "your_account_id_here",
  "api_key": "your_api_key_here"
}

Sample Request:

{
  "provider": "HOSTAWAY",
  "authType": "ACCESS_TOKEN",
  "authConfig": {
    "account_id": "XXX",
    "api_key": "XXX"
  }
}

HOSTFULLY

Hostfully supports both API Key and OAuth authentication.

Auth Type: API_KEY

Auth Config:

{
  "api_key": "your_api_key_here"
}

Sample Request:

{
  "provider": "HOSTFULLY",
  "authType": "API_KEY",
  "authConfig": {
    "api_key": "XXX"
  }
}

Auth Type: OAUTH

Sample Request:

{
  "provider": "HOSTFULLY",
  "authType": "OAUTH",
  "clientRedirectURL": "https://your-app.com/callback",
  "notificationURL": "https://your-app.com/webhook/oauth-result"
}

HOSTFULLYSANDBOX

Hostfully Sandbox supports both API Key and OAuth authentication.

Auth Type: API_KEY

Auth Config:

{
  "api_key": "your_api_key_here"
}

Sample Request:

{
  "provider": "HOSTFULLYSANDBOX",
  "authType": "API_KEY",
  "authConfig": {
    "api_key": "XXX"
  }
}

Auth Type: OAUTH

Sample Request:

{
  "provider": "HOSTFULLYSANDBOX",
  "authType": "OAUTH",
  "clientRedirectURL": "https://your-app.com/callback",
  "notificationURL": "https://your-app.com/webhook/oauth-result"
}

HOSTIFY

Auth Type: API_KEY

Auth Config:

{
  "api_key": "your_api_key_here"
}

Sample Request:

{
  "provider": "HOSTIFY",
  "authType": "API_KEY",
  "authConfig": {
    "api_key": "XXX"
  }
}

LODGIFY

Auth Type: API_KEY

Auth Config:

{
  "api_key": "your_api_key_here"
}

Sample Request:

{
  "provider": "LODGIFY",
  "authType": "API_KEY",
  "authConfig": {
    "api_key": "XXX"
  }
}

OWNERREZ

Auth Type: EMAIL_PASSWORD

Auth Config:

{
  "advertiserId": "XXX",
  "username": "XXX",
  "password": "XXX"
}

Sample Request:

{
  "provider": "OWNERREZ",
  "authType": "EMAIL_PASSWORD",
  "authConfig": {
    "advertiserId": "XXX",
    "username": "XXX",
    "password": "XXX"
  }
}

The advertiserId is sometimes also referred to as the Merchant of Record (MoR) ID — it's the ID unique to your host. The username and password on the other hand are common to all integration accounts in your workspace. You can obtain these by reaching out to OwnerRez. For each new connection, input only the advertiserId from the host, but reuse the same username and password when sending the request to Zepl.

HOSTHUB

Auth Type: API_KEY

Auth Config:

{
  "user_id": "your_user_id_here",
  "api_key": "your_api_key_here"
}

Sample Request:

{
  "provider": "HOSTHUB",
  "authType": "API_KEY",
  "authConfig": {
    "user_id": "XXX",
    "api_key": "XXX"
  }
}

UPLISTING

Auth Type: API_KEY

Auth Config:

{
  "api_key": "your_api_key_here",
  "client_id": "your_client_id_here"
}

Sample Request:

{
  "provider": "UPLISTING",
  "authType": "API_KEY",
  "authConfig": {
    "api_key": "XXX",
    "client_id": "YYY"
  }
}

The client ID can be obtained by reaching out to Uplisting. It is passed in the header X-Uplisting-Client-ID when making requests to Uplisting endpoints.

BEDS24

Auth Type: ACCESS_TOKEN

Auth Config:

{
  "invite_code": "your_invite_code_here"
}

Sample Request:

{
  "provider": "BEDS24",
  "authType": "ACCESS_TOKEN",
  "authConfig": {
    "invite_code": "XXX"
  }
}

HOST_TOOLS

Auth Type: ACCESS_TOKEN

Auth Config:

{
  "auth_token": "your_auth_token_here"
}

Sample Request:

{
  "provider": "HOST_TOOLS",
  "authType": "ACCESS_TOKEN",
  "authConfig": {
    "auth_token": "XXX"
  }
}

HOSPITABLE

Auth Type: OAUTH

Sample Request:

{
  "provider": "HOSPITABLE",
  "authType": "OAUTH",
  "clientRedirectURL": "https://your-app.com/callback",
  "notificationURL": "https://your-app.com/webhook/oauth-result"
}

INTERHOME

Auth config documentation for INTERHOME is forthcoming. Contact your Calry representative for setup details in the meantime.

Reauthorizing an Integration Account

For OAuth-based integration accounts, you may need to reauthorize the connection if the token expires or becomes invalid. Use the reauthorize endpoint to initiate a new OAuth flow:

POST /api/v1/integration-account/{integrationAccountId}/reauthorize
{
  "clientRedirectURL": "https://your-app.com/callback",
  "notificationURL": "https://your-app.com/webhook/oauth-result",
  "name": "Updated Account Name"
}
FieldTypeRequiredDescription
clientRedirectURLstringYesURL to redirect the user after OAuth completes
notificationURLstringYesWebhook URL to receive the OAuth result
namestringNoOptionally update the account name

The response includes an oAuthURL that the user should be redirected to in order to complete the authorization.

When reauthorization starts, the integration account is set to INACTIVE and existing webhooks are cleared. The account is reactivated once the OAuth flow completes successfully.

This endpoint only works for accounts with OAuth-based authentication. Attempting to reauthorize a non-OAuth account will return an error.

Moving an Integration Account to a Different Tenant

The default tenant can move an integration account (and all associated data) to a different tenant within the same workspace:

PATCH /api/v1/integration-account/{integrationAccountId}/move-tenant
{
  "tenantID": "target-tenant-uuid"
}

This is a transactional operation that moves:

  • The integration account itself
  • All reservations under the account
  • All promotions linked to the account's listings
  • Updates imported listing references across tenants

Only the default tenant can perform this operation. The target tenant must exist within the same workspace.

Applying Tags to All Listings

You can apply one or more tags to all listings under an integration account:

POST /api/v1/integration-account/{integrationAccountId}/apply-tags
{
  "tagIDs": ["tag-uuid-1", "tag-uuid-2"],
  "requireListingApproval": false
}

This applies each specified tag to every listing belonging to the integration account. See the Tags guide for more information on managing tags.

On this page