Skip to Content
Getting StartedCreate a headless space

Create a headless space

You’ll create a headless space — a Structura site that lives entirely in the customer portal, with no WordPress install — and see where your posts appear once campaigns run. This page is for sites built with Lovable, Bolt, v0 or Replit, with Next.js, Astro, Nuxt or SvelteKit, other frameworks and apps, and your own backend. A WordPress site starts the same way, and the plugin comes last; see Install the plugin.

A headless space works like any other Structura site: you set up your brand, run campaigns, and review posts. The difference is where posts end up. Instead of publishing into WordPress, Structura stores them in the cloud. Your site either fetches them from the public Content API, which makes Structura your content backend, or, if you built it with an AI builder or run your own backend, Structura sends each article to it when you publish; see below.

Before you start

You’ll need:

  • A Structura account — sign in at app.structurawp.com .
  • The address of your public website (e.g. https://example.com) — the site where your readers will actually see the posts.

You do not need a developer to create the space or generate content. You (or your developer) only need code changes at the very end, to display the posts on your site — see What happens next.

Steps

You start with your site’s address. Structura reads the live site, fills in what it can, and creates nothing for a platform it can’t publish to yet.

  1. In the customer portal, select Connect a site on your workspace home or on the Sites page. The site setup wizard opens at its first step, Address, and asks Where is your site?

  2. Enter your Public website URL, where your readers actually are, and select Continue. Structura uses it to ground SEO suggestions and to make sure links inside delivered posts point at your real domain.

  3. Structura reads your site, then:

    • We can’t publish to Webflow yet. (or Shopify, Wix, Squarespace or Framer): nothing is created. Select Notify me and we email you when it’s ready, or Try a different address.
    • This site already runs Structura.: it’s a WordPress site with the Structura plugin. Paste the license key shown there in wp-admin under Structura → Account & License. Once the plugin connects, the wizard opens on that site; see Activate your license.
    • We couldn’t reach that address.: check the address and that the site is live, then select Try again. Or select Or continue anyway and pick the platform yourself.
    • Any other site: Structura creates it and opens Site info.
  4. On Site info, check the Site name, which Structura filled in from the address, and choose your Platform. When Structura recognised it, the field shows that one platform and says Detected from your site; Change platform opens the full list if the guess is wrong. Otherwise it says Not detected and shows the list right away. You can’t continue without a platform, because it decides how articles reach your site:

    • WordPress: our plugin publishes into your editor. See Install the plugin.
    • AI builders: Lovable, Bolt, v0 or Replit. You paste one prompt into your builder, and each article lands on your site’s blog. Structura recognises a v0 site from the tag v0 adds to its pages; without that tag it suggests Next.js, so pick v0 yourself.
    • Frameworks and apps: Next.js, Astro, Nuxt, SvelteKit or Another framework or app. Your site fetches published posts from the Content API.
    • Your own backend: My own backend. Structura sends each article to a route on your server as a signed request: Rails, Django, Laravel, anything with HTTPS.

    On the Free plan, the AI builders and My own backend are marked Paid plans, because sending articles to your site needs a paid plan. WordPress and the Content API work on every plan.

    The same screen shows your site’s Language. Structura reads it from your homepage; when it says Detected from your site, just carry on. When it says Please confirm, pick the language you publish in and select Confirm language. New campaigns start in this language. You can change it later in the Site identity card on the site’s Site profile page.

    The same card holds the Blog URL pattern, the address your site shows each post at, such as /blog/%postname%. %postname% stands for the post’s slug. Each post’s canonical URL and the links between your posts are built from it. Sites built with Lovable, Bolt, v0 or Replit from our prompt use /blog/%postname%; if yours has no pattern saved, the card suggests it: select Use it, then Save changes. A change applies from then on. Links in posts you already have, and articles already sent to your site, keep their old addresses.

  5. Work through the rest of the wizard: AI engine (only on plans where you bring your own key), SEO, Visuals and Persona. Set up with the wizard describes each step. You can skip steps and return later; the space already exists. Finish setup on the Persona step saves everything and opens the last step, Connect.

  6. Connect depends on your platform:

    • Frameworks and apps: the Content API quickstart. Fetch your posts shows the request that lists your published posts, written for Next.js when you picked Next.js, and Single post by slug shows the request for one post. Both already use your site’s own Content API address and need no key. Copy them for your developer, then select I’ve wired it up.
    • AI builders and My own backend: Article delivery; see below.
    • WordPress: install the plugin and paste your license key; see Install the plugin.

    Not ready? Connect later is always there. The Content API requests stay on your site’s Delivery API page.

  7. Create your first campaign. The flow is identical to the WordPress one — see Your first campaign; everything on that page applies except the WordPress-specific screens.

If Structura sends articles to your site

When you pick Lovable, Bolt, v0, Replit or My own backend, the Connect step sets up Article delivery, which sends each article to your site when you publish it, so your site doesn’t have to fetch anything. You paste the prompt for your builder (on your own backend, you add the route yourself), paste the Receiver URL it gives you, save the signing secret, and test. It takes about five minutes.

Not ready yet? Select Connect later. Your site’s Channels page offers the same setup any time. Set up with the wizard describes the step, and Add a blog to your AI-built website has the prompts and the fixes for common receiver errors.

What happens next

  • Generated posts appear under your site’s Posts in the portal, waiting for review. Publishing a post makes it available on the Delivery API — it does not appear on your website by itself, unless you connected Article delivery, which sends it to your site.
  • Your site’s Delivery API page shows the exact web addresses your site uses to fetch published posts, one feed per language you publish in. Send that page to your developer — the technical details live in the Headless delivery API reference.
  • A site on a framework shows Not fetched yet in your Sites list until it first fetches from the Content API, then Connected.
  • Once your site fetches and displays the feed, new posts flow through automatically: campaign runs → you review → publish → your site picks it up.

Common issues

  • “…is already connected to this workspace.” Each domain can be connected once per workspace. Select Open site to go to the existing site. If the domain belongs to an old site you removed, remove it fully first (see Removing a site).
  • The AI builders and My own backend show “Paid plans”. On the Free plan, Structura can’t send articles to your site. Select See plans under the field to upgrade, or pick your framework or Another framework or app to fetch your posts from the Content API for free.
  • Posts are published but my website doesn’t show them. The Delivery API only stores and serves content — your website has to fetch it. Check with your developer that the integration from the Delivery API page is in place, and that your site rebuilds or revalidates when content changes.
  • My blog is in several languages. Run one campaign per language. Each language becomes its own feed on the Delivery API page.

Last verified