Skip to content

Add descriptions/2.16 spec#604

Merged
geetikabagga merged 25 commits into
mainfrom
geetikabagga/openapi-v2.16
Jul 24, 2026
Merged

Add descriptions/2.16 spec#604
geetikabagga merged 25 commits into
mainfrom
geetikabagga/openapi-v2.16

Conversation

@geetikabagga

@geetikabagga geetikabagga commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds API version 2.16 as descriptions/2.16/api.intercom.io.yaml, built from the 2.15 baseline plus the APIs and fields approved for graduation from Preview. This is add-only: the Preview spec (descriptions/0) and the Fern preview overrides are left untouched, matching prior version cuts (2.13 / 2.14 / 2.15). Graduated surfaces remain in Preview in their newest form.

Graduated into 2.16

New endpoints

  • Activity Logs search — POST /admins/activity_logs/search
  • Activity Log Event Types — GET /admins/activity_log_event_types
  • Macros — /macros, /macros/{id}
  • Data Connectors API
  • Side Conversations API
  • Help Center Redirects API
  • Content Snippets API, Content search & bulk actions
  • Office Hours (schedules + exceptions)
  • Article drafts, version history, scheduled publishing
  • WhatsApp message send + status
  • Company Notes API, dedicated Conversation Attributes API

Schema & field graduations

Promoted field/schema updates across articles, audiences, content, contacts, conversations, tickets, office hours, and help center (e.g. audience_ids, agent-availability fields, body_markdown, merge_history, external_references, channel, drop_reason, email_domain).

Breaking changes (10)

Contact owner_id → string; conversation unassigned assignee ids → 0; ticket assignee ids → integer; conversation.priority granular levels; article parent_ids replaces parent_id/parent_type; POST /contacts/merge requires duplicates; POST /contacts/search validates sort.order; merged contacts return 410 Gone; POST /tags response status; Reporting Data Export includes no-reply conversations.

Verification

  • info.version / intercom_version = 2.16
  • 2.16 = 2.15 baseline + graduation set (no invented endpoints; 0 removed paths vs 2.15)
  • YAML parses; no dangling $ref
  • Preview (descriptions/0) and Fern overrides unchanged vs base (add-only)
  • WhatsApp tag declared in the top-level tags array

Generated with Claude Code

geetikabagga and others added 18 commits July 22, 2026 17:06
Start v2.16 as a copy of the 2.15 spec so it advertises nothing not yet served;
graduated endpoints/fields are layered in via follow-up commits.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Contact owner_id (string), conversation priority levels, conversation
unassigned assignee (0), ticket assignee (integer), article parent_ids,
dedicated Conversation Attributes API, tags skip-missing, reporting
no-reply conversations, contacts/merge duplicate validation.
- Attachment files on admin ticket reply
- Change ticket type endpoint
- Link/unlink conversation to ticket endpoints
- previous_ticket_state_id on ticket response
- ticket_state_id on convert-conversation-to-ticket request

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…spec

- Content Snippets API (with agent-availability, audience_ids, markdown fields)
- Content Search API
- Content bulk actions API
- Content tagging endpoints (articles, internal articles, content snippets)
- Audiences API
- Data Connectors API

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Deleted conversations list, merge conversation, side conversations endpoints
- Sales agent, channel, external references, QA evaluations on conversations
- brand_id on conversation create; reply_to on conversation source
- retain_metrics parameter on conversation delete
- Conversation source author reshape; display_as plaintext behavior

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Contact banners API; contact merge history (endpoint, field, include_merge_history param)
- email_verified on contact create/update; company notes API and notes field
- update_last_request_at on company create

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…into v2.16 OpenAPI spec

- Admin role in responses; macros API; message status (WhatsApp) endpoints
- Team metrics API; office hours schedules & exceptions APIs
- Admin activity log event types & search endpoints
- Email message metadata history on conversation source
- reporting data export qualified_id

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…spec

