Getting Started
Installation#
The fastest way to add GoodInbound to your site is with the embeddable widgets. Drop in a script tag and initialize it with your project slug and the event type or form slug.
Booking Widget
<div id="booking-widget"></div>
<script src="https://cdn.goodinbound.com/widgets/booking.js"></script>
<script>
GoodInbound.booking({
projectSlug: "your-project",
eventTypeSlug: "intro-call",
container: "#booking-widget"
});
</script>
Form Widget
<div id="form-widget"></div>
<script src="https://cdn.goodinbound.com/widgets/form.js"></script>
<script>
GoodInbound.form({
projectSlug: "your-project",
formSlug: "contact",
container: "#form-widget"
});
</script>
All widget options are in Embeddable Widgets.
Quick start#
- Create a project in the dashboard.
- Create an event type or form.
- Embed a widget, or call the anonymous visitor endpoints from your own form or booking UI.
- For server-side management, create a project API key under MCP & APIs.
Check available slots
curl "https://goodinbound.com/api/v1/availability/your-project?date=2026-08-12&timezone=UTC&eventTypeSlug=consultation"
How it works#
- Your client sends a request to the GoodInbound API.
- The server validates input and checks availability or the form config.
- The action runs: a booking is created, a form step is saved, and so on.
- The response returns the result.
- Workflows for that event run afterwards (emails, webhooks, tags).
JSON errors include a descriptive error field and may include a stable code. Successful responses vary by operation: JSON resources, file bodies, and empty 204 responses are all used where appropriate.
API families#
| API | Base path | Use it for |
|---|---|---|
| Visitor API | /api/v1/* |
Anonymous endpoints for availability, bookings, and form submissions. Safe for visitor-side code and rate limited by IP. |
| Share-link API | /api/public/* |
Public link resolution and form configuration used by GoodInbound share pages. New direct integrations should use /api/v1/*. |
| Management API | /api/projects/:projectId/* |
Server-side project administration with a project API key. Never expose the key in a browser, widget, or public form. |
Endpoint catalog#
Visitor endpoints cover form responses, file uploads, availability, booking creation, widgets, and public link resolution. They are rate limited and need no credential. Never put an API key in visitor-side code. See Forms API and Booking API.
Management endpoints live under /api/projects/:projectId/*. Send Authorization: Bearer gi_live_... from a server, secure automation, or local agent. The key must belong to the project in the URL, and the project must have API access on its current plan.
- Project settings:
GET,PUT /api/projects/:projectIdandGET /entitlements - Event types: list, get, create, update, delete, and configure calendars
- Schedules and availability: schedules, rules, and date overrides
- Bookings: list, get, cancel, confirm, decline, and read form responses
- Forms and responses: forms, steps, fields, responses, files, and reordering
- Contacts and views: contacts, properties, imports, next actions, stages, enrichment, and saved views
- Tags: tag CRUD, cursor pagination, and idempotent contact assignments
- Workflows: definitions, steps, runs, manual triggers, and test runs
- Activity and analytics: recent activity, booking and form funnels, and provider configuration
- Files and calendars: project uploads, available calendars, and per-event-type calendar selection
Dashboard-only operations#
Project creation and deletion, members, API key management, billing, and OAuth connections are dashboard-only. Account, team, and onboarding operations are session-only too. API keys get api_key_route_forbidden for these; use the dashboard instead.