Norn API· Ideas

Norn APIThe API

Preview

Ideas

Ask Norn for ideas and get them back ranked, each with a hook, an angle, why it fits now, its sources and a prompt for a generative model.

An idea is the decision before the writing. It says what a post should be about, how to come at it, which format suits it and why now. It is not the finished post: Norn leaves the writing to whichever model does it best.

What an idea holds

#
FieldWhat it is
rankNorn’s order. 1 is the idea it would post first.
titleA short name for the idea, for lists and dashboards.
hookThe opening line: the words that make someone stop scrolling.
angleThe take on the subject, and why it suits this audience.
why_nowWhy the idea fits this moment: a season, a date, something new at the business. Evergreen when it works any time.
formatThe format the idea is meant for.
sourcesWhere the idea comes from, with the words it relies on quoted.
outlineAn opening, the key points, a call to action and a note on the visuals.
promptThe whole idea, written as instructions for a generative model.

Every idea shows its sources

#

Ideas are built from what the brand’s own material says. When an idea makes a claim about the business, it cites the page, review or product the claim comes from, and quotes the words. A claim you cannot trace is a claim you cannot post, so this is what lets a person, or your code, check an idea before it goes out.

When Norn cannot back an idea, it leaves the idea out and says so in left_out. That list is worth reading: it often names a page the website is missing.

Formats

#
FormatMeant for
imageOne picture with a caption.
carouselTwo to ten slides that tell a story or teach something step by step.
videoA short vertical video, such as a reel.
textWords only, such as a LinkedIn or Threads post.

Ideas are not tied to a channel. The same idea can become a reel on Instagram and a text post on LinkedIn: write one post per channel from it.

Create ideas

#
POST/v1/ideasPreview

Body

  • brandstringRequired

    The id of a brand whose status is ready.

  • countintegerOptional

    How many ideas to return, from 1 to 10.

    Default: 3

  • formatsstring[]Optional

    Only suggest ideas in these formats. All formats when you leave it out.

    One of: image, carousel, video, text

  • focusstringOptional

    Anything Norn should lean toward, in plain words: a campaign, a launch, a goal for the month. Up to 2,000 characters. Ideas built on it cite it as a source.

  • datestringOptional

    Plan for another day, as YYYY-MM-DD, up to 45 days ahead. why_now is written for that day.

    Default: today

Norn looks through the brand’s material and history before it answers. In Native that usually takes two to six minutes, far longer than an HTTP request should stay open. So the request answers at once with a batch that is still thinking, and the ideas arrive in the same batch when Norn is done.

curl -X POST https://api.native.no/v1/ideas \
  -H "Authorization: Bearer $NATIVE_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "brand": "brand_7Hk2pQ",
  "count": 2,
  "focus": "We want more emergency callouts this winter."
}'

Norn answers 202 Accepted with the batch:

Response

{
  "id": "batch_3Kp9sD",
  "object": "idea_batch",
  "status": "thinking",
  "model": "norn-preview",
  "brand": "brand_7Hk2pQ",
  "data": [],
  "left_out": [],
  "error": null,
  "created_at": "2026-10-11T09:20:00Z",
  "done_at": null
}

Get a batch

#
GET/v1/ideas/{batch_id}Preview

Returns the batch. While status is thinking, ask again every 15 seconds or so. When it is done, the ideas are in data, best first. When it is failed, error says why.

curl https://api.native.no/v1/ideas/batch_3Kp9sD \
  -H "Authorization: Bearer $NATIVE_ACCESS_TOKEN"

Response

