{"server":"io.github.trycourier/courier","count":38,"changes":[{"tool":"list_preference_logs","kind":"added","observed_at":"2026-09-28T22:23:57.030Z","fields":[],"description_before":null,"description_after":"List preference changes, newest first. Each entry is one change a user made to one subscription topic, with the value before it where there was one. Pass user_id to answer \"when did this user opt out, and of what?\"; omit it to read the whole environment. Page with paging.cursor while paging.more is true.","description_similarity":null,"before_hash":null,"after_hash":"cf9ec038f5d1c7552f98cbfd9cac9a4b"},{"tool":"replace_tenant_template","kind":"changed","observed_at":"2026-09-28T22:23:57.030Z","fields":["inputSchema"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"ade288e2c98519f10244f6827f9a0648","after_hash":"41c57149e5d2a5e3224e5c41be164111"},{"tool":"list_automation_run_steps","kind":"added","observed_at":"2026-09-28T22:23:57.030Z","fields":[],"description_before":null,"description_after":"List the steps of an automation run in order, with what happened at each. Send steps carry a message_id to follow with get_message.","description_similarity":null,"before_hash":null,"after_hash":"cd93deb6be321146abc62775727ace19"},{"tool":"list_automation_runs","kind":"added","observed_at":"2026-09-28T22:23:57.030Z","fields":[],"description_before":null,"description_after":"List automation runs, newest first. Filter by automation template, status, or a created_at window to find a run that stalled or errored, then read its steps with list_automation_run_steps. Journey runs are listed by list_journey_runs instead.","description_similarity":null,"before_hash":null,"after_hash":"00547db90062a9fcd950664f8c121d7a"},{"tool":"get_preview_run","kind":"added","observed_at":"2026-09-25T00:47:58.687Z","fields":[],"description_before":null,"description_after":"Get a preview run with its per-device results and screenshot URLs. Poll until status is COMPLETED or FAILED. The URLs are short-lived and re-signed on every read, so fetch them rather than storing them.","description_similarity":null,"before_hash":null,"after_hash":"f67c5995559f297782b7c46e52d8a3d9"},{"tool":"list_preview_runs","kind":"added","observed_at":"2026-09-25T00:47:58.687Z","fields":[],"description_before":null,"description_after":"List a template's preview runs, newest first.","description_similarity":null,"before_hash":null,"after_hash":"c373e43ee4953b0e836c4e8239af0a7b"},{"tool":"create_preview_run","kind":"added","observed_at":"2026-09-25T00:47:58.687Z","fields":[],"description_before":null,"description_after":"Render a template's email on real email clients and capture screenshots. Pass exactly one of device_set_id or device_ids. Each run is billed to the workspace's previews add-on. The run starts PENDING, so poll get_preview_run for the results.","description_similarity":null,"before_hash":null,"after_hash":"0b92888ff7e9915b139f0d38070c368c"},{"tool":"archive_preview_device_set","kind":"added","observed_at":"2026-09-25T00:47:58.687Z","fields":[],"description_before":null,"description_after":"Archive a preview device set. Runs that used it keep their own copy of its devices. The Courier Recommended set cannot be archived.","description_similarity":null,"before_hash":null,"after_hash":"7354fd15624712706c0b27ccfc992751"},{"tool":"replace_preview_device_set","kind":"added","observed_at":"2026-09-25T00:47:58.687Z","fields":[],"description_before":null,"description_after":"Replace a preview device set's name and devices. This is a full replace, so send every device the set should keep. The Courier Recommended set cannot be changed.","description_similarity":null,"before_hash":null,"after_hash":"0237f603e8e18f630ea196ad6adf9d64"},{"tool":"get_preview_device_set","kind":"added","observed_at":"2026-09-25T00:47:58.687Z","fields":[],"description_before":null,"description_after":"Get a preview device set by id.","description_similarity":null,"before_hash":null,"after_hash":"cdc0ae5e248e67964b65c5b95a2291e0"},{"tool":"create_preview_device_set","kind":"added","observed_at":"2026-09-25T00:47:58.687Z","fields":[],"description_before":null,"description_after":"Create a named, reusable set of preview devices.","description_similarity":null,"before_hash":null,"after_hash":"2641eddd93f48aa57a2b6a9801c88a67"},{"tool":"list_preview_device_sets","kind":"added","observed_at":"2026-09-25T00:47:58.687Z","fields":[],"description_before":null,"description_after":"List saved preview device sets. Every workspace has a read-only Courier Recommended set that runs can use without creating a set first.","description_similarity":null,"before_hash":null,"after_hash":"1df8158888d737b9eacaacf6ae780a78"},{"tool":"list_preview_devices","kind":"added","observed_at":"2026-09-25T00:47:58.687Z","fields":[],"description_before":null,"description_after":"List the email clients a preview can render on. Each device has a pvd_ id, a display name, and fields to filter by: category, app, platform, os, os_version and theme. Use these ids in a device set or in create_preview_run.","description_similarity":null,"before_hash":null,"after_hash":"101c63165eb58e6a7f022a2aa411d8fa"},{"tool":"list_digest_instances","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description","inputSchema"],"description_before":"List the digest instances for a schedule. Each instance represents the events accumulated for a single user against the schedule, useful for monitoring accumulation before a digest is released.","description_after":"List the digest instances for a digest schedule. Each instance is the events accumulated so far for one user against that schedule, so this shows what is waiting to go out and answers why a digest has not arrived yet — it is still accumulating, or it has nothing in it.","description_similarity":0.311,"before_hash":"330e5d2cb4739f80951b3495c2f75fcd","after_hash":"87ee04b8a742a8e0c3847b62d1006b7a"},{"tool":"get_list_subscribers","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description","inputSchema"],"description_before":"Get all subscribers of a list.","description_after":"List the users subscribed to a list. Use this to confirm whether someone was actually on a list at all — a subscription here is the reason a list-addressed send reached them.","description_similarity":0.111,"before_hash":"30025fdb005ee22e781dbeff26a37a2f","after_hash":"f76cd3647b94741a5b0eb7d84bbc20da"},{"tool":"get_list","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description"],"description_before":"Get a list by its ID.","description_after":"Get one list by its ID, including its name and current state.","description_similarity":0.417,"before_hash":"e5fb2d4e20e8f0f6f8ee1a4e412d17a8","after_hash":"15713477eea2c87468192a3e7f52e438"},{"tool":"list_lists","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description","inputSchema"],"description_before":"Get all lists. Optionally filter by pattern (e.g. 'example.list.*').","description_after":"List the workspace's lists. A list is an explicit, subscription-based group of users — someone is on it because they were subscribed, not because they match a rule. Optionally filter by an id pattern such as \"example.list.*\".","description_similarity":0.194,"before_hash":"d252d70af7350bb7c59ebd76a0e44a45","after_hash":"bb4eb05ffb54f8e9972d96897e2bc2e0"},{"tool":"list_audience_members","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description","inputSchema"],"description_before":"List all members of an audience.","description_after":"List the users who currently match an audience's filter. Membership is computed, so this reflects profiles as they are right now — a profile change can move someone in or out without the audience itself being edited.","description_similarity":0.079,"before_hash":"1c3587fffd4ad2106aa0c6f85d794236","after_hash":"0e552a819c66d8a39481e1995d714ee4"},{"tool":"get_audience","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description"],"description_before":"Get an audience by its ID, including its filter definition.","description_after":"Get one audience by ID, including the filter that defines its membership. Read this to explain why someone is or is not in an audience — the filter is the rule, not a stored member list. Use list_audience_members for who currently matches.","description_similarity":0.229,"before_hash":"bbe5c28973f56407affb46c98cf9d45e","after_hash":"857bd5da3e39be92468a2014068d0189"},{"tool":"list_audiences","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description","inputSchema"],"description_before":"List all audiences in the workspace.","description_after":"List the workspace's audiences. An audience is a saved filter over user profiles — a dynamic segment — so this answers \"who can I target\" and gives you the audience IDs that journey audience triggers and send requests refer to.","description_similarity":0.111,"before_hash":"8370ed6cba6683b4491594e869c666f7","after_hash":"968244f85a62dee7561078d30ecdfa49"},{"tool":"list_automations","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description","inputSchema"],"description_before":"List automation templates in the workspace, returning each template_id and its version state. Optionally filter by version.","description_after":"List the workspace's automation templates, each with its template ID and whether it has a published or draft version. Answers \"what automations already exist here\" — this only reads the catalog, it never runs one.","description_similarity":0.282,"before_hash":"513929deb31ee2234025a3b6fb20dc26","after_hash":"2d54179e1207d95c243025b1a5f12d66"},{"tool":"courier_installation_guide","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description","inputSchema"],"description_before":"Get the Courier SDK installation guide for a specific platform. For client-side SDKs (React, iOS, Android, Flutter, React Native), also generates a sample JWT.","description_after":"Get the Courier SDK installation guide for one platform: the install command, a quick-start code sample and the relevant doc links. This is the answer to \"how do I integrate Courier\" or \"how do I get started\". Client-side platforms need a JWT to authenticate; each guide says so and names the tool that issues one.","description_similarity":0.25,"before_hash":"87b1b9255cd55b68400091cac7529301","after_hash":"e021021329ec6a9876c8bdb5866995af"},{"tool":"get_brand","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description"],"description_before":"Get a brand by its ID.","description_after":"Get one brand by ID, including its colors, logo and styling settings. Read this to describe what a template referencing this brand will actually look like.","description_similarity":0.25,"before_hash":"8473ce3fe1d1d1e20fe39ac1aa9aa1c0","after_hash":"0a4ef6c871661c04959051cf3a853b7b"},{"tool":"list_brands","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description","inputSchema"],"description_before":"List all brands in the workspace.","description_after":"List the workspace's brands. A brand is the reusable logo, colors and email styling a notification template renders with; this gives you the brand IDs a template's brand reference points at.","description_similarity":0.148,"before_hash":"d129f3fb8005418dbc05def106ec7328","after_hash":"613ec1a0d82f2c59cc3ae6929f5811d9"},{"tool":"list_user_tenants","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description","inputSchema"],"description_before":"List all tenants a user belongs to.","description_after":"List the tenants a user belongs to. Preferences and branding can be scoped per tenant, so this tells you which tenant-scoped settings could apply to this user at all before you go looking for them.","description_similarity":0.233,"before_hash":"001f2968fc50346fc7959907f4903218","after_hash":"3322ba71bca33ee5d7e93fe66ad6ae2e"},{"tool":"get_user_preference_topic","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description","inputSchema"],"description_before":"Get a user's preference for a specific subscription topic.","description_after":"Get one user's choice for a single subscription topic — whether they opted in or out, and per channel. Use this when you already know which topic is in question; get_user_preferences returns all of them at once.","description_similarity":0.189,"before_hash":"657a1cc31fb68d9da233195f9d243526","after_hash":"64dd460a7fe70d0abe51c50519a448a0"},{"tool":"get_user_list_subscriptions","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description","inputSchema"],"description_before":"Get all list subscriptions for a user.","description_after":"List the lists one user is subscribed to. Use this when explaining why a user received something — a subscription here is the reason a list-addressed send reached them, and its absence rules that path out.","description_similarity":0.088,"before_hash":"8ae18d1b894296c99a59c1a2f73dc650","after_hash":"7216e495a62cba526266e8223cd810bc"},{"tool":"list_tenant_users","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description","inputSchema"],"description_before":"List users associated with a tenant.","description_after":"List the users associated with one tenant. Use this to confirm whether someone actually belongs to the tenant whose branding or preferences you are reasoning about.","description_similarity":0.208,"before_hash":"40bc8b382e133f550aa0ceb9a2e38607","after_hash":"9e8129462392743f0299bb41f18eebc0"},{"tool":"list_tenants","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description","inputSchema"],"description_before":"List all tenants in the workspace.","description_after":"List the workspace's tenants. A tenant is a customer or organisation whose users, branding and preferences are scoped separately; this answers \"what tenants do I have\" and gives you the tenant IDs get_tenant needs.","description_similarity":0.125,"before_hash":"78a3f9fcb13bd58cad8e39cdd985da9a","after_hash":"451409997f0132b4b7a90bf1da42c7b5"},{"tool":"get_preference_topic","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description"],"description_before":"Retrieve a topic within a section. Returns 404 if the section or topic does not exist, or the topic belongs to a different section.","description_after":"Get one subscription topic within a section, including its default opt-in state. Returns 404 if the section or topic does not exist, or if the topic belongs to a different section — so a 404 here can mean the pairing is wrong rather than the topic missing.","description_similarity":0.429,"before_hash":"bcaa546e357e970171b2a8bc76e17eaf","after_hash":"db0aea53f343defa588c09238da60c2d"},{"tool":"list_preference_topics","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description"],"description_before":"List the topics in a preference section.","description_after":"List the subscription topics inside one preference section. A topic is the individual thing a user opts in or out of, and its ID is what get_user_preference_topic takes.","description_similarity":0.28,"before_hash":"e7780861d4d3b7b54910fbb26a9ffeb2","after_hash":"233b889aa2bb9305255627f0f73a04d8"},{"tool":"get_preference_section","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description"],"description_before":"Retrieve a preference section by id, including its topics.","description_after":"Get one preference section by ID, including its topics. Use this when you already know which section you need; list_preference_sections returns every section with its topics in one call.","description_similarity":0.269,"before_hash":"d4a5373a68079462f51e36016c50fad5","after_hash":"9515cacc456b1c417b0bb74d67f53e3c"},{"tool":"list_preference_sections","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description"],"description_before":"List the workspace's preference sections. Each section embeds its topics.","description_after":"List the workspace's preference sections, each with the topics inside it. One call returns the whole opt-in surface: everything a user could subscribe to or opt out of. This is what the workspace DEFINES — use get_user_preferences for what a particular person actually chose.","description_similarity":0.19,"before_hash":"8e4aab7aabc62776cd65710580067d25","after_hash":"e6651cb0578f733c44d7ba95371f059a"},{"tool":"list_routing_strategies","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description","inputSchema"],"description_before":"List routing strategies in the workspace. Returns metadata only; use get for full details.","description_after":"List the workspace's routing strategies, returning metadata only. A routing strategy decides which channel a notification takes and in what order. Use this to find the rs_-prefixed strategy ID that get_routing_strategy needs for the full definition.","description_similarity":0.343,"before_hash":"5a5de415ec41520bf5b3d8f5bcda1c59","after_hash":"13663fe445b3fc132c9bb7f967a8b086"},{"tool":"list_provider_catalog","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description","inputSchema"],"description_before":"List available provider types from the catalog with their configuration schemas.","description_after":"List the provider integrations Courier supports and the configuration each one expects. This is the catalog of what COULD be connected, not what this workspace has configured — use list_providers for that. Answers \"what can I connect Courier to\" and \"what do I need in order to set up this provider\".","description_similarity":0.114,"before_hash":"d8e54910e87e272ffb36f42096d532dd","after_hash":"db003edd74c027b1163422d71e757958"},{"tool":"list_notification_checks","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description","inputSchema"],"description_before":"List checks for a notification submission.","description_after":"List the checks recorded against one notification submission. Checks are the gates a submission has to clear before it goes out, so a failing check here is the reason a template is stuck rather than live.","description_similarity":0.167,"before_hash":"da469e77c0c9ddd18dec13775d4e8c13","after_hash":"d311267b4855edff61750cb4c8a4e6c1"},{"tool":"list_notification_versions","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description","inputSchema"],"description_before":"List version history for a notification template.","description_after":"List the version history of a notification template — each published version with when it was created. Use this to say what changed and when, or to find the version string get_notification accepts.","description_similarity":0.214,"before_hash":"8932962957e4fd64d9785d472d6eb502","after_hash":"33d13bf8e08e728c94c8e7918ed7738c"},{"tool":"list_notifications","kind":"changed","observed_at":"2026-09-24T19:15:44.579Z","fields":["description","inputSchema"],"description_before":"List notification templates. Optionally filter by cursor.","description_after":"List notification templates, newest first. Pass tags to return only templates carrying ALL of the given tags. Page through the rest with cursor.","description_similarity":0.174,"before_hash":"35463703a4fd084e77551c1fe422e468","after_hash":"29685f95d2a64a62c5417eb3433986da"}],"next_before":null,"next_actions":[]}