- Article version history API; article fin statistics
- Agent availability, audit/suggestion, help-center audience, scheduled publishing fields
- audience_ids on articles and internal articles
- default & locales on help center response

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copies the Preview /contacts/search surface verbatim into 2.16: adds the
contact_search_request schema (sort.order enum ascending|descending),
repoints the requestBody $ref off shared search_request, adds the 400
invalid_sort_order response, and aligns the timestamp prose + adds the
formatted_phone searchable-field row.
Copies the Preview help_center redirects surface verbatim: the
/help_center/help_centers/{id}/redirects list+create and
/redirects/{id} retrieve+delete operations, plus the
help_center_redirect(_list), create_help_center_redirect_request and
deleted_help_center_redirect_object schemas. Distinct from the held
AddArticleUrlRedirects (different resource, schemas and Rails classes).
Adds the body_markdown property (verbatim from Preview) to the 7 article
schemas that gained it: article_content, article_list_item,
internal_article_list_item, and the create/update (internal_)article
request schemas, plus the accompanying 'in HTML / mutually exclusive with
body_markdown' body-description text. Surgical inserts only — held fields
(folder_id, parent_ids) and Preview-only draft fields are deliberately
excluded.
A merged contact now returns 410 Gone with a Link header to the canonical
contact on GET /contacts/{id} and GET /contacts/find_by_external_id/{id}.
Copies Preview's 410 'Contact Merged' response block + the 'Merged contacts
return 410 Gone' description on both retrieve operations, replacing the old
404 wording. Surgical — leaves unrelated formatted_phone example drift and
the pre-existing contact_id/id path-param naming untouched.
Replaces the 2.15-inherited GET /custom_object_instances/{type} operation
(getCustomObjectInstancesByExternalId, external_id required, single-object
response, ObjectNotFound) with Preview's listAll version (external_id
optional, custom_object_instances_paginated_list response, TypeNotFound),
and adds the custom_object_instances_paginated_list schema it references
(its pages_link + custom_object_instance refs already exist in 2.16).
… /messages placement

Graduate the AddWhatsappMessageSupport 2.16-cut change (send-path via the
messages endpoint), copying only the whatsapp surfaces from Preview and
excluding the still-held SMS support:
- createMessage operation description: add whatsapp, keep sms out
- create_message_request.message_type: add `whatsapp` enum value + description
  (sms omitted)
- create_message_request anyOf: add only the `whatsapp` branch (skip `sms`)
- requestBody example: add only admin_whatsapp_message_created (skip
  admin_sms_message_created and invalid_body_supplied_for_sms_message)

Also fix a pre-existing structural defect introduced in 728bd98: the
`/messages` path key had been left empty and the createMessage operation was
mislocated as a POST under `/messages/status`. Relocated the operation back
under `/messages`, restoring the Preview/2.15 layout (/messages -> post,
/messages/status -> get, /messages/whatsapp/status -> get).

Verified: YAML parses, all internal $refs resolve, whatsapp surfaces are
byte-identical to Preview, and no SMS surfaces leaked.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Full structural sweep of descriptions/2.16 found the same defect class fixed
for POST /messages in d50a0ae, present in 10 more paths (0 in 2.15 and
Preview). During earlier graduation commits, each newly-inserted path
appended an orphaned operation as a duplicate HTTP-method key under a
neighbouring path, leaving the correct path key null.

Impact before fix: 10 endpoints dead at their correct URL, ~8 newly-graduated
operations silently shadowed (yaml keeps the last duplicate method key) and
thus invisible to fern/SDK generation, and several operations reachable only
at the wrong URL. No text was lost and no operationId was duplicated, so
fern check, $ref resolution and operationId diffing all passed clean.

Relocated each orphaned operation block back to its correct path key:
- /me (identifyAdmin), /admins (listAdmins), /admins/activity_logs
  (listActivityLogs), /articles/{article_id} (retrieve/update/delete),
  /internal_articles/{internal_article_id} (retrieve/update/delete),
  /away_status_reasons (listAwayStatusReasons),
  /contacts/{contact_id}/unarchive (UnarchiveContact),
  /contacts/{contact_id}/block (BlockContact),
  /data_attributes/{data_attribute_id} (updateDataAttribute),
  /teams/{team_id} (retrieveTeam).

Verified: YAML parses; zero null paths; zero duplicate-method keys; all
$refs resolve; no duplicate operationIds; all 10 repaired paths match the
2.15 baseline exactly; previously-shadowed ops (listMacros, tag-detach,
audiences retrieve, office-hours list, teams metrics, etc.) now visible.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Take the richer Preview description of conversation_source: add the
`recipients` array (with its `type`, `email` and `drop_reason` item fields)
byte-identical to Preview. 2.15 and prior 2.16 lacked the field entirely.
The email_address_headers drop_reason surface is not present in Preview, so
it is not graduated here.

