GunSpec

Content

Resource class for the GunSpec content feeds. Instantiated internally by the GunSpec client and exposed as client.content.

Optional AuthExplorer+

List published changelog entries, newest first.

listChangelog(params?: ListChangelogParams): Promise<PaginatedResponse<ChangelogEntry>>
GET/v1/changelog

  • stringheader

    Optional. Without a key this endpoint answers under the public policy; a key raises your limits and unlocks plan-gated fields. Authorization: Bearer <key> is accepted in its place.

  • integerdefault1

    Page number, from 1 to 10,000

    Range
    1 – 10000
    Example
  • integerdefault20

    Items per page (max 100)

    Range
    1 – 100
    Example
  • string

    Filter by entry category

    Accepts
    Max length
    60

  • ChangelogEntry[]

    One page of results

  • string

    Slug of the entry, taken from the file it was authored in.

  • string

    Entry headline.

  • string

    Entry body, in Markdown.

  • string | null

    What kind of change: feature, improvement, bugfix, data, breaking.

  • string

    When it was published, ISO 8601.

  • integer

    Integer flag, 1 when the entry is live. The public feed only returns published entries, so this is 1 on every row a consumer sees.

  • string

    When the record was first added, YYYY-MM-DD HH:MM:SS in UTC.

  • string

    When it last changed, ISO 8601.

  • number

    Current page number

  • number

    Items per page

  • number

    Total matching records (Builder and above)

  • 400VALIDATION_ERRORValidation error
  • 429RATE_LIMITEDRate limit exceeded
  • 500INTERNAL_ERRORUnexpected server error

Minimum tier
Explorer+
Monthly quota
200/mo
Rate limit
10/min
Daily cap
50

Figures shown are for this endpoint's minimum tier. Higher tiers raise every limit.

Optional AuthExplorer+

client.content.getChangelogEntry()

Get a single changelog entry.

getChangelogEntry(id: string | number): Promise<APIResponse<ChangelogEntry>>
GET/v1/changelog/{id}

  • stringheader

    Optional. Without a key this endpoint answers under the public policy; a key raises your limits and unlocks plan-gated fields. Authorization: Bearer <key> is accepted in its place.

  • stringrequired

    Changelog entry id

    Example

  • ChangelogEntry

    The response payload

  • string

    Slug of the entry, taken from the file it was authored in.

  • string

    Entry headline.

  • string

    Entry body, in Markdown.

  • string | null

    What kind of change: feature, improvement, bugfix, data, breaking.

  • string

    When it was published, ISO 8601.

  • integer

    Integer flag, 1 when the entry is live. The public feed only returns published entries, so this is 1 on every row a consumer sees.

  • string

    When the record was first added, YYYY-MM-DD HH:MM:SS in UTC.

  • string

    When it last changed, ISO 8601.

  • 400VALIDATION_ERRORValidation error
  • 404NOT_FOUNDResource not found
  • 429RATE_LIMITEDRate limit exceeded
  • 500INTERNAL_ERRORUnexpected server error

Minimum tier
Explorer+
Monthly quota
200/mo
Rate limit
10/min
Daily cap
50

Figures shown are for this endpoint's minimum tier. Higher tiers raise every limit.

Optional AuthExplorer+

List published blog posts, newest first.

listBlogPosts(params?: ListBlogPostsParams): Promise<PaginatedResponse<BlogPost>>
GET/v1/blog

  • stringheader

    Optional. Without a key this endpoint answers under the public policy; a key raises your limits and unlocks plan-gated fields. Authorization: Bearer <key> is accepted in its place.

  • integerdefault1

    Page number, from 1 to 10,000

    Range
    1 – 10000
    Example
  • integerdefault20

    Items per page (max 100)

    Range
    1 – 100
    Example
  • string

    Filter by post category

    Max length
    60
    Example

  • BlogPost[]

    A published post. Both endpoints serve the stored row; body is markdown.

  • string

    Opaque post id. A string, not a number: posts are keyed like every other authored record here.

  • string

    URL-safe slug, and what /v1/blog/{slug} addresses.

  • string

    Post headline.

  • string | null

    One-line description, for a card or a feed. Null where the author wrote none.

  • string | null

    The post itself, as markdown.

  • string | null

    Path of the hero image on the assets CDN, or null. Prefix it with the assets host to fetch.

  • string | null

    Editorial category, e.g. guides. Null where the post has none.

  • string

    Always published on these endpoints: a draft is not served publicly.

  • string | null

    When the post was published, which is what the list orders by. Null on a post never given a date.

  • string

    When the post was first written, YYYY-MM-DD HH:MM:SS in UTC. Not the publication date: postedAt is.

  • string

    When the post was last edited, YYYY-MM-DD HH:MM:SS in UTC.

  • number

    Current page number

  • number

    Items per page

  • number

    Total matching records (Builder and above)

  • 400VALIDATION_ERRORValidation error
  • 429RATE_LIMITEDRate limit exceeded
  • 500INTERNAL_ERRORUnexpected server error

