# Introduction

Datalumo docs cover three ways to integrate:

| Path | Use it when | Start here |
|---|---|---|
| **Integrations** | Your site runs on something with a ready integration | Install the [WordPress plugin](/docs/wordpress), the [Shopify app](/docs/shopify), the [Laravel package](/docs/laravel), or the [PHP client](/docs/php) |
| **[Widget SDK](/docs/sdk)** | You want search or chat on your website with the official embed | Paste a script tag and a widget key |
| **HTTP API** | You push content from a CMS, or build a custom search/chat client | Authenticate with an API key or widget credentials |

## Integrations

Ready-made clients that handle syncing and embedding for you:

| Integration | What it covers |
|---|---|
| [WordPress](/docs/wordpress) | Syncs posts and pages, adds chat and search, and can rank your site's own search results |
| [Shopify](/docs/shopify) | Syncs active products and published blog articles from your store |
| [Laravel](/docs/laravel) | Keeps Eloquent models in sync, searches from PHP, and ships Blade components |
| [PHP](/docs/php) | The API client the Laravel package is built on, for any other PHP app |

Everything they do is available over the HTTP API, so you can start with an integration and drop down to the API whenever you need to.

## Widget SDK

Create a search or chat widget, add your domain under websites, then paste the snippet from the widget page (or follow [Install & options](/docs/sdk)). The embed talks to Datalumo for you: streaming, conversation storage, and analytics included. Optional [chat actions](/docs/chat-actions) (web search and webhooks) are configured on the chatbot in the dashboard.

## HTTP API

Everything lives under:

```
https://datalumo.app/api/v1/{organisation}
```

Replace `{organisation}` with your organisation's public id (a UUID). You can copy it from the dashboard. It is not the same as your organisation slug.

| Part | Use it when | How you authenticate |
|---|---|---|
| **Ingestion** | You push pages from a CMS, WordPress, or your backend | An API key from **API keys** |
| **Widgets** | You build a custom search or chat experience | Your site domain, a widget secret key, or an API key with the right permission |

If you only use the standard embed, you usually do not need the Widget API. Prefer the [Widget SDK](/docs/sdk) in the browser; call the HTTP endpoints when you need a custom UI or server-side access.

### Conventions

- Send and receive JSON (`Content-Type: application/json`).
- Creating or updating a page that is still being indexed returns **202**.
- Successful deletes return **204** with an empty body.
- Invalid fields return **422** with a message and per-field errors.
- Sources can be referenced by **slug** or **public id**. When deleting a page you can use its public id or the `external_id` you sent when you pushed it.

### Common starting points

**Sync content from your CMS**

1. Create an API key under **API keys** with the `pages.write` permission.
2. Call [`GET /me`](/docs/me) to confirm the key and list sources.
3. Push pages with [`POST /sources/{source}/pages`](/docs/pages).

On WordPress, Shopify, Laravel, or plain PHP, an [integration](#integrations) already does all three.

**Search or chat on your site**

1. Create a search or chat widget and add your domain under websites.
2. Paste the [Widget SDK](/docs/sdk) snippet, or call the [Widget API](/docs/widgets) yourself.
