GetResponse
Access the GetResponse API with managed OAuth authentication. Manage email marketing campaigns, contacts, newsletters, autoresponders, segments, and forms.
Quick Start
# List campaigns
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/getresponse/v3/campaigns')
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/getresponse/{native-api-path}
Maton proxies requests to api.getresponse.com and automatically injects your OAuth token.
Authentication
All requests require the Maton API key in the Authorization header:
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
- Sign in or create an account at maton.ai
- Go to maton.ai/settings
- Copy your API key
Connection Management
Manage your GetResponse 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=getresponse&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': 'getresponse'}).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": "ACTIVE",
"creation_time": "2025-12-08T07:20:53.488460Z",
"last_updated_time": "2026-01-31T20:03:32.593153Z",
"url": "https://connect.maton.ai/?session_token=...",
"app": "getresponse",
"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
Specifying Connection
If you have multiple GetResponse connections, specify which one to use with the Maton-Connection header:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/getresponse/v3/campaigns')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '{connection_id}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
If you have multiple connections, always include this header to ensure requests go to the intended account.
Security & Permissions
- Access is scoped to email marketing campaigns, contacts, newsletters, autoresponders, segments, workflows, ecommerce/shops, SMS, landing pages, webinars, transactional emails, forms, and account data within the connected GetResponse 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.
- Messaging operations (newsletters, SMS, transactional emails) deliver to real contacts. Always confirm the audience/list, message content, and send timing with the user before executing.
API Reference
Account Operations
Get Account Details
GET /getresponse/v3/accounts
Get Billing Info
GET /getresponse/v3/accounts/billing
Campaign Operations
Campaigns in GetResponse are equivalent to email lists/audiences.
List Campaigns
GET /getresponse/v3/campaigns
With pagination:
GET /getresponse/v3/campaigns?page=1&perPage=100
Get Campaign
GET /getresponse/v3/campaigns/{campaignId}
Create Campaign
POST /getresponse/v3/campaigns
Content-Type: application/json
{
"name": "My Campaign"
}
Contact Operations
List Contacts
GET /getresponse/v3/contacts
With campaign filter:
GET /getresponse/v3/contacts?query[campaignId]={campaignId}
With pagination:
GET /getresponse/v3/contacts?page=1&perPage=100
With sorting:
GET /getresponse/v3/contacts?sort[createdOn]=desc
Get Contact
GET /getresponse/v3/contacts/{contactId}
Create Contact
POST /getresponse/v3/contacts
Content-Type: application/json
{
"email": "john@example.com",
"name": "John Doe",
"campaign": {
"campaignId": "abc123"
},
"customFieldValues": [
{
"customFieldId": "xyz789",
"value": ["Custom Value"]
}
]
}
Update Contact
POST /getresponse/v3/contacts/{contactId}
Content-Type: application/json
{
"name": "John Smith",
"customFieldValues": [
{
"customFieldId": "xyz789",
"value": ["Updated Value"]
}
]
}
Delete Contact
DELETE /getresponse/v3/contacts/{contactId}
Get Contact Activities
GET /getresponse/v3/contacts/{contactId}/activities
Custom Fields
List Custom Fields
GET /getresponse/v3/custom-fields
Get Custom Field
GET /getresponse/v3/custom-fields/{customFieldId}
Create Custom Field
POST /getresponse/v3/custom-fields
Content-Type: application/json
{
"name": "company",
"type": "text",
"hidden": false,
"values": []
}
Newsletter Operations
List Newsletters
GET /getresponse/v3/newsletters
Send Newsletter
POST /getresponse/v3/newsletters
Content-Type: application/json
{
"subject": "Newsletter Subject",
"name": "Internal Newsletter Name",
"campaign": {
"campaignId": "abc123"
},
"content": {
"html": "<html><body>Newsletter content</body></html>",
"plain": "Newsletter content"
},
"sendOn": "2026-02-15T10:00:00Z"
}
Send Draft Newsletter
POST /getresponse/v3/newsletters/send-draft
Content-Type: application/json
{
"messageId": "newsletter123",
"sendOn": "2026-02-15T10:00:00Z"
}
List RSS Newsletters
GET /getresponse/v3/rss-newsletters
Tags
List Tags
GET /getresponse/v3/tags
Get Tag
GET /getresponse/v3/tags/{tagId}
Create Tag
POST /getresponse/v3/tags
Content-Type: application/json
{
"name": "VIP Customer"
}
Update Tag
POST /getresponse/v3/tags/{tagId}
Content-Type: application/json
{
"name": "Premium Customer"
}
Delete Tag
DELETE /getresponse/v3/tags/{tagId}
Assign Tags to Contact
POST /getresponse/v3/contacts/{contactId}/tags
Content-Type: application/json
{
"tags": [
{"tagId": "abc123"},
{"tagId": "xyz789"}
]
}
Autoresponders
List Autoresponders
GET /getresponse/v3/autoresponders
Get Autoresponder
GET /getresponse/v3/autoresponders/{autoresponderId}
Create Autoresponder
POST /getresponse/v3/autoresponders
Content-Type: application/json
{
"name": "Welcome Email",
"subject": "Welcome to our list!",
"campaign": {
"campaignId": "abc123"
},
"triggerSettings": {
"dayOfCycle": 0
},
"content": {
"html": "<html><body>Welcome!</body></html>",
"plain": "Welcome!"
}
}
Update Autoresponder
POST /getresponse/v3/autoresponders/{autoresponderId}
Content-Type: application/json
{
"subject": "Updated Welcome Email"
}
Delete Autoresponder
DELETE /getresponse/v3/autoresponders/{autoresponderId}
Get Autoresponder Statistics
GET /getresponse/v3/autoresponders/{autoresponderId}/statistics
Get All Autoresponder Statistics
GET /getresponse/v3/autoresponders/statistics
From Fields
List From Fields
GET /getresponse/v3/from-fields
Get From Field
GET /getresponse/v3/from-fields/{fromFieldId}
Transactional Emails
Note: Transactional email endpoints may require additional OAuth scopes that are not included in the default authorization.
List Transactional Emails
GET /getresponse/v3/transactional-emails
Send Transactional Email
POST /getresponse/v3/transactional-emails
Content-Type: application/json
{
"fromField": {
"fromFieldId": "abc123"
},
"subject": "Your Order Confirmation",
"recipients": {
"to": "customer@example.com"
},
"content": {
"html": "<html><body>Order confirmed!</body></html>",
"plain": "Order confirmed!"
}
}
Get Transactional Email
GET /getresponse/v3/transactional-emails/{transactionalEmailId}
Get Transactional Email Statistics
GET /getresponse/v3/transactional-emails/statistics
Imports
List Imports
GET /getresponse/v3/imports
Create Import
POST /getresponse/v3/imports
Content-Type: application/json
{
"campaign": {
"campaignId": "abc123"
},
"contacts": [
{
"email": "user1@example.com",
"name": "User One"
},
{
"email": "user2@example.com",
"name": "User Two"
}
]
}
Get Import
GET /getresponse/v3/imports/{importId}
Workflows (Automations)
List Workflows
GET /getresponse/v3/workflow
Get Workflow
GET /getresponse/v3/workflow/{workflowId}
Update Workflow
POST /getresponse/v3/workflow/{workflowId}
Content-Type: application/json
{
"status": "enabled"
}
Segments (Search Contacts)
List Segments
GET /getresponse/v3/search-contacts
Create Segment
POST /getresponse/v3/search-contacts
Content-Type: application/json
{
"name": "Active Subscribers",
"subscribersType": ["subscribed"],
"sectionLogicOperator": "or",
"section": []
}
Get Segment
GET /getresponse/v3/search-contacts/{searchContactId}
Update Segment
POST /getresponse/v3/search-contacts/{searchContactId}
Content-Type: application/json
{
"name": "Updated Segment Name"
}
Delete Segment
DELETE /getresponse/v3/search-contacts/{searchContactId}
Get Contacts from Segment
GET /getresponse/v3/search-contacts/{searchContactId}/contacts
Search Contacts Without Saving
POST /getresponse/v3/search-contacts/contacts
Content-Type: application/json
{
"subscribersType": ["subscribed"],
"sectionLogicOperator": "or",
"section": []
}
Forms
Note: Forms endpoints may require additional OAuth scopes (form_view, form_design, form_select) that are not included in the default authorization.
List Forms
GET /getresponse/v3/forms
Get Form
GET /getresponse/v3/forms/{formId}
Webforms
List Webforms
GET /getresponse/v3/webforms
Get Webform
GET /getresponse/v3/webforms/{webformId}
SMS Messages
List SMS Messages
GET /getresponse/v3/sms
Send SMS
POST /getresponse/v3/sms
Content-Type: application/json
{
"recipients": {
"campaignId": "abc123"
},
"content": {
"message": "Your SMS message content"
},
"sendOn": "2026-02-15T10:00:00Z"
}
Get SMS Message
GET /getresponse/v3/sms/{smsId}
Get SMS Statistics
GET /getresponse/v3/statistics/sms/{smsId}
Shops (Ecommerce)
List Shops
GET /getresponse/v3/shops
Create Shop
POST /getresponse/v3/shops
Content-Type: application/json
{
"name": "My Store",
"locale": "en_US",
"currency": "USD"
}
Get Shop
GET /getresponse/v3/shops/{shopId}
List Products
GET /getresponse/v3/shops/{shopId}/products
Create Product
POST /getresponse/v3/shops/{shopId}/products
Content-Type: application/json
{
"name": "Product Name",
"url": "https://example.com/product",
"variants": [
{
"name": "Default",
"price": 29.99,
"priceTax": 32.99
}
]
}
List Orders
GET /getresponse/v3/shops/{shopId}/orders
Create Order
POST /getresponse/v3/shops/{shopId}/orders
Content-Type: application/json
{
"contactId": "abc123",
"totalPrice": 99.99,
"currency": "USD",
"status": "completed"
}
Webinars
List Webinars
GET /getresponse/v3/webinars
Get Webinar
GET /getresponse/v3/webinars/{webinarId}
Landing Pages
List Landing Pages
GET /getresponse/v3/lps
Get Landing Page
GET /getresponse/v3/lps/{lpsId}
Get Landing Page Statistics
GET /getresponse/v3/statistics/lps/{lpsId}/performance
Pagination
Use page and perPage query parameters for pagination:
GET /getresponse/v3/contacts?page=1&perPage=100
page- Page number (starts at 1)perPage- Number of records per page (max 1000)
Response headers include pagination info:
TotalCount- Total number of recordsTotalPages- Total number of pagesCurrentPage- Current page number
Code Examples
JavaScript
const response = await fetch(
'https://api.maton.ai/getresponse/v3/contacts?perPage=10',
{
headers: {
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
}
}
);
const contacts = await response.json();
Python
import os
import requests
response = requests.get(
'https://api.maton.ai/getresponse/v3/contacts',
headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'},
params={'perPage': 10}
)
contacts = response.json()
Notes
- Campaign IDs and Contact IDs are alphanumeric strings
- All timestamps use ISO 8601 format (e.g.,
2026-02-15T10:00:00Z) - Field names use camelCase
- Rate limits: 30,000 requests per 10 minutes, 80 requests per second
- IMPORTANT: When using curl commands, use
curl -gwhen URLs contain brackets to disable glob parsing - IMPORTANT: When piping curl output to
jqor other commands, environment variables like$MATON_API_KEYmay not expand correctly in some shell environments
Error Handling
| Status | Meaning | |--------|---------| | 400 | Missing GetResponse connection or invalid request | | 401 | Invalid or missing Maton API key | | 404 | Resource not found | | 409 | Conflict (e.g., contact already exists) | | 429 | Rate limited | | 4xx/5xx | Passthrough error from GetResponse API |
Troubleshooting: API Key Issues
- Check that the
MATON_API_KEYenvironment variable is set:
echo $MATON_API_KEY
- Verify the API key is valid by listing connections:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Troubleshooting: Invalid App Name
- Ensure your URL path starts with
getresponse. For example:
- Correct:
https://api.maton.ai/getresponse/v3/contacts - Incorrect:
https://api.maton.ai/v3/contacts
Scan to contact