Unbounce
by @byungkyu
Unbounce API integration with managed OAuth. Build and manage landing pages, track leads, and analyze conversion data. Use this skill when users want to inte...
clawhub install unbounceπ About This Skill
name: unbounce description: | Unbounce API integration with managed OAuth. Build and manage landing pages, track leads, and analyze conversion data. Use this skill when users want to interact with Unbounce for landing page management and lead tracking. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). compatibility: Requires network access and valid Maton API key metadata: author: maton version: "1.0" clawdbot: emoji: homepage: "https://maton.ai" requires: env: - MATON_API_KEY
Unbounce
Access Unbounce landing pages and leads via managed OAuth.
Quick Start
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/unbounce/accounts')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Base URL
https://api.maton.ai/unbounce/{native-api-path}
Maton proxies requests to api.unbounce.com and automatically injects your credentials.
Authentication
All requests require the Maton API key:
Authorization: Bearer $MATON_API_KEY
Environment Variable: Set your API key as MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"
Getting Your API Key
1. Sign in or create an account at maton.ai 2. Go to maton.ai/settings 3. Copy your API key
Connection Management
Manage your Unbounce OAuth connections at https://api.maton.ai.
List Connections
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections?app=unbounce&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Create Connection
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'unbounce'}).encode()
req = urllib.request.Request('https://api.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Get Connection
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections/{connection_id}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"connection": {
"connection_id": "{connection_id}",
"status": "PENDING",
"creation_time": "2026-03-04T10:54:06.615371Z",
"url": "https://connect.maton.ai/?session_token=...",
"app": "unbounce",
"method": "OAUTH2",
"metadata": {}
}
}
Open the returned url in a browser to complete OAuth authorization.
Delete Connection
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Security & Permissions
API Reference
Accounts
#### List Accounts
GET /unbounce/accounts
Query parameters:
sort_order - asc or desc (default: desc by creation date)Response:
{
"metadata": {
"count": 1,
"location": "https://api.unbounce.com/accounts"
},
"accounts": [
{
"id": 4967935,
"name": "My Account",
"createdAt": "2026-03-04T10:54:34Z",
"state": "active",
"options": {}
}
]
}
#### Get Account
GET /unbounce/accounts/{account_id}
Response:
{
"id": 4967935,
"name": "My Account",
"createdAt": "2026-03-04T10:54:34Z",
"state": "active",
"options": {}
}
#### List Account Pages
GET /unbounce/accounts/{account_id}/pages
#### List Account Sub-Accounts
GET /unbounce/accounts/{account_id}/sub_accounts
Sub-Accounts
#### Get Sub-Account
GET /unbounce/sub_accounts/{sub_account_id}
Response:
{
"id": 5699747,
"accountId": 4967935,
"name": "ChrisKim",
"createdAt": "2026-03-04T10:54:35Z",
"website": null,
"uuid": "cf72cbb6-17fd-44d1-bbe4-d25dcad6354a",
"domainsCount": 0
}
#### List Sub-Account Pages
GET /unbounce/sub_accounts/{sub_account_id}/pages
#### List Sub-Account Domains
GET /unbounce/sub_accounts/{sub_account_id}/domains
#### List Sub-Account Page Groups
GET /unbounce/sub_accounts/{sub_account_id}/page_groups
Pages
#### List All Pages
GET /unbounce/pages
Query parameters:
role - Filter by user role: viewer or authorwith_stats - Include A/B test statistics when truelimit - Results per page (default: 50, max: 1000)offset - Skip first N resultssort_order - asc or desccount - When true, only return count in metadatafrom - Start date (RFC 5322 format)to - End date (RFC 5322 format)Response:
{
"metadata": {
"count": 1,
"location": "https://api.unbounce.com/pages"
},
"pages": [
{
"id": "7cacd6d4-015a-4690-9537-68aac06bd98e",
"subAccountId": 5699747,
"name": "Training Template",
"url": "http://unbouncepages.com/training-template/",
"state": "unpublished",
"domain": "unbouncepages.com",
"createdAt": "2026-03-04T10:56:54Z",
"lastPublishedAt": null,
"variantsCount": 0,
"integrationsCount": 0,
"integrationsErrorsCount": 0
}
]
}
#### Get Page
GET /unbounce/pages/{page_id}
Includes test statistics (A/B testing data):
Response:
{
"id": "7cacd6d4-015a-4690-9537-68aac06bd98e",
"name": "Training Template",
"url": "http://unbouncepages.com/training-template/",
"state": "unpublished",
"tests": {
"current": {
"champion": "a",
"hasResults": "false",
"conversionRate": "0",
"conversions": "0",
"visitors": "0",
"visits": "0"
}
}
}
#### List Page Form Fields
GET /unbounce/pages/{page_id}/form_fields
Query parameters:
include_sub_pages - Include sub-page form fields when truesort_order - asc or desccount - When true, only return countResponse:
{
"metadata": {
"count": 3
},
"formFields": [
{
"id": "name",
"name": "Name",
"type": "text",
"validations": {
"required": false
}
},
{
"id": "email",
"name": "Email",
"type": "text",
"validations": {
"required": false,
"email": true
}
},
{
"id": "telephone",
"name": "Telephone",
"type": "text",
"validations": {
"required": false,
"phone": true
}
}
]
}
Leads
#### List Page Leads
GET /unbounce/pages/{page_id}/leads
Query parameters:
limit - Results per page (default: 50, max: 1000)offset - Skip first N resultssort_order - asc or descfrom - Start date (RFC 5322 format)to - End date (RFC 5322 format)Response:
{
"metadata": {
"count": 0,
"delete": {
"href": "https://api.unbounce.com/pages/{page_id}/lead_deletion_request",
"method": "POST"
}
},
"leads": []
}
#### Get Lead
GET /unbounce/pages/{page_id}/leads/{lead_id}
or directly:
GET /unbounce/leads/{lead_id}
Response:
{
"id": "f79d7b6e-b3e8-484c-9584-d21c7afba238",
"created_at": "2026-03-04T11:52:50.705Z",
"page_id": "7cacd6d4-015a-4690-9537-68aac06bd98e",
"variant_id": "a",
"submitter_ip": "127.0.0.1",
"form_data": {
"name": "Test User",
"email": "test@example.com",
"telephone": "1234567890"
},
"extra_data": {
"cookies": {}
}
}
#### Create Lead
POST /unbounce/pages/{page_id}/leads
Content-Type: application/json
Request Body:
{
"conversion": true,
"visitor_id": "127.0.0.1234567890",
"form_submission": {
"variant_id": "a",
"submitter_ip": "127.0.0.1",
"form_data": {
"name": "John Doe",
"email": "john@example.com",
"phone_number": "1234567890"
}
}
}
Response:
{
"id": "f79d7b6e-b3e8-484c-9584-d21c7afba238",
"created_at": "2026-03-04T11:52:50.705Z",
"page_id": "7cacd6d4-015a-4690-9537-68aac06bd98e",
"variant_id": "a",
"submitter_ip": "127.0.0.1",
"form_data": {
"name": "John Doe",
"email": "john@example.com",
"phone_number": "1234567890"
}
}
Leads created via the API have "created_by": "api" in their extra_data.
Domains
#### Get Domain
GET /unbounce/domains/{domain_id}
#### List Domain Pages
GET /unbounce/domains/{domain_id}/pages
Page Groups
#### List Page Group Pages
GET /unbounce/page_groups/{page_group_id}/pages
Query parameters:
limit - Results per page (default: 50, max: 1000)offset - Skip first N resultssort_order - asc or descfrom / to - Date range filterUsers
#### Get Current User
GET /unbounce/users/self
Response:
{
"id": 5031726,
"email": "user@example.com",
"firstName": "Chris",
"lastName": "Kim",
"metadata": {
"related": {
"subAccounts": ["https://api.unbounce.com/sub_accounts/5699747"],
"accounts": ["https://api.unbounce.com/accounts/4967935"]
}
}
}
#### Get User by ID
GET /unbounce/users/{user_id}
Pagination
Unbounce uses offset-based pagination:
GET /unbounce/pages?limit=50&offset=0
Parameters:
limit - Number of results per page (default: 50, max: 1000)offset - Number of results to skipsort_order - Sort direction: asc or descResponse metadata includes:
{
"metadata": {
"count": 100
}
}
Code Examples
JavaScript
const response = await fetch('https://api.maton.ai/unbounce/pages', {
headers: {
'Authorization': Bearer ${process.env.MATON_API_KEY}
}
});
const data = await response.json();
console.log(data);
Python
import os
import requestsresponse = requests.get(
'https://api.maton.ai/unbounce/pages',
headers={
'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'
}
)
print(response.json())
Notes
metadata with HATEOAS links for navigation2026-03-04T10:54:34Z)published or unpublishedactive or suspendedError Handling
| Status | Meaning | |--------|---------| | 200 | Success | | 401 | Invalid or missing authentication | | 404 | Resource not found | | 429 | Rate limited |
Resources
π‘ Examples
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/unbounce/accounts')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
π Tips & Best Practices
metadata with HATEOAS links for navigation2026-03-04T10:54:34Z)published or unpublishedactive or suspended