- name
- unbounce
- description
- |
- compatibility
- Requires network access and valid Maton API key
- metadata
- author
- maton
- version
- 1.0
- clawdbot
- emoji
- homepage
- https://maton.ai
- requires
- env
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))
EOFBase 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_KEYEnvironment Variable: Set your API key as MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"Getting Your API Key
- Sign in or create an account at maton.ai
- Go to maton.ai/settings
- 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))
EOFCreate 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))
EOFGet 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))
EOFResponse:
{
"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))
EOFSecurity & Permissions
- Access is scoped to Unbounce landing pages and leads via managed OAuth within the connected Unbounce account.
- All write operations require explicit user approval. Before executing any create, update, or delete call, confirm the target resource and intended effect with the user.
API Reference
Accounts
List Accounts
GET /unbounce/accountsQuery parameters:
sort_order-ascordesc(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}/pagesList Account Sub-Accounts
GET /unbounce/accounts/{account_id}/sub_accountsSub-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}/pagesList Sub-Account Domains
GET /unbounce/sub_accounts/{sub_account_id}/domainsList Sub-Account Page Groups
GET /unbounce/sub_accounts/{sub_account_id}/page_groupsPages
List All Pages
GET /unbounce/pagesQuery parameters:
role- Filter by user role:viewerorauthorwith_stats- Include A/B test statistics whentruelimit- Results per page (default: 50, max: 1000)offset- Skip first N resultssort_order-ascordesccount- Whentrue, 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_fieldsQuery parameters:
include_sub_pages- Include sub-page form fields whentruesort_order-ascordesccount- Whentrue, only return count
Response:
{
"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}/leadsQuery parameters:
limit- Results per page (default: 50, max: 1000)offset- Skip first N resultssort_order-ascordescfrom- 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/jsonRequest 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}/pagesPage Groups
List Page Group Pages
GET /unbounce/page_groups/{page_group_id}/pagesQuery parameters:
limit- Results per page (default: 50, max: 1000)offset- Skip first N resultssort_order-ascordescfrom/to- Date range filter
Users
Get Current User
GET /unbounce/users/selfResponse:
{
"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=0Parameters:
limit- Number of results per page (default: 50, max: 1000)offset- Number of results to skipsort_order- Sort direction:ascordesc
Response 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 requests
response = requests.get(
'https://api.maton.ai/unbounce/pages',
headers={
'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'
}
)
print(response.json())Notes
- All responses include
metadatawith HATEOAS links for navigation - Date format: RFC 5322 (e.g.,
2026-03-04T10:54:34Z) - Page IDs are UUIDs, account/sub-account IDs are integers
- Page states:
publishedorunpublished - Account states:
activeorsuspended
Error Handling
| Status | Meaning |
|---|---|
| 200 | Success |
| 401 | Invalid or missing authentication |
| 404 | Resource not found |
| 429 | Rate limited |