Download OpenAPI specification:
The Twipla 3AS approach relies on a straightforward flow of data that can be easily integrated into any backend system.
intpId (that can be used to create tokens) and a default set of packagesMost endpoints that deal with customers or websites support an external ID which can be provided and then used for all following requests.
For example creating a new customer with a website requires an intpCustomerId and an intpWebsiteId.
These must be provided by the INTP and are intended to make integrations easier because there is no need to save any external IDs.
Then when getting data about a customer the request is done using the same intpCustomerId provided on creation.
Example implementation flow
jwtRS256.key.pub) to the TWIPLA Dev TeamAll authentication is done based on JWT Tokens. These are created and signed by the INTP and validated by the TWIPLA API for each request using the public key provided in the on-boarding.
The token must be sent with every request as a Bearer token in the Authentication header Example:
Authentication: bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
JWT tokens can be easily created in most programming languages using an appropriate library from jwt.io
INTP Token: Integration partner token used for endpoints that deal with modifying customers or websites
INTPC Token: Integration partner customer token used to give access to the dashboard and data of a particular customer
ssh-keygen -t rsa -b 2048 -m PEM -f jwtRS256.keyopenssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub{
"alg": "RS256",
"typ": "JWT",
"kid": "UUID" // the id issued by TWIPLA for an INTP, in exchange for `jwtRS256.key.pub`
}
{
"roles": [
"intp"
],
"intp_id": "UUID" // the id issued by TWIPLA for an INTP, in exchange for `jwtRS256.key.pub`
"exp": 1667215913, // expires at
"iat": 1667215313 // issued at
}
To create the signature, you have to use the encoded header, the encoded payload, the generated private key and the algorithm specified in the header (e.g., "RS256").
{
"alg": "RS256",
"typ": "JWT",
"kid": "UUID" // the id issued by TWIPLA for an INTP, in exchange for `jwtRS256.key.pub`
}
{
"roles": [
"intpc"
],
"intp_id": "UUID" // the id issued by TWIPLA for an INTP, in exchange for `jwtRS256.key.pub`
"intpc_id": "string" // the id issued by the INTP for a customer (INTPC)
"exp": 1667215913,
"iat": 1667215313
}
To create the signature, you have to use the encoded header, the encoded payload, the generated private key and the algorithm specified in the header (e.g., "RS256").
https://app-3as.visitor-analytics.io/?intpcToken=value&externalWebsiteId=value
intpcToken / intpc_token - a token for INTPC authenticationexternalWebsiteId - the website id issued by the INTP (intpWebsiteId), the target website in the IFrame DashboardupgradePackageId - the ID of a 3AS pricing plan. When the upgrade page is open, this parameter will enforce a redirect to the checkout page with the pricing plan selected. It only works for INTPs with platform_managed billing mode.locale - sets the UI language/locale. It uses a simple two-letter ISO 639-1 language code. Format: lowercase 2-char code — e.g. en, de, frtimezone - sets the user's timezone. This parameter expects an IANA timezone identifier (also known as "tz database" / "Olson" names). Format: Area/City — e.g. Europe/Berlin, America/New_York, Pacific/HonolulustartDate - sets the start of the date range filter. Format: YYYY-MM-DDendDate - sets the end of the date range filter. Format: YYYY-MM-DDThe TWIPLA API key system operates on a per-website basis. Each website can have multiple API keys. API keys are used to:
The API Key can be used to create a short-lived dashboard token which can be used to login the user into the TWIPLA dashboard safely without exposing the API Key client-side.
After the website and API key have been successfully created and securely stored server-side, follow these steps to access the TWIPLA dashboard.
Step 1 — Login via API Key
Call the Login via API Key endpoint. A successful response returns a set of access tokens required to build the dashboard URL and verify the user's identity.
Step 2 — Build the Dashboard URL
Using the refreshToken from the login response, construct the dashboard URL in the following format:
https://app-3as.visitor-analytics.io?websiteToken={refreshToken}
The TWIPLA API can be accessed using the X-API-Key request header. Exposed endpoints only provide access to data for the connected website with read-only capabilities.
This method is safe as long as the connection uses HTTPS and the API key is stored server-side and not exposed in client-side code.
Request Header:
{ "X-Api-Key": "twpl-bFHhQukkcKA9omBqRukM" }
Relevant API Endpoints for Website Analytics:
| Endpoint | Description |
|---|---|
| Raw Sessions | Retrieves a comprehensive list of visitor sessions with advanced filtering, sorting, and dimension selection capabilities. |
| Session Analytics | Ideal for advanced analytics and reporting dashboards, allowing full control over which dimensions and metrics are returned, and how data is aggregated and compared over time. |
Additional endpoints are available depending on future requirements.
The API Key can be rotated using the endpoints in 3 steps:
Generate an API key to grant access to a specific website.
| intpWebsiteId required | string ID of the website within the integration partner’s system |
| name required | string A name for the API key. |
| comment | string An optional comment or note about the API key. |
| expiresAt | string <date-time> The date and time when the API key will expire. If not specified, the key will have no expiration. |
object |
{- "name": "string",
- "comment": "string",
- "expiresAt": "2026-08-22T08:14:03+00:00"
}{- "payload": {
- "apiKey": "twpl-bFHhQukkcKA9omBqRukM",
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "name": "string",
- "comment": "string",
- "expiresAt": "2026-08-22T08:14:03+00:00",
- "createdAt": "2026-08-22T08:14:03+00:00",
- "intpWebsiteId": "string",
- "intpCustomerId": "string"
}
}| intpWebsiteId required | string ID of the website within the integration partner’s system |
Array of objects |
{- "payload": [
- {
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "name": "string",
- "comment": "string",
- "expiresAt": "2026-08-22T08:14:03+00:00",
- "createdAt": "2026-08-22T08:14:03+00:00",
- "intpWebsiteId": "string",
- "intpCustomerId": "string"
}
]
}Deletes an existing API key. Once an API key is deleted, it becomes permanently invalid and cannot be used for authentication or accessing the API. Use this operation to revoke access for security or management purposes.
| intpWebsiteId required | string ID of the website within the integration partner’s system |
| apiKeyId required | string ID of the API key |
{- "error": "string"
}Generate short-lived access tokens which can be used to login the user into the TWIPLA dashboard safely without exposing the API Key client-side.
| apiKey required | string The API key generated by twipla |
| websiteId required | string <uuid> TWIPLA websiteId, returned at website creation as id |
object |
{- "apiKey": "twpl-bFHhQukkcKA9omBqRukM",
- "websiteId": "eee0b185-ac19-4fd6-bb45-58b59a8988e9"
}{- "payload": {
- "token": "string",
- "refreshToken": "string"
}
}An INTP can operate under two subscription models: website-based or account-based.
Use these endpoints if your company:
Increase the number of credits for a specific website. The upgrade takes effect immediately, and the billing cycle and credit consumption resets.
Note: This endpoint should be used only if your company is responsible for managing billing. Otherwise, the subscription will be managed directly by the user through the dashboard.
| intpWebsiteId required | string (intpWebsiteId) ID of the website within the integration partner’s system |
| packageId required | string <uuid> (packageId) Package ID issued by TWIPLA |
| trial | boolean Default: false |
| proRate | boolean Default: false |
object (Subscription) |
{- "intpWebsiteId": "string",
- "packageId": "471cc1d4-ec27-4504-b7c2-949af95662bc",
- "trial": false,
- "proRate": false
}{- "payload": {
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "status": "active",
- "packageId": "471cc1d4-ec27-4504-b7c2-949af95662bc",
- "websiteId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpcId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "expiresAt": "2023-08-22T08:14:03+00:00",
- "stpResetAt": "2023-08-22T08:14:03+00:00",
- "lastPackageChangeAt": "2023-08-22T08:14:03+00:00",
- "createdAt": "2023-08-22T08:14:03+00:00",
- "billingInterval": "monthly",
- "type": "aaas",
- "inTrial": true,
- "hadTrial": true,
- "plannedDowngradePackageId": "7128840a-5347-49a4-8dfa-9022d8dad21a"
}
}Plan a subscription downgrade for a website; it will automatically apply when the current billing period ends.
This endpoint should be used only if your company is responsible for managing billing. Otherwise, the subscription will be managed directly by the user through the dashboard.
| intpWebsiteId required | string (intpWebsiteId) ID of the website within the integration partner’s system |
| packageId required | string <uuid> (packageId) Package ID issued by TWIPLA |
object (Subscription) |
{- "intpWebsiteId": "string",
- "packageId": "471cc1d4-ec27-4504-b7c2-949af95662bc"
}{- "payload": {
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "status": "active",
- "packageId": "471cc1d4-ec27-4504-b7c2-949af95662bc",
- "websiteId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpcId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "expiresAt": "2023-08-22T08:14:03+00:00",
- "stpResetAt": "2023-08-22T08:14:03+00:00",
- "lastPackageChangeAt": "2023-08-22T08:14:03+00:00",
- "createdAt": "2023-08-22T08:14:03+00:00",
- "billingInterval": "monthly",
- "type": "aaas",
- "inTrial": true,
- "hadTrial": true,
- "plannedDowngradePackageId": "7128840a-5347-49a4-8dfa-9022d8dad21a"
}
}Schedule subscription cancellation for the end of the current billing cycle. The website will then revert to the free plan. Cancellation can be reversed by resuming the subscription until it takes effect. Note: This endpoint should be used only if your company is responsible for managing billing. Otherwise, the subscription will be managed directly by the user through the dashboard.
| intpWebsiteId required | string (intpWebsiteId) ID of the website within the integration partner’s system |
object (Subscription) |
{- "intpWebsiteId": "string"
}{- "payload": {
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "status": "active",
- "packageId": "471cc1d4-ec27-4504-b7c2-949af95662bc",
- "websiteId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpcId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "expiresAt": "2023-08-22T08:14:03+00:00",
- "stpResetAt": "2023-08-22T08:14:03+00:00",
- "lastPackageChangeAt": "2023-08-22T08:14:03+00:00",
- "createdAt": "2023-08-22T08:14:03+00:00",
- "billingInterval": "monthly",
- "type": "aaas",
- "inTrial": true,
- "hadTrial": true,
- "plannedDowngradePackageId": "7128840a-5347-49a4-8dfa-9022d8dad21a"
}
}Resume a canceled subscription. This can be done until the cancellation takes effect, and the action applies immediately.
Note: This endpoint should be used only if your company is responsible for managing billing. Otherwise, the subscription will be managed directly by the user through the dashboard.
| intpWebsiteId required | string (intpWebsiteId) ID of the website within the integration partner’s system |
object (Subscription) |
{- "intpWebsiteId": "string"
}{- "payload": {
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "status": "active",
- "packageId": "471cc1d4-ec27-4504-b7c2-949af95662bc",
- "websiteId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpcId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "expiresAt": "2023-08-22T08:14:03+00:00",
- "stpResetAt": "2023-08-22T08:14:03+00:00",
- "lastPackageChangeAt": "2023-08-22T08:14:03+00:00",
- "createdAt": "2023-08-22T08:14:03+00:00",
- "billingInterval": "monthly",
- "type": "aaas",
- "inTrial": true,
- "hadTrial": true,
- "plannedDowngradePackageId": "7128840a-5347-49a4-8dfa-9022d8dad21a"
}
}Deactivate the subscription; the website will also be deleted.
| intpWebsiteId required | string (intpWebsiteId) ID of the website within the integration partner’s system |
object (Subscription) |
{- "intpWebsiteId": "string"
}{- "payload": {
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "status": "active",
- "packageId": "471cc1d4-ec27-4504-b7c2-949af95662bc",
- "websiteId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpcId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "expiresAt": "2023-08-22T08:14:03+00:00",
- "stpResetAt": "2023-08-22T08:14:03+00:00",
- "lastPackageChangeAt": "2023-08-22T08:14:03+00:00",
- "createdAt": "2023-08-22T08:14:03+00:00",
- "billingInterval": "monthly",
- "type": "aaas",
- "inTrial": true,
- "hadTrial": true,
- "plannedDowngradePackageId": "7128840a-5347-49a4-8dfa-9022d8dad21a"
}
}An INTP can operate under two subscription models: website-based or account-based.
Use these endpoints if your company:
Increase the number of credits for a specific account. The upgrade takes effect immediately, and the billing cycle and credit consumption resets.
Note: This endpoint should be used only if your company is responsible for managing billing. Otherwise, the subscription will be managed directly by the user through the dashboard.
| intpcId required | string ID of the customer within the integration partner’s system |
| packageId required | string <uuid> (packageId) Package ID issued by TWIPLA |
| trial | boolean Default: false Indicates whether the subscription should start in a trial period. |
| proRate | boolean Default: false |
object (Subscription) |
{- "intpcId": "string",
- "packageId": "471cc1d4-ec27-4504-b7c2-949af95662bc",
- "trial": false,
- "proRate": false
}{- "payload": {
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "status": "active",
- "packageId": "471cc1d4-ec27-4504-b7c2-949af95662bc",
- "websiteId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpcId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "expiresAt": "2023-08-22T08:14:03+00:00",
- "stpResetAt": "2023-08-22T08:14:03+00:00",
- "lastPackageChangeAt": "2023-08-22T08:14:03+00:00",
- "createdAt": "2023-08-22T08:14:03+00:00",
- "billingInterval": "monthly",
- "type": "aaas",
- "inTrial": true,
- "hadTrial": true,
- "plannedDowngradePackageId": "7128840a-5347-49a4-8dfa-9022d8dad21a"
}
}Plan a subscription downgrade for an account; it will automatically apply when the current billing period ends.
Note: This endpoint should be used only if your company is responsible for managing billing. Otherwise, the subscription will be managed directly by the user through the dashboard.
| intpcId required | string ID of the customer within the integration partner’s system |
| packageId required | string <uuid> (packageId) Package ID issued by TWIPLA |
object (Subscription) |
{- "intpcId": "string",
- "packageId": "471cc1d4-ec27-4504-b7c2-949af95662bc"
}{- "payload": {
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "status": "active",
- "packageId": "471cc1d4-ec27-4504-b7c2-949af95662bc",
- "websiteId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpcId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "expiresAt": "2023-08-22T08:14:03+00:00",
- "stpResetAt": "2023-08-22T08:14:03+00:00",
- "lastPackageChangeAt": "2023-08-22T08:14:03+00:00",
- "createdAt": "2023-08-22T08:14:03+00:00",
- "billingInterval": "monthly",
- "type": "aaas",
- "inTrial": true,
- "hadTrial": true,
- "plannedDowngradePackageId": "7128840a-5347-49a4-8dfa-9022d8dad21a"
}
}Schedule subscription cancellation for the end of the current billing cycle. The account will then revert to the free plan. Cancellation can be reversed by resuming the subscription until it takes effect.
Note: This endpoint should be used only if your company is responsible for managing billing. Otherwise, the subscription will be managed directly by the user through the dashboard.
| intpcId required | string ID of the customer within the integration partner’s system |
object (Subscription) |
{- "intpcId": "string"
}{- "payload": {
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "status": "active",
- "packageId": "471cc1d4-ec27-4504-b7c2-949af95662bc",
- "websiteId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpcId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "expiresAt": "2023-08-22T08:14:03+00:00",
- "stpResetAt": "2023-08-22T08:14:03+00:00",
- "lastPackageChangeAt": "2023-08-22T08:14:03+00:00",
- "createdAt": "2023-08-22T08:14:03+00:00",
- "billingInterval": "monthly",
- "type": "aaas",
- "inTrial": true,
- "hadTrial": true,
- "plannedDowngradePackageId": "7128840a-5347-49a4-8dfa-9022d8dad21a"
}
}Resume a canceled subscription. This can be done until the cancellation takes effect, and the action applies immediately.
Note: This endpoint should be used only if your company is responsible for managing billing. Otherwise, the subscription will be managed directly by the user through the dashboard.
| intpcId required | string ID of the customer within the integration partner’s system |
object (Subscription) |
{- "intpcId": "string"
}{- "payload": {
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "status": "active",
- "packageId": "471cc1d4-ec27-4504-b7c2-949af95662bc",
- "websiteId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpcId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "expiresAt": "2023-08-22T08:14:03+00:00",
- "stpResetAt": "2023-08-22T08:14:03+00:00",
- "lastPackageChangeAt": "2023-08-22T08:14:03+00:00",
- "createdAt": "2023-08-22T08:14:03+00:00",
- "billingInterval": "monthly",
- "type": "aaas",
- "inTrial": true,
- "hadTrial": true,
- "plannedDowngradePackageId": "7128840a-5347-49a4-8dfa-9022d8dad21a"
}
}Deactivate the subscription; the account will also be deleted.
| intpcId required | string ID of the customer within the integration partner’s system |
object (Subscription) |
{- "intpcId": "string"
}{- "payload": {
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "status": "active",
- "packageId": "471cc1d4-ec27-4504-b7c2-949af95662bc",
- "websiteId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpcId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "expiresAt": "2023-08-22T08:14:03+00:00",
- "stpResetAt": "2023-08-22T08:14:03+00:00",
- "lastPackageChangeAt": "2023-08-22T08:14:03+00:00",
- "createdAt": "2023-08-22T08:14:03+00:00",
- "billingInterval": "monthly",
- "type": "aaas",
- "inTrial": true,
- "hadTrial": true,
- "plannedDowngradePackageId": "7128840a-5347-49a4-8dfa-9022d8dad21a"
}
}Manage contributors for a website and control their level of access.
Any existing customer can be added as a contributor. If the customer doesn't exist yet, create them first before adding them as a contributor — no website is required at creation time.
Once added, the contributor can access the dashboard normally via the dashboard iframe URL, where the website ID is the ID of the website they contribute to.
If the website selector is enabled within the dashboard, the contributor will also see the website listed there, alongside any websites they own.
Each contributor is assigned one of the following roles:
| Role | Access |
|---|---|
| Editor | Full edit access, including content updates and structural changes. |
| Watcher | View-only access to website data. Cannot make any edits. |
| Custom Dashboard Contributor | View-only access to custom dashboards explicitly shared with them. No access to any other platform content or settings. Access to specific dashboards is granted by the website owner from within the dashboard. |
Remove a contributor from a website.
The contributor will immediately lose access to the dashboard and all associated resources.
| intpWebsiteId required | string Represents the website from which the contributor will be removed. ID of the website within the integration partner’s system. |
| intpCustomerId required | string Represents the user who is being removed as a contributor. ID of the customer within the integration partner’s system. |
{- "error": "string"
}Add a contributor to a website.
The contributor will gain access to the dashboard with restricted permissions. The level of access and available actions depend on the assigned role.
A contributor can be assigned only one role at a time.
Roles follow a permission hierarchy, where higher-level roles automatically include the permissions granted by lower-level roles.
This endpoint can also be used to update a contributor's role. If the same contributor is added again with a different role, the previous role will be replaced with the new one.
| intpWebsiteId required | string Represents the website where contributor access will be granted. ID of the website within the integration partner’s system. |
| intpCustomerId required | string Represents the user who is being added as a contributor. ID of the customer within the integration partner’s system. |
| role required | string Enum: "editor" "watcher" "dashboard" Defines the role assigned to the contributor. Available roles:
|
{- "intpCustomerId": "string",
- "role": "editor"
}{- "error": "string"
}List all contributors of a website
| intpWebsiteId required | string ID of the website within the integration partner’s system |
object |
{- "payload": {
- "owner": {
- "intpCustomerId": "string",
- "email": "string"
}, - "contributors": {
- "editor": [
- {
- "intpCustomerId": "string",
- "email": "string"
}
], - "watcher": [
- {
- "intpCustomerId": "string",
- "email": "string"
}
], - "dashboard": [
- {
- "intpCustomerId": "string",
- "email": "string"
}
]
}
}
}Create a new INTP Customer
Data about the INTPC
| intpCustomerId required | string (intpCustomerId) ID of the customer within the integration partner’s system |
| email required | string <email> Must be unique within the company |
object Optional. Creates a website for the customer at the same time as the account. Since dashboards are website-scoped, the customer will have no dashboard access until either: (a) a website is created for them, or (b) they are added as a contributor to an existing website. |
object |
{- "intpCustomerId": "string",
- "email": "support@twipla.com",
- "website": {
- "intpWebsiteId": "string",
- "packageId": "471cc1d4-ec27-4504-b7c2-949af95662bc",
- "domain": "domain.example.com",
- "billingDate": "2023-08-22T08:14:03+00:00"
}
}{- "payload": {
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "visaId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpCustomerId": "string",
- "email": "support@twipla.com",
- "intpId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "createdAt": "2023-08-22T08:14:03+00:00",
- "website": {
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "status": "active",
- "intpId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpWebsiteId": "string",
- "intpCustomerId": "string",
- "visaTrackingCode": "string",
- "visaMaxPrivacyModeTrackingCode": "string",
- "domain": "domain.example.com",
- "packageId": "471cc1d4-ec27-4504-b7c2-949af95662bc",
- "packageName": "string",
- "billingInterval": "monthly",
- "lastPackageChangeAt": "2023-08-22T08:14:03+00:00",
- "plannedDowngradePackageId": "4cafe689-e1d4-44fb-9d6b-7807d3139a7b",
- "plannedDowngradePackageName": "string",
- "plannedDowngradeBillingInterval": "monthly",
- "inTrial": true,
- "hadTrial": true,
- "createdAt": "2023-08-22T08:14:03+00:00",
- "expiresAt": "2023-08-22T08:14:03+00:00",
- "stpResetAt": "2023-08-22T08:14:03+00:00",
- "consumption": {
- "stpLimit": 100000,
- "stpConsumed": 5000,
- "stpRateVisit": 1,
- "stpConsumedVisit": 0,
- "stpRateVisitEvent": 1,
- "stpConsumedVisitEvent": 0,
- "stpRateSessionRecording": 1,
- "stpConsumedSessionRecording": 0,
- "stpRateHeatmapIncrement": 1,
- "stpConsumedHeatmapIncrement": 0,
- "stpRatePollAnswer": 1,
- "stpConsumedPollAnswer": 0,
- "stpRateSurveyAnswer": 1,
- "stpConsumedSurveyAnswer": 0,
- "stpRateFunnelMatch": 1,
- "stpConsumedFunnelMatch": 0
}
}
}
}| page required | number Use 0 for the first page |
| pageSize required | number |
Array of objects (INTPC) | |
object (paginationMeta) |
{- "payload": [
- {
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "visaId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpCustomerId": "string",
- "email": "support@twipla.com",
- "intpId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "createdAt": "2023-08-22T08:14:03+00:00"
}
], - "meta": {
- "page": 1,
- "pageSize": 10,
- "pageTotal": 100,
- "total": 92
}
}| intpCustomerId required | string ID of the customer within the integration partner’s system |
object (INTPC) |
{- "payload": {
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "visaId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpCustomerId": "string",
- "email": "support@twipla.com",
- "intpId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "createdAt": "2023-08-22T08:14:03+00:00"
}
}| intpCustomerId required | string ID of the customer within the integration partner’s system |
object (INTPC) |
{- "payload": {
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "visaId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpCustomerId": "string",
- "email": "support@twipla.com",
- "intpId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "createdAt": "2023-08-22T08:14:03+00:00"
}
}Returns all packages available within the company.
| intpWebsiteId | string Filters the response to return only packages visible to this website — all public packages plus any custom ones assigned to it. ID of the customer within the integration partner’s system. |
| intpCustomerId | string Filters the response to return only packages visible to this customer — all public packages plus any custom ones assigned to it. ID of the website within the integration partner’s system. |
Array of objects (Package) |
{- "payload": [
- {
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "name": "string",
- "touchpoints": 0,
- "intpId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "price": 12.99,
- "currency": "EUR",
- "period": "monthly",
- "recommended": true,
- "createdAt": "2023-08-22T08:14:03+00:00",
- "visibility": "public",
- "restrictedTo": [
- {
- "subscriptionId": "string",
- "intpWebsiteId": "string",
- "intpCustomerId": "string"
}
]
}
]
}| packageId required | string Package ID issued by TWIPLA |
object (Package) |
{- "payload": {
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "name": "string",
- "touchpoints": 0,
- "intpId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "price": 12.99,
- "currency": "EUR",
- "period": "monthly",
- "recommended": true,
- "createdAt": "2023-08-22T08:14:03+00:00",
- "visibility": "public",
- "restrictedTo": [
- {
- "subscriptionId": "string",
- "intpWebsiteId": "string",
- "intpCustomerId": "string"
}
]
}
}Assign a custom package to a specific client.
Note: Only packages with visibility = restricted can be used.
Steps:
visibility = restricted.| packageId required | string Package ID issued by TWIPLA |
| targetId required | string ID of the target entity in the integration partner system. This is a website ID or a customer ID depending on your subscription type. |
{- "error": "string"
}Unassign a custom package from a specific client.
Note: If an active subscription exists for this package, unassigning it will not cancel the subscription — it will continue to run as normal until the package is explicitly changed.
| packageId required | string Package ID issued by TWIPLA |
| targetId required | string ID of the target entity in the integration partner system. This is a website ID or a customer ID depending on your subscription type. |
{- "error": "string"
}required | object |
required | object |
object |
object (Website) |
{- "website": {
- "id": "string",
- "domain": "string",
- "package": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "billingDate": "2023-08-22T08:14:03+00:00"
}, - "privacyLevel": 0
}, - "intpc": {
- "id": "string"
}, - "opts": {
- "uft": true
}
}{- "payload": {
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "status": "active",
- "intpId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpWebsiteId": "string",
- "intpCustomerId": "string",
- "visaTrackingCode": "string",
- "visaMaxPrivacyModeTrackingCode": "string",
- "domain": "domain.example.com",
- "packageId": "471cc1d4-ec27-4504-b7c2-949af95662bc",
- "packageName": "string",
- "billingInterval": "monthly",
- "lastPackageChangeAt": "2023-08-22T08:14:03+00:00",
- "plannedDowngradePackageId": "4cafe689-e1d4-44fb-9d6b-7807d3139a7b",
- "plannedDowngradePackageName": "string",
- "plannedDowngradeBillingInterval": "monthly",
- "inTrial": true,
- "hadTrial": true,
- "createdAt": "2023-08-22T08:14:03+00:00",
- "expiresAt": "2023-08-22T08:14:03+00:00",
- "stpResetAt": "2023-08-22T08:14:03+00:00",
- "consumption": {
- "stpLimit": 100000,
- "stpConsumed": 5000,
- "stpRateVisit": 1,
- "stpConsumedVisit": 0,
- "stpRateVisitEvent": 1,
- "stpConsumedVisitEvent": 0,
- "stpRateSessionRecording": 1,
- "stpConsumedSessionRecording": 0,
- "stpRateHeatmapIncrement": 1,
- "stpConsumedHeatmapIncrement": 0,
- "stpRatePollAnswer": 1,
- "stpConsumedPollAnswer": 0,
- "stpRateSurveyAnswer": 1,
- "stpConsumedSurveyAnswer": 0,
- "stpRateFunnelMatch": 1,
- "stpConsumedFunnelMatch": 0
}
}
}| intpWebsiteId required | string (intpWebsiteId) ID of the website within the integration partner’s system |
| intpCustomerId required | string (intpCustomerId) ID of the customer within the integration partner’s system |
| packageId | string <uuid> Package ID issued by TWIPLA. Leave empty to create the website on the default free plan. Provide this ID only if your company is responsible for billing; otherwise, leave it blank, as the subscription will be managed directly by the user in the dashboard. |
| domain required | string (websiteDomain) The website domain |
| billingDate | string <date-time> (date) |
object (Website) |
{- "intpWebsiteId": "string",
- "intpCustomerId": "string",
- "packageId": "471cc1d4-ec27-4504-b7c2-949af95662bc",
- "domain": "domain.example.com",
- "billingDate": "2023-08-22T08:14:03+00:00"
}{- "payload": {
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "status": "active",
- "intpId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpWebsiteId": "string",
- "intpCustomerId": "string",
- "visaTrackingCode": "string",
- "visaMaxPrivacyModeTrackingCode": "string",
- "domain": "domain.example.com",
- "packageId": "471cc1d4-ec27-4504-b7c2-949af95662bc",
- "packageName": "string",
- "billingInterval": "monthly",
- "lastPackageChangeAt": "2023-08-22T08:14:03+00:00",
- "plannedDowngradePackageId": "4cafe689-e1d4-44fb-9d6b-7807d3139a7b",
- "plannedDowngradePackageName": "string",
- "plannedDowngradeBillingInterval": "monthly",
- "inTrial": true,
- "hadTrial": true,
- "createdAt": "2023-08-22T08:14:03+00:00",
- "expiresAt": "2023-08-22T08:14:03+00:00",
- "stpResetAt": "2023-08-22T08:14:03+00:00",
- "consumption": {
- "stpLimit": 100000,
- "stpConsumed": 5000,
- "stpRateVisit": 1,
- "stpConsumedVisit": 0,
- "stpRateVisitEvent": 1,
- "stpConsumedVisitEvent": 0,
- "stpRateSessionRecording": 1,
- "stpConsumedSessionRecording": 0,
- "stpRateHeatmapIncrement": 1,
- "stpConsumedHeatmapIncrement": 0,
- "stpRatePollAnswer": 1,
- "stpConsumedPollAnswer": 0,
- "stpRateSurveyAnswer": 1,
- "stpConsumedSurveyAnswer": 0,
- "stpRateFunnelMatch": 1,
- "stpConsumedFunnelMatch": 0
}
}
}Array of objects (Website) |
{- "payload": [
- {
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "status": "active",
- "intpId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpWebsiteId": "string",
- "intpCustomerId": "string",
- "visaTrackingCode": "string",
- "visaMaxPrivacyModeTrackingCode": "string",
- "domain": "domain.example.com",
- "packageId": "471cc1d4-ec27-4504-b7c2-949af95662bc",
- "packageName": "string",
- "billingInterval": "monthly",
- "lastPackageChangeAt": "2023-08-22T08:14:03+00:00",
- "plannedDowngradePackageId": "4cafe689-e1d4-44fb-9d6b-7807d3139a7b",
- "plannedDowngradePackageName": "string",
- "plannedDowngradeBillingInterval": "monthly",
- "inTrial": true,
- "hadTrial": true,
- "createdAt": "2023-08-22T08:14:03+00:00",
- "expiresAt": "2023-08-22T08:14:03+00:00",
- "stpResetAt": "2023-08-22T08:14:03+00:00",
- "consumption": {
- "stpLimit": 100000,
- "stpConsumed": 5000,
- "stpRateVisit": 1,
- "stpConsumedVisit": 0,
- "stpRateVisitEvent": 1,
- "stpConsumedVisitEvent": 0,
- "stpRateSessionRecording": 1,
- "stpConsumedSessionRecording": 0,
- "stpRateHeatmapIncrement": 1,
- "stpConsumedHeatmapIncrement": 0,
- "stpRatePollAnswer": 1,
- "stpConsumedPollAnswer": 0,
- "stpRateSurveyAnswer": 1,
- "stpConsumedSurveyAnswer": 0,
- "stpRateFunnelMatch": 1,
- "stpConsumedFunnelMatch": 0
}
}
]
}| intpWebsiteId required | string ID of the website within the integration partner’s system |
object (Website) |
{- "payload": {
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "status": "active",
- "intpId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpWebsiteId": "string",
- "intpCustomerId": "string",
- "visaTrackingCode": "string",
- "visaMaxPrivacyModeTrackingCode": "string",
- "domain": "domain.example.com",
- "packageId": "471cc1d4-ec27-4504-b7c2-949af95662bc",
- "packageName": "string",
- "billingInterval": "monthly",
- "lastPackageChangeAt": "2023-08-22T08:14:03+00:00",
- "plannedDowngradePackageId": "4cafe689-e1d4-44fb-9d6b-7807d3139a7b",
- "plannedDowngradePackageName": "string",
- "plannedDowngradeBillingInterval": "monthly",
- "inTrial": true,
- "hadTrial": true,
- "createdAt": "2023-08-22T08:14:03+00:00",
- "expiresAt": "2023-08-22T08:14:03+00:00",
- "stpResetAt": "2023-08-22T08:14:03+00:00",
- "consumption": {
- "stpLimit": 100000,
- "stpConsumed": 5000,
- "stpRateVisit": 1,
- "stpConsumedVisit": 0,
- "stpRateVisitEvent": 1,
- "stpConsumedVisitEvent": 0,
- "stpRateSessionRecording": 1,
- "stpConsumedSessionRecording": 0,
- "stpRateHeatmapIncrement": 1,
- "stpConsumedHeatmapIncrement": 0,
- "stpRatePollAnswer": 1,
- "stpConsumedPollAnswer": 0,
- "stpRateSurveyAnswer": 1,
- "stpConsumedSurveyAnswer": 0,
- "stpRateFunnelMatch": 1,
- "stpConsumedFunnelMatch": 0
}
}
}| intpWebsiteId required | string ID of the website within the integration partner’s system |
object (Website) |
{- "payload": {
- "id": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "status": "active",
- "intpId": "7128840a-5347-49a4-8dfa-9022d8dad21a",
- "intpWebsiteId": "string",
- "intpCustomerId": "string",
- "visaTrackingCode": "string",
- "visaMaxPrivacyModeTrackingCode": "string",
- "domain": "domain.example.com",
- "packageId": "471cc1d4-ec27-4504-b7c2-949af95662bc",
- "packageName": "string",
- "billingInterval": "monthly",
- "lastPackageChangeAt": "2023-08-22T08:14:03+00:00",
- "plannedDowngradePackageId": "4cafe689-e1d4-44fb-9d6b-7807d3139a7b",
- "plannedDowngradePackageName": "string",
- "plannedDowngradeBillingInterval": "monthly",
- "inTrial": true,
- "hadTrial": true,
- "createdAt": "2023-08-22T08:14:03+00:00",
- "expiresAt": "2023-08-22T08:14:03+00:00",
- "stpResetAt": "2023-08-22T08:14:03+00:00",
- "consumption": {
- "stpLimit": 100000,
- "stpConsumed": 5000,
- "stpRateVisit": 1,
- "stpConsumedVisit": 0,
- "stpRateVisitEvent": 1,
- "stpConsumedVisitEvent": 0,
- "stpRateSessionRecording": 1,
- "stpConsumedSessionRecording": 0,
- "stpRateHeatmapIncrement": 1,
- "stpConsumedHeatmapIncrement": 0,
- "stpRatePollAnswer": 1,
- "stpConsumedPollAnswer": 0,
- "stpRateSurveyAnswer": 1,
- "stpConsumedSurveyAnswer": 0,
- "stpRateFunnelMatch": 1,
- "stpConsumedFunnelMatch": 0
}
}
}