Astrocal
Appointment scheduling software

Appointment scheduling software, itemized

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 OAuth for Google, Outlook, or CalDAV. Free/busy 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 covering 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 a Shadow DOM container, not an iframe, so your CSS never breaks it and theming flows through CSS custom properties.

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 135+ currency support built in.

โœ‰๏ธ

Transactional email

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

๐Ÿ’ธ

Automatic refunds

Cancellations 24+ hours before the start time are refunded automatically. 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.

Pricing that scales with bookings, not seats

Start free with 10 bookings a month, no credit card. Paid plans from $12, and team members never cost extra.

Free

For prototyping

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

Launch

For going live

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

Grow

Most Popular

For growing products

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

Scale

For high volume

$199/month
  • 5,000 bookings/month
  • 100 calendar connections
  • 2,000 req/min API rate
  • Everything in Grow
  • 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, 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 Launch 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. 135+ currencies, with automatic refunds for cancellations 24+ hours before start.
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 your first API call in under five minutes.