Verified: YAML parses, recipients block byte-identical to Preview.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Take the richer Preview description of the Articles draft surface (2.15 had
none). Graduated from Preview with the standard stable-version
normalizations:
- article_content + article_list_item: add has_unpublished_changes and
  draft_updated_at, dropping the "Only returned on the `Preview` API version"
  sentence (they are returned on 2.16).
- New paths /articles/{id}/draft (GET retrieveArticleDraft, PUT) and
  /articles/{id}/draft/publish (POST publishArticleDraft), dropping the
  "Set `Intercom-Version: Preview`." sentence from their descriptions.
- Add the publish_article_draft_request schema (byte-identical to Preview).

Verified: YAML parses, all $refs resolve, no null/duplicate-method paths, no
duplicate operationIds, no residual Preview-only markers in the graduated
surfaces.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ects in v2.16

Normalization miss from the Help Center Redirects graduation (46de188): four
operation descriptions still instructed callers to set
`Intercom-Version: Preview`, which is wrong in a stable version spec. Removed
the sentence on the two redirect paths (read + read_write scopes), matching
how every other graduated surface drops the Preview-only marker.

Verified: YAML parses; zero residual "Intercom-Version: Preview" in 2.16.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@geetikabagga
geetikabagga marked this pull request as ready for review July 23, 2026 14:40
shrek-intercom[bot]

This comment was marked as outdated.

@geetikabagga
geetikabagga marked this pull request as draft July 23, 2026 15:14
geetikabagga and others added 3 commits July 23, 2026 16:29
PR 540055 cut v2.16, graduating these surfaces out of Unstable/Preview.
Strip their Preview-exclusive designation from descriptions/0 so Preview
only marks items still Preview after the cut:

- Remove "Set `Intercom-Version: Preview`." from graduated article
  draft/version/tagging, help-center-redirects and content endpoints
- Retarget their `intercom_version_preview` header ref to `intercom_version`
- Drop "Only returned on the `Preview` API version." from article draft fields
- De-Preview the Banners and Content tag descriptions and the bulk-content summary
- Restate the reporting-export version note as "from version 2.16 onward"

Still-Unstable surfaces keep their Preview markers (ecommerce catalog upload
header ref + schema, Fin capabilities version example).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Cross-checked descriptions/2.16 against the v2.16 promoted set in PR 540055:

- Add 7 tag definitions for graduated APIs that operations referenced but
  were undefined (Audiences, Banners, Calls, Content, Content Snippets,
  Conversations Attributes, Data Connectors), normalizing Preview wording.
- Reunite 8 orphaned schema bodies with their empty top-level keys
  (app, away_status_reason_list, contact_blocked, content_sources_list,
  convert_visitor_request, update_conversation_attribute_request,
  merge_contacts_request, untag_company_request). Earlier graduation commits
  left each key null and its body absorbed as duplicate keys under a neighbour,
  silently corrupting both schemas — YAML-legal and invisible to fern check.
- Remove 3 stray duplicate `example` fragments that overwrote real values.

Result: 0 null paths, 0 duplicate keys, 0 dangling refs (was 33 dup keys).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Per team convention, the Preview spec (descriptions/0) documents only
Unstable/Preview changes, not APIs already served by a numbered version.
PR 540055 graduated 72 changes into v2.16, so remove them from Preview,
leaving the 2.15 base plus the 34 still-Unstable changes.

Removed from descriptions/0:
- 70 graduated operations (macros, help-center redirects, article draft &
  version history, content tagging/search/bulk, content snippets, audiences,
  banners, data connectors, side conversations, office hours, conversation
  attributes, deleted-conversations list, team metrics, activity-log search,
  change-ticket-type, merge conversation, link/unlink ticket, whatsapp/message
  status, custom-object-instances list, merged-contact redirect, etc.)
- 82 graduated fields from 24 shared base schemas (email_verified, channel,
  brand_id, agent-availability/fin-stats article fields, audience_ids, etc.)
- 93 graduated-only schemas and 8 graduated tags
- Reverted graduated breaking changes to their 2.15 form: contact.owner_id and
  ticket assignee ids back to their original types, conversation.priority enum,
  conversation assignee nullability, restored article parent_id/parent_type,
  repointed contact search / conversation-source-author / tag-create response
  to their 2.15 schemas, dropped the reporting-export no-reply note.

Also removed the now-dead article-versions, /messages/status and
merge_conversations_request entries from preview-openapi-overrides.yml.

