Make content
Who writes my pages, posts and ads? Your agent drafts every page, post and ad from your product and your approved terms, and you approve each one before it goes out.
You, to your agent
Write the page for "rent ledger template".
Then make me an ad kit from the dashboard screenshot.
curl -X POST https://api.sb/leaseline.app/content/draft \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"article","brief":"rent ledger template: answer the term and the questions people also ask, and quote the late-rent share across Leaseline accounts"}'
curl -X POST https://api.sb/leaseline.app/files/generate \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"image","prompt":"The Leaseline rent ledger filling in as payments arrive, five ad sizes","references":["files/file_31"],"format":{"sizes":["1:1","4:5","9:16","16:9","1.91:1"]}}'
curl -X POST https://api.sb/leaseline.app/files/generate \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"video","prompt":"The ledger fills itself as rent arrives","references":["files/file_31"],"format":{"seconds":6,"resolution":"768p"}}'
curl -X POST https://api.sb/leaseline.app/files/generate \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"speech","prompt":"Rent comes in, the ledger fills itself. Leaseline tracks every payment, so the spreadsheet can go."}'import { $ } from 'startup-builder'
const page = await $.Content.draft({ kind: 'article', brief: 'rent ledger template: answer the term and the questions people also ask, and quote the late-rent share across Leaseline accounts' }) // one page for an approved term, a few cents
const images = await $.File.generate({ kind: 'image', prompt: 'The Leaseline rent ledger filling in as payments arrive, five ad sizes', references: ['files/ file_31'], format: { sizes: ['1: 1', '4: 5', '9: 16', '16: 9', '1.91: 1'] } }) // five images from your product shot
const clip = await $.File.generate({ kind: 'video', prompt: 'The ledger fills itself as rent arrives', references: ['files/ file_31'], format: { seconds: 6, resolution: '768p' } }) // a six-second clip from the still
const voiceover = await $.File.generate({ kind: 'speech', prompt: 'Rent comes in, the ledger fills itself. Leaseline tracks every payment, so the spreadsheet can go.' }) // the voiceover for the clip
return { page, images, clip, voiceover }
npx startup-builder do Content.draft --json '{"kind":"article","brief":"rent ledger template: answer the term and the questions people also ask, and quote the late-rent share across Leaseline accounts"}'
npx startup-builder do File.generate --json '{"kind":"image","prompt":"The Leaseline rent ledger filling in as payments arrive, five ad sizes","references":["files/file_31"],"format":{"sizes":["1:1","4:5","9:16","16:9","1.91:1"]}}'
npx startup-builder do File.generate --json '{"kind":"video","prompt":"The ledger fills itself as rent arrives","references":["files/file_31"],"format":{"seconds":6,"resolution":"768p"}}'
npx startup-builder do File.generate --json '{"kind":"speech","prompt":"Rent comes in, the ledger fills itself. Leaseline tracks every payment, so the spreadsheet can go."}'{
"name": "do",
"arguments": {
"code": "const page = await $.Content.draft({ kind: 'article', brief: 'rent ledger template: answer the term and the questions people also ask, and quote the late-rent share across Leaseline accounts' }) // one page for an approved term, a few cents\nconst images = await $.File.generate({ kind: 'image', prompt: 'The Leaseline rent ledger filling in as payments arrive, five ad sizes', references: ['files/file_31'], format: { sizes: ['1:1', '4:5', '9:16', '16:9', '1.91:1'] } }) // five images from your product shot\nconst clip = await $.File.generate({ kind: 'video', prompt: 'The ledger fills itself as rent arrives', references: ['files/file_31'], format: { seconds: 6, resolution: '768p' } }) // a six-second clip from the still\nconst voiceover = await $.File.generate({ kind: 'speech', prompt: 'Rent comes in, the ledger fills itself. Leaseline tracks every payment, so the spreadsheet can go.' }) // the voiceover for the clip\nreturn { page, images, clip, voiceover }"
}
}Response200
application/json{
"page": {
"$id": "https: //api.sb/ leaseline.app/ contents/ content_57",
"$type": "Content",
"kind": "article",
"status": "Draft",
"title": "Rent ledger template: track every payment without the spreadsheet",
"path": "/guides/ rent-ledger-template",
"answers": [
"What goes in a rent ledger? ",
"Is a rent ledger the same as a rent roll? ",
"How do I track late rent in a ledger? "
],
"yourFact": "Across 140 Leaseline accounts, 1 in 9 payments arrives after the 5th (records/ record_212)",
…
sample- One ad kit: $0.50 to $0.80
- First run
- Partly works today
- Status
- API
- Runs by
- nothing
- Connect once
What you get
| Field | What it says |
|---|---|
| Draft | The page, post or email itself, in status Draft until you approve it. |
| Term | The approved term the page answers, with the questions people also ask about it. |
| Your fact | One number or story from your own records that no other page has, quoted with the record it reads. |
| Sources | The ranking pages and the pages answer engines cite, so the draft answers what they leave out. |
| Kit | Five images, one clip and one voiceover, each sized for the Venue it runs on. |
| Made from | The prompt and the reference files behind each image, clip and voiceover. |
| Cost | What each piece cost, settled per call. A generation that fails costs nothing. |
How it runs
| When | What happens | Runs by | Your part | Takes |
|---|---|---|---|---|
| Once | Read your product, your Brand and your product shots into one brief | API | approve the brief once | minutes |
| Each approved term | Draft one page that answers the term and the questions people also ask, with one fact from your records (Draft) | API | approve or edit the draft | about 3 minutes of yours a page |
| Each page | Draft the posts that point to it, one per account (Draft) | API | approve the first post from each page | minutes |
| Before ads | Make five images, a six-second clip and a voiceover from your product shots (Ad kit) | API | approve the kit once | minutes |
| Week 6 | Rewrite the pages ranking 8 to 30 against the pages above them (Draft) | API | approve each rewrite | weeks for the new rank to show |
Jobs inside it
Where and how it runs
| Where it works | How it runs | Connect once |
|---|---|---|
| your own Startup | API | nothing |
Your agent acts as you on every Venue you authorize. Where a Venue has no API, a browser agent signs in as you and does the steps.
Plays that use it
| Play | Strategy that runs it |
|---|---|
| Paid search | Paid |
| Paid social | Paid |
| Editorial SEO | Paid, Passive |
| Answer engine optimization | Passive |
Reference
| Tool | Runs today |
|---|---|
POST /{namespace}/content/draft | Coming |
POST /{namespace}/files/generate | Coming |
POST /{namespace}/videos/draft | Coming |
POST /{namespace}/voices/clone | Coming |
Compiled, not written: edit the records it reads (catalog/make-content), then regenerate. Every step runs from a sentence or a line of code. In your words: the CRM words you know, and where each lives here.