# Developer overview

> Everything for running the agent on your own surfaces and wiring it into your systems.

Source: https://www.hey.support/docs/developer-guide

---

<DocsHero tone="ink" line="Embed the widget with one script tag, feed it what your page knows, and get signed events the moment something happens." />

## Pick a path

<Cards>
  <IconCard icon="terminal-square" title="Embed script" href="/docs/developer-guide/embed-script" description="The one-line install and every attribute it accepts." />

  <IconCard icon="panels-top-left" title="Host page context" href="/docs/developer-guide/host-page-context" description="Tell the agent about the page and the visitor, and open it from your own buttons." />

  <IconCard icon="webhook" title="Webhooks" href="/docs/developer-guide/webhooks" description="Signed HTTP callbacks for leads, bookings, handoffs and more." />

  <IconCard icon="braces" title="API reference" href="/docs/api" description="Read and write your workspace data over REST." />
</Cards>

## Which surface do I want?

| I want to…                                                  | Go to                                                            |
| ----------------------------------------------------------- | ---------------------------------------------------------------- |
| Put the chat widget on my site                              | [Embed script](/docs/developer-guide/embed-script)               |
| Install without writing code                                | [One-click installs](/docs/launch/one-click-installs)            |
| Pass the cart, the order or the signed-in user to the agent | [Host page context](/docs/developer-guide/host-page-context)     |
| Get notified when something happens                         | [Webhooks](/docs/developer-guide/webhooks)                       |
| Read or write my workspace data                             | [API reference](/docs/api)                                       |
| Wire it to other apps without code                          | [Zapier](/docs/integrations/zapier)                              |
| Read these docs from an agent or script                     | [Markdown and llms.txt](/docs/developer-guide/markdown-and-llms) |

## No key needed for the widget

The embed script is public by design. It takes an **agent ID**, not an API key. The ID is visible in your page source and that is fine: it grants nothing but the ability to chat with an agent you chose to publish.

<Callout type="warn">
  Never put an [API key](/docs/api/authentication) in front-end code. Keys are workspace-wide credentials.
</Callout>

<Accordions>
  <Accordion title="Which domains can embed it?">
    An agent can be locked to specific domains from the Deploy page, under **Only on these domains**. With none set, the widget serves anywhere, which is the right default while testing and worth closing once you go live.

    The restriction is enforced by the browser: the agent's page carries a `frame-ancestors` policy, so it will not render inside a site you have not listed, and the embed script paints nothing there. It does not restrict the agent's own hosted page, which is meant to be shareable, and it is not a defence against a script that talks to our API directly; rate limits and your usage caps cover that.
  </Accordion>
</Accordions>

<NextSteps>
  <IconCard icon="terminal-square" title="Embed script" href="/docs/developer-guide/embed-script" description="Install the widget and read its attributes." />

  <IconCard icon="webhook" title="Webhooks" href="/docs/developer-guide/webhooks" description="Set up your first endpoint." />

  <IconCard icon="key-round" title="Authentication" href="/docs/api/authentication" description="Create an API key and make your first call." />
</NextSteps>
