Using WordPress? Every integration here is also available as a plugin. Browse the plugin store →

Knowledge base Web components Configuration

Restricting a component to your own domains

Every component instance carries a list of hostnames allowed to render it. The list is empty on a new instance and an empty list denies everything — this is the usual reason a fresh embed shows nothing.

Published 12 August 2026

  • allowed domains
  • origin
  • 403
  • security
  • web components
  • configuration

A component embed is a public URL with a public key in it. The thing that stops somebody pasting your key onto their own site and serving your Microsoft 365 data from it is the instance’s allowed domains list.

The rule, exactly

The API compares the browser’s origin against the list on every configuration request, before it does anything else that costs you anything.

  • An empty list denies every request. This is deliberate and it is the default for a new instance. You must name the sites you intend to embed on. The alternative default — “anybody, anywhere” — is the same security posture as an unauthenticated public token.
  • An entry matches an exact hostname, or any subdomain of it. Listing example.com admits example.com and shop.example.com. It does not admit example.com.attacker.net, and it does not admit example.org.
  • localhost and IP addresses must be listed as exact strings. They are not implied by anything, and they are not admitted just because a request looks local — Origin is a header the client controls, so it cannot be trusted to mean “this really is a developer’s machine”.
  • The dashboard’s own origin is always allowed. The builder’s live preview would otherwise force every customer to allowlist our host on every instance.

A request that fails this check gets HTTP 403 and the component renders nothing.

The wildcard

A single * entry allows any origin. It exists because instances created before this check was introduced were migrated to it, so that embeds already live on customer sites did not break the day the rule shipped. The dashboard flags an instance in that state.

Treat * as a temporary position. While it is set, anyone who reads your page source can render your component — and every view they serve counts against your allowance.

Setting it up

List every hostname that will render the component, including the www form if your site serves both, plus any staging host. Do not list the path — this is a hostname list, not a URL list. Do not list our host; it is already implied.

If you use a preview deployment host that generates a new subdomain per build, list the parent domain so the subdomain rule covers them.

Checking it

Load the page and look at the network request the component makes to /api/config/<embed key>. A 403 there is this check. Anything else is a different problem — see Component error codes.

Read next

  • Web components · Configuration

    How the embed key works, and why it is not a secret

    The embed key names one configured component instance. It travels in your page source, so it is public by design — the protections sit on the server, not on the key.

  • Web components · Configuration

    Theming a component so it looks like your site

    Components carry no WPIntegrate branding. A brand colour, a corner radius, a typeface and a light/dark mode are set per instance, and the colour is expanded into a full tonal ramp for you.

  • Web components · Getting started

    Quick start: putting a web component on a page

    What the two lines of an embed actually are, what the browser does with them, and what has to be true before a component renders.

Back to the knowledge base