Access the Cognito Forms API with managed OAuth authentication. List forms, manage entries (create, read, update, delete), and retrieve documents.
# List all forms
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/cognito-forms/api/forms')
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/cognito-forms/{native-api-path}
Maton proxies requests to www.cognitoforms.com and automatically injects your OAuth token.
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"
Manage your Cognito Forms OAuth connections at https://api.maton.ai.
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections?app=cognito-forms&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': 'cognito-forms'}).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": "ACTIVE",
"creation_time": "2026-02-08T10:39:10.245446Z",
"last_updated_time": "2026-02-09T04:11:08.342101Z",
"url": "https://connect.maton.ai/?session_token=...",
"app": "cognito-forms",
"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
If you have multiple Cognito Forms 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/cognito-forms/api/forms')
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.
GET /cognito-forms/api/forms
Returns all forms in the organization.
GET /cognito-forms/api/forms/{formId}/entries/{entryId}
Returns a specific entry by ID or entry number.
POST /cognito-forms/api/forms/{formId}/entries
Content-Type: application/json
{
"Name": {
"First": "John",
"Last": "Doe"
},
"Email": "john.doe@example.com",
"Phone": "555-1234"
}
Field names match your form's field names. Complex fields like Name and Address use nested objects.
PATCH /cognito-forms/api/forms/{formId}/entries/{entryId}
Content-Type: application/json
{
"Name": {
"First": "Jane",
"Last": "Doe"
},
"Email": "jane.doe@example.com"
}
Updates an existing entry. Uses PATCH method (not PUT). Fails if the entry includes a paid order.
DELETE /cognito-forms/api/forms/{formId}/entries/{entryId}
Deletes an entry. Requires Read/Write/Delete API scope.
GET /cognito-forms/api/forms/{formId}/entries/{entryId}/documents/{templateNumber}
Generates and returns a document from an entry using the specified template number.
Response:
{
"Id": "abc123",
"Name": "Entry-Document.pdf",
"ContentType": "application/pdf",
"Size": 12345,
"File": "https://temporary-download-url..."
}
GET /cognito-forms/api/files/{fileId}
Retrieves a file uploaded to a form entry.
Response:
{
"Id": "file-id",
"Name": "upload.pdf",
"ContentType": "application/pdf",
"Size": 54321,
"File": "https://temporary-download-url..."
}
{
"Name": {
"First": "John",
"Last": "Doe"
}
}
{
"Address": {
"Line1": "123 Main St",
"Line2": "Suite 100",
"City": "San Francisco",
"State": "CA",
"PostalCode": "94105"
}
}
Single choice:
{
"PreferredContact": "Email"
}
Multiple choice:
{
"Interests": ["Sports", "Music", "Travel"]
}
const response = await fetch(
'https://api.maton.ai/cognito-forms/api/forms',
{
headers: {
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
}
}
);
const forms = await response.json();
import os
import requests
response = requests.get(
'https://api.maton.ai/cognito-forms/api/forms',
headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}
)
forms = response.json()
import os
import requests
entry_data = {
"Name": {"First": "John", "Last": "Doe"},
"Email": "john@example.com",
"Message": "Hello from the API!"
}
response = requests.post(
'https://api.maton.ai/cognito-forms/api/forms/ContactForm/entries',
headers={
'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}',
'Content-Type': 'application/json'
},
json=entry_data
)
{formId}-{entryNumber})curl -g when URLs contain brackets to disable glob parsingjq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments| Status | Meaning |
|---|---|
| -------- | --------- |
| 400 | Missing Cognito Forms connection |
| 401 | Invalid or missing Maton API key |
| 404 | Form or entry not found |
| 429 | Rate limited (100 requests per 60 seconds) |
| 4xx/5xx | Passthrough error from Cognito Forms API |
MATON_API_KEY environment variable is set:echo $MATON_API_KEY
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
cognito-forms. For example:https://api.maton.ai/cognito-forms/api/formshttps://api.maton.ai/api/forms共 2 个版本