Skip to content

Draft an entry from commit subjects

POST
/v1/changelog/drafts

Sorts commit subjects (as git log --pretty=%s prints them; a leading short hash and a trailing ”(#123)” are ignored) into a draft: conventional commits become New (feat), Improved (perf, refactor), Fixed (fix), Security and Breaking changes (a ”!” or BREAKING CHANGE); housekeeping (chore, ci, build, test, style, docs), merges, reverts and version bumps are left out and counted in skipped. No AI runs on our side. The entry is always a draft: nothing is public, emailed, posted or counted until someone publishes it. dry_run: true returns the draft without creating anything. Up to 500 lines. npx nordva changelog and the MCP tool draft_changelog_from_commits call this.

Auth: Secret key only. The dashboard has the same operation under /v1/dashboard/changelog.

object
commits
required
Array<string>
>= 1 items <= 500 items
title
string
>= 1 characters <= 200 characters
version
string
>= 1 characters <= 64 characters
category
string
Allowed values: feature fix improvement security breaking
dry_run
boolean

With dry_run: the draft only, entry is null.

The draft entry, and the draft text

object
data
object
entry
One of:
object
id
required
string
/^ce_[0-9A-HJKMNP-TV-Z]{26}$/
project_id
required
string
/^prj_[0-9A-HJKMNP-TV-Z]{26}$/
title
required
string
>= 1 characters <= 200 characters
body_markdown
required
string
version
required
Any of:
string
category
required
string
Allowed values: feature fix improvement security breaking
status
required
string
Allowed values: draft published scheduled archived
scheduled_at
required
Any of:
string format: date-time
/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$/
published_at
required
Any of:
string format: date-time
/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$/
created_at
required
string format: date-time
/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$/
updated_at
required
string format: date-time
/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$/
notify_subscribers
required
boolean
notify_in_app
required
boolean
notify_chat
required
boolean
public_url
required
string format: uri
cover_image_url
required
Any of:
string
cta_label
required
Any of:
string
cta_url
required
Any of:
string
labels
required
Array<object>
object
id
required
string
slug
required
string
name
required
string
colour
required
string
Allowed values: gray red orange amber green teal blue indigo purple pink
audience
required
string
Allowed values: public signed_in segment
segment
required
Any of:
object
match
string
default: all
Allowed values: all any
rules
required
Array
>= 1 items <= 10 items
One of:
object
type
required
string
key
required
string
/^[a-z][a-z0-9_]{0,39}$/
op
required
string
Allowed values: eq neq in exists
value
Any of:
string
<= 200 characters
pinned
required
boolean
expires_at
required
Any of:
string format: date-time
/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$/
announcement
required
Any of:
object
style
required
string
Allowed values: modal banner toast
until
required
string format: date-time
/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$/
active
required
boolean
draft
object
title
string
body_markdown
string
category
string
version
string | null
used
integer
skipped
integer
error
null
meta
object

Error envelope. See error.code for the discriminator.

object
data
required
null
error
required
object
code
required
string
message
required
string
remediation
required
string
doc_url
string format: uri
param
string
request_id
string
meta
object
key
additional properties

Error envelope. See error.code for the discriminator.

object
data
required
null
error
required
object
code
required
string
message
required
string
remediation
required
string
doc_url
string format: uri
param
string
request_id
string
meta
object
key
additional properties

Error envelope. See error.code for the discriminator.

object
data
required
null
error
required
object
code
required
string
message
required
string
remediation
required
string
doc_url
string format: uri
param
string
request_id
string
meta
object
key
additional properties

Error envelope. See error.code for the discriminator.

object
data
required
null
error
required
object
code
required
string
message
required
string
remediation
required
string
doc_url
string format: uri
param
string
request_id
string
meta
object
key
additional properties