Integration details
Description
Jicoo helps authorized team members inspect bookings, schedules, event types, routing forms, host assignment rules, organization users, meeting artifacts, and webhook endpoint settings through ChatGPT. It also supports creating or updating booking, schedule, event type, routing form, host assignment, and webhook configuration records when the user explicitly asks to make those changes.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Meeting Scheduling & Booking
- Secondary Subcategories
- None listed
- Brand
- Jicoo
- Access
- Account required
- First tracked
- 2026-07-03
- Tool count
- 45
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Get alerts for Jicoo
Get updates when Jicoo’s Discoverability Score or category rank changes.
ChatGPT Plugin Discovery Score
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Competing in ChatGPT Meeting Scheduling & Booking
View Category45 tools agents can invoke
Cancel a booking as a host.
Create a booking using canonical booking payload.
Create a Standard event type (booking page) for the authorized team via POST /v1/event_types. The full structure of `payload` (matching schemaEventTypeCreatePublicBody) is exposed as a typed JSON Schema on this tool — read the field-level descriptions there for the authoritative shape, defaults, and enum values. Quick reference for the most common case: Minimal payload (1 host, default settings): { "name": "30min meeting", "slug": "30min", "duration": 30, "eventTypeUsers": [ { "userId": "<team-member-uid>", "role": "admin", "userType": "host", "priority": 0 } ] } Collective meeting (all hosts join, 4 members): { "name": "Team sync", "slug": "team-sync", "duration": 30, "availableUserType": "all", "eventTypeUsers": [ { "userId": "<owner-uid>", "role": "admin", "userType": "host", "priority": 0 }, { "userId": "<member1-uid>", "role": "editor", "userType": "host", "priority": 1 }, { "userId": "<member2-uid>", "role": "editor", "userType": "host", "priority": 2 }, { "userId": "<member3-uid>", "role": "editor", "userType": "host", "priority": 3 } ] } Validation rules enforced server-side (rejected with 400): - eventTypeUsers must contain EXACTLY ONE Admin (`role="admin"`); zero or multiple Admins are rejected. - hostAssignType accepts `none` (default) or `hostAssignRule`; `roundRobin` is rejected on create. - availableUserType / hostAssignType / roundRobinAllocateType / rescheduleType are string enums. - Top-level body and location reject unknown keys (.strict()). Pairing with HostAssignRule: When sending hostAssignType=`hostAssignRule`, either (a) pass body.hostAssignRules[] inline on this same call to create rules in the same DB transaction, or (b) call createHostAssignRule afterwards. Every entityId referenced in hostAssignRules[].conditions[].entities[] must already be present in eventTypeUsers[].userId. Discovering host uids: Use listOrganizationUsers to get team member ids before calling this tool. Each organization user item has `userId` which is what eventTypeUsers[].userId expects. Returns the created event type as a public read item. When body.hostAssignRules[] is provided, the response also includes a hostAssignRules[] field with the created rules. Not supported here: ManagedTemplate, external event types, project scoping.
Create a new host assign rule for an EXISTING event type via POST /v1/event_types/{eventTypeId}/host_assign_rules. For a brand-new event type, prefer createEventType with body.hostAssignRules[] inline — that path creates the event type and its rules in the same transaction. Use this tool when you want to add additional rules to an event type that already exists. Prerequisites: - The parent eventType.hostAssignType MUST be set to 3 (HostAssignRule). If it is currently 1 (None) or 2 (RoundRobin), call updateEventType first to flip hostAssignType to 3. - Every entityId listed in conditions[].entities[] MUST already be registered as an EventTypeUser on the target event type (present in the event type users list). Otherwise the API returns 400 "Invalid entityId(s): ...". Use getEventTypeById to verify EventTypeUser coverage first. Required payload fields (public schema — strict validation): - sort: non-negative integer (ordering among sibling rules) - priority: integer in [0, 3] (higher value is selected first; rules are ordered by priority desc) - conditions: array with at least one entry. Each item: - entities: array with at least one entry. Each entity: - entityType: literal "User" - entityId: string (EventTypeUser userId already assigned to the event type) Optional payload fields: - dailyLimitMinutes: integer >= 1 | null (daily assignment time cap) - weeklyLimitMinutes: integer >= 1 | null - monthlyLimitMinutes: integer >= 1 | null Not supported by this endpoint (use other tools or accept as-is): - roundRobinAllocateType (per-condition allocation strategy). The public API ignores it. - per-entity priority / sort tuning. Server hardcodes sort=index+1, priority=0 for each entity. Example minimum payload: { "sort": 0, "priority": 0, "conditions": [ { "entities": [{ "entityType": "User", "entityId": "<event-type-user-uid>" }] } ] } Returns the created host assign rule as a public item (uid, sort, priority, limits, conditions, timestamps).
Create a native routing form using public identifiers. Payload accepts routing form metadata and workflows. Use projectUid or projectId only if the project belongs to the authorized team. External forms and Salesforce forms are not supported by this tool.
Create a schedule.
Create a webhook endpoint via POST /v1/webhook_endpoints. Team context is resolved from the access token. Required payload fields: - url: string (https URL, localhost rejected) - status: string enum, `enable` | `disable` - description: string | null - scope: string enum, `team` (fires for all event types in the team) | `eventType` (fires only for selected event types — requires subsequent webhookEventType setup) Not accepted on the public create endpoint: - events / webhookType / eventTypeIds: managed internally; server defaults events=null (all events) and webhookType=Normal. Notes: - Webhook dispatch requires subscription plan Team or higher. - Payload shape: { event, createdAt, object: { uid, eventTypeUid, startedAt, endedAt, status, timeZone, contact, answers, tracking, downloadLink, createdAt, updatedAt } }. - `object.downloadLink` is `null` unless the booking has an EventRecap with a videoUrl set.
Delete an event type.
Delete a host assign rule from an event type via DELETE /v1/event_types/{eventTypeId}/host_assign_rules/{hostAssignRuleUid}. The hostAssignRuleUid must be obtained from listHostAssignRules (no dedicated getById endpoint exists). Returns { success: true } on HTTP 204. Deleting the last remaining rule while eventType.hostAssignType is 3 (HostAssignRule) leaves the event type without any active assignment rule. Call listHostAssignRules afterwards to verify the remaining rules, and flip hostAssignType back to 1 (None) via updateEventType if no rules should apply going forward.
Delete a schedule.
Delete a webhook endpoint.
Fetch available schedules for an event type by event type ID/UID, or by an exact unique event type name. The input schema stays `eventTypeId`; when a name is supplied, the server resolves it through the authorized team event type list before calling the existing API. `periodStart` and `periodEnd` must be ISO 8601 date-time strings with a timezone offset, for example 2026-06-19T10:00:00.000Z.
Fetch a single booking.
Fetch booking contacts.
Fetch meeting recap fields for a booking.
Fetch meeting recording fields for a booking.
Fetch meeting transcript fields for a booking.
List bookings for the authorized team. By default this tool auto-paginates and returns ALL bookings in a single response (perPage=100 per backend request, up to 100 pages). If `page` or `perPage` is supplied explicitly the tool falls back to single-page behavior.
Fetch a user's busy times (blocked/occupied intervals) within a date range, complementing getAvailableSchedules (which returns open slots). `userId` is the target user's ID/UID. `start` and `end` must be ISO 8601 date-time strings with a timezone offset, for example 2026-06-19T10:00:00.000Z; `end` must be greater than or equal to `start` and the range is capped by the API (a 400 is returned when it is too large). Only time intervals are returned, not event details.
Fetch a single event type by event type ID/UID, or by an exact unique event type name. The input schema stays `eventTypeId`; when a name is supplied, the server resolves it through the authorized team event type list before calling the existing API.
List event types available to the authorized team. Use this tool when the user identifies a booking page / event type by name and you need to inspect possible exact matches before taking action. By default this tool auto-paginates and returns ALL event types in a single response (perPage=100 per backend request, up to 100 pages). If `page` or `perPage` is supplied explicitly the tool falls back to single-page behavior.
Fetch a single organization user.
Fetch one native routing form by uid. The response contains public, answerable workflow fields only.
Fetch a routing form route by routing form uid. This is a pure read. If no route exists the tool returns route=null and does not create one. Route destinations use destinationType string enum and eventTypeUid; numeric forwardable ids are never exposed.
Fetch visibility rules for a native routing form by uid. This is a pure read. If no visibility rule exists the API returns a default rule object with groups=[]. Use workflow uid values from getRoutingForm when building visibility rule sections and action.targetWorkflowIds. Visibility rule enums are public strings: conditionType and | or; ruleType is | isNot | include | exclude | regex; actionType show | hide.
Fetch a single webhook endpoint.
List webhook endpoints for the authorized team.
List { eventType, hosts } pairs for every event type in the authorized team. By default this tool auto-paginates and returns ALL items in a single response (perPage=100 per backend request, up to 100 pages). If `page` or `perPage` is supplied explicitly the tool falls back to single-page behavior. To get hosts for a specific event type, filter the returned `eventTypeHosts` array by `eventType.uid` client-side.
List host assign rules for an event type via GET /v1/event_types/{eventTypeId}/host_assign_rules. Host assign rules are only active when the parent eventType.hostAssignType is 3 (HostAssignRule). If the event type uses hostAssignType 1 (None) or 2 (RoundRobin), any rules returned here are inert. There is no dedicated getHostAssignRuleById tool: to fetch a single rule, call this tool and filter the returned hostAssignRules[] array by uid on the client side. Each returned rule has: uid, sort, priority, dailyLimitMinutes, weeklyLimitMinutes, monthlyLimitMinutes, conditions[] (each with entities[{ entityType: "User", entityId }]), createdAt, updatedAt. By default this tool auto-paginates and returns ALL rules in a single response (perPage=100 per backend request, up to 100 pages). If `page` or `perPage` is supplied explicitly the tool falls back to single-page behavior.
List organization users for the authorized team. By default this tool auto-paginates and returns ALL organization users in a single response (perPage=100 per backend request, up to 100 pages). If `page` or `perPage` is supplied explicitly the tool falls back to single-page behavior and returns only that page. The returned `pagination` object reflects the LAST fetched page when auto-paginating.
List native routing forms for the authorized team. By default this tool auto-paginates and returns ALL routing forms in a single response. If `page` or `perPage` is supplied explicitly the tool falls back to single-page behavior. Internal numeric form ids are never required; returned form uid values are used as routingFormId.
List schedules for the authorized team. By default this tool auto-paginates and returns ALL schedules in a single response (perPage=100 per backend request, up to 100 pages). If `page` or `perPage` is supplied explicitly the tool falls back to single-page behavior.
List user availability calendars. By default this tool auto-paginates and returns ALL calendars in a single response (perPage=100 per backend request, up to 100 pages). If `page` or `perPage` is supplied explicitly the tool falls back to single-page behavior.
Reschedule a booking.
Submit answers to a routing form by routing form uid. Payload matches POST /v1/routing_forms/{id}/responses and uses workflow uid values from getRoutingForm. This evaluates the route and returns bookingPage/availableSchedules only for event type destinations.
Update a booking using canonical booking payload.
Update an existing event type via public PATCH /v1/event_types/{eventTypeId}. This follows the same public contract style as createEventType: - flat top-level payload (there is no `eventType` wrapper) - string enums for availableUserType / hostAssignType / roundRobinAllocateType / rescheduleType - string enums for eventTypeUsers[].role / userType - string enum for location.phoneType (`none` | `callFromHost` | `callFromGuest`) - string enums inside form.workflows[] for workflowType / validateFormatType / customProps.furiganaFormatType / customProps.dateFormatType / customProps.addressCountryInputType - workflow.createType is not accepted (always set to User server-side); workflow.relations is not accepted (Salesforce-internal field) - internal-only fields such as eventTypeType / displayType / hostOperationType are not accepted - unknown top-level keys are rejected Top-level fields (all optional, but at least one is required): - name / description / slug / duration / intervalMinutes / maxCapacity / bufferBefore / bufferAfter / internalNote - availableUserType: `all` | `anyOne` - hostAssignType: `none` | `roundRobin` | `hostAssignRule` - roundRobinAllocateType: `allocateEqually` | `allocateWeighting` | `allocateRotation` - rescheduleType: `lockRescheduleUser` | `reassign` - location: partial location patch. Hidden internal fields are preserved server-side, so you can send only changed fields. - eventTypeUsers: full replacement list using string enums - form: `{ workflows }` — full replace of the booking form workflows - hostAssignRules: uid-based sync payload. Known `uid` updates, omitted existing rules delete, new items create. Common pitfalls: - eventTypeUsers is a full replace. - hostAssignRules is a SYNC (uid-based diff) — omitted uids trigger deletion. - location is partial, but the API preserves hidden internal fields instead of letting callers set them. On success the API returns the updated public read item directly.
Update an event type host.
Update an existing host assign rule via PATCH /v1/event_types/{eventTypeId}/host_assign_rules/{hostAssignRuleUid}. The hostAssignRuleUid must be obtained from listHostAssignRules first (no dedicated getById endpoint exists). Body schema (public update params — all top-level keys are optional, partial update): - sort: non-negative integer - priority: integer in [0, 3] - dailyLimitMinutes: integer >= 1 | null - weeklyLimitMinutes: integer >= 1 | null - monthlyLimitMinutes: integer >= 1 | null - conditions: array of { entities: [{ entityType: "User", entityId }] } IMPORTANT behaviors: - When conditions is omitted, existing conditions are preserved (no-op). - When conditions is sent, it FULLY REPLACES the existing conditions (not a merge). Fetch the current rule via listHostAssignRules and resend the full conditions list to add or remove entries safely. - Every entityId in conditions MUST already be registered as an EventTypeUser on the parent event type. Otherwise the API returns 400 "Invalid entityId(s): ...". - roundRobinAllocateType and per-entity priority/sort are NOT accepted by the public API; the server internally hardcodes sort=index+1, priority=0 for each entity on every update.
Update a native routing form by uid using public identifiers. Payload is a partial routing form update. Use projectUid or projectId only for a project in the authorized team. External forms and Salesforce forms are rejected.
Replace answers for an existing routing form response by uid. Payload matches PATCH /v1/routing_forms/{id}/responses/{rid}. It updates the response and re-evaluates routing; it does not create a booking or persist schedule selections.
Create or update the route for a native routing form by uid. If the route is missing, the API creates exactly one route and applies the payload. Use destinationType: eventType | redirect | message | noRouting. For eventType destinations, send eventTypeUid in the default destination and in every groups[] destination. Do not send numeric forwardableId; it is an internal database id and is not accepted.
Create or update visibility rules for a native routing form by uid. Payload matches PATCH /v1/routing_forms/{id}/visibility_rule and contains groups[]. Payload shape: { groups: [{ uid, conditionType, sections: [{ uid, conditionType, workflowId, ruleType, contents: [{ conditionType, content, contentId }], subFieldPath? }], action: { actionType, targetWorkflowIds } }] }. Use workflow uid values from getRoutingForm; numeric form ids and team ids are never required. Use public string enums: conditionType and | or; ruleType is | isNot | include | exclude | regex; actionType show | hide. Do not send numeric enum values.
Update a schedule.
Update a webhook endpoint via PATCH /v1/webhook_endpoints/{webhookEndpointId}. Team context is resolved from the access token. Common update fields (all optional, partial update): - url: string (https URL, localhost rejected) - description: string | null - status: string enum, `enable` | `disable` - scope: string enum, `team` (all event types) | `eventType` (restricted to selected event types) Not accepted on the public PATCH endpoint: - events / webhookType: managed internally; not settable via the public API.
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Jicoo alternatives on ChatGPT?
As of 2026-09-28, Jicoo competes with Apptoto, Book with Schedulo, Cal.com, Calendesk, Calendly, OnceHub, Schemon in ChatGPT Meeting Scheduling & Booking, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.