Appointment scheduling software

Every feature you need to ship scheduling

Calendar sync, payments, webhooks, whitelabel embedding, and native MCP support. All behind a single REST API.

Scheduling that just works

Connect your calendar

One-click Google Calendar OAuth. FreeBusy checks run on every slot request. If your calendar is blocked, that slot disappears automatically.

Configure your rules

Weekly hours, buffer times, minimum notice, rolling booking windows, and time zone handling. All via API or dashboard.

Never double-book again

A PostgreSQL EXCLUDE constraint prevents overlapping bookings at the database level. Cancellations and reschedules update everything automatically.

Built for developers

โšก

Full REST API

OpenAPI 3.1 spec with complete CRUD for event types, bookings, availability, and webhooks. Snake_case JSON, cursor pagination, predictable errors.

API reference โ†’
๐Ÿ””

Webhooks on every event

Booking created, cancelled, rescheduled: your stack gets notified instantly. HMAC-signed payloads with automatic retry on failure.

Webhook docs โ†’
๐Ÿงช

Sandbox mode

Test API keys with isolated data. Run your CI pipeline against real endpoints without touching production bookings.

MCP-Native

Let AI agents book meetings.

Astrocal ships an MCP server out of the box. Any AI agent that speaks MCP can check availability, create bookings, and manage schedules. No custom integration code required.

  • Claude
  • GPT-4
  • Any MCP-compatible agent
Terminal
# Install and run the MCP server
npx @astrocal/mcp-server

# Agent calls available via MCP
> list_event_types
> get_available_slots  slug="discovery" date="2025-03-20"
> create_booking  slug="discovery" start="2025-03-20T10:00:00Z"
  name="Jane Doe" email="jane@example.com"
<!-- Add to any page -->
<script src="https://cdn.astrocal.dev/widget.js"></script>
<div id="booking"></div>
<script>
  Astrocal.open({
    eventTypeId: 'evt_abc123',
    target: '#booking'
  })
</script>

Embed anywhere, brand completely

See it live. This is a real booking widget.

Blue
Violet
Emerald
Rose
--astrocal-primary: #2563eb

Drop in the widget

Script tag, npm package, or React component. Renders in the DOM, not an iframe, so it inherits your styles and responds to your layout.

Make it yours

CSS custom properties give you full control over colours, fonts, and layout. On paid plans, all Astrocal branding is removed.

Share booking links

Hosted pages that work on any device with automatic time zone detection. Or skip the widget entirely and build your own UI on the API.

Payments and notifications

๐Ÿ’ณ

Stripe payments at booking

Collect deposits or full payment when someone books. Stripe Connect with SCA compliance and 135+ currency support built in.

โœ‰๏ธ

Transactional email

Confirmation, reminder, and cancellation emails with ICS calendar attachments. Sent automatically, no integration needed.

๐Ÿ’ธ

Automatic refunds

Cancellations trigger refunds based on your cancellation policy. No manual Stripe dashboard work.

๐Ÿ‘ฅ

Team scheduling

Round-robin assignment across team members with per-member calendar connections. No per-seat pricing, add your whole team.

Platform and security

๐Ÿ›ก๏ธ

Row-level security

PostgreSQL-enforced tenant isolation. Every query runs scoped to your organisation, not filtered in application code. Enforced at the database.

๐Ÿ“Š

Usage dashboard

Monitor API calls, booking volume, and rate limit consumption from the dashboard. Know exactly where you stand on your plan.

๐Ÿšฆ

Rate limiting

Per-minute and daily quotas protect your account and the platform. Fail-open design means a rate limiter hiccup never blocks your bookings.

๐Ÿ“

Activity log

Every API call, dashboard action, and system event logged with actor, timestamp, and context. Full audit trail out of the box.

Simple, transparent pricing

Start for free. Upgrade as you grow. No hidden fees, no per-seat pricing.

Free

For prototyping

$0forever
  • 10 bookings/month
  • 1 calendar connection
  • 30 req/min API rate
  • Calendar sync
  • Email notifications

Starter

For small teams

$12/month
  • 50 bookings/month
  • 3 calendar connections
  • 60 req/min API rate
  • Everything in Free
  • Custom branding

Pro

Most Popular

For growing teams

$49/month
  • 500 bookings/month
  • 20 calendar connections
  • 500 req/min API rate
  • Everything in Starter
  • Priority support

Business

For scaling up

$199/month
  • 5,000 bookings/month
  • 100 calendar connections
  • 2,000 req/min API rate
  • Everything in Pro
  • Dedicated support

No per-seat pricing. Ever. See full pricing โ†’

Frequently asked questions

Yes. The free plan includes 10 bookings per month, full API access, Google Calendar sync, and the embeddable widget. No credit card required.
Calendly is a scheduling tool for end-users. Astrocal is scheduling infrastructure: designed to be embedded in your product, called via API, and branded as yours. No per-seat pricing, full API access, and native MCP support for AI agents.
Yes. On the Starter plan and above, use CSS custom properties to apply your brand colours and fonts. The 'Powered by Astrocal' attribution is removed entirely on paid plans.
Google Calendar, Microsoft 365 / Outlook, and CalDAV calendars. The API uses standard FreeBusy checks and writes events back automatically.
Yes. The @astrocal/mcp-server npm package gives any MCP-compatible AI agent (Claude, Cursor, or your own) the ability to check availability and create bookings.
Connect your Stripe account, set a price on an event type, and Astrocal collects payment at the point of booking. SCA-compliant, 135+ currencies, automatic refunds on cancellation.
No. Astrocal plans are flat-rate based on booking volume, not team size. Add your whole team without extra cost.
A PostgreSQL EXCLUDE constraint enforces non-overlapping time slots at the database level. Even under concurrent load, two bookings cannot occupy the same slot.

Ship scheduling this week

Free plan, full API, no credit card. Go from zero to live bookings in under five minutes.