{
  "id": "batch_3Kp9sD",
  "object": "idea_batch",
  "status": "done",
  "model": "norn-preview",
  "brand": "brand_7Hk2pQ",
  "data": [
    {
      "id": "idea_4Fd9xW",
      "object": "idea",
      "rank": 1,
      "title": "The Sunday frozen-pipe rescue",
      "hook": "Frozen pipes do not care that it is Sunday. We do.",
      "angle": "Deadpan humour about the worst-timed emergency, ending on proof that the team shows up the same day.",
      "why_now": "Winter is starting in Columbus, and burst pipes come with the first hard frosts.",
      "format": "video",
      "sources": [
        {
          "type": "website",
          "title": "Emergency plumbing",
          "url": "https://pipedream.example/emergency",
          "quote": "Same-day callouts, seven days a week."
        },
        {
          "type": "review",
          "title": "Review from a customer in Clintonville",
          "url": null,
          "quote": "They came on a Sunday and had the water back on in an hour."
        },
        {
          "type": "focus",
          "title": "Your focus",
          "url": null,
          "quote": "We want more emergency callouts this winter."
        }
      ],
      "outline": {
        "opening": "Frozen pipes do not care that it is Sunday. We do.",
        "key_points": [
          "A burst pipe from a real Sunday callout, before and after",
          "Running water again within the hour"
        ],
        "call_to_action": "Book a same-day visit at pipedream.example.",
        "visual": "A 15-second vertical video: the split pipe, a deadpan look to camera, then the repaired pipe with the water running."
      },
      "prompt": "Write a 15-second vertical video script for Pipe Dream Plumbing, a family plumber in Columbus, Ohio. Voice: dry and joking, never at the customer’s expense. Open with: \"Frozen pipes do not care that it is Sunday. We do.\" Show a burst pipe from a real Sunday callout, then the repair and the water running again. Say that they come out the same day, seven days a week. End with: \"Book a same-day visit at pipedream.example.\""
    },
    {
      "id": "idea_9Qm3vT",
      "object": "idea",
      "rank": 2,
      "title": "Guess the leak",
      "hook": "One of these three drips is quietly running up your water bill. Which one?",
      "angle": "A quiz built from real callouts that teaches people to spot the costly leak, with the answer on the last slide.",
      "why_now": "Evergreen",
      "format": "carousel",
      "sources": [
        {
          "type": "website",
          "title": "Leak detection",
          "url": "https://pipedream.example/leaks",
          "quote": "Most leaks we find have been dripping for months."
        }
      ],
      "outline": {
        "opening": "One of these three drips is quietly running up your water bill. Which one?",
        "key_points": [
          "Three close-ups from real callouts: a tap, a toilet, a pipe joint",
          "The answer, and why it is the one that costs the most"
        ],
        "call_to_action": "Not sure about yours? Book a leak check.",
        "visual": "Four slides: three close-up photos of drips, then the answer."
      },
      "prompt": "Write a four-slide Instagram carousel for Pipe Dream Plumbing, a family plumber in Columbus, Ohio. Voice: dry and joking, never at the customer’s expense. Slide 1 asks: \"One of these three drips is quietly running up your water bill. Which one?\" Slides 2 to 4 show a dripping tap, a running toilet and a weeping pipe joint from real callouts. The last slide reveals the answer and explains why it costs the most. End with: \"Not sure about yours? Book a leak check.\""
    }
  ],
  "left_out": [
    "A post about water heater rebates: nothing on the website or in your focus backs it."
  ],
  "error": null,
  "created_at": "2026-10-11T09:20:00Z",
  "done_at": "2026-10-11T09:24:12Z"
}

The batch object

#

Fields

  • idstringRequired

    Starts with batch_.

  • objectstringRequired

    Always idea_batch.

  • statusstringRequired

    Where the batch is. Only a done batch has ideas.

    One of: thinking, done, failed

  • modelstringRequired

    The model that answered, such as norn-preview.

  • brandstringRequired

    The brand the ideas are for.

  • dataidea[]Required

    The ideas, best first. Empty until the batch is done.

  • left_outstring[]Required

    Ideas Norn considered and left out because nothing backed them. Often empty.

  • errorstring | nullRequired

    Why the batch failed. null otherwise.

  • created_atstringRequired

    When you asked, in ISO 8601.

  • done_atstring | nullRequired

    When Norn finished, in ISO 8601. null while it is thinking.

The idea object

#

Fields

  • idstringRequired

    Starts with idea_. Send it back with feedback.

  • objectstringRequired

    Always idea.

  • rankintegerRequired

    Norn’s order, from 1.

  • titlestringRequired

    A short name for the idea.

  • hookstringRequired

    The opening line.

  • anglestringRequired

    The take on the subject.

  • why_nowstringRequired

    Why it fits the moment, or Evergreen.

  • formatstringRequired

    The format it is meant for.

    One of: image, carousel, video, text

  • sourcesobject[]Required

    Where the idea comes from. Up to four.

    • typestringRequired

      focus means the idea is built on what you sent in focus.

      One of: website, review, product, focus

    • titlestringRequired

      A name for the source, such as a page title.

    • urlstring | nullRequired

      Where to see it, when it is a page.

    • quotestring | nullRequired

      The words the idea relies on, quoted exactly.

  • outlineobjectRequired

    The idea laid out for a writer or a designer.

    • openingstringRequired

      The first line.

    • key_pointsstring[]Required

      What the post has to get across, one to five points.

    • call_to_actionstringRequired

      What the reader is asked to do.

    • visualstringRequired

      A note on the picture, the slides or the video.

  • promptstringRequired

    The idea written as instructions for a generative model, in the brand’s voice and language.

Languages

#

Ideas are written in the brand’s language, whichever it is. Norn does not check that an idea came back in that language yet. If one did not, turn it down with the reason wrong_language, so Norn learns from it.

The Norn API is not open yet

Access opens from the waitlist. Join it and we will email you when your access is ready.

Join the waitlist