Result: no v2.16-graduated operation/schema/tag/field remains in Preview; all
17 still-Unstable operations retained; `fern check` passes with 0 errors
(clears 3 pre-existing errors for the removed Preview-only endpoints).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@geetikabagga geetikabagga changed the title Add descriptions/2.16 spec (WIP) Add v2.16 spec and remove graduated APIs from Preview Jul 23, 2026
@geetikabagga geetikabagga changed the title Add v2.16 spec and remove graduated APIs from Preview Add descriptions/2.16 spec Jul 23, 2026
@geetikabagga
geetikabagga marked this pull request as ready for review July 23, 2026 17:10
shrek-intercom[bot]

This comment was marked as outdated.

@geetikabagga
geetikabagga requested a review from levindixon July 23, 2026 17:16
The graduated 2.16 spec left the intercom_version schema's example, default,
and enum list topping out at 2.15. Set example and default to 2.16 and add
2.16 to the enum so the spec self-identifies as 2.16, matching the convention
of prior numbered version directories.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
shrek-intercom[bot]

This comment was marked as outdated.

@markdennis22

Copy link
Copy Markdown
Contributor

Reviewed with three independent passes (2.16 graduation correctness / Preview cleanup / spec integrity + wiring). Graduation mechanics are clean — one issue worth fixing before merge, rest is optional.

🔴 Fix before merge: Preview lost GET /custom_object_instances/{custom_object_type_identifier}

The graduated breaking change (getCustomObjectInstancesByExternalIdlistCustomObjectInstances) was deleted from Preview instead of reverted to the 2.15 form. Net effect: 2.15 and 2.16 both expose a GET on this path, but Preview now exposes none — Preview is behind stable on this endpoint.

Operation-level check:

Spec GET operationId
descriptions/2.15 getCustomObjectInstancesByExternalId
descriptions/0 (Preview, this PR) absent
descriptions/2.16 listCustomObjectInstances ✅ (correct)

Fix: restore the 2.15 getCustomObjectInstancesByExternalId GET into descriptions/0 (source block at descriptions/2.15/api.intercom.io.yaml:8998; in Preview it belongs just before createCustomObjectInstances, ~descriptions/0/api.intercom.io.yaml:10025). 2.16 needs no change.

🟡 Optional / low

  • WhatsApp tag is used by GET /messages/whatsapp/status and GET /messages/status in 2.16 but isn't in the top-level tags array. Consistent with the existing pattern (2.15 has Calls undeclared, Preview has Folders), so fern check only warns — add a {name: WhatsApp} entry if we want it clean.
  • Three now-orphaned component defs in Preview (company_note, whatsapp_message_status_list, ValidationError response) — dead definitions, no dangling refs. Harmless cleanup.
  • PR body undersells the graduation set — WhatsApp status, Audiences, Office Hours, Content Snippets, etc. also graduated (all verified Preview-sourced). Worth a changelog line.

✅ Verified clean

  • 2.16 = 2.15 + graduation set: 69 added ops, 0 removed paths, 96 added schemas, 0 duplicate operationIds/keys; every addition traces back to Preview (zero invented endpoints).
  • 0 dangling $ref in both 2.16 (of 1333) and post-PR Preview (of 1019).
  • Breaking-change promotions consistent across request/response/examples (ticket assignee→int, contact owner→string, conversation.priority enum re-value, article parent fields removed).
  • Preview cleanup: all removed paths/schemas landed in 2.16; held-back Preview-only fields retained (ai_topics, formatted_phone); all 4 removed Fern overrides match removed paths.
  • info.version/intercom_version correct; 2.16 skeleton matches 2.15; no missing wiring (upload/Postman/version scripts are path-driven, and leaving generators.yml on 2.14 is correct).

Note: fern check (passed, 0 errors) only covers the 2.14 + Preview groups per generators.yml — it does not parse descriptions/2.16; that was validated separately (clean). Also worth knowing all workflows are currently under .github/workflows-disabled/, so nothing here is CI-gated.

~ Automated via Claude

The Contact owner_id response is now a String in 2.16, but the searchable
contact-search fields table still listed it as Integer. Align the table.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
shrek-intercom[bot]

This comment was marked as outdated.

Revert all edits to the Preview spec (descriptions/0) and the Fern preview
overrides so this PR only adds descriptions/2.16 — matching prior version cuts
(2.13/2.14/2.15), which never modified Preview. Graduated APIs and fields stay
in Preview in their newest form.

This also resolves the review finding that Preview lost a GET on
/custom_object_instances/{custom_object_type_identifier}: with Preview
untouched, it keeps the operation (listCustomObjectInstances).