Minimum tier
Explorer+
Monthly quota
200/mo
Rate limit
10/min
Daily cap
50

Figures shown are for this endpoint's minimum tier. Higher tiers raise every limit.

Optional AuthExplorer+

client.content.getBlogPost()

Get a single blog post, including its full body.

getBlogPost(slug: string): Promise<APIResponse<BlogPost>>
GET/v1/blog/{slug}

  • stringheader

    Optional. Without a key this endpoint answers under the public policy; a key raises your limits and unlocks plan-gated fields. Authorization: Bearer <key> is accepted in its place.

  • stringrequired

    Blog post slug

    Accepts
    a lowercase slug: letters, digits and hyphens
    Example

  • object

    The response payload.

  • BlogPost

    A published post. Both endpoints serve the stored row; body is markdown.

  • string

    Opaque post id. A string, not a number: posts are keyed like every other authored record here.

  • string

    URL-safe slug, and what /v1/blog/{slug} addresses.

  • string

    Post headline.

  • string | null

    One-line description, for a card or a feed. Null where the author wrote none.

  • string | null

    The post itself, as markdown.

  • string | null

    Path of the hero image on the assets CDN, or null. Prefix it with the assets host to fetch.

  • string | null

    Editorial category, e.g. guides. Null where the post has none.

  • string

    Always published on these endpoints: a draft is not served publicly.

  • string | null

    When the post was published, which is what the list orders by. Null on a post never given a date.

  • string

    When the post was first written, YYYY-MM-DD HH:MM:SS in UTC. Not the publication date: postedAt is.

  • string

    When the post was last edited, YYYY-MM-DD HH:MM:SS in UTC.

  • 400VALIDATION_ERRORValidation error
  • 404NOT_FOUNDResource not found
  • 429RATE_LIMITEDRate limit exceeded
  • 500INTERNAL_ERRORUnexpected server error

Minimum tier
Explorer+
Monthly quota
200/mo
Rate limit
10/min
Daily cap
50

Figures shown are for this endpoint's minimum tier. Higher tiers raise every limit.

Optional AuthExplorer+

The notices the website is showing right now, best first. Public, cached for a minute at the edge. An empty list means no banner.

listNotices(): Promise<APIResponse<{ notices: SiteNotice[] }>>
GET/v1/notices

  • stringheader

    Optional. Without a key this endpoint answers under the public policy; a key raises your limits and unlocks plan-gated fields. Authorization: Bearer <key> is accepted in its place.

  • object

    The response payload.

  • SiteNotice[]

    Published notices inside their display window, best first: highest priority, then newest.

  • string

    Row id of the notice. The website keys its dismissal on this, so a new notice is seen even by a reader who dismissed the last one.

  • string

    Short label shown before the message.

  • string

    The sentence shown in the banner.

  • string

    A second line, shown under the highlight where one is set.

  • NoticeVariant

    How prominently a site notice is shown.

  • string | null

    Text of the call to action, or null when the banner has none.

  • string | null

    Where the call to action goes.

  • integer

    Higher sorts first. Ties break on newest.

  • string | null

    When the notice becomes visible. Null means immediately.

  • string | null

    When it stops being shown. This is why notices are rows rather than copy: an end date is the only version of "take this down later" that does not rely on somebody remembering.

  • 400VALIDATION_ERRORValidation error
  • 429RATE_LIMITEDRate limit exceeded
  • 500INTERNAL_ERRORUnexpected server error

Minimum tier
Explorer+
Monthly quota
200/mo
Rate limit
10/min
Daily cap
50

Figures shown are for this endpoint's minimum tier. Higher tiers raise every limit.