Install
openclaw skills install smbcrmUse when helping SMBcrm customers with Private Integration Tokens, REST API v2, workflows, custom webhooks, MCP, or Agent Studio API. Use for API troubleshooting, automation design, data sync, AI assistant setup, or any task involving https://services.smbcrm.com endpoints.
openclaw skills install smbcrmExpert guidance for SMBcrm customers using advanced tools: Private Integration Tokens, REST API v2, workflows, custom webhooks, MCP, and Agent Studio. Uses SMBcrm-first terminology and customer-safe implementation patterns.
Use this skill when the task involves:
Do not activate for basic CRM how-to questions unless the user explicitly wants advanced automation, APIs, or AI tooling.
https://services.smbcrm.com as the base URL in all API and MCP examples.https://developers.smbcrm.com/ for API documentation.locationIdIf a user pastes examples that reference other domains or token names, rewrite them into SMBcrm terminology automatically.
When helping a user, follow this order:
Prefer these solution types in this order:
Avoid over-engineering. If a workflow can do it reliably, do not default to custom code.
Ask only if necessary:
If those answers are missing, proceed with the most reasonable SMBcrm-first assumption and state it.
The SMBcrm REST API at https://services.smbcrm.com includes these product areas. Full endpoint documentation is at https://developers.smbcrm.com/.
| API Product | Covers |
|---|---|
| Contacts | Create, read, update, delete, upsert, search, notes, tasks, tags, campaigns, workflows, followers, appointments |
| Calendars | Booking, appointment scheduling, availability management |
| Opportunities | Pipeline and deal management, stage tracking |
| Locations | Sub-account management, settings, configuration |
| Workflows | Automation and trigger management |
| Invoices | Invoice creation, management, payment collection |
| Payments | Payment processing, orders, subscriptions, transactions |
| Products | Product catalog and e-commerce management |
| Forms | Form builder and lead capture |
| Funnels | Funnel and landing page management |
| Blogs | Blog post creation and content management |
| Courses | Online course and membership management |
| Surveys | Survey creation and response collection |
| Users | User and team member management |
| Businesses | Business/company record management |
Use Workflows when the user needs:
This should be the default recommendation for most operators.
Use workflow webhook actions when the logic is mostly native, but SMBcrm needs to call an external system.
Choose the right action:
Use Custom Webhook when the destination API needs custom headers, bearer auth, specific HTTP methods, query strings, JSON body shaping, or form encoding.
Use when the user needs:
Use MCP when the goal is to let an AI assistant safely act on SMBcrm using standard tools rather than hand-coded endpoint wrappers.
Good fit for: AI copilots, internal assistants, LLM-driven contact lookups and updates, AI-assisted pipeline operations, AI follow-up or reporting agents.
Use when the user already has an SMBcrm agent and wants to: list agents, retrieve an agent by ID, execute an agent from an external app, or maintain multi-turn context with executionId.
SMBcrm customer integrations use Private Integration Tokens.
Navigate to Settings → Private Integrations and:
Authorization: Bearer <PRIVATE_INTEGRATION_TOKEN>
Accept: application/json
Content-Type: application/json
Version: 2021-07-28
https://services.smbcrm.com
https://developers.smbcrm.com/
Start with a simple read request before attempting writes.
curl --request GET \
--url "https://services.smbcrm.com/locations/<LOCATION_ID>" \
--header "Authorization: Bearer <PRIVATE_INTEGRATION_TOKEN>" \
--header "Accept: application/json" \
--header "Version: 2021-07-28"
For most inbound lead flows, prefer contact upsert over create-only calls.
Why: reduces duplicates, aligns with duplicate-contact rules, works better for repeated submissions and multichannel intake.
curl --request POST \
--url "https://services.smbcrm.com/contacts/upsert" \
--header "Authorization: Bearer <PRIVATE_INTEGRATION_TOKEN>" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Version: 2021-07-28" \
--data '{
"locationId": "<LOCATION_ID>",
"firstName": "Jordan",
"lastName": "Lee",
"email": "jordan@example.com",
"phone": "+15551234567",
"tags": ["website-lead", "consulting"]
}'
Dedupe guidance:
When finding contacts, prefer search-style endpoints over older list endpoints.
curl --request POST \
--url "https://services.smbcrm.com/contacts/search" \
--header "Authorization: Bearer <PRIVATE_INTEGRATION_TOKEN>" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Version: 2021-07-28" \
--data '{
"locationId": "<LOCATION_ID>",
"page": 1,
"pageLimit": 25,
"filters": [
{
"field": "email",
"operator": "eq",
"value": "jordan@example.com"
}
]
}'
For pipeline automation:
If mapping external data into custom fields:
Recommended for form fills, ads, chat, missed calls, and inbound leads.
Use when speed-to-lead matters.
Use the Scheduler trigger for periodic jobs such as:
Use when AI should assist but not fully replace a teammate.
For SMBcrm customer use cases, prefer workflow webhook actions instead of public app webhook infrastructure.
Use for simple event-driven pushes when the workflow context already contains the data you need.
Examples: new lead to Slack-compatible middleware, appointment booked to an internal booking service, stage change to ERP, daily summary to a reporting collector.
Use when the destination expects a specific request format.
Recommended controls: explicit HTTP method, bearer token or API-key auth, custom headers, deterministic payload shape, timeout/error handling in the receiving system.
Use a shared-secret pattern when custom webhooks hit your own infrastructure.
Recommended headers to send:
Authorization: Bearer <external-system-token> or destination-specific authX-SMBcrm-Source: workflowX-SMBcrm-Event: <descriptive-event-name>X-SMBcrm-Secret: <shared-secret>X-Idempotency-Key: <stable-unique-value>Receiver example (Node.js / Express):
import express from "express";
const app = express();
app.use(express.json());
app.post("/webhooks/smbcrm", (req, res) => {
const secret = req.get("x-smbcrm-secret");
if (!secret || secret !== process.env.SMBCRM_WEBHOOK_SECRET) {
return res.status(401).json({ error: "unauthorized" });
}
// Optional: dedupe by x-idempotency-key
// Process asynchronously if work may take time
return res.status(200).json({ ok: true });
});
app.listen(3000);
Use MCP when an AI client should interact directly with SMBcrm tools.
https://services.smbcrm.com/mcp/
Authorization: Bearer <PRIVATE_INTEGRATION_TOKEN>locationId: <LOCATION_ID>{
"mcpServers": {
"smbcrm": {
"url": "https://services.smbcrm.com/mcp/",
"headers": {
"Authorization": "Bearer <PRIVATE_INTEGRATION_TOKEN>",
"locationId": "<LOCATION_ID>"
}
}
}
}
Depending on scopes and current platform support, tool families can include: contacts, conversations, opportunities, calendars, payments, social posting, blogs, email templates.
locationId explicitly if the AI client supports headersUse the public Agent Studio endpoints when an external application needs to run an SMBcrm agent.
GET /agent-studio/public-api/agents # List agents
GET /agent-studio/public-api/agents/:agentId # Get agent
POST /agent-studio/public-api/agents/:agentId/execute # Execute agent
locationId is requiredexecutionId for the first message in a new sessionexecutionId on later requests to preserve contextcurl --request POST \
--url "https://services.smbcrm.com/agent-studio/public-api/agents/<AGENT_ID>/execute" \
--header "Authorization: Bearer <PRIVATE_INTEGRATION_TOKEN>" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Version: 2021-07-28" \
--data '{
"locationId": "<LOCATION_ID>",
"input": "Summarize this lead and suggest next steps."
}'
{
"locationId": "<LOCATION_ID>",
"executionId": "<PREVIOUS_EXECUTION_ID>",
"input": "Now draft the follow-up email."
}
Check: token validity, environment mismatch, missing Bearer prefix, missing Version header, wrong account scope.
Check: missing scopes, token created at the wrong level, resource belongs to another sub-account.
Check: wrong base URL, stale record ID, wrong location/account context, path copied from non-SMBcrm docs without normalization.
Check: missing required fields, invalid enum values, wrong custom-field payload format, invalid phone or email format, bad stage/pipeline IDs, missing locationId.
Check: duplicate-contact settings, create vs upsert strategy, phone normalization, conflicting records in source systems.
Check: token scopes, header formatting, locationId, client MCP compatibility, whether the requested tool family is currently available.
Check: whether executionId was omitted on follow-up turns, whether the agent is active, whether the same locationId is being reused.
Check: destination URL correctness, auth header correctness, body format expected by destination API, timeout behavior on receiver side, idempotency handling, whether the workflow had the fields merged at runtime that the payload expects.
When answering a user, format the solution like this:
State the best-fit tool and why it is the simplest reliable option.
List: account level, token/scopes, IDs required, external systems involved.
Provide click-by-click workflow or API steps.
Give a ready-to-run payload, curl command, JSON config, or code snippet.
Explain exactly how to validate the implementation.
Name the 3–5 most likely issues and how to detect them.
Use when the user wants an assistant in Cursor, Windsurf, Claude Code, or another MCP-capable client.
executionId