Skip to content

Commit ebefd5f

Browse files
Document scheduled_publish_at/unpublish_at on Articles API (Preview) (#540)
* Add scheduled_publish_at / scheduled_unpublish_at to Articles API (Preview) Documents the new scheduling fields gated behind AddArticleScheduledPublishing in the Preview spec. Requests accept ISO 8601 strings; responses return Unix epoch integers. Adds 400 examples for scheduling validation conflicts on POST and PUT. Companion to intercom/intercom#515420. * Apply review fixes to scheduled_*_at field descriptions Two follow-up fixes from review of PR #540: 1. Replace INVALID_PARAMETER (Ruby constant name) with parameter_invalid (wire-format code) in all four scheduled_publish_at / scheduled_unpublish_at field descriptions across create_article_request and update_article_request. The wire-format code is what customers observe in the JSON error body. 2. Document that timestamps in the past or equal to the current time are rejected with 400 parameter_invalid — the value must be strictly in the future. Verified against app/services/content_service/commands/scheduled_content_update/create_or_update.rb:30 (`change_at <= Time.current`). Companion to intercom/intercom#515420.
1 parent 658b314 commit ebefd5f

1 file changed

Lines changed: 128 additions & 0 deletions

File tree

descriptions/0/api.intercom.io.yaml

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1344,6 +1344,23 @@ paths:
13441344
- code: parameter_not_found
13451345
message: author_id must be in the main body or default locale
13461346
translated_content object
1347+
Scheduling conflict:
1348+
value:
1349+
type: error.list
1350+
request_id: 8d11c1f4-0a55-4f7f-8e2f-4f6c1f3b2c11
1351+
errors:
1352+
- code: parameter_invalid
1353+
field: scheduled_publish_at
1354+
message: Cannot schedule a publish while setting state to draft
1355+
Conflicting pending schedules:
1356+
value:
1357+
type: error.list
1358+
request_id: 0a82a3a4-94f1-4f1a-bea1-aaf41a8d3c22
1359+
errors:
1360+
- code: parameter_invalid
1361+
field: scheduled_unpublish_at
1362+
message: Cannot set scheduled_publish_at and scheduled_unpublish_at
1363+
in the same request
13471364
schema:
13481365
"$ref": "#/components/schemas/error"
13491366
'401':
@@ -1534,6 +1551,39 @@ paths:
15341551
ai_sales_agent_availability: true
15351552
schema:
15361553
"$ref": "#/components/schemas/article"
1554+
'400':
1555+
description: Bad Request
1556+
content:
1557+
application/json:
1558+
examples:
1559+
Scheduling conflict:
1560+
value:
1561+
type: error.list
1562+
request_id: 8d11c1f4-0a55-4f7f-8e2f-4f6c1f3b2c11
1563+
errors:
1564+
- code: parameter_invalid
1565+
field: scheduled_publish_at
1566+
message: Cannot schedule a publish while setting state to draft
1567+
Conflicting pending schedules:
1568+
value:
1569+
type: error.list
1570+
request_id: 0a82a3a4-94f1-4f1a-bea1-aaf41a8d3c22
1571+
errors:
1572+
- code: parameter_invalid
1573+
field: scheduled_unpublish_at
1574+
message: Cannot set scheduled_publish_at and scheduled_unpublish_at
1575+
in the same request
1576+
Unpublish before publish:
1577+
value:
1578+
type: error.list
1579+
request_id: 11aa22bb-33cc-44dd-55ee-66ff77889900
1580+
errors:
1581+
- code: parameter_invalid
1582+
field: scheduled_unpublish_at
1583+
message: Cannot schedule unpublish for an article that has never
1584+
been published
1585+
schema:
1586+
"$ref": "#/components/schemas/error"
15371587
'404':
15381588
description: Article Not Found
15391589
content:
@@ -23828,6 +23878,26 @@ components:
2382823878
means all users and visitors can view it; `restricted` indicates a custom audience
2382923879
ruleset. For multilingual articles, this is the article-level audience.
2383023880
example: everyone
23881+
scheduled_publish_at:
23882+
type: integer
23883+
format: date-time
23884+
nullable: true
23885+
readOnly: true
23886+
description: >-
23887+
The Unix timestamp (in seconds) at which the article is scheduled to be
23888+
published. `null` when no publish is scheduled. Mutually exclusive with
23889+
`scheduled_unpublish_at` — at most one pending schedule exists per article.
23890+
example: 1769443200
23891+
scheduled_unpublish_at:
23892+
type: integer
23893+
format: date-time
23894+
nullable: true
23895+
readOnly: true
23896+
description: >-
23897+
The Unix timestamp (in seconds) at which the article is scheduled to be
23898+
unpublished. `null` when no unpublish is scheduled. Mutually exclusive
23899+
with `scheduled_publish_at` — at most one pending schedule exists per article.
23900+
example: 1769443200
2383123901
internal_article_list_item:
2383223902
title: Internal Articles
2383323903
type: object
@@ -27506,6 +27576,35 @@ components:
2750627576
description: Whether the article should be available for AI Sales Agent.
2750727577
For multilingual articles, this sets the default language's availability.
2750827578
example: true
27579+
scheduled_publish_at:
27580+
type: string
27581+
format: date-time
27582+
nullable: true
27583+
description: >-
27584+
ISO 8601 timestamp at which to schedule a future publish of the article.
27585+
When set together with `state: "published"`, the article is scheduled
27586+
instead of published immediately. Setting `null` cancels a pending
27587+
publish schedule. Timestamps in the past or equal to the current time
27588+
are rejected with 400 `parameter_invalid` — the value must be strictly
27589+
in the future. Combining with `state: "draft"` returns 400
27590+
`parameter_invalid`. Sending in the same request as
27591+
`scheduled_unpublish_at` returns 400 — only one pending schedule per
27592+
article. Empty string returns 400 `parameter_invalid`.
27593+
example: '2026-12-31T09:00:00Z'
27594+
scheduled_unpublish_at:
27595+
type: string
27596+
format: date-time
27597+
nullable: true
27598+
description: >-
27599+
ISO 8601 timestamp at which to schedule a future unpublish of the article.
27600+
Setting `null` cancels a pending unpublish schedule. Timestamps in the
27601+
past or equal to the current time are rejected with 400
27602+
`parameter_invalid` — the value must be strictly in the future. Rejected
27603+
with 400 `parameter_invalid` if the article has never been published.
27604+
Sending in the same request as `scheduled_publish_at` returns 400 — only
27605+
one pending schedule per article. Empty string returns 400
27606+
`parameter_invalid`.
27607+
example: '2026-12-31T17:00:00Z'
2750927608
required:
2751027609
- title
2751127610
- author_id
@@ -34584,6 +34683,35 @@ components:
3458434683
description: Whether the article should be available for AI Sales Agent.
3458534684
For multilingual articles, this sets the default language's availability.
3458634685
example: true
34686+
scheduled_publish_at:
34687+
type: string
34688+
format: date-time
34689+
nullable: true
34690+
description: >-
34691+
ISO 8601 timestamp at which to schedule a future publish of the article.
34692+
When set together with `state: "published"`, the article is scheduled
34693+
instead of published immediately. Setting `null` cancels a pending
34694+
publish schedule. Timestamps in the past or equal to the current time
34695+
are rejected with 400 `parameter_invalid` — the value must be strictly
34696+
in the future. Combining with `state: "draft"` returns 400
34697+
`parameter_invalid`. Sending in the same request as
34698+
`scheduled_unpublish_at` returns 400 — only one pending schedule per
34699+
article. Empty string returns 400 `parameter_invalid`.
34700+
example: '2026-12-31T09:00:00Z'
34701+
scheduled_unpublish_at:
34702+
type: string
34703+
format: date-time
34704+
nullable: true
34705+
description: >-
34706+
ISO 8601 timestamp at which to schedule a future unpublish of the article.
34707+
Setting `null` cancels a pending unpublish schedule. Timestamps in the
34708+
past or equal to the current time are rejected with 400
34709+
`parameter_invalid` — the value must be strictly in the future. Rejected
34710+
with 400 `parameter_invalid` if the article has never been published.
34711+
Sending in the same request as `scheduled_publish_at` returns 400 — only
34712+
one pending schedule per article. Empty string returns 400
34713+
`parameter_invalid`.
34714+
example: '2026-12-31T17:00:00Z'
3458734715
update_internal_article_request:
3458834716
description: You can Update an Internal Article
3458934717
type: object

0 commit comments

Comments
 (0)