FavCRM
REMOTE · API.FAVCRM.IO · SCANNED AUG 3
Agentic CRM for service businesses — bookings, customers, WhatsApp, loyalty, invoicing.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →
Endpoint Security89
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, but the challenge carries no valid RFC 9728 metadata, so a client cannot discover where to get a token. See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability85
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Tool/resource definitions use about 18916 tokens (~82/item across 228 items; 223 tools + 5 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
- Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
remote · api.favcrm.io
claude mcp add --transport http io-favcrm-favcrm https://api.favcrm.io/mcp
[mcp_servers.io-favcrm-favcrm] url = "https://api.favcrm.io/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"io-favcrm-favcrm": {
"type": "remote",
"url": "https://api.favcrm.io/mcp",
"enabled": true
}
}
} openclaw mcp add io-favcrm-favcrm --url https://api.favcrm.io/mcp --transport streamable-http
mcp_servers:
io-favcrm-favcrm:
url: "https://api.favcrm.io/mcp" {
"mcpServers": {
"io-favcrm-favcrm": {
"type": "http",
"url": "https://api.favcrm.io/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 3 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.
- 1 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.
- 31 Jul 26 +4
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 30 Jul 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 29 Jul 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.
- 28 Jul 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.
- 27 Jul 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 26 Jul 26 74
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 3 Aug 2026 · Probed https://api.favcrm.io/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=favcrm.io | CN=WE1,O=Google Trust Services,C=US | 13 Jun 2026 | 11 Sept 2026 | ECDSA 256 | ECDSA-SHA256 | 8b36e4b5d46a89d8137da5f9739177d7 |
| SANs: favcrm.io, api.favcrm.io, *.api.favcrm.io | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
DNSSEC insecure
Validation of api.favcrm.io. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| io. | present | 57355 | 8 | Verified |
| favcrm.io. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Challenged, unverified
The endpoint asked for a token, but we could not retrieve and validate the RFC 9728 metadata that tells a client how to obtain one.
| Result | Challenged, unverified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=31536000 |
| x-content-type-options | nosniff |
| x-frame-options | SAMEORIGIN |
| referrer-policy | no-referrer |
Protected resource metadata
| Retrieved | No |
|---|---|
| Problem | no_resource_metadata |
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://api.favcrm.io/mcp | Verified | 200 | |
| http (plaintext) | http://api.favcrm.io/mcp | HTTPS enforced | 301 | https://api.favcrm.io/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
accept_team_invite_request ~79
Step 1 of agentic team invite acceptance. Validates an invite token and sends a 6-digit verification code to the invited email. Then call accept_team_invite_verify with the code to join and receive an MCP API key.
| Name | Type | Req | Description |
|---|---|---|---|
| token | string | yes | Invite token returned by create_team_member_invite or from the invite link |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
accept_team_invite_verify ~98
Step 2 of agentic team invite acceptance. Verifies the emailed code, joins the invited user to the company, and returns a one-time MCP API key for that user.
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | yes | 6-digit code from the invite email |
| name | string | — | Optional display name when creating a new user |
| token | string | yes | Invite token returned by create_team_member_invite or from the invite link |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
add_knowledge_text ~82
Add a free-form text document to the knowledge base. Use for pasted policies, FAQs, internal notes, brand voice references — anything the agent should be able to retrieve later. Stored as a single document; agent-side embedding/retrieval happens elsewhere.
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | yes | Document body text |
| name | string | yes | Friendly title for the document |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
append_post_block ~102
Append one or more blocks to the end of a post. Each block must be a valid block object: { id, version, type, data }. Types: paragraph, heading, image, list, quote, code, divider, spacer, embed, html, youtube, file, faq, callout, gallery, cta, accordion, product.
| Name | Type | Req | Description |
|---|---|---|---|
| blocks | array | yes | Block(s) to append |
| postId | string | yes | The post ID |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
archive_survey ~32
Archive a survey and remove it from active survey lists.
| Name | Type | Req | Description |
|---|---|---|---|
| surveyId | string | yes | Survey ID to archive |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
assign_staff_to_service ~53
Assign a staff member to a booking service. Pass users.id from list_staff.userId.
| Name | Type | Req | Description |
|---|---|---|---|
| serviceId | string | yes | Service ID |
| userId | string | yes | users.id from list_staff.userId |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
attach_post_cover_from_job ~193
Attach a previously generated ai-media job's output as the post's featuredImage. Use when generate_post_cover timed out (job kept running) or when reusing the same generation across multiple posts. Verifies the job belongs to your company and succeeded. Does NOT charge credits — credits were charged at submit time.
| Name | Type | Req | Description |
|---|---|---|---|
| assetIndex | integer | — | Which asset to use when the job produced multiple outputs. Default 0. |
| jobId | string | yes | The ai-media job ID (from generate_image, generate_post_cover, or POST /v6/merchant/ai-media/generate) |
| pollIfRunning | boolean | — | When true, advance polling once if the job is still running. Default true. |
| pollTimeoutMs | integer | — | When pollIfRunning is true, wait up to this long for terminal state. Default 30000. |
| postId | string | yes | The post ID |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
attach_tags ~55
Attach one or more tags to a member/account. Useful for segmenting members after filtering.
| Name | Type | Req | Description |
|---|---|---|---|
| accountIds | array | yes | Member/account IDs to tag (max 100) |
| tagId | string | yes | Tag ID to attach |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
cancel_booking ~40
Cancel a booking. Optionally provide a reason.
| Name | Type | Req | Description |
|---|---|---|---|
| bookingId | string | yes | The booking ID to cancel |
| reason | string | — | Cancellation reason |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
cancel_subscription ~44
Cancel a subscription. Destructive — turns off auto-renew and prevents further billing cycles. Existing paid periods stay valid until end.
| Name | Type | Req | Description |
|---|---|---|---|
| subscriptionId | string | yes | Subscription ID |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
check_plan_operation ~125
Preflight whether an intended operation is allowed by token scopes, enabled modules, subscription state, and quota. Provide toolName, quotaCode, or moduleCode.
| Name | Type | Req | Description |
|---|---|---|---|
| delta | integer | — | Planned usage increment. Currently quota checks are single-resource preflights. |
| moduleCode | string | — | Module code to check, e.g. whatsapp or crm |
| quotaCode | string | — | Quota code to check, e.g. contacts or mcp_calls_per_minute |
| toolName | string | — | MCP tool name to preflight, e.g. create_account |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
clone ~93
Duplicate an existing record (product, tier, campaign, post, service package, promotion, gift offer). Creates a copy in DRAFT status with "(Copy)" appended to the name.
| Name | Type | Req | Description |
|---|---|---|---|
| entityId | string | yes | ID of the entity to clone |
| entityType | string | yes | Type of entity to clone |
| name | string | — | Override the name of the cloned entity (defaults to "Original Name (Copy)") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
commit_customer_import ~65
Commit a previewed customer import. Pass the same rows and sessionId returned by preview_customer_import. Creates/updates accounts and applies points, stamps, and credit deltas.
| Name | Type | Req | Description |
|---|---|---|---|
| rows | array | yes | — |
| sessionId | string | yes | sessionId from preview_customer_import |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
complete_booking ~34
Mark a booking as completed. Triggers commission calculation if configured.
| Name | Type | Req | Description |
|---|---|---|---|
| bookingId | string | yes | The booking ID to complete |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
confirm_booking ~26
Confirm a pending booking.
| Name | Type | Req | Description |
|---|---|---|---|
| bookingId | string | yes | The booking ID to confirm |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
convert_lead ~119
Convert a lead account to an active customer. Optionally create a linked pipeline deal (Salesforce/HubSpot-style convert).
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Lead account ID |
| createDeal | boolean | — | Create a deal during conversion |
| dealAmount | number | — | Optional deal amount |
| dealClosingDate | string | — | Optional deal close date |
| dealName | string | — | Optional deal name |
| dealStage | string | — | Optional initial deal stage |
| lifeStage | string | — | Lifecycle after convert (default active) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_account ~205
Create a CRM account/customer with a primary contact. Optionally enroll the account as a member; use enrol_membership later when the account already exists.
| Name | Type | Req | Description |
|---|---|---|---|
| address | object | — | Postal address |
| string | — | Email address | |
| enrollMembership | boolean | — | Whether to create an active membership immediately |
| expiresAt | string | — | Optional ISO expiry for the membership |
| firstName | string | — | First name for individual accounts |
| lastName | string | — | Last name for individual accounts |
| lifeStage | string | — | CRM life stage. Defaults to active. |
| name | string | yes | Account/customer display name |
| notes | string | — | Internal notes |
| phone | string | — | Phone number |
| source | string | — | Acquisition source. Defaults to api. |
| tierId | string | — | Membership tier ID to enroll into. If omitted, the company default tier may apply. |
| type | string | — | Account type. Defaults to individual. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_booking ~138
Create a new booking for a member. Use get_available_slots first to find valid times, then create the booking with the service, member, date, and time.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | The member/account ID |
| bookingDate | string | yes | Date in YYYY-MM-DD format |
| endTime | string | yes | End time in HH:MM format |
| notes | string | — | Booking notes |
| resourceId | string | — | Resource ID |
| serviceId | string | yes | The service ID |
| staffId | string | — | Staff member ID |
| startTime | string | yes | Start time in HH:MM format |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_broadcast ~108
Create a DRAFT WhatsApp or SMS broadcast campaign. The broadcast is NOT sent — admin must review and send it from the Broadcasts page.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | string | — | Channel (default whatsapp) |
| name | string | yes | Campaign name |
| recipientFilter | object | — | Filter criteria for recipients, e.g. { tagIds: ["..."] } |
| scheduledAt | string | — | ISO date to schedule the broadcast |
| templateId | string | — | Message template ID to use |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_campaign ~207
Create a marketing campaign (email, SMS, or WhatsApp) in DRAFT. For email channelConfig, use subject + htmlBody + optional plainTextBody. recipientSource="list" is accepted as an alias for "individual".
| Name | Type | Req | Description |
|---|---|---|---|
| channel | string | yes | email | sms | whatsapp | push |
| channelConfig | object | — | Channel-specific config: subject + htmlBody for email, body for sms/whatsapp, templateId, etc. Legacy email html is normalized to htmlBody. |
| name | string | yes | Campaign name (internal) |
| recipientIds | array | — | Required if recipientSource="individual", "list", or "csv"; values are account IDs |
| recipientSource | string | — | Where to source recipients from. "list" is normalized to "individual". |
| scheduledAt | — | — | ISO datetime for scheduled send (status must be SCHEDULED) |
| segmentId | — | — | Required if recipientSource="segment" |
| status | string | — | Default DRAFT |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_category ~84
Create a CMS post category (e.g. "Equipment", "Injection — Botox"). For sub-categories, use namespaced names — the table is flat.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | — | Description |
| name | string | yes | Category name |
| slug | string | — | Auto-generated from name if omitted. |
| sortOrder | number | — | Sort order (lower = earlier) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_contact ~76
Create a contact on an existing CRM account.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Owning account ID |
| string | — | ||
| isPrimary | boolean | — | Mark as primary contact |
| jobTitle | string | — | Job title |
| name | string | yes | Contact name |
| phone | string | — | Phone |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_custom_field ~130
Create a custom field definition for CRM entities. Use options for select or multiselect fields.
| Name | Type | Req | Description |
|---|---|---|---|
| entityType | string | yes | Entity type, e.g. account, contact, deal, booking |
| fieldLabel | string | yes | Human-readable label, e.g. Preferred branch |
| fieldName | string | yes | Stable machine name, e.g. preferred_branch |
| fieldType | string | yes | Field type |
| isRequired | boolean | — | Whether this field is required |
| options | array | — | Allowed values for select/multiselect fields |
| sortOrder | number | — | Display order |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_deal ~118
Create a CRM sales pipeline deal, optionally linked to a customer account and contact.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | — | — | Linked CRM account ID |
| amount | — | — | Deal amount |
| closingDate | — | — | Expected closing date |
| contactId | — | — | Linked contact ID |
| dealType | — | — | Deal type/category |
| description | — | — | Deal notes or description |
| name | string | yes | Deal name |
| ownerId | — | — | Owner user/team member ID |
| probability | — | — | Win probability, e.g. 25 |
| stage | — | — | Pipeline stage |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_inbox_reply_suggestion ~135
Create a draft reply suggestion that appears inline in the FavCRM Inbox composer. Use this for message.inbound events with replyPolicy="suggest"; it does not send anything to the customer.
| Name | Type | Req | Description |
|---|---|---|---|
| agentId | string | yes | AI colleague ID creating the suggestion |
| body | string | yes | Draft reply text for the merchant to review |
| conversationId | string | yes | Inbox conversation ID |
| metadata | object | — | Optional metadata such as rationale, confidence, or source refs |
| sourceMessageId | string | — | Inbound message ID this draft responds to |
| subject | string | — | Optional email subject suggestion |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_invoice ~106
Create a new invoice for a customer. Optionally include line items inline. Returns the new invoiceId.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Customer accountId (CRM account) |
| currency | string | — | ISO currency code (defaults to company default) |
| dueDate | string | — | Due date (ISO 8601 date) |
| lineItems | array | — | Line items to bill — totals are computed server-side |
| notes | string | — | Free-form notes shown on the invoice |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_note ~68
Add a note to a member/account, booking, ticket, or invoice.
| Name | Type | Req | Description |
|---|---|---|---|
| body | string | yes | Note content |
| entityId | string | yes | The entity ID |
| entityType | string | yes | Type of entity |
| isPinned | boolean | — | Pin this note to the top |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_offer_rule ~110
Create an upsell/cross-sell offer rule as draft. Specify trigger type, conditions, and suggested products with optional discounts.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | — | Rule description |
| name | string | yes | Rule name |
| products | array | — | Products to suggest with optional discounts |
| triggerConfig | object | — | Trigger-specific configuration |
| triggerType | string | yes | When the offer triggers |
| type | string | yes | Rule type: upsell, cross_sell, bundle, or post_purchase |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_outlet ~135
Create a shop outlet/location. Optionally pass id to preserve a legacy UUID during migration.
| Name | Type | Req | Description |
|---|---|---|---|
| acceptsOrders | boolean | — | Whether outlet accepts online orders (default true) |
| address | — | — | Street address |
| id | string | — | Optional outlet UUID (for legacy migration; non-standard formats accepted) |
| isActive | boolean | — | Whether outlet is active (default true) |
| latitude | — | — | Latitude |
| logoUrl | — | — | Logo URL |
| longitude | — | — | Longitude |
| name | string | yes | Outlet name |
| phone | — | — | Contact phone |
| sortOrder | integer | — | Display sort order (default 0) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_plan_upgrade_link ~141
Create a Stripe Checkout link for a new paid subscription, or a Stripe Billing Portal link for an existing Stripe subscription. Use only after the user explicitly asks to upgrade or fix billing.
| Name | Type | Req | Description |
|---|---|---|---|
| billingCycle | string | — | — |
| confirm | boolean | — | Required true to create a Stripe-hosted payment or billing link. |
| planCode | string | — | Target plan code, e.g. favcrm-lite. Either planId or planCode is required. |
| planId | string | — | Target plan ID. Use list_plan_options first if unknown. |
| returnUrl | string | — | Where Stripe should return after checkout/portal. Defaults to merchant billing settings. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_post ~428
Create a new CMS post (blog_post, page, or any custom post type). The post type must already exist — use list_post_types to discover, create_post_type to add a new one. excerpt = plain-text summary only (auto-derived from blocks if omitted). Structured custom fields go in meta, keyed by the field schema defined with create_post_type_field.
| Name | Type | Req | Description |
|---|---|---|---|
| blocks | array | — | Ordered array of content blocks. Each block has { id, version, type, data } where type is one of: paragraph, heading, image, list, quote, code, divider, spacer, embed, html, youtube, file, faq, callo… |
| categoryIds | array | — | Category IDs (post types with supportsCategories only) |
| excerpt | string | — | Plain-text summary only — never JSON. Auto-derived from the first paragraph/heading block if omitted and the post type supports excerpts. |
| featuredImage | string | — | Cover image URL |
| meta | object | — | Structured custom field values, keyed by field key (see list_post_type_fields). Validated against the post type field schema. Use this for all machine-readable data — never put JSON in excerpt. |
| parentId | — | — | Parent post ID for nested types (e.g. pages). |
| publishedAt | — | — | ISO timestamp; required when status=scheduled. |
| seoDescription | string | — | SEO meta description |
| seoTitle | string | — | SEO title override |
| slug | string | — | URL slug. Auto-generated from title if omitted; collisions get -2, -3 suffix. |
| sortOrder | number | — | Sort order (lower = earlier) |
| status | string | — | Status (default draft) |
| tagIds | array | — | Tag IDs to attach to the post |
| title | string | yes | Post title |
| type | string | yes | Post type slug (e.g. blog_post, page, treatment). Must exist in post_types for this company. |
| visibility | string | — | Visibility (default public) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_post_type ~204
Define a new custom post type (e.g. "treatment", "service"). Required before creating posts of that type. After creating a post type, use create_post_type_field to define its structured field schema. Those fields are stored in meta on each post — do not use excerpt for structured data.
| Name | Type | Req | Description |
|---|---|---|---|
| icon | — | — | Icon name or URL |
| label | string | yes | Singular UI label, e.g. "Treatment" |
| labelPlural | string | yes | Plural UI label, e.g. "Treatments" |
| slug | string | yes | Lowercase identifier, e.g. "treatment". Auto-derived from label if omitted. |
| sortOrder | number | — | Sort order (lower = earlier) |
| supportsBlocks | boolean | — | Default true |
| supportsCategories | boolean | — | Default true |
| supportsExcerpt | boolean | — | Default true |
| supportsFeaturedImage | boolean | — | Default true |
| supportsNesting | boolean | — | Default false |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_post_type_field ~287
Add a custom field to a post type schema. The field key becomes the key in meta when creating/updating posts. Use fieldType="repeater" with fields=[...] for repeatable structured rows. Use this instead of storing structured data in excerpt.
| Name | Type | Req | Description |
|---|---|---|---|
| fieldType | string | yes | Field type: text | textarea | richtext | number | boolean | date | datetime | select | multiselect | url | email | image | file | gallery | attachments | repeater |
| fields | array | — | Required for fieldType="repeater". Defines the child fields stored in each row object. |
| helpText | string | — | Optional hint shown in the UI |
| key | string | — | snake_case key used in meta. Auto-derived from label if omitted. |
| label | string | yes | Human-readable field label, e.g. "Tagline" |
| options | object | — | For select/multiselect: { choices: [{ label, value }] }. For URL fields that should accept merchant uploads, use { uploadable: true } so the UI stores the uploaded file URL instead of asking the merc… |
| postTypeId | string | yes | Post type ID (from list_post_types) |
| required | boolean | — | Whether the field is required on post creation (default false) |
| sortOrder | number | — | Sort order (lower = earlier) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_product ~122
Create a new shop product as DRAFT. Merchant can review and activate from the portal.
| Name | Type | Req | Description |
|---|---|---|---|
| categoryIds | array | — | Category IDs (first is primary) |
| description | string | — | Product description |
| discountPrice | string | — | Discounted price |
| memberPrice | string | — | Members-only price |
| name | string | yes | Product name |
| price | string | yes | Price as decimal string (e.g. "29.99") |
| productType | string | — | Product type (default one_time) |
| sku | string | — | SKU code |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_product_category ~84
Create a product category. Use parentId to create subcategories under an existing category.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | — | Category description |
| name | string | yes | Category name |
| onlineEnabled | boolean | — | Show in online store (default true) |
| parentId | number | — | Parent category ID for subcategories |
| sortOrder | number | — | Display sort order |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_promotion ~254
Create a promotion / discount code. type=percentage or fixed_amount; value is the discount as a string ("10" = 10% or 10 currency units). Codes are uppercased server-side.
| Name | Type | Req | Description |
|---|---|---|---|
| bookingEnabled | boolean | — | Allow on bookings |
| code | string | yes | Coupon code customers enter at checkout (auto-uppercased) |
| description | string | — | Description |
| endsAt | — | — | ISO datetime — when the promo expires |
| eventEnabled | boolean | — | Allow on event registrations |
| maximumDiscount | — | — | Cap on percentage discounts, decimal string |
| minimumAmount | — | — | Minimum order amount required, decimal string |
| minimumQuantity | — | — | Minimum item count required |
| name | string | yes | Promotion name (internal) |
| onlineEnabled | boolean | — | Allow on online shop orders |
| posEnabled | boolean | — | Allow at POS |
| startsAt | — | — | ISO datetime — when the promo becomes valid |
| status | string | — | Default active |
| type | string | — | Default percentage |
| usageLimitPerCustomer | — | — | Max uses per single customer |
| usageLimitTotal | — | — | Max total uses across all customers |
| value | string | yes | Discount value as decimal string |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_resource ~98
Create a bookable resource (room, equipment, vehicle). Used by services that have requiresResource=true.
| Name | Type | Req | Description |
|---|---|---|---|
| capacity | number | — | How many concurrent bookings (default 1) |
| description | string | — | Description |
| name | string | yes | Resource name (e.g. "Treatment Room A") |
| status | string | — | Default active |
| type | string | yes | Free-form type label, e.g. "room", "equipment" |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_segment ~72
Create a new customer segment. Use STATIC for manual member lists, DYNAMIC for criteria-based auto-filtering.
| Name | Type | Req | Description |
|---|---|---|---|
| criteria | object | — | Dynamic segment criteria |
| description | string | — | Segment description |
| name | string | yes | Segment name |
| segmentType | string | — | Segment type (default DYNAMIC) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_service ~319
Create a bookable service. Sets duration, price, capacity, and policies. Use list_service_categories first if you want to attach to an existing category.
| Name | Type | Req | Description |
|---|---|---|---|
| allowedTierIds | array | — | Required when visibility=members_only |
| capacity | number | — | How many participants per slot (default 1) |
| categoryId | string | — | Existing service category ID |
| commissionCurrency | — | — | Commission currency (ISO code) |
| commissionType | — | — | Commission type: "fixed" or "percentage" |
| commissionValue | — | — | Commission amount as decimal string |
| cooldownMinutes | number | — | Minimum gap before bookings can be cancelled (default 0) |
| currency | string | — | ISO currency code, default HKD |
| description | string | — | Description |
| durationMinutes | number | yes | Duration of one booking in minutes |
| name | string | yes | Service name |
| price | string | — | Decimal string, e.g. "80.00". Defaults to "0". |
| requireLogin | boolean | — | Default true — guests cannot book |
| requiresConfirmation | boolean | — | If true, bookings start as pending and need confirm_booking |
| requiresResource | boolean | — | Whether the service requires a resource (room/equipment) |
| requiresStaff | boolean | — | Whether the service requires staff assignment |
| sortOrder | number | — | Sort order (lower = earlier) |
| status | string | — | Default active |
| type | string | — | Default one_on_one |
| visibility | string | — | Visibility: public | members_only | hidden |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_service_category ~61
Create a service category (e.g. "Treatments", "Classes") to group bookable services.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | — | Description |
| name | string | yes | Category name |
| sortOrder | number | — | Sort order (lower = earlier) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_service_package ~127
Create a service package/prepaid session bundle. Use applicableType=SELECTED with applicableItems to limit the package to specific booking services or events.
| Name | Type | Req | Description |
|---|---|---|---|
| applicableItems | array | — | Items used when applicableType=SELECTED |
| applicableType | string | — | Default ALL |
| description | string | — | Description |
| name | string | yes | Package name |
| price | number | yes | Package price |
| sessionCount | integer | yes | Number of included sessions |
| status | string | — | Default ACTIVE |
| validDays | integer | yes | Validity window after purchase, in days |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_service_schedule ~203
Create a bookable schedule window for a service, including recurring weekly/daily availability.
| Name | Type | Req | Description |
|---|---|---|---|
| byWeekday | array | — | Weekdays for weekly recurrence: 0=Mon, 1=Tue, ... 6=Sun |
| date | string | yes | Start date or one-off date (YYYY-MM-DD) |
| endTime | string | yes | HH:MM (24h) |
| maxCapacity | number | — | Max bookings per generated slot |
| notes | string | — | Free-form notes |
| recurrence | string | — | Default none |
| recurrenceEndDate | string | — | YYYY-MM-DD |
| recurrenceInterval | number | — | Default 1 |
| resourceId | string | — | Optional resource ID to bind this schedule to a room/resource |
| serviceId | string | yes | Service ID |
| staffId | string | — | Optional companyMembers.id to bind this schedule to staff |
| startTime | string | yes | HH:MM (24h) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_subscription ~168
Create a recurring subscription for a member. Bind to a membership tier or set a custom amount + cycle.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Customer accountId |
| amount | number | — | Override amount per cycle (otherwise derived from tier) |
| autoRenew | boolean | — | Auto-renew at period end (default true) |
| billingCycle | string | — | Billing cycle (default monthly) |
| currency | string | — | ISO currency code (otherwise derived from tier or company default) |
| currentPeriodEnd | string | — | Period end (ISO 8601). Defaults to start + cycle. |
| currentPeriodStart | string | — | Period start (ISO 8601). Defaults to now. |
| tierId | string | — | Membership tier ID — if set, amount/currency default from the tier |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_survey ~158
Create a survey with custom question blocks. Publish it later or set status to published for immediate portal access.
| Name | Type | Req | Description |
|---|---|---|---|
| closeAt | string | — | Optional ISO datetime when the survey closes |
| description | string | — | Optional survey description |
| openAt | string | — | Optional ISO datetime when the survey opens |
| questionBlocks | array | yes | Ordered survey question blocks |
| settings | object | — | Survey settings such as allowMultipleResponses, collectEmail, collectIpAddress, requireAuthentication, showProgress, successMessage |
| slug | string | — | Optional URL slug; generated from title when omitted |
| status | string | — | Initial status |
| title | string | yes | Survey title |
| visibility | string | — | Who can access the survey |
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.