GoodInbound

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#

  1. Create a project in the dashboard.
  2. Create an event type or form.
  3. Embed a widget, or call the anonymous visitor endpoints from your own form or booking UI.
  4. 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#

  1. Your client sends a request to the GoodInbound API.
  2. The server validates input and checks availability or the form config.
  3. The action runs: a booking is created, a form step is saved, and so on.
  4. The response returns the result.
  5. 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/:projectId and GET /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.