Unbounce

v1.0.0

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...

0· 258·0 current·0 all-time
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
medium confidence
Purpose & Capability
The skill description (Unbounce API with managed OAuth) matches the runtime instructions: all examples call Maton endpoints (gateway.maton.ai, ctrl.maton.ai) and require MATON_API_KEY. No unrelated binaries, config paths, or credentials are requested.
Instruction Scope
SKILL.md instructs only HTTP interactions with Maton-managed endpoints and to use the MATON_API_KEY environment variable. It does not direct the agent to read local files, other environment variables, or send data to unexpected third-party endpoints.
Install Mechanism
This is an instruction-only skill with no install spec and no code files, so nothing is written to disk or downloaded as part of installation. That minimizes install-time risk.
Credentials
Only one environment variable is required (MATON_API_KEY), which is proportional to a gateway-based integration. However, because Maton proxies requests and manages OAuth, the MATON_API_KEY grants the gateway access to your Unbounce connections/tokens — you should be comfortable with that trust model.
Persistence & Privilege
The skill does not request permanent 'always' inclusion and does not modify other skills or system-wide config. Default autonomous invocation is allowed (platform default) but is not, by itself, unusual here.
Assessment
This skill appears internally consistent: it uses a Maton API gateway to talk to Unbounce and asks only for MATON_API_KEY. Before installing, verify you trust maton.ai (the gateway operator) because Maton will see/proxy your Unbounce OAuth tokens and data. If possible, use a limited-scope API key, review Maton’s privacy/security documentation, and avoid supplying broad or long-lived credentials you wouldn’t want a third party to hold. If you need higher assurance, ask the publisher for source code or a verified homepage/repository and confirm the registry metadata (source/homepage are currently sparse).

Like a lobster shell, security has layers — review code before you run it.

Runtime requirements

EnvMATON_API_KEY
latestvk9717ekpwr4gjsp2wxmf8srjf1829wrp
258downloads
0stars
1versions
Updated 1mo ago
v1.0.0
MIT-0

Unbounce

Access Unbounce landing pages and leads via managed OAuth.

Quick Start

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.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://gateway.maton.ai/unbounce/{native-api-path}

The gateway 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://ctrl.maton.ai.

List Connections

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.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://ctrl.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://ctrl.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": "9c5cc43b-6f09-4789-ad4d-8162e39a24c1",
    "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://ctrl.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

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 author
  • with_stats - Include A/B test statistics when true
  • limit - Results per page (default: 50, max: 1000)
  • offset - Skip first N results
  • sort_order - asc or desc
  • count - When true, only return count in metadata
  • from - 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 true
  • sort_order - asc or desc
  • count - When true, 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}/leads

Query parameters:

  • limit - Results per page (default: 50, max: 1000)
  • offset - Skip first N results
  • sort_order - asc or desc
  • from - 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 results
  • sort_order - asc or desc
  • from / to - Date range filter

Users

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 skip
  • sort_order - Sort direction: asc or desc

Response metadata includes:

{
  "metadata": {
    "count": 100
  }
}

Code Examples

JavaScript

const response = await fetch('https://gateway.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://gateway.maton.ai/unbounce/pages',
    headers={
        'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'
    }
)
print(response.json())

Notes

  • All responses include metadata with 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: published or unpublished
  • Account states: active or suspended

Error Handling

StatusMeaning
200Success
401Invalid or missing authentication
404Resource not found
429Rate limited

Resources

Comments

Loading comments...