Add the missing WhatsApp tag to the 2.16 top-level tags array (used by
GET /messages/whatsapp/status and GET /messages/status).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@geetikabagga

Copy link
Copy Markdown
Contributor Author

Thanks Mark. Reworked this to be add-only — reverted all edits to descriptions/0 and fern/preview-openapi-overrides.yml back to base, so the PR now touches only descriptions/2.16 (matches the 2.13/2.14/2.15 precedent). Pushed in 5f33de1.

That change resolves the findings:

  • 🔴 Preview lost GET /custom_object_instances/{...} — resolved. With Preview untouched it keeps the operation (listCustomObjectInstances, its current newest form). No 2.15-form restore needed, since we no longer prune Preview.
  • 🟡 WhatsApp tag missing — added to the 2.16 top-level tags array (alphabetical, with description).
  • 🟡 Orphaned Preview component defs — resolved; Preview is unchanged from base.
  • 🟡 PR body undersold the graduation set — rewritten with the fuller endpoint/field/breaking-change summary.

Net diff is now a single added file (descriptions/2.16); 2.16 YAML parses with 0 dangling $ref.

~ Automated via Claude

shrek-intercom[bot]

This comment was marked as outdated.

@markdennis22

Copy link
Copy Markdown
Contributor

Re-reviewed after the latest push (5f33de1). The recut to an add-only cut is exactly right — descriptions/0 (Preview) and fern/preview-openapi-overrides.yml are now byte-identical to main, so the whole PR is a single new file (descriptions/2.16, +35,426). That matches how every prior version was cut (Preview is a full superset spec and has never been pruned on graduation). 👍

