Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Zoho Bigin API integration with managed OAuth. Manage contacts, companies, pipelines, and products in Bigin CRM. Use this skill when users want to read, create, update, or delete CRM records, search contacts, or manage sales pipelines. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). Requires network access and valid Maton API key.
Zoho Bigin API integration with managed OAuth. Manage contacts, companies, pipelines, and products in Bigin CRM. Use this skill when users want to read, create, update, or delete CRM records, search contacts, or manage sales pipelines. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). Requires network access and valid Maton API key.
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
Access the Zoho Bigin API with managed OAuth authentication. Manage contacts, companies, pipelines, and products with full CRUD operations.
# List contacts python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/zoho-bigin/bigin/v2/Contacts?fields=First_Name,Last_Name,Email') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF
https://gateway.maton.ai/zoho-bigin/bigin/v2/{endpoint} The gateway proxies requests to www.zohoapis.com/bigin/v2 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"
Sign in or create an account at maton.ai Go to maton.ai/settings Copy your API key
Manage your Zoho Bigin OAuth connections at https://ctrl.maton.ai.
python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections?app=zoho-bigin&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': 'zoho-bigin'}).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
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": "21fd90f9-5935-43cd-b6c8-bde9d915ca80", "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": "zoho-bigin", "metadata": {} } } Open the returned url in a browser to complete OAuth authorization.
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
If you have multiple Zoho Bigin connections, specify which one to use with the Maton-Connection header: python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/zoho-bigin/bigin/v2/Contacts?fields=First_Name,Last_Name,Email') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') req.add_header('Maton-Connection', '21fd90f9-5935-43cd-b6c8-bde9d915ca80') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF If omitted, the gateway uses the default (oldest) active connection.
Zoho Bigin organizes data into modules. Available modules include: ModuleAPI NameDescriptionContactsContactsIndividual peopleCompaniesAccountsOrganizations/businessesPipelinesPipelinesSales opportunities/dealsProductsProductsItems you sellTasksTasksTo-do items (requires additional OAuth scope)EventsEventsCalendar appointments (requires additional OAuth scope)CallsCallsPhone call logs (requires additional OAuth scope)NotesNotesNotes attached to records (requires additional OAuth scope)
GET /zoho-bigin/bigin/v2/{module_api_name}?fields={field1},{field2} Query Parameters: ParameterTypeDescriptionfieldsstringRequired. Comma-separated field API names to retrievesort_orderstringasc or descsort_bystringField API name to sort bypageintegerPage number (default: 1)per_pageintegerRecords per page (default: 200, max: 200)cvidstringCustom view ID for filtered results Example - List Contacts: python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/zoho-bigin/bigin/v2/Contacts?fields=First_Name,Last_Name,Email,Phone') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF Response: { "data": [ { "First_Name": "Ted", "Email": "support@bigin.com", "Last_Name": "Watson", "id": "7255024000000596045" } ], "info": { "per_page": 200, "count": 1, "page": 1, "more_records": false } } Example - List Companies (Accounts): python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/zoho-bigin/bigin/v2/Accounts?fields=Account_Name,Website') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF
GET /zoho-bigin/bigin/v2/{module_api_name}/{record_id} Example: python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/zoho-bigin/bigin/v2/Contacts/7255024000000596045') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF
POST /zoho-bigin/bigin/v2/{module_api_name} Content-Type: application/json { "data": [ { "field_api_name": "value" } ] } Mandatory Fields by Module: ModuleRequired FieldsContactsLast_NameAccountsAccount_NamePipelinesPipeline_Name, StageProductsProduct_Name Example - Create Contact: python <<'EOF' import urllib.request, os, json data = json.dumps({ "data": [{ "Last_Name": "Smith", "First_Name": "John", "Email": "john.smith@example.com", "Phone": "+1-555-0123" }] }).encode() req = urllib.request.Request('https://gateway.maton.ai/zoho-bigin/bigin/v2/Contacts', 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 Response: { "data": [ { "code": "SUCCESS", "details": { "Modified_Time": "2026-02-06T00:28:53-08:00", "Modified_By": { "name": "User Name", "id": "7255024000000590001" }, "Created_Time": "2026-02-06T00:28:53-08:00", "id": "7255024000000605002", "Created_By": { "name": "User Name", "id": "7255024000000590001" } }, "message": "record added", "status": "success" } ] } Example - Create Company (Account): python <<'EOF' import urllib.request, os, json data = json.dumps({ "data": [{ "Account_Name": "Acme Corporation", "Website": "https://acme.com" }] }).encode() req = urllib.request.Request('https://gateway.maton.ai/zoho-bigin/bigin/v2/Accounts', 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
PUT /zoho-bigin/bigin/v2/{module_api_name} Content-Type: application/json { "data": [ { "id": "record_id", "field_api_name": "updated_value" } ] } Example: python <<'EOF' import urllib.request, os, json data = json.dumps({ "data": [{ "id": "7255024000000605002", "Phone": "+1-555-9999" }] }).encode() req = urllib.request.Request('https://gateway.maton.ai/zoho-bigin/bigin/v2/Contacts', data=data, method='PUT') 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 Response: { "data": [ { "code": "SUCCESS", "details": { "Modified_Time": "2026-02-06T00:29:07-08:00", "id": "7255024000000605002" }, "message": "record updated", "status": "success" } ] }
DELETE /zoho-bigin/bigin/v2/{module_api_name}?ids={record_id1},{record_id2} Query Parameters: ParameterTypeDescriptionidsstringComma-separated record IDs (required, max 100)wf_triggerbooleanExecute workflows (default: true) Example: python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/zoho-bigin/bigin/v2/Contacts?ids=7255024000000605002', 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 Response: { "data": [ { "code": "SUCCESS", "details": { "id": "7255024000000605002" }, "message": "record deleted", "status": "success" } ] }
GET /zoho-bigin/bigin/v2/{module_api_name}/search Query Parameters: ParameterTypeDescriptioncriteriastringSearch criteria (e.g., (Last_Name:equals:Smith))emailstringSearch by email addressphonestringSearch by phone numberwordstringGlobal text searchpageintegerPage numberper_pageintegerRecords per page (max 200) Criteria Format: ((field_api_name:operator:value)and/or(...)) Operators: equals, starts_with Example - Search by email: python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/zoho-bigin/bigin/v2/Contacts/search?email=support@bigin.com') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF Example - Search by criteria: python <<'EOF' import urllib.request, os, json import urllib.parse criteria = urllib.parse.quote('(Last_Name:equals:Watson)') req = urllib.request.Request(f'https://gateway.maton.ai/zoho-bigin/bigin/v2/Contacts/search?criteria={criteria}') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF
Get Modules GET /zoho-bigin/bigin/v2/settings/modules Example: python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/zoho-bigin/bigin/v2/settings/modules') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF Get Users GET /zoho-bigin/bigin/v2/users Query Parameters: ParameterTypeDescriptiontypestringAllUsers, ActiveUsers, AdminUsers, CurrentUserpageintegerPage numberper_pageintegerUsers per page (max 200) Example: python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/zoho-bigin/bigin/v2/users?type=ActiveUsers') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF
Zoho Bigin uses page-based pagination with page and per_page parameters: GET /zoho-bigin/bigin/v2/{module_api_name}?fields=First_Name,Last_Name&page=1&per_page=50 Response includes pagination info: { "data": [...], "info": { "per_page": 50, "count": 50, "page": 1, "more_records": true } } Continue fetching while more_records is true, incrementing page each time.
const response = await fetch( 'https://gateway.maton.ai/zoho-bigin/bigin/v2/Contacts?fields=First_Name,Last_Name,Email', { headers: { 'Authorization': `Bearer ${process.env.MATON_API_KEY}` } } ); const data = await response.json();
import os import requests response = requests.get( 'https://gateway.maton.ai/zoho-bigin/bigin/v2/Contacts', headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}, params={'fields': 'First_Name,Last_Name,Email'} ) data = response.json()
The fields parameter is required for list operations Module API names are case-sensitive (e.g., Contacts, not contacts) Companies are accessed via the Accounts module API name Sales opportunities are accessed via the Pipelines module (not Deals) Maximum 100 records per create/update request Maximum 100 records per delete request Maximum 200 records returned per GET request Use field API names (not display names) in requests Some modules (Tasks, Events, Calls, Notes) require additional OAuth scopes. If you receive a scope error, contact Maton support at support@maton.ai with the specific operations/APIs you need and your use-case IMPORTANT: When using curl commands, use curl -g when URLs contain brackets to disable glob parsing IMPORTANT: When piping curl output to jq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments
StatusMeaning400Missing Zoho Bigin connection, missing required parameter, or invalid request401Invalid or missing Maton API key, or OAuth scope mismatch404Invalid URL pattern or resource not found429Rate limited4xx/5xxPassthrough error from Zoho Bigin API
CodeDescriptionREQUIRED_PARAM_MISSINGRequired parameter (like fields) is missingINVALID_URL_PATTERNInvalid API endpoint pathINVALID_MODULEModule does not exist or is not API-supportedOAUTH_SCOPE_MISMATCHOAuth token lacks required permissions for the endpointNO_PERMISSIONInsufficient privileges for the operationMANDATORY_NOT_FOUNDRequired field is missingINVALID_DATAData type mismatch or format errorDUPLICATE_DATARecord violates unique field constraint
Check that the MATON_API_KEY environment 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://ctrl.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
Ensure your URL path starts with zoho-bigin. For example: Correct: https://gateway.maton.ai/zoho-bigin/bigin/v2/Contacts Incorrect: https://gateway.maton.ai/bigin/v2/Contacts
Bigin API Overview Bigin REST API Documentation Modules API Maton Community Maton Support
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.