Access Unbounce landing pages and leads via managed OAuth.
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
https://api.maton.ai/unbounce/{native-api-path}
Maton proxies requests to api.unbounce.com and automatically injects your credentials.
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"
Manage your Unbounce OAuth connections at https://api.maton.ai.
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
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
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.
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
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 /unbounce/accounts/{account_id}
Response:
{
"id": 4967935,
"name": "My Account",
"createdAt": "2026-03-04T10:54:34Z",
"state": "active",
"options": {}
}
GET /unbounce/accounts/{account_id}/pages
GET /unbounce/accounts/{account_id}/sub_accounts
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
}
GET /unbounce/sub_accounts/{sub_account_id}/pages
GET /unbounce/sub_accounts/{sub_account_id}/domains
GET /unbounce/sub_accounts/{sub_account_id}/page_groups
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 /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"
}
}
}
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
}
}
]
}
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 /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": {}
}
}
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.
GET /unbounce/domains/{domain_id}
GET /unbounce/domains/{domain_id}/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 filterGET /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 /unbounce/users/{user_id}
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
}
}
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);
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())
metadata with HATEOAS links for navigation2026-03-04T10:54:34Z)published or unpublishedactive or suspended| Status | Meaning |
|---|---|
| -------- | --------- |
| 200 | Success |
| 401 | Invalid or missing authentication |
| 404 | Resource not found |
| 429 | Rate limited |
共 2 个版本