✅ Addressed

  • Preview kept intactcustom_object_instances GET is back (listCustomObjectInstances); Preview is again a superset of stable (175 paths vs 2.16's 163).
  • WhatsApp tag declared (0 undeclared-but-used tags now).
  • owner_id → String — consistent at both the schema level (contact / create_contact_request / update_contact_request) and the contact-search fields doc table.

✅ Integrity re-check (2.16)

  • 2.15 → 2.16 = +69 ops / −0 removed (clean add-only graduation).
  • 0 dangling $ref of 1,333.
  • Parses clean; no new duplicate paths/operationIds (the 4 blank-operationId reporting_data ops are pre-existing, identical in 2.15 + Preview).

🟡 One open item

sales_agent.collected_data graduated into 2.16 with its value-type constraint dropped:

# 2.16 (this PR)
collected_data:
  type: object
  additionalProperties:        # empty → unconstrained (any value type)

# Preview source it graduated from
collected_data:
  type: object
  additionalProperties:
    type: string
  example:
    email: user@example.com
    company.name: Acme Inc

sales_agent is live in 2.16 (referenced by conversation / conversation_list_item), so this is a reachable, looser-than-intended stable schema. Suggest restoring additionalProperties: {type: string} (and the example) to match the source.

ℹ️ Optional / not blocking

  • Preview's intercom_version enum still tops out at 2.15 + Preview (no 2.16). That's a consequence of keeping Preview byte-identical, and matches the pre-existing per-spec generation lag — 2.16's own enum correctly lists 2.16 (default: 2.16). Fine to leave unless we want all specs' enums kept current.

Everything else verified clean. With the sales_agent tweak this looks good to merge.

~ Automated via Claude

The graduation slice dropped additionalProperties.type on
sales_agent.collected_data, leaving the stable 2.16 schema unconstrained
(any value type) versus the Preview source's string-valued map. sales_agent
is reachable in 2.16 via conversation / conversation_list_item, so restore
additionalProperties: {type: string} and the example to match the source.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@geetikabagga

Copy link
Copy Markdown
Contributor Author

Fixed in 475c048. Restored sales_agent.collected_data to match its Preview source — additionalProperties: {type: string} plus the example (email, company.name). The graduation slice had dropped the value-type constraint; 2.16 now constrains the map to string values as intended. YAML parses, 0 dangling $ref.

~ Automated via Claude

@shrek-intercom shrek-intercom Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ PR Review Summary: NEEDS HUMAN REVIEW

Summary
🎯 Problem — The PR title and description clearly communicate the addition of API version 2.16 following established patterns, though the extensive endpoint and field listings make the core message verbose.
📝 Alignment — The PR description accurately and thoroughly reflects the single-file addition of the 2.16 spec, with all claimed new endpoints, version stamps, breaking changes, and the untouched Preview/Fern directories confirmed in the diff.
ℹ️ 🧠 Correctness — Disabled for this repository.
🦺 Safety — The PR modifies the descriptions/2.*/ path (adding descriptions/2.16/api.intercom.io.yaml), which represents a frozen public contract requiring mandatory human review, and explicitly introduces 10 breaking changes including type changes, field renames, and new required fields.
🚦 Auto-approval — Within size limit (0/150 LOC).
Per-criterion details

Problem

The PR clearly explains what's being added (API version 2.16) and follows an established pattern ('matching prior version cuts'). However, it's quite verbose with extensive lists of endpoints and fields that could be summarized more concisely - the detailed changelog information buries the core message that this is a routine version graduation following existing conventions.

Alignment

All claims verify. The description accurately describes that this PR adds the 2.16 spec file, built from the 2.15 baseline with graduated APIs from Preview. The specific endpoints mentioned (activity logs, macros, data connectors, side conversations, help center redirects, content snippets, office hours, article drafts/versions/scheduled publishing, WhatsApp, company notes, conversation attributes) are all present in the 2.16 spec. The breaking changes mentioned (owner_id → string, parent_ids replacing parent_id) are reflected in the code. The PR is add-only (only adds one new file), and Preview/Fern are untouched.

The PR description claims this adds descriptions/2.16/api.intercom.io.yaml built from the 2.15 baseline plus graduated APIs from Preview. This is confirmed:

  1. Single file addition: The diff shows only descriptions/2.16/api.intercom.io.yaml as a new file — matches the "add-only" claim.
  2. Version stamping: info.version: '2.16', intercom_version enum includes '2.16', default is '2.16' — confirmed.
  3. Preview and Fern untouched: No changes to descriptions/0/ or fern/ directory — confirmed via git diff.
  4. New endpoints claimed: All verified present in 2.16:
    • Activity Logs search (/admins/activity_logs/search) ✓
    • Activity Log Event Types (/admins/activity_log_event_types) ✓
    • Macros (/macros, /macros/{id}) ✓
    • Data Connectors (/data_connectors) ✓
    • Side Conversations (/conversations/{id}/side_conversations) ✓
    • Help Center Redirects ✓
    • Content Snippets (/content_snippets) ✓
    • Office Hours (schedules + exceptions) ✓
    • Article drafts (/articles/{id}/draft), versions (/articles/{article_id}/versions), scheduled publishing ✓
    • WhatsApp message send + status (/messages/whatsapp/status) ✓
    • Company Notes (/companies/{company_id}/notes) ✓
    • Conversation Attributes ✓
  5. Breaking changes: owner_id documented as String type in contact search fields table; parent_ids used in articles (replacing parent_id) — confirmed.
  6. WhatsApp tag in top-level tags array: Present at line 35427 — confirmed.
  7. Baseline growth: 2.15 has 117 paths / 24K lines; 2.16 has 163 paths / 35K lines — consistent with adding graduated APIs.

The description accurately and thoroughly describes what the code changes do.

Safety

This PR adds a new released version spec at descriptions/2.16/api.intercom.io.yaml. Per the repo-specific safety criteria, any change under descriptions/2.*/ requires human review, as these represent the published, frozen public contract. Even though this is a new version (not modifying an existing released version), it still falls squarely under the descriptions/2.*/ path pattern that mandates human review.

Additionally, the PR description explicitly lists 10 breaking changes being graduated into version 2.16 (e.g., owner_id type change from integer to string, assignee ID type changes, parent_ids replacing parent_id/parent_type, new required fields, status code changes). Breaking changes in any version are never auto-approvable per the safety criteria.

This is a significant version cut that establishes a new public API contract and contains intentional breaking changes from the previous version — exactly the kind of change that requires careful human review.

<violated_criteria>
Released version specs — change under descriptions/2.*/ (adds descriptions/2.16/api.intercom.io.yaml), which is the frozen public contract requiring human review.
Breaking changes in any version — PR explicitly documents 10 breaking changes (type changes, field renames, new required fields, status code changes) being introduced in 2.16.
</violated_criteria>

Rate this comment 👍 / 👎 to help us improve 🙏 · Disagree with assessment? Establish ground truth here

@geetikabagga
geetikabagga merged commit f26d0cc into main Jul 24, 2026
4 checks passed
@geetikabagga
geetikabagga deleted the geetikabagga/openapi-v2.16 branch July 24, 2026 12:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants