Norn APIThe API
PreviewIdeas
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
#| Field | What it is |
|---|---|
rank | Norn’s order. 1 is the idea it would post first. |
title | A short name for the idea, for lists and dashboards. |
hook | The opening line: the words that make someone stop scrolling. |
angle | The take on the subject, and why it suits this audience. |
why_now | Why the idea fits this moment: a season, a date, something new at the business. Evergreen when it works any time. |
format | The format the idea is meant for. |
sources | Where the idea comes from, with the words it relies on quoted. |
outline | An opening, the key points, a call to action and a note on the visuals. |
prompt | The 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
#| Format | Meant for |
|---|---|
image | One picture with a caption. |
carousel | Two to ten slides that tell a story or teach something step by step. |
video | A short vertical video, such as a reel. |
text | Words 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
#/v1/ideasPreviewBody
brandstringRequiredThe id of a brand whose
statusisready.countintegerOptionalHow many ideas to return, from 1 to 10.
Default:
3formatsstring[]OptionalOnly suggest ideas in these formats. All formats when you leave it out.
One of:
image,carousel,video,textfocusstringOptionalAnything 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.
datestringOptionalPlan for another day, as
YYYY-MM-DD, up to 45 days ahead.why_nowis 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
#/v1/ideas/{batch_id}PreviewReturns 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
idstringRequiredStarts with
batch_.objectstringRequiredAlways
idea_batch.statusstringRequiredWhere the batch is. Only a
donebatch has ideas.One of:
thinking,done,failedmodelstringRequiredThe model that answered, such as
norn-preview.brandstringRequiredThe brand the ideas are for.
dataidea[]RequiredThe ideas, best first. Empty until the batch is
done.left_outstring[]RequiredIdeas Norn considered and left out because nothing backed them. Often empty.
errorstring | nullRequiredWhy the batch failed.
nullotherwise.created_atstringRequiredWhen you asked, in ISO 8601.
done_atstring | nullRequiredWhen Norn finished, in ISO 8601.
nullwhile it is thinking.
The idea object
#Fields
idstringRequiredStarts with
idea_. Send it back with feedback.objectstringRequiredAlways
idea.rankintegerRequiredNorn’s order, from
1.titlestringRequiredA short name for the idea.
hookstringRequiredThe opening line.
anglestringRequiredThe take on the subject.
why_nowstringRequiredWhy it fits the moment, or
Evergreen.formatstringRequiredThe format it is meant for.
One of:
image,carousel,video,textsourcesobject[]RequiredWhere the idea comes from. Up to four.
typestringRequiredfocusmeans the idea is built on what you sent infocus.One of:
website,review,product,focustitlestringRequiredA name for the source, such as a page title.
urlstring | nullRequiredWhere to see it, when it is a page.
quotestring | nullRequiredThe words the idea relies on, quoted exactly.
outlineobjectRequiredThe idea laid out for a writer or a designer.
openingstringRequiredThe first line.
key_pointsstring[]RequiredWhat the post has to get across, one to five points.
call_to_actionstringRequiredWhat the reader is asked to do.
visualstringRequiredA note on the picture, the slides or the video.
promptstringRequiredThe 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.