For developers & AI assistants
Let your apps schedule the meeting.
Connect an agent or app to your Meetly account with a token you control. Find a time, create a booking, and manage changes through MCP or the HTTP API.
Free solo scheduling · No credit card required
1. Set up your account and token
Connect your calendar, set your availability, and create an active event type. API creation currently supports free individual events. Paid, group, collective, and round-robin bookings use the public booking page.
Open Settings → API, MCP & Zapier, name the connection, and choose Schedule meetings. This selects read and write access. Choose an expiry, create your token, and copy it while it is displayed. Use one token per connection.
Tokens belong to the signed-in account. They cannot access another host’s meetings. Revoking or expiring a token stops future requests. Store it in your client’s secret settings or server environment, never in public browser code, source control, or a shared prompt.
2. Connect an MCP-compatible assistant
Use https://api.appmeetly.com/mcp with Streamable HTTP and a Bearer token. For clients that accept the following format, replace the placeholder with your token. Other clients may use separate URL and authorization fields. OAuth-only clients are not supported yet.
{
"mcpServers": {
"meetly": {
"url": "https://api.appmeetly.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_MEETLY_API_KEY"
}
}
}
}Ask your assistant to list your event types, check availability, and book a selected time for an invitee. Read tools are list_event_types, get_availability, list_bookings, and get_booking. Write permission adds create_booking, reschedule_booking, and cancel_booking.
Each write needs a unique requestId. For a retry, reuse the same ID and arguments. Creating or changing a meeting can send invitations and emails. Never infer the invitee’s consent to recording.
3. Or connect directly with the API
Base URL: https://api.appmeetly.com/api/automation/v1. Set MEETLY_API_KEY in your server environment. Send it as Authorization: Bearer … on every request.
Download the OpenAPI definition for API clients and agent builders. It describes authentication, inputs, permissions, and endpoints.
curl 'https://api.appmeetly.com/api/automation/v1/me' \
-H "Authorization: Bearer $MEETLY_API_KEY"curl 'https://api.appmeetly.com/api/automation/v1/event-types' \
-H "Authorization: Bearer $MEETLY_API_KEY"Choose an event with isHidden: false, schedulingType: individual, and a zero or null price. Keep its ID and any required intake questions. Lists return data and nextCursor; pass the cursor to retrieve more results.
curl --get 'https://api.appmeetly.com/api/automation/v1/availability/EVENT_TYPE_ID' \
-H "Authorization: Bearer $MEETLY_API_KEY" \
--data-urlencode 'from=FUTURE_RANGE_START_UTC' \
--data-urlencode 'to=FUTURE_RANGE_END_UTC' \
--data-urlencode 'tz=America/New_York'Replace both range placeholders with future UTC ISO timestamps ending in Z, no more than 31 days apart. Select a returned slot’s exact start for the next request. Availability is checked again when the booking is created.
curl 'https://api.appmeetly.com/api/automation/v1/bookings' \
-H "Authorization: Bearer $MEETLY_API_KEY" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: YOUR_UNIQUE_OPERATION_ID' \
--data '{
"eventTypeId": "EVENT_TYPE_ID",
"start": "SLOT_START_FROM_AVAILABILITY",
"inviteeName": "Example Client",
"inviteeEmail": "client@example.com",
"inviteeTimezone": "America/New_York",
"answers": []
}'Replace all uppercase placeholders, use the real invitee details, and supply required answers as {"questionId":"…","value":"…"} entries. A successful creation returns status 201 with the booking ID, status, start/end times, and a join URL when available. Approval-required events can remain pending.
Manage meetings and retry safely
GET /bookings/:idreads the current booking.POST /bookings/:id/rescheduleacceptsstart,inviteeTimezone, and an optionalreason.POST /bookings/:id/cancelaccepts an optionalreason. Send an empty JSON object when no reason is needed. Cancellation does not refund payments.
Every POST needs an Idempotency-Key: 1–128 letters, numbers, underscores, dots, colons, or hyphens. Use a new key for each deliberate operation, and the same key and exact JSON body for retries. Identical retries return the saved response without duplicating the booking. Do not rotate tokens to retry an uncertain write.
Permissions and common errors
bookings:read: read your event types, availability, and hosted bookings.bookings:create: create meetings. Addbookings:rescheduleorbookings:cancelonly when needed.events:read: poll booking events for Zapier or another workflow.
A 401 means the token is missing, expired, or revoked. A 403 means it lacks permission. A 404 means the resource is missing or belongs to another account. A 409 can mean the event is paused, the slot is taken, or an operation is already in progress—read the returned error code. For REQUEST_IN_PROGRESS or a connection failure, check existing bookings before attempting a new operation. A 422 can mean the booking page or required answers are needed. Honor Retry-After for 429 responses.
Each credential allows 120 requests per minute, shared across Meetly’s servers. MCP calls also use the internal API and consume an additional request. Additional booking and IP limits apply. GET /events?type=booking.created returns the last seven days of matching events; also supported: booking.cancelled, booking.rescheduled, and booking.no_show.
Creating a token requires signing in within the last 10 minutes. Review each connection’s recent activity in Settings. Existing full-access tokens keep working; replace them with specific permissions when you update your connected app.
Start with your next client call.
Connect your calendar, create an event, and share your link.
Get started free