{"version":2,"contracts":[{"system":"ats","paint":"purplesuite","available":true,"label":"Purple Suite ATS API","runtimeBase":"/api/purple-suite/ats","docsPath":"/api/purple-suite/docs/ats/purplesuite","description":"\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Suite ATS API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/ats/purplesuite/openapi.json","runtimeOperations":[],"key":"ats/purplesuite/native-openapi","system":"ats","paint":"purplesuite","productLabel":"Purple Suite ATS API","runtimeBase":"/api/purple-suite/ats","productDocsPath":"/api/purple-suite/docs/ats/purplesuite","docsPath":"/api/purple-suite/docs/ats/purplesuite/native-openapi","description":"\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"ats/purplesuite","source":"native"},{"system":"bank-ops","paint":"purplesuite","available":true,"label":"Purple Bank Ops API","runtimeBase":"/api/purple-suite/bank-ops","docsPath":"/api/purple-suite/docs/bank-ops/purplesuite","description":"BFSI bank operations source system: branch control tower (opening checklists, pending approvals, escalations, operational-risk register) and trade finance (letters of credit with milestones/bottlenecks, bank guarantees). Records carry a `country` (IN | AU | US); trade-finance records link to retail-banking `customer_id`.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Bank Ops API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/bank-ops/purplesuite/openapi.json","runtimeOperations":[],"key":"bank-ops/purplesuite/native-openapi","system":"bank-ops","paint":"purplesuite","productLabel":"Purple Bank Ops API","runtimeBase":"/api/purple-suite/bank-ops","productDocsPath":"/api/purple-suite/docs/bank-ops/purplesuite","docsPath":"/api/purple-suite/docs/bank-ops/purplesuite/native-openapi","description":"BFSI bank operations source system: branch control tower (opening checklists, pending approvals, escalations, operational-risk register) and trade finance (letters of credit with milestones/bottlenecks, bank guarantees). Records carry a `country` (IN | AU | US); trade-finance records link to retail-banking `customer_id`.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"bank-ops/purplesuite","source":"native"},{"system":"calendar","paint":"purplesuite","available":true,"label":"Purple Suite Calendar API","runtimeBase":"/api/purple-suite/calendar","docsPath":"/api/purple-suite/docs/calendar/purplesuite","description":"Microsoft Graph-compatible Calendar API for Purple Suite. When a request carries a caller identity (X-PS-Impersonate-User header, or the instance's default MCP user), Outlook-style permissions apply: `private` events are masked on reads unless the caller is the organizer or an attendee, and event PATCH/DELETE/cancel are organizer-only (403 ErrorAccessDenied otherwise; attendees respond via accept/decline/tentativelyAccept). Requests without a caller identity are unrestricted.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Suite Calendar API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/calendar/purplesuite/openapi.json","runtimeOperations":[],"key":"calendar/purplesuite/native-openapi","system":"calendar","paint":"purplesuite","productLabel":"Purple Suite Calendar API","runtimeBase":"/api/purple-suite/calendar","productDocsPath":"/api/purple-suite/docs/calendar/purplesuite","docsPath":"/api/purple-suite/docs/calendar/purplesuite/native-openapi","description":"Microsoft Graph-compatible Calendar API for Purple Suite. When a request carries a caller identity (X-PS-Impersonate-User header, or the instance's default MCP user), Outlook-style permissions apply: `private` events are masked on reads unless the caller is the organizer or an attendee, and event PATCH/DELETE/cancel are organizer-only (403 ErrorAccessDenied otherwise; attendees respond via accept/decline/tentativelyAccept). Requests without a caller identity are unrestricted.","primary":true,"source":"native"}],"key":"calendar/purplesuite","source":"native"},{"system":"chat","paint":"purplesuite","available":true,"label":"Purple Suite Chat API","runtimeBase":"/api/purple-suite/chat","docsPath":"/api/purple-suite/docs/chat/purplesuite","description":"\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Suite Chat API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/chat/purplesuite/openapi.json","runtimeOperations":[],"key":"chat/purplesuite/native-openapi","system":"chat","paint":"purplesuite","productLabel":"Purple Suite Chat API","runtimeBase":"/api/purple-suite/chat","productDocsPath":"/api/purple-suite/docs/chat/purplesuite","docsPath":"/api/purple-suite/docs/chat/purplesuite/native-openapi","description":"\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"chat/purplesuite","source":"native"},{"system":"chat","paint":"slack","available":true,"label":"Slack","runtimeBase":"/api/purple-suite/{instanceId}/contracts/chat/slack","docsPath":"/api/purple-suite/docs/chat/slack","primaryProfileId":"slack-web-1-7-0","profiles":[{"id":"slack-web-1-7-0","label":"Slack Web API 1.7.0 — token operations","version":"1.7.0","protocol":"rest","authProfiles":[{"id":"bearer-instance-key","label":"Workspace token — emulator compatibility","kind":"bearer","credentialModel":"instance-key","description":"Authorization: Bearer <token>, Slack's universal transport for a workspace token. PurpleSuite maps the token position to the selected instance key and adds no vendor-visible header; the instance itself comes from the path, never from a header."},{"id":"token-parameter-instance-key","label":"`token` argument — the position each operation declares","kind":"api-key","credentialModel":"instance-key","description":"The `token` argument, in whichever position the pinned operation declares it: a request header on 101 operations, the query string on 54, the form body on 15. Four operations declare none — api.test and the three OAuth methods."},{"id":"oauth-access-token","label":"OAuth token issued by this instance","kind":"bearer","requestAware":true,"credentialModel":"dedicated","description":"A bot, user, or workspace token minted by this instance's modeled OAuth flow, presented through the same transports. Tokens are persisted only as SHA-256 digests, and a revoked token stops working immediately — which is what makes auth.revoke and apps.uninstall real."}],"authVerifierId":"slack-token-hybrid","credentialModel":"dedicated","credentialRequirements":{"description":"The verifier must see the whole request: the credential may arrive in the Authorization header, a `token` request header, the query string, or the decoded form body, and it is resolved against this instance's OAuth token digests before falling back to the instance key. The acting user follows the credential — an OAuth user token acts as its user, a bot token and the instance key act as the workspace's app bot.","requestAware":true},"direction":"bidirectional","runtimeOperations":[{"method":"post","path":"/admin.apps.approve","operationId":"admin_apps_approve"},{"method":"get","path":"/admin.apps.approved.list","operationId":"admin_apps_approved_list"},{"method":"get","path":"/admin.apps.requests.list","operationId":"admin_apps_requests_list"},{"method":"post","path":"/admin.apps.restrict","operationId":"admin_apps_restrict"},{"method":"get","path":"/admin.apps.restricted.list","operationId":"admin_apps_restricted_list"},{"method":"post","path":"/admin.conversations.archive","operationId":"admin_conversations_archive"},{"method":"post","path":"/admin.conversations.convertToPrivate","operationId":"admin_conversations_convertToPrivate"},{"method":"post","path":"/admin.conversations.create","operationId":"admin_conversations_create"},{"method":"post","path":"/admin.conversations.delete","operationId":"admin_conversations_delete"},{"method":"post","path":"/admin.conversations.disconnectShared","operationId":"admin_conversations_disconnectShared"},{"method":"get","path":"/admin.conversations.ekm.listOriginalConnectedChannelInfo","operationId":"admin_conversations_ekm_listOriginalConnectedChannelInfo"},{"method":"get","path":"/admin.conversations.getConversationPrefs","operationId":"admin_conversations_getConversationPrefs"},{"method":"get","path":"/admin.conversations.getTeams","operationId":"admin_conversations_getTeams"},{"method":"post","path":"/admin.conversations.invite","operationId":"admin_conversations_invite"},{"method":"post","path":"/admin.conversations.rename","operationId":"admin_conversations_rename"},{"method":"post","path":"/admin.conversations.restrictAccess.addGroup","operationId":"admin_conversations_restrictAccess_addGroup"},{"method":"get","path":"/admin.conversations.restrictAccess.listGroups","operationId":"admin_conversations_restrictAccess_listGroups"},{"method":"post","path":"/admin.conversations.restrictAccess.removeGroup","operationId":"admin_conversations_restrictAccess_removeGroup"},{"method":"get","path":"/admin.conversations.search","operationId":"admin_conversations_search"},{"method":"post","path":"/admin.conversations.setConversationPrefs","operationId":"admin_conversations_setConversationPrefs"},{"method":"post","path":"/admin.conversations.setTeams","operationId":"admin_conversations_setTeams"},{"method":"post","path":"/admin.conversations.unarchive","operationId":"admin_conversations_unarchive"},{"method":"post","path":"/admin.emoji.add","operationId":"admin_emoji_add"},{"method":"post","path":"/admin.emoji.addAlias","operationId":"admin_emoji_addAlias"},{"method":"get","path":"/admin.emoji.list","operationId":"admin_emoji_list"},{"method":"post","path":"/admin.emoji.remove","operationId":"admin_emoji_remove"},{"method":"post","path":"/admin.emoji.rename","operationId":"admin_emoji_rename"},{"method":"post","path":"/admin.inviteRequests.approve","operationId":"admin_inviteRequests_approve"},{"method":"get","path":"/admin.inviteRequests.approved.list","operationId":"admin_inviteRequests_approved_list"},{"method":"get","path":"/admin.inviteRequests.denied.list","operationId":"admin_inviteRequests_denied_list"},{"method":"post","path":"/admin.inviteRequests.deny","operationId":"admin_inviteRequests_deny"},{"method":"get","path":"/admin.inviteRequests.list","operationId":"admin_inviteRequests_list"},{"method":"get","path":"/admin.teams.admins.list","operationId":"admin_teams_admins_list"},{"method":"post","path":"/admin.teams.create","operationId":"admin_teams_create"},{"method":"get","path":"/admin.teams.list","operationId":"admin_teams_list"},{"method":"get","path":"/admin.teams.owners.list","operationId":"admin_teams_owners_list"},{"method":"get","path":"/admin.teams.settings.info","operationId":"admin_teams_settings_info"},{"method":"post","path":"/admin.teams.settings.setDefaultChannels","operationId":"admin_teams_settings_setDefaultChannels"},{"method":"post","path":"/admin.teams.settings.setDescription","operationId":"admin_teams_settings_setDescription"},{"method":"post","path":"/admin.teams.settings.setDiscoverability","operationId":"admin_teams_settings_setDiscoverability"},{"method":"post","path":"/admin.teams.settings.setIcon","operationId":"admin_teams_settings_setIcon"},{"method":"post","path":"/admin.teams.settings.setName","operationId":"admin_teams_settings_setName"},{"method":"post","path":"/admin.usergroups.addChannels","operationId":"admin_usergroups_addChannels"},{"method":"post","path":"/admin.usergroups.addTeams","operationId":"admin_usergroups_addTeams"},{"method":"get","path":"/admin.usergroups.listChannels","operationId":"admin_usergroups_listChannels"},{"method":"post","path":"/admin.usergroups.removeChannels","operationId":"admin_usergroups_removeChannels"},{"method":"post","path":"/admin.users.assign","operationId":"admin_users_assign"},{"method":"post","path":"/admin.users.invite","operationId":"admin_users_invite"},{"method":"get","path":"/admin.users.list","operationId":"admin_users_list"},{"method":"post","path":"/admin.users.remove","operationId":"admin_users_remove"},{"method":"post","path":"/admin.users.session.invalidate","operationId":"admin_users_session_invalidate"},{"method":"post","path":"/admin.users.session.reset","operationId":"admin_users_session_reset"},{"method":"post","path":"/admin.users.setAdmin","operationId":"admin_users_setAdmin"},{"method":"post","path":"/admin.users.setExpiration","operationId":"admin_users_setExpiration"},{"method":"post","path":"/admin.users.setOwner","operationId":"admin_users_setOwner"},{"method":"post","path":"/admin.users.setRegular","operationId":"admin_users_setRegular"},{"method":"get","path":"/api.test","operationId":"api_test"},{"method":"get","path":"/apps.event.authorizations.list","operationId":"apps_event_authorizations_list"},{"method":"get","path":"/apps.permissions.info","operationId":"apps_permissions_info"},{"method":"get","path":"/apps.permissions.request","operationId":"apps_permissions_request"},{"method":"get","path":"/apps.permissions.resources.list","operationId":"apps_permissions_resources_list"},{"method":"get","path":"/apps.permissions.scopes.list","operationId":"apps_permissions_scopes_list"},{"method":"get","path":"/apps.permissions.users.list","operationId":"apps_permissions_users_list"},{"method":"get","path":"/apps.permissions.users.request","operationId":"apps_permissions_users_request"},{"method":"get","path":"/apps.uninstall","operationId":"apps_uninstall"},{"method":"get","path":"/auth.revoke","operationId":"auth_revoke"},{"method":"get","path":"/auth.test","operationId":"auth_test"},{"method":"get","path":"/bots.info","operationId":"bots_info"},{"method":"post","path":"/calls.add","operationId":"calls_add"},{"method":"post","path":"/calls.end","operationId":"calls_end"},{"method":"get","path":"/calls.info","operationId":"calls_info"},{"method":"post","path":"/calls.participants.add","operationId":"calls_participants_add"},{"method":"post","path":"/calls.participants.remove","operationId":"calls_participants_remove"},{"method":"post","path":"/calls.update","operationId":"calls_update"},{"method":"post","path":"/chat.delete","operationId":"chat_delete"},{"method":"post","path":"/chat.deleteScheduledMessage","operationId":"chat_deleteScheduledMessage"},{"method":"get","path":"/chat.getPermalink","operationId":"chat_getPermalink"},{"method":"post","path":"/chat.meMessage","operationId":"chat_meMessage"},{"method":"post","path":"/chat.postEphemeral","operationId":"chat_postEphemeral"},{"method":"post","path":"/chat.postMessage","operationId":"chat_postMessage"},{"method":"get","path":"/chat.scheduledMessages.list","operationId":"chat_scheduledMessages_list"},{"method":"post","path":"/chat.scheduleMessage","operationId":"chat_scheduleMessage"},{"method":"post","path":"/chat.unfurl","operationId":"chat_unfurl"},{"method":"post","path":"/chat.update","operationId":"chat_update"},{"method":"post","path":"/conversations.archive","operationId":"conversations_archive"},{"method":"post","path":"/conversations.close","operationId":"conversations_close"},{"method":"post","path":"/conversations.create","operationId":"conversations_create"},{"method":"get","path":"/conversations.history","operationId":"conversations_history"},{"method":"get","path":"/conversations.info","operationId":"conversations_info"},{"method":"post","path":"/conversations.invite","operationId":"conversations_invite"},{"method":"post","path":"/conversations.join","operationId":"conversations_join"},{"method":"post","path":"/conversations.kick","operationId":"conversations_kick"},{"method":"post","path":"/conversations.leave","operationId":"conversations_leave"},{"method":"get","path":"/conversations.list","operationId":"conversations_list"},{"method":"post","path":"/conversations.mark","operationId":"conversations_mark"},{"method":"get","path":"/conversations.members","operationId":"conversations_members"},{"method":"post","path":"/conversations.open","operationId":"conversations_open"},{"method":"post","path":"/conversations.rename","operationId":"conversations_rename"},{"method":"get","path":"/conversations.replies","operationId":"conversations_replies"},{"method":"post","path":"/conversations.setPurpose","operationId":"conversations_setPurpose"},{"method":"post","path":"/conversations.setTopic","operationId":"conversations_setTopic"},{"method":"post","path":"/conversations.unarchive","operationId":"conversations_unarchive"},{"method":"get","path":"/dialog.open","operationId":"dialog_open"},{"method":"post","path":"/dnd.endDnd","operationId":"dnd_endDnd"},{"method":"post","path":"/dnd.endSnooze","operationId":"dnd_endSnooze"},{"method":"get","path":"/dnd.info","operationId":"dnd_info"},{"method":"post","path":"/dnd.setSnooze","operationId":"dnd_setSnooze"},{"method":"get","path":"/dnd.teamInfo","operationId":"dnd_teamInfo"},{"method":"get","path":"/emoji.list","operationId":"emoji_list"},{"method":"post","path":"/files.comments.delete","operationId":"files_comments_delete"},{"method":"post","path":"/files.delete","operationId":"files_delete"},{"method":"get","path":"/files.info","operationId":"files_info"},{"method":"get","path":"/files.list","operationId":"files_list"},{"method":"post","path":"/files.remote.add","operationId":"files_remote_add"},{"method":"get","path":"/files.remote.info","operationId":"files_remote_info"},{"method":"get","path":"/files.remote.list","operationId":"files_remote_list"},{"method":"post","path":"/files.remote.remove","operationId":"files_remote_remove"},{"method":"get","path":"/files.remote.share","operationId":"files_remote_share"},{"method":"post","path":"/files.remote.update","operationId":"files_remote_update"},{"method":"post","path":"/files.revokePublicURL","operationId":"files_revokePublicURL"},{"method":"post","path":"/files.sharedPublicURL","operationId":"files_sharedPublicURL"},{"method":"post","path":"/files.upload","operationId":"files_upload"},{"method":"get","path":"/migration.exchange","operationId":"migration_exchange"},{"method":"post","path":"/pins.add","operationId":"pins_add"},{"method":"get","path":"/pins.list","operationId":"pins_list"},{"method":"post","path":"/pins.remove","operationId":"pins_remove"},{"method":"post","path":"/reactions.add","operationId":"reactions_add"},{"method":"get","path":"/reactions.get","operationId":"reactions_get"},{"method":"get","path":"/reactions.list","operationId":"reactions_list"},{"method":"post","path":"/reactions.remove","operationId":"reactions_remove"},{"method":"post","path":"/reminders.add","operationId":"reminders_add"},{"method":"post","path":"/reminders.complete","operationId":"reminders_complete"},{"method":"post","path":"/reminders.delete","operationId":"reminders_delete"},{"method":"get","path":"/reminders.info","operationId":"reminders_info"},{"method":"get","path":"/reminders.list","operationId":"reminders_list"},{"method":"get","path":"/rtm.connect","operationId":"rtm_connect"},{"method":"get","path":"/search.messages","operationId":"search_messages"},{"method":"post","path":"/stars.add","operationId":"stars_add"},{"method":"get","path":"/stars.list","operationId":"stars_list"},{"method":"post","path":"/stars.remove","operationId":"stars_remove"},{"method":"get","path":"/team.accessLogs","operationId":"team_accessLogs"},{"method":"get","path":"/team.billableInfo","operationId":"team_billableInfo"},{"method":"get","path":"/team.info","operationId":"team_info"},{"method":"get","path":"/team.integrationLogs","operationId":"team_integrationLogs"},{"method":"get","path":"/team.profile.get","operationId":"team_profile_get"},{"method":"post","path":"/usergroups.create","operationId":"usergroups_create"},{"method":"post","path":"/usergroups.disable","operationId":"usergroups_disable"},{"method":"post","path":"/usergroups.enable","operationId":"usergroups_enable"},{"method":"get","path":"/usergroups.list","operationId":"usergroups_list"},{"method":"post","path":"/usergroups.update","operationId":"usergroups_update"},{"method":"get","path":"/usergroups.users.list","operationId":"usergroups_users_list"},{"method":"post","path":"/usergroups.users.update","operationId":"usergroups_users_update"},{"method":"get","path":"/users.conversations","operationId":"users_conversations"},{"method":"post","path":"/users.deletePhoto","operationId":"users_deletePhoto"},{"method":"get","path":"/users.getPresence","operationId":"users_getPresence"},{"method":"get","path":"/users.identity","operationId":"users_identity"},{"method":"get","path":"/users.info","operationId":"users_info"},{"method":"get","path":"/users.list","operationId":"users_list"},{"method":"get","path":"/users.lookupByEmail","operationId":"users_lookupByEmail"},{"method":"get","path":"/users.profile.get","operationId":"users_profile_get"},{"method":"post","path":"/users.profile.set","operationId":"users_profile_set"},{"method":"post","path":"/users.setActive","operationId":"users_setActive"},{"method":"post","path":"/users.setPhoto","operationId":"users_setPhoto"},{"method":"post","path":"/users.setPresence","operationId":"users_setPresence"},{"method":"get","path":"/views.open","operationId":"views_open"},{"method":"get","path":"/views.publish","operationId":"views_publish"},{"method":"get","path":"/views.push","operationId":"views_push"},{"method":"get","path":"/views.update","operationId":"views_update"},{"method":"get","path":"/workflows.stepCompleted","operationId":"workflows_stepCompleted"},{"method":"get","path":"/workflows.stepFailed","operationId":"workflows_stepFailed"},{"method":"get","path":"/workflows.updateStep","operationId":"workflows_updateStep"}],"coverage":{"documentScope":"bounded","runtimeFidelity":"mixed","counts":{"operations":171},"notes":["This document publishes the 171 operations Slack authenticates with a token the app holds. The 3 OAuth methods authenticate the app itself and are the sibling profile; together the two publish all 174 operations the revision exposes.","This document publishes every operation Slack published in Web API 1.7.0; nothing inside that revision is pruned. The bound is the revision itself: upstream's web-api/CHANGELOG.md's most recent entry is August 2020, while Slack's current method reference lists roughly 310 method names, so methods shipped after this revision (bookmarks.*, canvases.*, slackLists.*, assistant.*, functions.*, admin.roles.*, files.getUploadURLExternal, chat.startStream, search.all, conversations.acceptSharedInvite, …) are out of scope for this contract.","Every application failure is an HTTP 200 with `ok: false` and a machine `error` code, because that is Slack's contract — the pinned document declares exactly a 200 and a default response on all 174 operations and nothing else. A non-2xx from this contract means something a caller could not have caused; an unknown instance in particular stays a real 404, so a misrouted request can never be mistaken for a legitimate refusal.","153 of 174 operations are fully modeled against persistent per-instance state: conversations of all four kinds, messages and threads, reactions, pins, stars, files and remote files, reminders, calls, usergroups, custom emoji, presence and do-not-disturb, search, App Home views, and 46 of the 56 admin.* operations.","The admin surface writes to the same state the member surface reads: admin.conversations.create produces a channel conversations.list sees, admin.users.setAdmin changes the is_admin users.info reports, admin.emoji.add adds an emoji emoji.list returns. An admin API over its own private copy would pass every admin-only test and be useless for an eval that crosses between the two.","21 operations fail closed with a declared Slack error rather than fabricating success: dialog.open, views.open and views.push need an interactivity trigger only Slack's dispatcher can issue; the three workflows.* methods need Slack's Workflow Builder engine; rtm.connect needs an RTM WebSocket gateway; apps.event.authorizations.list needs Slack's event-delivery pipeline; the two apps.permissions.*request methods open a Slack-hosted prompt; and 10 admin.* methods need a multi-workspace Enterprise Grid organisation, Slack Connect, Enterprise Key Management, or externally provisioned IdP groups. Each keeps its exact schema and a mounted route that validates the request first, so a malformed request is still reported as such.","Every emitted error code is one the vendor declares *for that operation*. 99 operations publish an exact enum and the other 75 carry Slack's default error template, so codes for the latter must appear somewhere in the document's own 200-code union. Three codes Slack really returns — invalid_code, bad_redirect_uri, already_public — appear nowhere in this revision, so the refusals that would use them land on codes it does name. slack.declared-errors.test.ts certifies this statically, branch by branch.","The pinned document types `ts`, `thread_ts`, `latest`, `oldest`, `ts_from` and `ts_to` as `number` while `defs_ts` declares a timestamp a string matching `^\\d{10}\\.\\d{6}$`. `defs_ts` wins: a `ts` is a message's primary key within its channel, and numeric coercion drops a trailing zero — which would make roughly a tenth of all messages unaddressable.","api.test is the contract's single deliberate auth deviation: Slack accepts no token, and this requires the instance credential, because a tokenless route beneath /purple-suite/{instanceId} would be an unauthenticated instance-existence oracle answering ok:true for a misrouted request.","File and image bytes are never retained. files.upload, users.setPhoto, admin.emoji.add, admin.teams.settings.setIcon and files.remote.add record metadata and a SHA-256 digest; url_private and image_* keep Slack's declared shape and no byte-serving route is mounted, because Slack serves those from files.slack.com. A *remote* file is metadata about a file in another service, which is exactly what this contract can hold, so all six remote operations are fully modeled.","48 of Slack's own 348 published response examples fail Slack's own published schemas. Where they disagree the schema wins, except for three measured schema defects the response-contract suite records by name — admin.conversations.search's 200 schema does not declare `ok`, and conversations.history/replies close out the response_metadata their own examples return.","People come from the shared PurpleSuite identity roster, so a user here is the same person the instance's HRIS and calendar apps know, joined on email. users.lookupByEmail is therefore a real cross-app join."]},"specKind":"openapi","specPath":"/api/purple-suite/contracts/chat/slack/slack-web-1-7-0/openapi.json","primaryAliasSpecPath":"/api/purple-suite/contracts/chat/slack/openapi.json","key":"chat/slack/slack-web-1-7-0","system":"chat","paint":"slack","productLabel":"Slack","runtimeBase":"/api/purple-suite/{instanceId}/contracts/chat/slack","productDocsPath":"/api/purple-suite/docs/chat/slack","docsPath":"/api/purple-suite/docs/chat/slack/slack-web-1-7-0","primary":true,"source":"painted"},{"id":"slack-oauth-1-7-0","label":"Slack OAuth 1.7.0 — token exchange","version":"1.7.0","protocol":"rest","authProfiles":[{"id":"client-credentials-instance-key","label":"Client credentials — emulator compatibility","kind":"basic","credentialModel":"instance-key","description":"client_id and client_secret, as arguments or as HTTP Basic — both of which Slack accepts. PurpleSuite maps the client-secret position to the selected instance key; the client id is public by design and is read as written. No vendor-visible header is added."}],"authVerifierId":"slack-oauth-client","credentialModel":"instance-key","direction":"bidirectional","runtimeOperations":[{"method":"get","path":"/oauth.access","operationId":"oauth_access"},{"method":"get","path":"/oauth.token","operationId":"oauth_token"},{"method":"get","path":"/oauth.v2.access","operationId":"oauth_v2_access"}],"coverage":{"documentScope":"bounded","runtimeFidelity":"modeled","counts":{"operations":3},"notes":["The complete OAuth surface of this revision: oauth.access, oauth.token, oauth.v2.access. All three are fully modeled — this is not a stub that returns a fixed token.","The partition is derived, not decided. All 174 operations declare the single slackAuth scheme, so the credential models cannot be told apart from `security`; they are told apart by the parameters. An operation declaring client_id + client_secret and no token authenticates the app itself, which selects exactly these three — and notably not apps.uninstall, which declares all three.","Authorization codes are one-use: the exchange deletes the code in the same step that mints the token pair, so a replay is refused.","Tokens are persisted only as SHA-256 digests keyed by kind, so the stored state cannot be replayed as a credential. A revoked token stops authenticating resource requests immediately.","oauth.access and oauth.token keep their own v1 response shapes rather than being aliased onto v2. v1 returns one flat token plus a `bot` sub-object and oauth.token returns a retired `xoxa-` workspace token; a client pinned to v1 is the only kind that still calls them, and it is exactly the client an alias would break.","Slack's hosted authorization *page* is a browser flow this contract does not reproduce, so the bootstrap mints three one-use codes for this instance's own client, with deterministic documented plaintext and digest-only storage. That is a boundary on the consent UI, not on the token endpoints.","invalid_code and bad_redirect_uri are Slack's real refusals here and appear nowhere in this revision — not in an enum, not in an example, not in a description — so those refusals resolve to codes the document does name. invalid_client_id and bad_client_secret are declared and are used verbatim.","Every application failure is an HTTP 200 with `ok: false` and a machine `error` code, because that is Slack's contract — the pinned document declares exactly a 200 and a default response on all 174 operations and nothing else. A non-2xx from this contract means something a caller could not have caused; an unknown instance in particular stays a real 404, so a misrouted request can never be mistaken for a legitimate refusal.","This document publishes every operation Slack published in Web API 1.7.0; nothing inside that revision is pruned. The bound is the revision itself: upstream's web-api/CHANGELOG.md's most recent entry is August 2020, while Slack's current method reference lists roughly 310 method names, so methods shipped after this revision (bookmarks.*, canvases.*, slackLists.*, assistant.*, functions.*, admin.roles.*, files.getUploadURLExternal, chat.startStream, search.all, conversations.acceptSharedInvite, …) are out of scope for this contract."]},"specKind":"openapi","specPath":"/api/purple-suite/contracts/chat/slack/slack-oauth-1-7-0/openapi.json","key":"chat/slack/slack-oauth-1-7-0","system":"chat","paint":"slack","productLabel":"Slack","runtimeBase":"/api/purple-suite/{instanceId}/contracts/chat/slack","productDocsPath":"/api/purple-suite/docs/chat/slack","docsPath":"/api/purple-suite/docs/chat/slack/slack-oauth-1-7-0","primary":false,"source":"painted"}],"key":"chat/slack","source":"painted"},{"system":"cloud-logs","paint":"purplesuite","available":true,"label":"Purple Suite Cloud Logs API","runtimeBase":"/api/purple-suite/cloud-logs","docsPath":"/api/purple-suite/docs/cloud-logs/purplesuite","description":"Read-only synthetic cloud inventory and application observations. Correlate project, stable resource identity, FQDN and observation time with your inventory source. Does not modify cloud infrastructure or CMDB relationships.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Suite Cloud Logs API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/cloud-logs/purplesuite/openapi.json","runtimeOperations":[],"key":"cloud-logs/purplesuite/native-openapi","system":"cloud-logs","paint":"purplesuite","productLabel":"Purple Suite Cloud Logs API","runtimeBase":"/api/purple-suite/cloud-logs","productDocsPath":"/api/purple-suite/docs/cloud-logs/purplesuite","docsPath":"/api/purple-suite/docs/cloud-logs/purplesuite/native-openapi","description":"Read-only synthetic cloud inventory and application observations. Correlate project, stable resource identity, FQDN and observation time with your inventory source. Does not modify cloud infrastructure or CMDB relationships.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"cloud-logs/purplesuite","source":"native"},{"system":"community","paint":"purplesuite","available":true,"label":"Purple Suite Community API","runtimeBase":"/api/purple-suite/community","docsPath":"/api/purple-suite/docs/community/purplesuite","description":"\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Suite Community API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/community/purplesuite/openapi.json","runtimeOperations":[],"key":"community/purplesuite/native-openapi","system":"community","paint":"purplesuite","productLabel":"Purple Suite Community API","runtimeBase":"/api/purple-suite/community","productDocsPath":"/api/purple-suite/docs/community/purplesuite","docsPath":"/api/purple-suite/docs/community/purplesuite/native-openapi","description":"\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"community/purplesuite","source":"native"},{"system":"crm","paint":"hubspot","available":true,"label":"HubSpot","runtimeBase":"/api/purple-suite/{instanceId}/contracts/crm/hubspot","docsPath":"/api/purple-suite/docs/crm/hubspot","primaryProfileId":"hubspot-crm-objects-v3","profiles":[{"id":"hubspot-crm-objects-v3","label":"HubSpot CRM Objects v3 — bounded modeled service","version":"v3-2026-09-16","protocol":"rest","specKind":"openapi","authVerifierId":"hubspot-crm-bearer","credentialModel":"instance-key","direction":"bidirectional","authProfiles":[{"id":"bearer","label":"Bearer token","kind":"bearer","credentialModel":"instance-key","description":"The instance key occupies HubSpot's bearer-token position. OAuth issuance and real HubSpot account credentials are outside this emulator profile."}],"runtimeOperations":[{"method":"get","path":"/crm/v3/objects/:objectType","operationId":"list"},{"method":"post","path":"/crm/v3/objects/:objectType","operationId":"create"},{"method":"get","path":"/crm/v3/objects/:objectType/:objectId","operationId":"read"},{"method":"patch","path":"/crm/v3/objects/:objectType/:objectId","operationId":"update"},{"method":"delete","path":"/crm/v3/objects/:objectType/:objectId","operationId":"archive"},{"method":"post","path":"/crm/v3/objects/:objectType/batch/create","operationId":"batchCreate"},{"method":"post","path":"/crm/v3/objects/:objectType/batch/read","operationId":"batchRead"},{"method":"post","path":"/crm/v3/objects/:objectType/batch/update","operationId":"batchUpdate"},{"method":"post","path":"/crm/v3/objects/:objectType/batch/upsert","operationId":"batchUpsert"},{"method":"post","path":"/crm/v3/objects/:objectType/batch/archive","operationId":"batchArchive"},{"method":"post","path":"/crm/v3/objects/:objectType/search","operationId":"search"}],"coverage":{"documentScope":"bounded","runtimeFidelity":"modeled","counts":{"operations":11,"types":3},"notes":["Eleven generic CRM Objects v3 operations over contacts, companies and deals. This independently authored contract is derived from public reference facts, not HubSpot's restricted specification repository.","Batch create requires unique objectWriteTraceId values; contact-email upserts require the complete existing property set. Contact email is the only configured unique property. Associations, custom schemas, custom objects, owner/pipeline administration, marketing, and OAuth issuance are outside the bounded profile.","The coverage ledger records modeled-core batch/search differences. No production HubSpot differential fixtures have been captured; this is not a full-product exactness claim."]},"specPath":"/api/purple-suite/contracts/crm/hubspot/hubspot-crm-objects-v3/openapi.json","primaryAliasSpecPath":"/api/purple-suite/contracts/crm/hubspot/openapi.json","key":"crm/hubspot/hubspot-crm-objects-v3","system":"crm","paint":"hubspot","productLabel":"HubSpot","runtimeBase":"/api/purple-suite/{instanceId}/contracts/crm/hubspot","productDocsPath":"/api/purple-suite/docs/crm/hubspot","docsPath":"/api/purple-suite/docs/crm/hubspot/hubspot-crm-objects-v3","primary":true,"source":"painted"}],"key":"crm/hubspot","source":"painted"},{"system":"crm","paint":"klaviyo","available":true,"label":"Klaviyo","runtimeBase":"/api/purple-suite/{instanceId}/contracts/crm/klaviyo","docsPath":"/api/purple-suite/docs/crm/klaviyo","primaryProfileId":"klaviyo-2026-07-15","profiles":[{"id":"klaviyo-2026-07-15","label":"Klaviyo API 2026-07-15 — persistent modeled service","version":"2026-07-15","protocol":"rest","authProfiles":[{"id":"api-key","label":"Private API key — emulator compatibility","kind":"api-key","credentialModel":"instance-key","description":"Authorization: Klaviyo-API-Key <private-api-key>. This is Klaviyo's real and only transport for /api/ routes; PurpleSuite maps the private-key position to the selected instance key and adds no vendor-visible header."}],"authVerifierId":"klaviyo-api-key-instance-key","credentialModel":"instance-key","direction":"bidirectional","runtimeOperations":[{"method":"get","path":"/api/accounts","operationId":"get_accounts"},{"method":"get","path":"/api/accounts/:id","operationId":"get_account"},{"method":"get","path":"/api/lists","operationId":"get_lists"},{"method":"post","path":"/api/lists","operationId":"create_list"},{"method":"get","path":"/api/lists/:id","operationId":"get_list"},{"method":"patch","path":"/api/lists/:id","operationId":"update_list"},{"method":"delete","path":"/api/lists/:id","operationId":"delete_list"},{"method":"get","path":"/api/lists/:id/tags","operationId":"get_tags_for_list"},{"method":"get","path":"/api/lists/:id/relationships/tags","operationId":"get_tag_ids_for_list"},{"method":"get","path":"/api/lists/:id/profiles","operationId":"get_profiles_for_list"},{"method":"get","path":"/api/lists/:id/relationships/profiles","operationId":"get_profile_ids_for_list"},{"method":"post","path":"/api/lists/:id/relationships/profiles","operationId":"add_profiles_to_list"},{"method":"delete","path":"/api/lists/:id/relationships/profiles","operationId":"remove_profiles_from_list"},{"method":"get","path":"/api/lists/:id/flow-triggers","operationId":"get_flows_triggered_by_list"},{"method":"get","path":"/api/lists/:id/relationships/flow-triggers","operationId":"get_ids_for_flows_triggered_by_list"},{"method":"get","path":"/api/profiles","operationId":"get_profiles"},{"method":"post","path":"/api/profiles","operationId":"create_profile"},{"method":"get","path":"/api/profiles/:id","operationId":"get_profile"},{"method":"patch","path":"/api/profiles/:id","operationId":"update_profile"},{"method":"get","path":"/api/profile-bulk-import-jobs","operationId":"get_bulk_import_profiles_jobs"},{"method":"post","path":"/api/profile-bulk-import-jobs","operationId":"bulk_import_profiles"},{"method":"get","path":"/api/profile-bulk-import-jobs/:job_id","operationId":"get_bulk_import_profiles_job"},{"method":"get","path":"/api/profile-suppression-bulk-create-jobs","operationId":"get_bulk_suppress_profiles_jobs"},{"method":"post","path":"/api/profile-suppression-bulk-create-jobs","operationId":"bulk_suppress_profiles"},{"method":"get","path":"/api/profile-suppression-bulk-create-jobs/:job_id","operationId":"get_bulk_suppress_profiles_job"},{"method":"get","path":"/api/profile-suppression-bulk-delete-jobs","operationId":"get_bulk_unsuppress_profiles_jobs"},{"method":"post","path":"/api/profile-suppression-bulk-delete-jobs","operationId":"bulk_unsuppress_profiles"},{"method":"get","path":"/api/profile-suppression-bulk-delete-jobs/:job_id","operationId":"get_bulk_unsuppress_profiles_job"},{"method":"get","path":"/api/push-tokens","operationId":"get_push_tokens"},{"method":"post","path":"/api/push-tokens","operationId":"create_push_token"},{"method":"get","path":"/api/push-tokens/:id","operationId":"get_push_token"},{"method":"delete","path":"/api/push-tokens/:id","operationId":"delete_push_token"},{"method":"post","path":"/api/profile-import","operationId":"create_or_update_profile"},{"method":"post","path":"/api/profile-merge","operationId":"merge_profiles"},{"method":"post","path":"/api/profile-subscription-bulk-create-jobs","operationId":"bulk_subscribe_profiles"},{"method":"post","path":"/api/profile-subscription-bulk-delete-jobs","operationId":"bulk_unsubscribe_profiles"},{"method":"get","path":"/api/profiles/:id/push-tokens","operationId":"get_push_tokens_for_profile"},{"method":"get","path":"/api/profiles/:id/relationships/push-tokens","operationId":"get_push_token_ids_for_profile"},{"method":"get","path":"/api/profiles/:id/lists","operationId":"get_lists_for_profile"},{"method":"get","path":"/api/profiles/:id/relationships/lists","operationId":"get_list_ids_for_profile"},{"method":"get","path":"/api/profiles/:id/segments","operationId":"get_segments_for_profile"},{"method":"get","path":"/api/profiles/:id/relationships/segments","operationId":"get_segment_ids_for_profile"},{"method":"get","path":"/api/profiles/:id/conversation","operationId":"get_conversation_for_profile"},{"method":"get","path":"/api/profiles/:id/relationships/conversation","operationId":"get_conversation_id_for_profile"},{"method":"get","path":"/api/profiles/:id/conversations","operationId":"get_conversations_for_profile"},{"method":"get","path":"/api/profiles/:id/relationships/conversations","operationId":"get_conversation_ids_for_profile"},{"method":"get","path":"/api/profile-bulk-import-jobs/:id/lists","operationId":"get_list_for_bulk_import_profiles_job"},{"method":"get","path":"/api/profile-bulk-import-jobs/:id/relationships/lists","operationId":"get_list_ids_for_bulk_import_profiles_job"},{"method":"get","path":"/api/profile-bulk-import-jobs/:id/profiles","operationId":"get_profiles_for_bulk_import_profiles_job"},{"method":"get","path":"/api/profile-bulk-import-jobs/:id/relationships/profiles","operationId":"get_profile_ids_for_bulk_import_profiles_job"},{"method":"get","path":"/api/profile-bulk-import-jobs/:id/import-errors","operationId":"get_errors_for_bulk_import_profiles_job"},{"method":"get","path":"/api/push-tokens/:id/profile","operationId":"get_profile_for_push_token"},{"method":"get","path":"/api/push-tokens/:id/relationships/profile","operationId":"get_profile_id_for_push_token"},{"method":"get","path":"/api/segments","operationId":"get_segments"},{"method":"post","path":"/api/segments","operationId":"create_segment"},{"method":"get","path":"/api/segments/:id","operationId":"get_segment"},{"method":"patch","path":"/api/segments/:id","operationId":"update_segment"},{"method":"delete","path":"/api/segments/:id","operationId":"delete_segment"},{"method":"get","path":"/api/segments/:id/tags","operationId":"get_tags_for_segment"},{"method":"get","path":"/api/segments/:id/relationships/tags","operationId":"get_tag_ids_for_segment"},{"method":"get","path":"/api/segments/:id/profiles","operationId":"get_profiles_for_segment"},{"method":"get","path":"/api/segments/:id/relationships/profiles","operationId":"get_profile_ids_for_segment"},{"method":"get","path":"/api/segments/:id/flow-triggers","operationId":"get_flows_triggered_by_segment"},{"method":"get","path":"/api/segments/:id/relationships/flow-triggers","operationId":"get_ids_for_flows_triggered_by_segment"}],"coverage":{"documentScope":"bounded","runtimeFidelity":"modeled","counts":{"operations":64},"notes":["The published surface is 64 of Klaviyo's 345 official 2026-07-15 operations: every operation the vendor tags Accounts, Lists, Profiles, and Segments. All of them execute against persistent per-instance state.","62 operations are fully modeled. create_segment and update_segment are modeled-core: the derived document narrows SegmentDefinition to the condition types this instance evaluates deterministically, and a request carrying a predictive-analytics, channel-affinity, postal-code-distance, metric, custom-object, or permissions condition is rejected with Klaviyo's 400 envelope rather than silently accepted.","Segment membership is evaluated from each segment's definition on every read, matching Klaviyo's dynamic segments; it is never stored as a join table.","The remaining 281 official operations (Catalogs, Custom Objects, Campaigns, Tags, Metrics, Flows, Coupons, Templates, Client, Forms, Events, Reporting, Webhooks, Images, Web Feeds, Reviews, Tracking Settings, Conversations, Data Privacy) are deliberately absent from this document and unmounted, so PurpleSuite makes no claim about them. They remain readable in the untouched pinned source, and COVERAGE_LEDGER.md classifies every one of the 345.","The 12 Client operations additionally use a different transport — public-key `company_id` with `security: []` — and would require their own profile.","predictive_analytics stays schema-visible and returns null: the vendor declares it nullable and the scores come from Klaviyo-hosted models."]},"specKind":"openapi","specPath":"/api/purple-suite/contracts/crm/klaviyo/klaviyo-2026-07-15/openapi.json","primaryAliasSpecPath":"/api/purple-suite/contracts/crm/klaviyo/openapi.json","key":"crm/klaviyo/klaviyo-2026-07-15","system":"crm","paint":"klaviyo","productLabel":"Klaviyo","runtimeBase":"/api/purple-suite/{instanceId}/contracts/crm/klaviyo","productDocsPath":"/api/purple-suite/docs/crm/klaviyo","docsPath":"/api/purple-suite/docs/crm/klaviyo/klaviyo-2026-07-15","primary":true,"source":"painted"}],"key":"crm/klaviyo","source":"painted"},{"system":"crm","paint":"purplesuite","available":true,"label":"Purple Suite CRM API","runtimeBase":"/api/purple-suite/crm","docsPath":"/api/purple-suite/docs/crm/purplesuite","description":"\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Suite CRM API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/crm/purplesuite/openapi.json","runtimeOperations":[],"key":"crm/purplesuite/native-openapi","system":"crm","paint":"purplesuite","productLabel":"Purple Suite CRM API","runtimeBase":"/api/purple-suite/crm","productDocsPath":"/api/purple-suite/docs/crm/purplesuite","docsPath":"/api/purple-suite/docs/crm/purplesuite/native-openapi","description":"\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"crm/purplesuite","source":"native"},{"system":"crm","paint":"salesforce","available":true,"label":"Salesforce","runtimeBase":"/api/purple-suite/{instanceId}/contracts/crm/salesforce","docsPath":"/api/purple-suite/docs/crm/salesforce","primaryProfileId":"standard-objects-v66","profiles":[{"id":"standard-objects-v66","label":"Salesforce REST v66.0 — standard CRM object core","version":"66.0","protocol":"rest","specKind":"openapi","authVerifierId":"salesforce-standard-objects-bearer","credentialModel":"instance-key","direction":"bidirectional","authProfiles":[{"id":"bearer","label":"Bearer token","kind":"bearer","credentialModel":"instance-key","description":"Instance key in the documented Salesforce bearer-token position. OAuth grants are outside this resource profile."}],"runtimeOperations":[{"method":"post","path":"/services/data/v66.0/sobjects/Account","operationId":"createAccount"},{"method":"get","path":"/services/data/v66.0/sobjects/Account/:recordId","operationId":"retrieveAccount"},{"method":"patch","path":"/services/data/v66.0/sobjects/Account/:recordId","operationId":"updateAccount"},{"method":"delete","path":"/services/data/v66.0/sobjects/Account/:recordId","operationId":"deleteAccount"},{"method":"post","path":"/services/data/v66.0/sobjects/Contact","operationId":"createContact"},{"method":"get","path":"/services/data/v66.0/sobjects/Contact/:recordId","operationId":"retrieveContact"},{"method":"patch","path":"/services/data/v66.0/sobjects/Contact/:recordId","operationId":"updateContact"},{"method":"delete","path":"/services/data/v66.0/sobjects/Contact/:recordId","operationId":"deleteContact"},{"method":"post","path":"/services/data/v66.0/sobjects/Lead","operationId":"createLead"},{"method":"get","path":"/services/data/v66.0/sobjects/Lead/:recordId","operationId":"retrieveLead"},{"method":"patch","path":"/services/data/v66.0/sobjects/Lead/:recordId","operationId":"updateLead"},{"method":"delete","path":"/services/data/v66.0/sobjects/Lead/:recordId","operationId":"deleteLead"},{"method":"post","path":"/services/data/v66.0/sobjects/Opportunity","operationId":"createOpportunity"},{"method":"get","path":"/services/data/v66.0/sobjects/Opportunity/:recordId","operationId":"retrieveOpportunity"},{"method":"patch","path":"/services/data/v66.0/sobjects/Opportunity/:recordId","operationId":"updateOpportunity"},{"method":"delete","path":"/services/data/v66.0/sobjects/Opportunity/:recordId","operationId":"deleteOpportunity"},{"method":"get","path":"/services/data/v66.0/query","operationId":"query"},{"method":"get","path":"/services/data/v66.0/query/:queryLocator","operationId":"queryMore"}],"coverage":{"documentScope":"bounded","runtimeFidelity":"modeled","counts":{"operations":18,"types":4},"notes":["Selected standard fields, limited SOQL and JSON transport only; no full org/tenant parity claim. See README.md and complete acquired SOURCE_INVENTORY.md.","Persistent transactional CRUD, references, account deletion cascade and snapshot paging. Separate local budgets: 512 KiB records and 256 KiB query snapshots. No customer differential fixtures captured.","Native origin-relative attributes.url and nextRecordsUrl remain unchanged; the isolated client follows only validated vendor paths beneath its configured contract prefix."]},"specPath":"/api/purple-suite/contracts/crm/salesforce/standard-objects-v66/openapi.json","primaryAliasSpecPath":"/api/purple-suite/contracts/crm/salesforce/openapi.json","key":"crm/salesforce/standard-objects-v66","system":"crm","paint":"salesforce","productLabel":"Salesforce","runtimeBase":"/api/purple-suite/{instanceId}/contracts/crm/salesforce","productDocsPath":"/api/purple-suite/docs/crm/salesforce","docsPath":"/api/purple-suite/docs/crm/salesforce/standard-objects-v66","primary":true,"source":"painted"}],"key":"crm/salesforce","source":"painted"},{"system":"dex","paint":"purplesuite","available":true,"label":"Purple Suite DEX API","runtimeBase":"/api/purple-suite/dex","docsPath":"/api/purple-suite/docs/dex/purplesuite","description":"Digital Employee Experience (DEX) API — monitor device health, software inventory, experience scores, alerts, remediations, and IT campaigns. Resembles tools like Nexthink, Lakeside, and ServiceNow DEX.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Suite DEX API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/dex/purplesuite/openapi.json","runtimeOperations":[],"key":"dex/purplesuite/native-openapi","system":"dex","paint":"purplesuite","productLabel":"Purple Suite DEX API","runtimeBase":"/api/purple-suite/dex","productDocsPath":"/api/purple-suite/docs/dex/purplesuite","docsPath":"/api/purple-suite/docs/dex/purplesuite/native-openapi","description":"Digital Employee Experience (DEX) API — monitor device health, software inventory, experience scores, alerts, remediations, and IT campaigns. Resembles tools like Nexthink, Lakeside, and ServiceNow DEX.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"dex/purplesuite","source":"native"},{"system":"erp","paint":"purplesuite","available":true,"label":"Purple Suite ERP API","runtimeBase":"/api/purple-suite/erp","docsPath":"/api/purple-suite/docs/erp/purplesuite","description":"\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Suite ERP API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/erp/purplesuite/openapi.json","runtimeOperations":[],"key":"erp/purplesuite/native-openapi","system":"erp","paint":"purplesuite","productLabel":"Purple Suite ERP API","runtimeBase":"/api/purple-suite/erp","productDocsPath":"/api/purple-suite/docs/erp/purplesuite","docsPath":"/api/purple-suite/docs/erp/purplesuite/native-openapi","description":"\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"erp/purplesuite","source":"native"},{"system":"expense","paint":"concur","available":true,"label":"SAP Concur","runtimeBase":"/api/purple-suite/{instanceId}/contracts/expense/concur","docsPath":"/api/purple-suite/docs/expense/concur","primaryProfileId":"concur-expense-reports-v3","profiles":[{"id":"concur-expense-reports-v3","label":"SAP Concur Expense Reports v3.0","version":"v3.0; SAP-docs/preview.developer.concur.com @ main, src/api-explorer/v3-0 Swagger 2.0 set","protocol":"rest","direction":"bidirectional","specKind":"openapi","authProfiles":[{"id":"bearer","label":"OAuth2 bearer (instance key)","kind":"bearer","credentialModel":"instance-key","description":"Send the PurpleSuite instance key as `Authorization: Bearer <key>`, the vendor's real transport for a Concur OAuth access token. The instance key stands in for that token: the client-credentials exchange and geolocation-scoped token endpoint are vendor-hosted, are not declared by these three pinned documents, and are not mounted. One synthetic service persona replaces the OAuth Consumer, so an unspecified `user` lists every owner in the instance and resolves to that persona on a write."}],"authVerifierId":"concur-v3-bearer-instance-key","credentialModel":"instance-key","runtimeOperations":[{"method":"get","path":"/expense/reports","operationId":"get_expense_reports"},{"method":"post","path":"/expense/reports","operationId":"post_expense_reports"},{"method":"get","path":"/expense/reports/:id","operationId":"get_expense_reports_id"},{"method":"put","path":"/expense/reports/:id","operationId":"put_expense_reports_id"}],"coverage":{"documentScope":"full","runtimeFidelity":"modeled","counts":{"operations":4},"notes":["All 4 operations declared by the pinned Reports document are mounted as `modeled-core`: list, create, retrieve and update an expense report. 20 of the 33 declared list filters are removed from the served operation because they select on Concur configuration or sub-resources this contract does not model; `coverage.md` names each one.","`PUT /expense/reports/{id}` follows the document's own rule — only the supplied fields are updated, missing fields are not altered — and answers 200 with the declared empty `Void` body. The pinned document declares no 404 for `GET /expense/reports/{id}`; an unknown report answers 404 with an empty body rather than fabricating a record.","Provenance `oas`: a vendor-published Swagger 2.0 document from SAP's own documentation repository. `runtimeFidelity` is `modeled`, not `exact`: the served request schema is deliberately narrowed and the runtime is deterministic synthetic state, not captured Concur tenant behaviour.","Swagger 2.0 `basePath` cannot template a variable, so the instance-scoped prefix is expressed as a literal `/api/purple-suite/{instanceId}/contracts/expense/concur` basePath with `host`, `schemes` and the vendor `x-servers` block removed. The reference viewer supplies a templated server that overrides it, so a Scalar try-it-out still targets a concrete instance; the cost falls on a strict Swagger 2.0 client reading the raw document, which treats `{instanceId}` as a literal path segment.","Vendor-document defect repaired in the served projection only: the pinned collection definition declares `Items` as a single `$ref` object while its sibling `NextPage` is documented as \"The URI of the next page of results, if any.\" The projection declares `Items` as an array of the pinned item schema; `sources/` is unchanged.","Concur's report/entry approval workflow, and every other Concur product surface, declares no operation in these documents and is therefore not modeled rather than faked."]},"specPath":"/api/purple-suite/contracts/expense/concur/concur-expense-reports-v3/openapi.json","primaryAliasSpecPath":"/api/purple-suite/contracts/expense/concur/openapi.json","key":"expense/concur/concur-expense-reports-v3","system":"expense","paint":"concur","productLabel":"SAP Concur","runtimeBase":"/api/purple-suite/{instanceId}/contracts/expense/concur","productDocsPath":"/api/purple-suite/docs/expense/concur","docsPath":"/api/purple-suite/docs/expense/concur/concur-expense-reports-v3","primary":true,"source":"painted"},{"id":"concur-expense-entries-v3","label":"SAP Concur Expense Entries v3.0","version":"v3.0; SAP-docs/preview.developer.concur.com @ main, src/api-explorer/v3-0 Swagger 2.0 set","protocol":"rest","direction":"bidirectional","specKind":"openapi","authProfiles":[{"id":"bearer","label":"OAuth2 bearer (instance key)","kind":"bearer","credentialModel":"instance-key","description":"Send the PurpleSuite instance key as `Authorization: Bearer <key>`, the vendor's real transport for a Concur OAuth access token. The instance key stands in for that token: the client-credentials exchange and geolocation-scoped token endpoint are vendor-hosted, are not declared by these three pinned documents, and are not mounted. One synthetic service persona replaces the OAuth Consumer, so an unspecified `user` lists every owner in the instance and resolves to that persona on a write."}],"authVerifierId":"concur-v3-bearer-instance-key","credentialModel":"instance-key","runtimeOperations":[{"method":"get","path":"/expense/entries","operationId":"get_expense_entries"},{"method":"post","path":"/expense/entries","operationId":"post_expense_entries"},{"method":"get","path":"/expense/entries/:id","operationId":"get_expense_entries_id"},{"method":"put","path":"/expense/entries/:id","operationId":"put_expense_entries_id"},{"method":"delete","path":"/expense/entries/:id","operationId":"delete_expense_entries_id"}],"coverage":{"documentScope":"full","runtimeFidelity":"modeled","counts":{"operations":5},"notes":["All 5 operations declared by the pinned Entries document are mounted as `modeled-core`: list, create, retrieve, update and delete an expense line item. Entries are attached to a report and are retrievable from both sides — `GET /expense/entries?reportID=` and the report's own totals. 5 of the 12 declared list filters are removed because they select on attendee, VAT and payment-batch sub-resources this contract does not model.","Creating, updating or deleting an entry recomputes the owning report's `Total`, `TotalClaimedAmount`, `AmountDueEmployee` and `LastModifiedDate` in one transaction. `Journey` (mileage) is accepted and echoed as declared; itemizations, attendees and VAT details are separate Concur APIs and are not modeled.","Provenance `oas`: a vendor-published Swagger 2.0 document from SAP's own documentation repository. `runtimeFidelity` is `modeled`, not `exact`: the served request schema is deliberately narrowed and the runtime is deterministic synthetic state, not captured Concur tenant behaviour.","Swagger 2.0 `basePath` cannot template a variable, so the instance-scoped prefix is expressed as a literal `/api/purple-suite/{instanceId}/contracts/expense/concur` basePath with `host`, `schemes` and the vendor `x-servers` block removed. The reference viewer supplies a templated server that overrides it, so a Scalar try-it-out still targets a concrete instance; the cost falls on a strict Swagger 2.0 client reading the raw document, which treats `{instanceId}` as a literal path segment.","Vendor-document defect repaired in the served projection only: the pinned collection definition declares `Items` as a single `$ref` object while its sibling `NextPage` is documented as \"The URI of the next page of results, if any.\" The projection declares `Items` as an array of the pinned item schema; `sources/` is unchanged.","Concur's report/entry approval workflow, and every other Concur product surface, declares no operation in these documents and is therefore not modeled rather than faked."]},"specPath":"/api/purple-suite/contracts/expense/concur/concur-expense-entries-v3/openapi.json","key":"expense/concur/concur-expense-entries-v3","system":"expense","paint":"concur","productLabel":"SAP Concur","runtimeBase":"/api/purple-suite/{instanceId}/contracts/expense/concur","productDocsPath":"/api/purple-suite/docs/expense/concur","docsPath":"/api/purple-suite/docs/expense/concur/concur-expense-entries-v3","primary":false,"source":"painted"},{"id":"concur-users-v3","label":"SAP Concur Users v3.0","version":"v3.0; SAP-docs/preview.developer.concur.com @ main, src/api-explorer/v3-0 Swagger 2.0 set","protocol":"rest","direction":"bidirectional","specKind":"openapi","authProfiles":[{"id":"bearer","label":"OAuth2 bearer (instance key)","kind":"bearer","credentialModel":"instance-key","description":"Send the PurpleSuite instance key as `Authorization: Bearer <key>`, the vendor's real transport for a Concur OAuth access token. The instance key stands in for that token: the client-credentials exchange and geolocation-scoped token endpoint are vendor-hosted, are not declared by these three pinned documents, and are not mounted. One synthetic service persona replaces the OAuth Consumer, so an unspecified `user` lists every owner in the instance and resolves to that persona on a write."}],"authVerifierId":"concur-v3-bearer-instance-key","credentialModel":"instance-key","runtimeOperations":[{"method":"get","path":"/common/users","operationId":"get_common_users"}],"coverage":{"documentScope":"full","runtimeFidelity":"modeled","counts":{"operations":1},"notes":["The single operation declared by the pinned Users document is mounted as `modeled-core`. Users are internal people drawn from the shared PurpleSuite roster (`getPeople`), so a Concur `LoginID` resolves to the same person as every other Purple app. All 7 declared filters are executable.","This is the supporting entity for the Reports and Entries profiles: report owners and approvers are the same roster people. Concur's Identity v4 / SCIM user-provisioning API is a separate product and is not pinned here.","Provenance `oas`: a vendor-published Swagger 2.0 document from SAP's own documentation repository. `runtimeFidelity` is `modeled`, not `exact`: the served request schema is deliberately narrowed and the runtime is deterministic synthetic state, not captured Concur tenant behaviour.","Swagger 2.0 `basePath` cannot template a variable, so the instance-scoped prefix is expressed as a literal `/api/purple-suite/{instanceId}/contracts/expense/concur` basePath with `host`, `schemes` and the vendor `x-servers` block removed. The reference viewer supplies a templated server that overrides it, so a Scalar try-it-out still targets a concrete instance; the cost falls on a strict Swagger 2.0 client reading the raw document, which treats `{instanceId}` as a literal path segment.","Vendor-document defect repaired in the served projection only: the pinned collection definition declares `Items` as a single `$ref` object while its sibling `NextPage` is documented as \"The URI of the next page of results, if any.\" The projection declares `Items` as an array of the pinned item schema; `sources/` is unchanged.","Concur's report/entry approval workflow, and every other Concur product surface, declares no operation in these documents and is therefore not modeled rather than faked."]},"specPath":"/api/purple-suite/contracts/expense/concur/concur-users-v3/openapi.json","key":"expense/concur/concur-users-v3","system":"expense","paint":"concur","productLabel":"SAP Concur","runtimeBase":"/api/purple-suite/{instanceId}/contracts/expense/concur","productDocsPath":"/api/purple-suite/docs/expense/concur","docsPath":"/api/purple-suite/docs/expense/concur/concur-users-v3","primary":false,"source":"painted"}],"key":"expense/concur","source":"painted"},{"system":"expense","paint":"purplesuite","available":true,"label":"Purple Expense API","runtimeBase":"/api/purple-suite/expense","docsPath":"/api/purple-suite/docs/expense/purplesuite","description":"Purple Expense — travel & expense management. Search bookable flight and hotel inventory, book trips, capture receipts, submit expense reports, and run approvals. Resembles tools like SAP Concur, Navan, and Expensify.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Expense API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/expense/purplesuite/openapi.json","runtimeOperations":[],"key":"expense/purplesuite/native-openapi","system":"expense","paint":"purplesuite","productLabel":"Purple Expense API","runtimeBase":"/api/purple-suite/expense","productDocsPath":"/api/purple-suite/docs/expense/purplesuite","docsPath":"/api/purple-suite/docs/expense/purplesuite/native-openapi","description":"Purple Expense — travel & expense management. Search bookable flight and hotel inventory, book trips, capture receipts, submit expense reports, and run approvals. Resembles tools like SAP Concur, Navan, and Expensify.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"expense/purplesuite","source":"native"},{"system":"grid","paint":"purplesuite","available":true,"label":"Purple Suite Grid API","runtimeBase":"/api/purple-suite/grid","docsPath":"/api/purple-suite/docs/grid/purplesuite","description":"\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Suite Grid API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/grid/purplesuite/openapi.json","runtimeOperations":[],"key":"grid/purplesuite/native-openapi","system":"grid","paint":"purplesuite","productLabel":"Purple Suite Grid API","runtimeBase":"/api/purple-suite/grid","productDocsPath":"/api/purple-suite/docs/grid/purplesuite","docsPath":"/api/purple-suite/docs/grid/purplesuite/native-openapi","description":"\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"grid/purplesuite","source":"native"},{"system":"hrbp","paint":"purplesuite","available":true,"label":"Purple Suite HRBP API","runtimeBase":"/api/purple-suite/hrbp","docsPath":"/api/purple-suite/docs/hrbp/purplesuite","description":"HR Business Partner (HRBP) source system — Talent Insights & Talent Review, and Employee Relations case management. Data layer for talent reviews, 9-box employee assessments, performance reviews, succession planning, metric snapshots, and ER cases/allegations/involved parties (SN sn_hr_er_* parity). ServiceNow-parity contract endpoints (resolve_filters, available_metrics, preview_review/commit_review, query) and the tp_* MCP tools are served alongside these collections. References employees in the Purple HRS (HRIS) app by employee_id. Choice fields use a readable canonical value; the originating ServiceNow code is noted in each field description.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Suite HRBP API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/hrbp/purplesuite/openapi.json","runtimeOperations":[],"key":"hrbp/purplesuite/native-openapi","system":"hrbp","paint":"purplesuite","productLabel":"Purple Suite HRBP API","runtimeBase":"/api/purple-suite/hrbp","productDocsPath":"/api/purple-suite/docs/hrbp/purplesuite","docsPath":"/api/purple-suite/docs/hrbp/purplesuite/native-openapi","description":"HR Business Partner (HRBP) source system — Talent Insights & Talent Review, and Employee Relations case management. Data layer for talent reviews, 9-box employee assessments, performance reviews, succession planning, metric snapshots, and ER cases/allegations/involved parties (SN sn_hr_er_* parity). ServiceNow-parity contract endpoints (resolve_filters, available_metrics, preview_review/commit_review, query) and the tp_* MCP tools are served alongside these collections. References employees in the Purple HRS (HRIS) app by employee_id. Choice fields use a readable canonical value; the originating ServiceNow code is noted in each field description.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"hrbp/purplesuite","source":"native"},{"system":"hris","paint":"purplesuite","available":true,"label":"Purple Suite HRIS API","runtimeBase":"/api/purple-suite/hris","docsPath":"/api/purple-suite/docs/hris/purplesuite","description":"\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Suite HRIS API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/hris/purplesuite/openapi.json","runtimeOperations":[],"key":"hris/purplesuite/native-openapi","system":"hris","paint":"purplesuite","productLabel":"Purple Suite HRIS API","runtimeBase":"/api/purple-suite/hris","productDocsPath":"/api/purple-suite/docs/hris/purplesuite","docsPath":"/api/purple-suite/docs/hris/purplesuite/native-openapi","description":"\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"hris/purplesuite","source":"native"},{"system":"hris","paint":"successfactors","available":true,"label":"SuccessFactors","runtimeBase":"/api/purple-suite/{instanceId}/contracts/hris/successfactors","docsPath":"/api/purple-suite/docs/hris/successfactors","primaryProfileId":"platform-user-odata-v2","profiles":[{"id":"platform-user-odata-v2","label":"SuccessFactors Platform User (bounded OData v2)","version":"1H-2026-user-core","protocol":"odata","specKind":"openapi","direction":"bidirectional","authVerifierId":"successfactors-user-bearer","credentialModel":"instance-key","authProfiles":[{"id":"bearer","label":"OAuth bearer token","kind":"bearer","credentialModel":"instance-key","description":"Instance key in the vendor resource API bearer-token position; OAuth/SAML issuance is not emulated."}],"runtimeOperations":[{"method":"get","path":"/odata/v2/User","operationId":"listUsers"},{"method":"get","path":"/odata/v2/User/$count","operationId":"countUsers"},{"method":"get","path":"/odata/v2/$metadata","operationId":"metadata"},{"method":"get","path":"/odata/v2/User/$metadata","operationId":"userMetadata"},{"method":"post","path":"/odata/v2/User","operationId":"insertUser"},{"method":"post","path":"/odata/v2/upsert","operationId":"upsertUsers"},{"method":"get","path":"/odata/v2/User\\(':userId'\\)","operationId":"readUser"},{"method":"put","path":"/odata/v2/User\\(':userId'\\)","operationId":"replaceUser"},{"method":"post","path":"/odata/v2/User\\(':userId'\\)","operationId":"mergeUser"}],"coverage":{"documentScope":"bounded","runtimeFidelity":"modeled","counts":{"operations":9,"types":1},"notes":["Nine operations for the internal Platform User directory, writes and derived metadata; sixteen source-backed properties. Not Employee Central employment/job/person/time-off workflows.","JSON only; bounded query grammar and writable fields are enforced. Tenant-custom mandatory fields, relationships, RBP permissions, external users, XML/Atom, multipart batch, password/login provisioning and OAuth issuance are excluded. Delete is not supported by SAP User.","Official archived sample metadata is retained unchanged. Current public 1H 2026 User reference supplies mandatory-field and behavioral corrections. No current customer tenant metadata or vendor differential fixture is claimed."]},"specPath":"/api/purple-suite/contracts/hris/successfactors/platform-user-odata-v2/openapi.json","primaryAliasSpecPath":"/api/purple-suite/contracts/hris/successfactors/openapi.json","key":"hris/successfactors/platform-user-odata-v2","system":"hris","paint":"successfactors","productLabel":"SuccessFactors","runtimeBase":"/api/purple-suite/{instanceId}/contracts/hris/successfactors","productDocsPath":"/api/purple-suite/docs/hris/successfactors","docsPath":"/api/purple-suite/docs/hris/successfactors/platform-user-odata-v2","primary":true,"source":"painted"}],"key":"hris/successfactors","source":"painted"},{"system":"hris","paint":"ukg","available":true,"label":"UKG Pro","runtimeBase":"/api/purple-suite/{instanceId}/contracts/hris/ukg","docsPath":"/api/purple-suite/docs/hris/ukg","primaryProfileId":"ukg-pro-personnel-v1","profiles":[{"id":"ukg-pro-personnel-v1","label":"UKG Pro HCM Personnel v1 — directory and PTO core","version":"v1; public document updated 2026-09-09","protocol":"rest","direction":"bidirectional","specKind":"openapi","authProfiles":[{"id":"basic","label":"Basic plus US-Customer-Api-Key","kind":"basic","credentialModel":"instance-key","description":"Use the instance key in both the Basic password and required US-Customer-Api-Key header. A single synthetic service account replaces tenant-specific roles."}],"authVerifierId":"ukg-pro-personnel-basic-customer-key","credentialModel":"instance-key","runtimeOperations":[{"method":"get","path":"/personnel/v1/employee-demographic-details","operationId":"get_personnel_v1_employee_demographic_details"},{"method":"get","path":"/personnel/v1/employee-employment-details","operationId":"retrieveEmployeeEmploymentDetails"},{"method":"post","path":"/personnel/v1/employee-ids","operationId":"EmployeeIds"},{"method":"get","path":"/personnel/v1/employment-details","operationId":"get_personnel_v1_employment_details"},{"method":"get","path":"/personnel/v1/companies/:companyId/employment-details","operationId":"get_personnel_v1_companies_companyId_employment_details"},{"method":"get","path":"/personnel/v1/companies/:companyId/employees/:employeeId/employment-details","operationId":"get_personnel_v1_companies_companyId_employees_employeeId_employment_details"},{"method":"get","path":"/personnel/v1/person-details","operationId":"get_personnel_v1_person_details"},{"method":"get","path":"/personnel/v1/companies/:companyId/person-details","operationId":"get_personnel_v1_companies_companyId_person_details"},{"method":"get","path":"/personnel/v1/companies/:companyId/employees/:employeeId/person-details","operationId":"get_personnel_v1_companies_companyId_employees_employeeId_person_details"},{"method":"get","path":"/personnel/v1/person-details/:employeeId","operationId":"get_personnel_v1_person_details_employeeId"},{"method":"get","path":"/personnel/v1/pto-plans","operationId":"get_personnel_v1_pto_plans"},{"method":"post","path":"/personnel/v1/pto-plans","operationId":"post_personnel_v1_pto_plans"},{"method":"patch","path":"/personnel/v1/companies/:companyId/employees/:employeeId/pto-plans/:ptoPlan","operationId":"patch_personnel_v1_companies_companyId_employees_employeeId_pto_plans_ptoPlan"},{"method":"get","path":"/personnel/v1/companies/:companyId/employees/:employeeId/pto-plans/:ptoPlan","operationId":"get_personnel_v1_companies_companyId_employees_employeeId_pto_plans_ptoPlan"},{"method":"get","path":"/personnel/v1/companies/:companyId/employees/:employeeId/pto-plans","operationId":"get_personnel_v1_companies_companyId_employees_employeeId_pto_plans"}],"coverage":{"documentScope":"bounded","runtimeFidelity":"modeled","counts":{"operations":15},"notes":["15 modeled-core directory/lookup/PTO operations of 53 in the pinned official Pro Employee Data source; 38 are outside executable scope. No WFM, payroll, benefits, OAuth or tenant permission parity is claimed.","PTO create returns 207, PATCH returns 200, and subsequent reads share persistent per-instance state. This family publishes no PTO delete route."]},"specPath":"/api/purple-suite/contracts/hris/ukg/ukg-pro-personnel-v1/openapi.json","primaryAliasSpecPath":"/api/purple-suite/contracts/hris/ukg/openapi.json","key":"hris/ukg/ukg-pro-personnel-v1","system":"hris","paint":"ukg","productLabel":"UKG Pro","runtimeBase":"/api/purple-suite/{instanceId}/contracts/hris/ukg","productDocsPath":"/api/purple-suite/docs/hris/ukg","docsPath":"/api/purple-suite/docs/hris/ukg/ukg-pro-personnel-v1","primary":true,"source":"painted"}],"key":"hris/ukg","source":"painted"},{"system":"hris","paint":"workday","available":true,"label":"Workday","runtimeBase":"/api/purple-suite/{instanceId}/contracts/hris/workday","docsPath":"/api/purple-suite/docs/hris/workday","primaryProfileId":"staffing-v7","profiles":[{"id":"staffing-v7","label":"Workday Staffing v7 — full pinned service","version":"v7","protocol":"rest","specKind":"openapi","authProfiles":[{"id":"oauth2-bearer","label":"OAuth 2.0 bearer token","kind":"bearer","description":"The painted runtime validates a PurpleSuite instance key in the Workday bearer-token transport."}],"authVerifierId":"workday-staffing-v7-bearer","credentialModel":"instance-key","direction":"outbound","runtimeOperations":[{"method":"get","path":"/staffing/v7/jobFamilies","operationId":"workdayStaffingGetJobFamilies"},{"method":"get","path":"/staffing/v7/jobFamilies/:ID","operationId":"workdayStaffingGetJobFamiliesByID"},{"method":"get","path":"/staffing/v7/jobChanges/:ID/moveTeam","operationId":"workdayStaffingGetJobChangesByIDMoveTeam"},{"method":"get","path":"/staffing/v7/jobChanges/:ID/location/:subresourceID","operationId":"workdayStaffingGetJobChangesByIDLocationBySubresourceID"},{"method":"patch","path":"/staffing/v7/jobChanges/:ID/location/:subresourceID","operationId":"workdayStaffingPatchJobChangesByIDLocationBySubresourceID"},{"method":"get","path":"/staffing/v7/jobChanges/:ID/administrative","operationId":"workdayStaffingGetJobChangesByIDAdministrative"},{"method":"get","path":"/staffing/v7/jobChanges/:ID/startDetails/:subresourceID","operationId":"workdayStaffingGetJobChangesByIDStartDetailsBySubresourceID"},{"method":"patch","path":"/staffing/v7/jobChanges/:ID/startDetails/:subresourceID","operationId":"workdayStaffingPatchJobChangesByIDStartDetailsBySubresourceID"},{"method":"post","path":"/staffing/v7/jobChanges/:ID/submit","operationId":"workdayStaffingPostJobChangesByIDSubmit"},{"method":"get","path":"/staffing/v7/jobChanges/:ID/contract/:subresourceID","operationId":"workdayStaffingGetJobChangesByIDContractBySubresourceID"},{"method":"patch","path":"/staffing/v7/jobChanges/:ID/contract/:subresourceID","operationId":"workdayStaffingPatchJobChangesByIDContractBySubresourceID"},{"method":"get","path":"/staffing/v7/jobChanges/:ID/opening","operationId":"workdayStaffingGetJobChangesByIDOpening"},{"method":"get","path":"/staffing/v7/jobChanges/:ID/businessTitle","operationId":"workdayStaffingGetJobChangesByIDBusinessTitle"},{"method":"get","path":"/staffing/v7/jobChanges/:ID/startDetails","operationId":"workdayStaffingGetJobChangesByIDStartDetails"},{"method":"get","path":"/staffing/v7/jobChanges/:ID/jobProfile","operationId":"workdayStaffingGetJobChangesByIDJobProfile"},{"method":"get","path":"/staffing/v7/jobChanges/:ID/jobClassification/:subresourceID","operationId":"workdayStaffingGetJobChangesByIDJobClassificationBySubresourceID"},{"method":"patch","path":"/staffing/v7/jobChanges/:ID/jobClassification/:subresourceID","operationId":"workdayStaffingPatchJobChangesByIDJobClassificationBySubresourceID"},{"method":"get","path":"/staffing/v7/jobChanges/:ID/comment","operationId":"workdayStaffingGetJobChangesByIDComment"},{"method":"get","path":"/staffing/v7/jobChanges/:ID/position","operationId":"workdayStaffingGetJobChangesByIDPosition"},{"method":"get","path":"/staffing/v7/jobChanges/:ID/opening/:subresourceID","operationId":"workdayStaffingGetJobChangesByIDOpeningBySubresourceID"},{"method":"patch","path":"/staffing/v7/jobChanges/:ID/opening/:subresourceID","operationId":"workdayStaffingPatchJobChangesByIDOpeningBySubresourceID"},{"method":"get","path":"/staffing/v7/jobChanges/:ID/administrative/:subresourceID","operationId":"workdayStaffingGetJobChangesByIDAdministrativeBySubresourceID"},{"method":"patch","path":"/staffing/v7/jobChanges/:ID/administrative/:subresourceID","operationId":"workdayStaffingPatchJobChangesByIDAdministrativeBySubresourceID"},{"method":"get","path":"/staffing/v7/jobChanges/:ID/businessTitle/:subresourceID","operationId":"workdayStaffingGetJobChangesByIDBusinessTitleBySubresourceID"},{"method":"patch","path":"/staffing/v7/jobChanges/:ID/businessTitle/:subresourceID","operationId":"workdayStaffingPatchJobChangesByIDBusinessTitleBySubresourceID"},{"method":"get","path":"/staffing/v7/jobChanges/:ID/comment/:subresourceID","operationId":"workdayStaffingGetJobChangesByIDCommentBySubresourceID"},{"method":"patch","path":"/staffing/v7/jobChanges/:ID/comment/:subresourceID","operationId":"workdayStaffingPatchJobChangesByIDCommentBySubresourceID"},{"method":"get","path":"/staffing/v7/jobChanges/:ID/jobProfile/:subresourceID","operationId":"workdayStaffingGetJobChangesByIDJobProfileBySubresourceID"},{"method":"patch","path":"/staffing/v7/jobChanges/:ID/jobProfile/:subresourceID","operationId":"workdayStaffingPatchJobChangesByIDJobProfileBySubresourceID"},{"method":"get","path":"/staffing/v7/jobChanges/:ID","operationId":"workdayStaffingGetJobChangesByID"},{"method":"get","path":"/staffing/v7/jobChanges/:ID/position/:subresourceID","operationId":"workdayStaffingGetJobChangesByIDPositionBySubresourceID"},{"method":"patch","path":"/staffing/v7/jobChanges/:ID/position/:subresourceID","operationId":"workdayStaffingPatchJobChangesByIDPositionBySubresourceID"},{"method":"get","path":"/staffing/v7/jobChanges/:ID/location","operationId":"workdayStaffingGetJobChangesByIDLocation"},{"method":"get","path":"/staffing/v7/jobChanges/:ID/contract","operationId":"workdayStaffingGetJobChangesByIDContract"},{"method":"get","path":"/staffing/v7/jobChanges/:ID/jobClassification","operationId":"workdayStaffingGetJobChangesByIDJobClassification"},{"method":"get","path":"/staffing/v7/jobChanges/:ID/moveTeam/:subresourceID","operationId":"workdayStaffingGetJobChangesByIDMoveTeamBySubresourceID"},{"method":"patch","path":"/staffing/v7/jobChanges/:ID/moveTeam/:subresourceID","operationId":"workdayStaffingPatchJobChangesByIDMoveTeamBySubresourceID"},{"method":"post","path":"/staffing/v7/organizationAssignmentChanges","operationId":"workdayStaffingPostOrganizationAssignmentChanges"},{"method":"get","path":"/staffing/v7/organizationAssignmentChanges/:ID/costing/:subresourceID","operationId":"workdayStaffingGetOrganizationAssignmentChangesByIDCostingBySubresourceID"},{"method":"patch","path":"/staffing/v7/organizationAssignmentChanges/:ID/costing/:subresourceID","operationId":"workdayStaffingPatchOrganizationAssignmentChangesByIDCostingBySubresourceID"},{"method":"get","path":"/staffing/v7/organizationAssignmentChanges/:ID/startDetails/:subresourceID","operationId":"workdayStaffingGetOrganizationAssignmentChangesByIDStartDetailsBySubresourceID"},{"method":"patch","path":"/staffing/v7/organizationAssignmentChanges/:ID/startDetails/:subresourceID","operationId":"workdayStaffingPatchOrganizationAssignmentChangesByIDStartDetailsBySubresourceID"},{"method":"post","path":"/staffing/v7/organizationAssignmentChanges/:ID/submit","operationId":"workdayStaffingPostOrganizationAssignmentChangesByIDSubmit"},{"method":"get","path":"/staffing/v7/organizationAssignmentChanges/:ID/costCenter","operationId":"workdayStaffingGetOrganizationAssignmentChangesByIDCostCenter"},{"method":"get","path":"/staffing/v7/organizationAssignmentChanges/:ID/costCenter/:subresourceID","operationId":"workdayStaffingGetOrganizationAssignmentChangesByIDCostCenterBySubresourceID"},{"method":"patch","path":"/staffing/v7/organizationAssignmentChanges/:ID/costCenter/:subresourceID","operationId":"workdayStaffingPatchOrganizationAssignmentChangesByIDCostCenterBySubresourceID"},{"method":"get","path":"/staffing/v7/organizationAssignmentChanges/:ID/startDetails","operationId":"workdayStaffingGetOrganizationAssignmentChangesByIDStartDetails"},{"method":"get","path":"/staffing/v7/organizationAssignmentChanges/:ID/company","operationId":"workdayStaffingGetOrganizationAssignmentChangesByIDCompany"},{"method":"get","path":"/staffing/v7/organizationAssignmentChanges/:ID/comment","operationId":"workdayStaffingGetOrganizationAssignmentChangesByIDComment"},{"method":"get","path":"/staffing/v7/organizationAssignmentChanges/:ID/region","operationId":"workdayStaffingGetOrganizationAssignmentChangesByIDRegion"},{"method":"get","path":"/staffing/v7/organizationAssignmentChanges/:ID/customOrganizations/:subresourceID","operationId":"workdayStaffingGetOrganizationAssignmentChangesByIDCustomOrganizationsBySubresourceID"},{"method":"patch","path":"/staffing/v7/organizationAssignmentChanges/:ID/customOrganizations/:subresourceID","operationId":"workdayStaffingPatchOrganizationAssignmentChangesByIDCustomOrganizationsBySubresourceID"},{"method":"get","path":"/staffing/v7/organizationAssignmentChanges/:ID/comment/:subresourceID","operationId":"workdayStaffingGetOrganizationAssignmentChangesByIDCommentBySubresourceID"},{"method":"patch","path":"/staffing/v7/organizationAssignmentChanges/:ID/comment/:subresourceID","operationId":"workdayStaffingPatchOrganizationAssignmentChangesByIDCommentBySubresourceID"},{"method":"get","path":"/staffing/v7/organizationAssignmentChanges/:ID","operationId":"workdayStaffingGetOrganizationAssignmentChangesByID"},{"method":"get","path":"/staffing/v7/organizationAssignmentChanges/:ID/customOrganizations","operationId":"workdayStaffingGetOrganizationAssignmentChangesByIDCustomOrganizations"},{"method":"get","path":"/staffing/v7/organizationAssignmentChanges/:ID/businessUnit/:subresourceID","operationId":"workdayStaffingGetOrganizationAssignmentChangesByIDBusinessUnitBySubresourceID"},{"method":"patch","path":"/staffing/v7/organizationAssignmentChanges/:ID/businessUnit/:subresourceID","operationId":"workdayStaffingPatchOrganizationAssignmentChangesByIDBusinessUnitBySubresourceID"},{"method":"get","path":"/staffing/v7/organizationAssignmentChanges/:ID/company/:subresourceID","operationId":"workdayStaffingGetOrganizationAssignmentChangesByIDCompanyBySubresourceID"},{"method":"patch","path":"/staffing/v7/organizationAssignmentChanges/:ID/company/:subresourceID","operationId":"workdayStaffingPatchOrganizationAssignmentChangesByIDCompanyBySubresourceID"},{"method":"get","path":"/staffing/v7/organizationAssignmentChanges/:ID/businessUnit","operationId":"workdayStaffingGetOrganizationAssignmentChangesByIDBusinessUnit"},{"method":"get","path":"/staffing/v7/organizationAssignmentChanges/:ID/costing","operationId":"workdayStaffingGetOrganizationAssignmentChangesByIDCosting"},{"method":"get","path":"/staffing/v7/organizationAssignmentChanges/:ID/region/:subresourceID","operationId":"workdayStaffingGetOrganizationAssignmentChangesByIDRegionBySubresourceID"},{"method":"patch","path":"/staffing/v7/organizationAssignmentChanges/:ID/region/:subresourceID","operationId":"workdayStaffingPatchOrganizationAssignmentChangesByIDRegionBySubresourceID"},{"method":"get","path":"/staffing/v7/supervisoryOrganizations","operationId":"listSupervisoryOrganizations"},{"method":"get","path":"/staffing/v7/supervisoryOrganizations/:ID/members/:subresourceID","operationId":"workdayStaffingGetSupervisoryOrganizationsByIDMembersBySubresourceID"},{"method":"get","path":"/staffing/v7/supervisoryOrganizations/:ID/members","operationId":"workdayStaffingGetSupervisoryOrganizationsByIDMembers"},{"method":"get","path":"/staffing/v7/supervisoryOrganizations/:ID","operationId":"getSupervisoryOrganization"},{"method":"get","path":"/staffing/v7/supervisoryOrganizations/:ID/orgChart/:subresourceID","operationId":"workdayStaffingGetSupervisoryOrganizationsByIDOrgChartBySubresourceID"},{"method":"get","path":"/staffing/v7/supervisoryOrganizations/:ID/orgChart","operationId":"workdayStaffingGetSupervisoryOrganizationsByIDOrgChart"},{"method":"get","path":"/staffing/v7/jobProfiles","operationId":"workdayStaffingGetJobProfiles"},{"method":"get","path":"/staffing/v7/jobProfiles/:ID","operationId":"workdayStaffingGetJobProfilesByID"},{"method":"get","path":"/staffing/v7/jobs","operationId":"workdayStaffingGetJobs"},{"method":"get","path":"/staffing/v7/jobs/:ID/workspace/:subresourceID","operationId":"workdayStaffingGetJobsByIDWorkspaceBySubresourceID"},{"method":"get","path":"/staffing/v7/jobs/:ID/workspace","operationId":"workdayStaffingGetJobsByIDWorkspace"},{"method":"get","path":"/staffing/v7/jobs/:ID","operationId":"workdayStaffingGetJobsByID"},{"method":"get","path":"/staffing/v7/workers","operationId":"workdayStaffingGetWorkers"},{"method":"post","path":"/staffing/v7/workers/:ID/organizationAssignmentChanges","operationId":"workdayStaffingPostWorkersByIDOrganizationAssignmentChanges"},{"method":"get","path":"/staffing/v7/workers/:ID/checkIns","operationId":"workdayStaffingGetWorkersByIDCheckIns"},{"method":"post","path":"/staffing/v7/workers/:ID/checkIns","operationId":"workdayStaffingPostWorkersByIDCheckIns"},{"method":"post","path":"/staffing/v7/workers/:ID/homeContactInformationChanges","operationId":"workdayStaffingPostWorkersByIDHomeContactInformationChanges"},{"method":"get","path":"/staffing/v7/workers/:ID/externalSkillLevel","operationId":"workdayStaffingGetWorkersByIDExternalSkillLevel"},{"method":"post","path":"/staffing/v7/workers/:ID/externalSkillLevel","operationId":"workdayStaffingPostWorkersByIDExternalSkillLevel"},{"method":"get","path":"/staffing/v7/workers/:ID/skillItems/:subresourceID","operationId":"workdayStaffingGetWorkersByIDSkillItemsBySubresourceID"},{"method":"get","path":"/staffing/v7/workers/:ID/workContactInformationChanges/:subresourceID","operationId":"workdayStaffingGetWorkersByIDWorkContactInformationChangesBySubresourceID"},{"method":"get","path":"/staffing/v7/workers/:ID/homeContactInformationChanges/:subresourceID","operationId":"workdayStaffingGetWorkersByIDHomeContactInformationChangesBySubresourceID"},{"method":"get","path":"/staffing/v7/workers/:ID/explicitSkills","operationId":"listExplicitSkills"},{"method":"post","path":"/staffing/v7/workers/:ID/explicitSkills","operationId":"workdayStaffingPostWorkersByIDExplicitSkills"},{"method":"get","path":"/staffing/v7/workers/:ID/externalSkillLevel/:subresourceID","operationId":"workdayStaffingGetWorkersByIDExternalSkillLevelBySubresourceID"},{"method":"put","path":"/staffing/v7/workers/:ID/externalSkillLevel/:subresourceID","operationId":"workdayStaffingPutWorkersByIDExternalSkillLevelBySubresourceID"},{"method":"get","path":"/staffing/v7/workers/:ID/serviceDates/:subresourceID","operationId":"workdayStaffingGetWorkersByIDServiceDatesBySubresourceID"},{"method":"get","path":"/staffing/v7/workers/:ID/explicitSkills/:subresourceID","operationId":"getExplicitSkill"},{"method":"get","path":"/staffing/v7/workers/:ID/checkInTopics/:subresourceID","operationId":"workdayStaffingGetWorkersByIDCheckInTopicsBySubresourceID"},{"method":"patch","path":"/staffing/v7/workers/:ID/checkInTopics/:subresourceID","operationId":"workdayStaffingPatchWorkersByIDCheckInTopicsBySubresourceID"},{"method":"delete","path":"/staffing/v7/workers/:ID/checkInTopics/:subresourceID","operationId":"workdayStaffingDeleteWorkersByIDCheckInTopicsBySubresourceID"},{"method":"patch","path":"/staffing/v7/workers/:ID/checkInTopics/:subresourceID","operationId":"workdayStaffingPatchWorkersByIDCheckInTopicsBySubresourceIDTypeArchive","discriminator":{"kind":"query","operation":"workdayStaffingPatchWorkersByIDCheckInTopicsBySubresourceIDTypeArchive","parameter":"type","value":"archive"}},{"method":"post","path":"/staffing/v7/workers/:ID/workContactInformationChanges","operationId":"workdayStaffingPostWorkersByIDWorkContactInformationChanges"},{"method":"get","path":"/staffing/v7/workers/:ID/serviceDates","operationId":"workdayStaffingGetWorkersByIDServiceDates"},{"method":"get","path":"/staffing/v7/workers/:ID","operationId":"getWorker"},{"method":"post","path":"/staffing/v7/workers/:ID/jobChanges","operationId":"workdayStaffingPostWorkersByIDJobChanges"},{"method":"get","path":"/staffing/v7/workers/:ID/checkIns/:subresourceID","operationId":"workdayStaffingGetWorkersByIDCheckInsBySubresourceID"},{"method":"patch","path":"/staffing/v7/workers/:ID/checkIns/:subresourceID","operationId":"workdayStaffingPatchWorkersByIDCheckInsBySubresourceID"},{"method":"delete","path":"/staffing/v7/workers/:ID/checkIns/:subresourceID","operationId":"workdayStaffingDeleteWorkersByIDCheckInsBySubresourceID"},{"method":"patch","path":"/staffing/v7/workers/:ID/checkIns/:subresourceID","operationId":"workdayStaffingPatchWorkersByIDCheckInsBySubresourceIDTypeArchive","discriminator":{"kind":"query","operation":"workdayStaffingPatchWorkersByIDCheckInsBySubresourceIDTypeArchive","parameter":"type","value":"archive"}},{"method":"get","path":"/staffing/v7/workers/:ID/skillItems","operationId":"workdayStaffingGetWorkersByIDSkillItems"},{"method":"post","path":"/staffing/v7/workers/:ID/skillItems","operationId":"workdayStaffingPostWorkersByIDSkillItems"},{"method":"get","path":"/staffing/v7/workers/:ID/checkInTopics","operationId":"workdayStaffingGetWorkersByIDCheckInTopics"},{"method":"post","path":"/staffing/v7/workers/:ID/checkInTopics","operationId":"workdayStaffingPostWorkersByIDCheckInTopics"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/frequencies/","operationId":"workdayStaffingGetValuesJobChangesGroupFrequencies"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/jobProfiles/","operationId":"workdayStaffingGetValuesJobChangesGroupJobProfiles"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/headcountOptions/","operationId":"workdayStaffingGetValuesJobChangesGroupHeadcountOptions"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/workSpaces/","operationId":"workdayStaffingGetValuesJobChangesGroupWorkSpaces"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/workerTypes/","operationId":"workdayStaffingGetValuesJobChangesGroupWorkerTypes"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/reason/","operationId":"workdayStaffingGetValuesJobChangesGroupReason"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/assignmentTypes/","operationId":"workdayStaffingGetValuesJobChangesGroupAssignmentTypes"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/employeeTypes/","operationId":"workdayStaffingGetValuesJobChangesGroupEmployeeTypes"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/jobClassifications/","operationId":"workdayStaffingGetValuesJobChangesGroupJobClassifications"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/workStudyAwards/","operationId":"workdayStaffingGetValuesJobChangesGroupWorkStudyAwards"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/payRateTypes/","operationId":"workdayStaffingGetValuesJobChangesGroupPayRateTypes"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/locations/","operationId":"workdayStaffingGetValuesJobChangesGroupLocations"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/timeTypes/","operationId":"workdayStaffingGetValuesJobChangesGroupTimeTypes"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/currencies/","operationId":"workdayStaffingGetValuesJobChangesGroupCurrencies"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/proposedPosition/","operationId":"workdayStaffingGetValuesJobChangesGroupProposedPosition"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/templates/","operationId":"workdayStaffingGetValuesJobChangesGroupTemplates"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/workersCompensationCodeOverrides/","operationId":"workdayStaffingGetValuesJobChangesGroupWorkersCompensationCodeOverrides"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/jobs/","operationId":"workdayStaffingGetValuesJobChangesGroupJobs"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/supervisoryOrganization/","operationId":"workdayStaffingGetValuesJobChangesGroupSupervisoryOrganization"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/workShifts/","operationId":"workdayStaffingGetValuesJobChangesGroupWorkShifts"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/workers/","operationId":"workdayStaffingGetValuesJobChangesGroupWorkers"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/companyInsiderTypes/","operationId":"workdayStaffingGetValuesJobChangesGroupCompanyInsiderTypes"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/contingentWorkerTypes/","operationId":"workdayStaffingGetValuesJobChangesGroupContingentWorkerTypes"},{"method":"get","path":"/staffing/v7/values/jobChangesGroup/jobRequisitions/","operationId":"workdayStaffingGetValuesJobChangesGroupJobRequisitions"},{"method":"get","path":"/staffing/v7/values/organizationAssignmentChangesGroup/regions/","operationId":"workdayStaffingGetValuesOrganizationAssignmentChangesGroupRegions"},{"method":"get","path":"/staffing/v7/values/organizationAssignmentChangesGroup/positions/","operationId":"workdayStaffingGetValuesOrganizationAssignmentChangesGroupPositions"},{"method":"get","path":"/staffing/v7/values/organizationAssignmentChangesGroup/companies/","operationId":"workdayStaffingGetValuesOrganizationAssignmentChangesGroupCompanies"},{"method":"get","path":"/staffing/v7/values/organizationAssignmentChangesGroup/funds/","operationId":"workdayStaffingGetValuesOrganizationAssignmentChangesGroupFunds"},{"method":"get","path":"/staffing/v7/values/organizationAssignmentChangesGroup/grants/","operationId":"workdayStaffingGetValuesOrganizationAssignmentChangesGroupGrants"},{"method":"get","path":"/staffing/v7/values/organizationAssignmentChangesGroup/programs/","operationId":"workdayStaffingGetValuesOrganizationAssignmentChangesGroupPrograms"},{"method":"get","path":"/staffing/v7/values/organizationAssignmentChangesGroup/jobs/","operationId":"workdayStaffingGetValuesOrganizationAssignmentChangesGroupJobs"},{"method":"get","path":"/staffing/v7/values/organizationAssignmentChangesGroup/businessUnits/","operationId":"workdayStaffingGetValuesOrganizationAssignmentChangesGroupBusinessUnits"},{"method":"get","path":"/staffing/v7/values/organizationAssignmentChangesGroup/workers/","operationId":"workdayStaffingGetValuesOrganizationAssignmentChangesGroupWorkers"},{"method":"get","path":"/staffing/v7/values/organizationAssignmentChangesGroup/customs/","operationId":"workdayStaffingGetValuesOrganizationAssignmentChangesGroupCustoms"},{"method":"get","path":"/staffing/v7/values/organizationAssignmentChangesGroup/costCenters/","operationId":"workdayStaffingGetValuesOrganizationAssignmentChangesGroupCostCenters"},{"method":"get","path":"/staffing/v7/values/organizationAssignmentChangesGroup/gifts/","operationId":"workdayStaffingGetValuesOrganizationAssignmentChangesGroupGifts"}],"coverage":{"documentScope":"full","runtimeFidelity":"modeled","counts":{"operations":144},"notes":["All 144 operations in the pinned 2026-07-27 Workday Staffing v7 artifact are mounted: 5 captured handlers and 139 per-instance repository-backed operations.","Modeled reads return stored resources, relationship-scoped collections, or native 404s; modeled writes provide read-after-write lifecycle behavior and never return request-seeded schema witnesses.","Two artifact paths contain ?type=archive; runtime routing canonicalizes only those exact single-value query discriminators while retaining both official operation identities.","Full means the complete pinned service artifact, not the whole Workday platform.","Explicitly excluded: Workday Web Services (SOAP/WWS); Workday Graph API; Workday Query Language (WQL), a separate Platform API family; Reports-as-a-Service (RaaS) and tenant custom reports; Finance, Payroll, Student, and non-HR Platform REST services; Experimental alpha, beta, and labs services; Tenant-configured actions absent from the pinned public artifacts."]},"specPath":"/api/purple-suite/contracts/hris/workday/staffing-v7/openapi.json","primaryAliasSpecPath":"/api/purple-suite/contracts/hris/workday/openapi.json","key":"hris/workday/staffing-v7","system":"hris","paint":"workday","productLabel":"Workday","runtimeBase":"/api/purple-suite/{instanceId}/contracts/hris/workday","productDocsPath":"/api/purple-suite/docs/hris/workday","docsPath":"/api/purple-suite/docs/hris/workday/staffing-v7","primary":true,"source":"painted"},{"id":"benefit-enrollment-event-offerings-v1","label":"Workday Benefit Enrollment Event Offerings v1 — full pinned service","version":"v1","protocol":"rest","specKind":"openapi","authProfiles":[{"id":"oauth2-bearer","label":"OAuth 2.0 bearer token","kind":"bearer","description":"The painted runtime validates a PurpleSuite instance key in the Workday bearer-token transport."}],"authVerifierId":"workday-benefit-enrollment-event-offerings-v1-bearer","credentialModel":"instance-key","direction":"outbound","runtimeOperations":[{"method":"get","path":"/benefitEnrollmentEventOfferings/v1/employeeEnrollmentEvent","operationId":"workdayBenefitEnrollmentEventOfferingsGetEmployeeEnrollmentEvent"},{"method":"get","path":"/benefitEnrollmentEventOfferings/v1/employeeEnrollmentEvent/:ID","operationId":"workdayBenefitEnrollmentEventOfferingsGetEmployeeEnrollmentEventByID"}],"coverage":{"documentScope":"full","runtimeFidelity":"modeled","counts":{"operations":2},"notes":["All 2 operations in the pinned 2026-07-27 Workday Benefit Enrollment Event Offerings v1 artifact are mounted: 0 captured handlers and 2 per-instance repository-backed operations.","Modeled reads return stored resources, relationship-scoped collections, or native 404s; modeled writes provide read-after-write lifecycle behavior and never return request-seeded schema witnesses.","Full means the complete pinned service artifact, not the whole Workday platform.","Explicitly excluded: Workday Web Services (SOAP/WWS); Workday Graph API; Workday Query Language (WQL), a separate Platform API family; Reports-as-a-Service (RaaS) and tenant custom reports; Finance, Payroll, Student, and non-HR Platform REST services; Experimental alpha, beta, and labs services; Tenant-configured actions absent from the pinned public artifacts."]},"specPath":"/api/purple-suite/contracts/hris/workday/benefit-enrollment-event-offerings-v1/openapi.json","key":"hris/workday/benefit-enrollment-event-offerings-v1","system":"hris","paint":"workday","productLabel":"Workday","runtimeBase":"/api/purple-suite/{instanceId}/contracts/hris/workday","productDocsPath":"/api/purple-suite/docs/hris/workday","docsPath":"/api/purple-suite/docs/hris/workday/benefit-enrollment-event-offerings-v1","primary":false,"source":"painted"},{"id":"benefit-partner-v1","label":"Workday Benefit Partner v1 — full pinned service","version":"v1","protocol":"rest","specKind":"openapi","authProfiles":[{"id":"oauth2-bearer","label":"OAuth 2.0 bearer token","kind":"bearer","description":"The painted runtime validates a PurpleSuite instance key in the Workday bearer-token transport."}],"authVerifierId":"workday-benefit-partner-v1-bearer","credentialModel":"instance-key","direction":"outbound","runtimeOperations":[{"method":"post","path":"/benefitPartner/v1/programs","operationId":"workdayBenefitPartnerPostPrograms"}],"coverage":{"documentScope":"full","runtimeFidelity":"modeled","counts":{"operations":1},"notes":["All 1 operations in the pinned 2026-07-27 Workday Benefit Partner v1 artifact are mounted: 0 captured handlers and 1 per-instance repository-backed operations.","Modeled reads return stored resources, relationship-scoped collections, or native 404s; modeled writes provide read-after-write lifecycle behavior and never return request-seeded schema witnesses.","Full means the complete pinned service artifact, not the whole Workday platform.","Explicitly excluded: Workday Web Services (SOAP/WWS); Workday Graph API; Workday Query Language (WQL), a separate Platform API family; Reports-as-a-Service (RaaS) and tenant custom reports; Finance, Payroll, Student, and non-HR Platform REST services; Experimental alpha, beta, and labs services; Tenant-configured actions absent from the pinned public artifacts."]},"specPath":"/api/purple-suite/contracts/hris/workday/benefit-partner-v1/openapi.json","key":"hris/workday/benefit-partner-v1","system":"hris","paint":"workday","productLabel":"Workday","runtimeBase":"/api/purple-suite/{instanceId}/contracts/hris/workday","productDocsPath":"/api/purple-suite/docs/hris/workday","docsPath":"/api/purple-suite/docs/hris/workday/benefit-partner-v1","primary":false,"source":"painted"},{"id":"common-v1","label":"Workday Common v1 — full pinned service","version":"v1","protocol":"rest","specKind":"openapi","authProfiles":[{"id":"oauth2-bearer","label":"OAuth 2.0 bearer token","kind":"bearer","description":"The painted runtime validates a PurpleSuite instance key in the Workday bearer-token transport."}],"authVerifierId":"workday-common-v1-bearer","credentialModel":"instance-key","direction":"outbound","runtimeOperations":[{"method":"post","path":"/common/v1/validateWorktags","operationId":"workdayCommonPostValidateWorktags"},{"method":"get","path":"/common/v1/organizations","operationId":"workdayCommonGetOrganizations"},{"method":"get","path":"/common/v1/organizations/:ID","operationId":"workdayCommonGetOrganizationsByID"},{"method":"get","path":"/common/v1/supervisoryOrganizations","operationId":"workdayCommonGetSupervisoryOrganizations"},{"method":"get","path":"/common/v1/supervisoryOrganizations/:ID/workers/:subresourceID","operationId":"workdayCommonGetSupervisoryOrganizationsByIDWorkersBySubresourceID"},{"method":"get","path":"/common/v1/supervisoryOrganizations/:ID/workers","operationId":"workdayCommonGetSupervisoryOrganizationsByIDWorkers"},{"method":"get","path":"/common/v1/supervisoryOrganizations/:ID","operationId":"workdayCommonGetSupervisoryOrganizationsByID"},{"method":"get","path":"/common/v1/jobChangeReasons","operationId":"workdayCommonGetJobChangeReasons"},{"method":"get","path":"/common/v1/jobChangeReasons/:ID","operationId":"workdayCommonGetJobChangeReasonsByID"},{"method":"get","path":"/common/v1/businessTitleChanges/:ID","operationId":"workdayCommonGetBusinessTitleChangesByID"},{"method":"get","path":"/common/v1/organizationTypes","operationId":"workdayCommonGetOrganizationTypes"},{"method":"get","path":"/common/v1/organizationTypes/:ID","operationId":"workdayCommonGetOrganizationTypesByID"},{"method":"get","path":"/common/v1/workers","operationId":"workdayCommonGetWorkers"},{"method":"get","path":"/common/v1/workers/:ID/directReports","operationId":"workdayCommonGetWorkersByIDDirectReports"},{"method":"get","path":"/common/v1/workers/:ID/directReports/:subresourceID","operationId":"workdayCommonGetWorkersByIDDirectReportsBySubresourceID"},{"method":"get","path":"/common/v1/workers/:ID/organizations","operationId":"workdayCommonGetWorkersByIDOrganizations"},{"method":"get","path":"/common/v1/workers/:ID/organizations/:subresourceID","operationId":"workdayCommonGetWorkersByIDOrganizationsBySubresourceID"},{"method":"get","path":"/common/v1/workers/:ID/inboxTasks/:subresourceID","operationId":"workdayCommonGetWorkersByIDInboxTasksBySubresourceID"},{"method":"get","path":"/common/v1/workers/:ID/timeOffEntries","operationId":"workdayCommonGetWorkersByIDTimeOffEntries"},{"method":"post","path":"/common/v1/workers/:ID/businessTitleChanges","operationId":"workdayCommonPostWorkersByIDBusinessTitleChangesTypeMe","discriminator":{"kind":"query","operation":"workdayCommonPostWorkersByIDBusinessTitleChangesTypeMe","parameter":"type","value":"me"}},{"method":"get","path":"/common/v1/workers/:ID/history/:subresourceID","operationId":"workdayCommonGetWorkersByIDHistoryBySubresourceID"},{"method":"get","path":"/common/v1/workers/:ID/timeOffEntries/:subresourceID","operationId":"workdayCommonGetWorkersByIDTimeOffEntriesBySubresourceID"},{"method":"get","path":"/common/v1/workers/:ID/timeOffPlans/:subresourceID","operationId":"workdayCommonGetWorkersByIDTimeOffPlansBySubresourceID"},{"method":"get","path":"/common/v1/workers/:ID/businessTitleChanges","operationId":"workdayCommonGetWorkersByIDBusinessTitleChanges"},{"method":"post","path":"/common/v1/workers/:ID/businessTitleChanges","operationId":"workdayCommonPostWorkersByIDBusinessTitleChanges"},{"method":"get","path":"/common/v1/workers/:ID/supervisoryOrganizationsManaged","operationId":"workdayCommonGetWorkersByIDSupervisoryOrganizationsManaged"},{"method":"get","path":"/common/v1/workers/:ID/timeOffPlans","operationId":"workdayCommonGetWorkersByIDTimeOffPlans"},{"method":"get","path":"/common/v1/workers/:ID/paySlips/:subresourceID","operationId":"workdayCommonGetWorkersByIDPaySlipsBySubresourceID"},{"method":"get","path":"/common/v1/workers/:ID/history","operationId":"workdayCommonGetWorkersByIDHistory"},{"method":"get","path":"/common/v1/workers/:ID","operationId":"workdayCommonGetWorkersByID"},{"method":"post","path":"/common/v1/workers/:ID/jobChanges","operationId":"workdayCommonPostWorkersByIDJobChanges"},{"method":"get","path":"/common/v1/workers/:ID/inboxTasks","operationId":"workdayCommonGetWorkersByIDInboxTasks"},{"method":"get","path":"/common/v1/workers/:ID/supervisoryOrganizationsManaged/:subresourceID","operationId":"workdayCommonGetWorkersByIDSupervisoryOrganizationsManagedBySubresourceID"},{"method":"get","path":"/common/v1/workers/:ID/paySlips","operationId":"workdayCommonGetWorkersByIDPaySlips"},{"method":"get","path":"/common/v1/workers/:ID/businessTitleChanges/:subresourceID","operationId":"workdayCommonGetWorkersByIDBusinessTitleChangesBySubresourceID"},{"method":"get","path":"/common/v1/currencies","operationId":"workdayCommonGetCurrencies"},{"method":"get","path":"/common/v1/currencies/:ID","operationId":"workdayCommonGetCurrenciesByID"},{"method":"get","path":"/common/v1/customers/:ID/activities","operationId":"workdayCommonGetCustomersByIDActivities"},{"method":"get","path":"/common/v1/customers/:ID/activities/:subresourceID","operationId":"workdayCommonGetCustomersByIDActivitiesBySubresourceID"},{"method":"get","path":"/common/v1/customers/:ID","operationId":"workdayCommonGetCustomersByID"}],"coverage":{"documentScope":"full","runtimeFidelity":"modeled","counts":{"operations":40},"notes":["All 40 operations in the pinned 2026-07-27 Workday Common v1 artifact are mounted: 0 captured handlers and 40 per-instance repository-backed operations.","Modeled reads return stored resources, relationship-scoped collections, or native 404s; modeled writes provide read-after-write lifecycle behavior and never return request-seeded schema witnesses.","Two artifact paths contain ?type=archive; runtime routing canonicalizes only those exact single-value query discriminators while retaining both official operation identities.","Full means the complete pinned service artifact, not the whole Workday platform.","Explicitly excluded: Workday Web Services (SOAP/WWS); Workday Graph API; Workday Query Language (WQL), a separate Platform API family; Reports-as-a-Service (RaaS) and tenant custom reports; Finance, Payroll, Student, and non-HR Platform REST services; Experimental alpha, beta, and labs services; Tenant-configured actions absent from the pinned public artifacts."]},"specPath":"/api/purple-suite/contracts/hris/workday/common-v1/openapi.json","key":"hris/workday/common-v1","system":"hris","paint":"workday","productLabel":"Workday","runtimeBase":"/api/purple-suite/{instanceId}/contracts/hris/workday","productDocsPath":"/api/purple-suite/docs/hris/workday","docsPath":"/api/purple-suite/docs/hris/workday/common-v1","primary":false,"source":"painted"},{"id":"compensation-v3","label":"Workday Compensation v3 — full pinned service","version":"v3","protocol":"rest","specKind":"openapi","authProfiles":[{"id":"oauth2-bearer","label":"OAuth 2.0 bearer token","kind":"bearer","description":"The painted runtime validates a PurpleSuite instance key in the Workday bearer-token transport."}],"authVerifierId":"workday-compensation-v3-bearer","credentialModel":"instance-key","direction":"outbound","runtimeOperations":[{"method":"get","path":"/compensation/v3/scorecardResults","operationId":"workdayCompensationGetScorecardResults"},{"method":"post","path":"/compensation/v3/scorecardResults","operationId":"workdayCompensationPostScorecardResults"},{"method":"patch","path":"/compensation/v3/scorecardResults/:ID/scores/:subresourceID","operationId":"workdayCompensationPatchScorecardResultsByIDScoresBySubresourceID"},{"method":"get","path":"/compensation/v3/scorecardResults/:ID","operationId":"workdayCompensationGetScorecardResultsByID"},{"method":"delete","path":"/compensation/v3/scorecardResults/:ID","operationId":"workdayCompensationDeleteScorecardResultsByID"},{"method":"get","path":"/compensation/v3/scorecards","operationId":"workdayCompensationGetScorecards"},{"method":"post","path":"/compensation/v3/scorecards","operationId":"workdayCompensationPostScorecards"},{"method":"get","path":"/compensation/v3/scorecards/:ID","operationId":"workdayCompensationGetScorecardsByID"},{"method":"put","path":"/compensation/v3/scorecards/:ID","operationId":"workdayCompensationPutScorecardsByID"},{"method":"delete","path":"/compensation/v3/scorecards/:ID","operationId":"workdayCompensationDeleteScorecardsByID"},{"method":"get","path":"/compensation/v3/workers","operationId":"workdayCompensationGetWorkers"},{"method":"post","path":"/compensation/v3/workers/:ID/requestOneTimePayment","operationId":"workdayCompensationPostWorkersByIDRequestOneTimePayment"},{"method":"get","path":"/compensation/v3/workers/:ID","operationId":"workdayCompensationGetWorkersByID"},{"method":"get","path":"/compensation/v3/values/oneTimePaymentPlanGroup/oneTimePaymentPlan/","operationId":"workdayCompensationGetValuesOneTimePaymentPlanGroupOneTimePaymentPlan"}],"coverage":{"documentScope":"full","runtimeFidelity":"modeled","counts":{"operations":14},"notes":["All 14 operations in the pinned 2026-07-27 Workday Compensation v3 artifact are mounted: 0 captured handlers and 14 per-instance repository-backed operations.","Modeled reads return stored resources, relationship-scoped collections, or native 404s; modeled writes provide read-after-write lifecycle behavior and never return request-seeded schema witnesses.","Full means the complete pinned service artifact, not the whole Workday platform.","Explicitly excluded: Workday Web Services (SOAP/WWS); Workday Graph API; Workday Query Language (WQL), a separate Platform API family; Reports-as-a-Service (RaaS) and tenant custom reports; Finance, Payroll, Student, and non-HR Platform REST services; Experimental alpha, beta, and labs services; Tenant-configured actions absent from the pinned public artifacts."]},"specPath":"/api/purple-suite/contracts/hris/workday/compensation-v3/openapi.json","key":"hris/workday/compensation-v3","system":"hris","paint":"workday","productLabel":"Workday","runtimeBase":"/api/purple-suite/{instanceId}/contracts/hris/workday","productDocsPath":"/api/purple-suite/docs/hris/workday","docsPath":"/api/purple-suite/docs/hris/workday/compensation-v3","primary":false,"source":"painted"},{"id":"help-article-v1","label":"Workday Help Article v1 — full pinned service","version":"v1","protocol":"rest","specKind":"openapi","authProfiles":[{"id":"oauth2-bearer","label":"OAuth 2.0 bearer token","kind":"bearer","description":"The painted runtime validates a PurpleSuite instance key in the Workday bearer-token transport."}],"authVerifierId":"workday-help-article-v1-bearer","credentialModel":"instance-key","direction":"outbound","runtimeOperations":[{"method":"get","path":"/helpArticle/v1/articleVersions","operationId":"workdayHelpArticleGetArticleVersions"},{"method":"get","path":"/helpArticle/v1/articleVersions/:ID/approvalDecision","operationId":"workdayHelpArticleGetArticleVersionsByIDApprovalDecision"},{"method":"get","path":"/helpArticle/v1/articleVersions/:ID/approvalDecision/:subresourceID","operationId":"workdayHelpArticleGetArticleVersionsByIDApprovalDecisionBySubresourceID"},{"method":"patch","path":"/helpArticle/v1/articleVersions/:ID/approvalDecision/:subresourceID","operationId":"workdayHelpArticlePatchArticleVersionsByIDApprovalDecisionBySubresourceID"},{"method":"delete","path":"/helpArticle/v1/articleVersions/:ID/articleEffectiveDate/:subresourceID","operationId":"workdayHelpArticleDeleteArticleVersionsByIDArticleEffectiveDateBySubresourceID"},{"method":"get","path":"/helpArticle/v1/articleVersions/:ID","operationId":"workdayHelpArticleGetArticleVersionsByID"},{"method":"get","path":"/helpArticle/v1/articleVersions/:ID/approvalRequest/:subresourceID","operationId":"workdayHelpArticleGetArticleVersionsByIDApprovalRequestBySubresourceID"},{"method":"patch","path":"/helpArticle/v1/articleVersions/:ID/approvalRequest/:subresourceID","operationId":"workdayHelpArticlePatchArticleVersionsByIDApprovalRequestBySubresourceID"},{"method":"post","path":"/helpArticle/v1/articleVersions/:ID/approvalRequest","operationId":"workdayHelpArticlePostArticleVersionsByIDApprovalRequest"},{"method":"post","path":"/helpArticle/v1/articleVersions/:ID/articleEffectiveDate","operationId":"workdayHelpArticlePostArticleVersionsByIDArticleEffectiveDate"},{"method":"get","path":"/helpArticle/v1/articleStatuses","operationId":"workdayHelpArticleGetArticleStatuses"},{"method":"get","path":"/helpArticle/v1/articleStatuses/:ID","operationId":"workdayHelpArticleGetArticleStatusesByID"},{"method":"get","path":"/helpArticle/v1/values/common/audiences/","operationId":"workdayHelpArticleGetValuesCommonAudiences"}],"coverage":{"documentScope":"full","runtimeFidelity":"modeled","counts":{"operations":13},"notes":["All 13 operations in the pinned 2026-07-27 Workday Help Article v1 artifact are mounted: 0 captured handlers and 13 per-instance repository-backed operations.","Modeled reads return stored resources, relationship-scoped collections, or native 404s; modeled writes provide read-after-write lifecycle behavior and never return request-seeded schema witnesses.","Full means the complete pinned service artifact, not the whole Workday platform.","Explicitly excluded: Workday Web Services (SOAP/WWS); Workday Graph API; Workday Query Language (WQL), a separate Platform API family; Reports-as-a-Service (RaaS) and tenant custom reports; Finance, Payroll, Student, and non-HR Platform REST services; Experimental alpha, beta, and labs services; Tenant-configured actions absent from the pinned public artifacts."]},"specPath":"/api/purple-suite/contracts/hris/workday/help-article-v1/openapi.json","key":"hris/workday/help-article-v1","system":"hris","paint":"workday","productLabel":"Workday","runtimeBase":"/api/purple-suite/{instanceId}/contracts/hris/workday","productDocsPath":"/api/purple-suite/docs/hris/workday","docsPath":"/api/purple-suite/docs/hris/workday/help-article-v1","primary":false,"source":"painted"},{"id":"help-case-v4","label":"Workday Help Case v4 — full pinned service","version":"v4","protocol":"rest","specKind":"openapi","authProfiles":[{"id":"oauth2-bearer","label":"OAuth 2.0 bearer token","kind":"bearer","description":"The painted runtime validates a PurpleSuite instance key in the Workday bearer-token transport."}],"authVerifierId":"workday-help-case-v4-bearer","credentialModel":"instance-key","direction":"outbound","runtimeOperations":[{"method":"get","path":"/helpCase/v4/serviceCategories","operationId":"workdayHelpCaseGetServiceCategories"},{"method":"get","path":"/helpCase/v4/serviceCategories/:ID","operationId":"workdayHelpCaseGetServiceCategoriesByID"},{"method":"get","path":"/helpCase/v4/cases","operationId":"workdayHelpCaseGetCases"},{"method":"post","path":"/helpCase/v4/cases","operationId":"workdayHelpCasePostCases"},{"method":"get","path":"/helpCase/v4/cases/:ID/timeline","operationId":"workdayHelpCaseGetCasesByIDTimeline"},{"method":"get","path":"/helpCase/v4/cases/:ID/comment/:subresourceID","operationId":"workdayHelpCaseGetCasesByIDCommentBySubresourceID"},{"method":"get","path":"/helpCase/v4/cases/:ID/internalNoteTimeline/:subresourceID","operationId":"workdayHelpCaseGetCasesByIDInternalNoteTimelineBySubresourceID"},{"method":"patch","path":"/helpCase/v4/cases/:ID/internalNoteTimeline/:subresourceID","operationId":"workdayHelpCasePatchCasesByIDInternalNoteTimelineBySubresourceID"},{"method":"delete","path":"/helpCase/v4/cases/:ID/internalNoteTimeline/:subresourceID","operationId":"workdayHelpCaseDeleteCasesByIDInternalNoteTimelineBySubresourceID"},{"method":"post","path":"/helpCase/v4/cases/:ID/reopen","operationId":"workdayHelpCasePostCasesByIDReopen"},{"method":"get","path":"/helpCase/v4/cases/:ID/internalNoteTimeline","operationId":"workdayHelpCaseGetCasesByIDInternalNoteTimeline"},{"method":"post","path":"/helpCase/v4/cases/:ID/internalNoteTimeline","operationId":"workdayHelpCasePostCasesByIDInternalNoteTimeline"},{"method":"get","path":"/helpCase/v4/cases/:ID","operationId":"workdayHelpCaseGetCasesByID"},{"method":"patch","path":"/helpCase/v4/cases/:ID","operationId":"workdayHelpCasePatchCasesByID"},{"method":"get","path":"/helpCase/v4/cases/:ID/comment","operationId":"workdayHelpCaseGetCasesByIDComment"},{"method":"post","path":"/helpCase/v4/cases/:ID/comment","operationId":"workdayHelpCasePostCasesByIDComment"},{"method":"get","path":"/helpCase/v4/cases/:ID/timeline/:subresourceID","operationId":"workdayHelpCaseGetCasesByIDTimelineBySubresourceID"},{"method":"post","path":"/helpCase/v4/externalRecords","operationId":"workdayHelpCasePostExternalRecords"},{"method":"put","path":"/helpCase/v4/externalRecords/:ID","operationId":"workdayHelpCasePutExternalRecordsByID"},{"method":"get","path":"/helpCase/v4/configuration","operationId":"workdayHelpCaseGetConfiguration"},{"method":"get","path":"/helpCase/v4/configuration/:ID","operationId":"workdayHelpCaseGetConfigurationByID"},{"method":"get","path":"/helpCase/v4/caseSuggestions","operationId":"workdayHelpCaseGetCaseSuggestions"},{"method":"get","path":"/helpCase/v4/caseSuggestions/:ID","operationId":"workdayHelpCaseGetCaseSuggestionsByID"},{"method":"post","path":"/helpCase/v4/attachments","operationId":"workdayHelpCasePostAttachments"},{"method":"get","path":"/helpCase/v4/attachments/:ID","operationId":"workdayHelpCaseGetAttachmentsByID"},{"method":"get","path":"/helpCase/v4/externalCreators","operationId":"workdayHelpCaseGetExternalCreators"},{"method":"post","path":"/helpCase/v4/externalCreators","operationId":"workdayHelpCasePostExternalCreators"},{"method":"get","path":"/helpCase/v4/externalCreators/:ID","operationId":"workdayHelpCaseGetExternalCreatorsByID"},{"method":"get","path":"/helpCase/v4/caseTypes","operationId":"workdayHelpCaseGetCaseTypes"},{"method":"get","path":"/helpCase/v4/caseTypes/:ID","operationId":"workdayHelpCaseGetCaseTypesByID"},{"method":"get","path":"/helpCase/v4/values/caseLabelCategoriesGroup/caseLabelCategories/","operationId":"workdayHelpCaseGetValuesCaseLabelCategoriesGroupCaseLabelCategories"},{"method":"get","path":"/helpCase/v4/values/externalRecords/source/","operationId":"workdayHelpCaseGetValuesExternalRecordsSource"},{"method":"get","path":"/helpCase/v4/values/serviceTeamsGroup/serviceTeams/","operationId":"workdayHelpCaseGetValuesServiceTeamsGroupServiceTeams"},{"method":"get","path":"/helpCase/v4/values/caseFlagsGroup/caseFlags/","operationId":"workdayHelpCaseGetValuesCaseFlagsGroupCaseFlags"},{"method":"get","path":"/helpCase/v4/values/caseStatusesGroup/caseStatuses/","operationId":"workdayHelpCaseGetValuesCaseStatusesGroupCaseStatuses"}],"coverage":{"documentScope":"full","runtimeFidelity":"modeled","counts":{"operations":35},"notes":["All 35 operations in the pinned 2026-07-27 Workday Help Case v4 artifact are mounted: 0 captured handlers and 35 per-instance repository-backed operations.","Modeled reads return stored resources, relationship-scoped collections, or native 404s; modeled writes provide read-after-write lifecycle behavior and never return request-seeded schema witnesses.","Full means the complete pinned service artifact, not the whole Workday platform.","Explicitly excluded: Workday Web Services (SOAP/WWS); Workday Graph API; Workday Query Language (WQL), a separate Platform API family; Reports-as-a-Service (RaaS) and tenant custom reports; Finance, Payroll, Student, and non-HR Platform REST services; Experimental alpha, beta, and labs services; Tenant-configured actions absent from the pinned public artifacts."]},"specPath":"/api/purple-suite/contracts/hris/workday/help-case-v4/openapi.json","key":"hris/workday/help-case-v4","system":"hris","paint":"workday","productLabel":"Workday","runtimeBase":"/api/purple-suite/{instanceId}/contracts/hris/workday","productDocsPath":"/api/purple-suite/docs/hris/workday","docsPath":"/api/purple-suite/docs/hris/workday/help-case-v4","primary":false,"source":"painted"},{"id":"holiday-v1","label":"Workday Holiday v1 — full pinned service","version":"v1","protocol":"rest","specKind":"openapi","authProfiles":[{"id":"oauth2-bearer","label":"OAuth 2.0 bearer token","kind":"bearer","description":"The painted runtime validates a PurpleSuite instance key in the Workday bearer-token transport."}],"authVerifierId":"workday-holiday-v1-bearer","credentialModel":"instance-key","direction":"outbound","runtimeOperations":[{"method":"get","path":"/holiday/v1/holidayEvents","operationId":"workdayHolidayGetHolidayEvents"}],"coverage":{"documentScope":"full","runtimeFidelity":"modeled","counts":{"operations":1},"notes":["All 1 operations in the pinned 2026-07-27 Workday Holiday v1 artifact are mounted: 0 captured handlers and 1 per-instance repository-backed operations.","Modeled reads return stored resources, relationship-scoped collections, or native 404s; modeled writes provide read-after-write lifecycle behavior and never return request-seeded schema witnesses.","Full means the complete pinned service artifact, not the whole Workday platform.","Explicitly excluded: Workday Web Services (SOAP/WWS); Workday Graph API; Workday Query Language (WQL), a separate Platform API family; Reports-as-a-Service (RaaS) and tenant custom reports; Finance, Payroll, Student, and non-HR Platform REST services; Experimental alpha, beta, and labs services; Tenant-configured actions absent from the pinned public artifacts."]},"specPath":"/api/purple-suite/contracts/hris/workday/holiday-v1/openapi.json","key":"hris/workday/holiday-v1","system":"hris","paint":"workday","productLabel":"Workday","runtimeBase":"/api/purple-suite/{instanceId}/contracts/hris/workday","productDocsPath":"/api/purple-suite/docs/hris/workday","docsPath":"/api/purple-suite/docs/hris/workday/holiday-v1","primary":false,"source":"painted"},{"id":"absence-management-v5","label":"Workday Absence Management v5 — full pinned service","version":"v5","protocol":"rest","specKind":"openapi","authProfiles":[{"id":"oauth2-bearer","label":"OAuth 2.0 bearer token","kind":"bearer","description":"The painted runtime validates a PurpleSuite instance key in the Workday bearer-token transport."}],"authVerifierId":"workday-absence-management-v5-bearer","credentialModel":"instance-key","direction":"outbound","runtimeOperations":[{"method":"get","path":"/absenceManagement/v5/workers","operationId":"workdayAbsenceManagementGetWorkers"},{"method":"get","path":"/absenceManagement/v5/workers/:ID/leavesOfAbsence","operationId":"listLeavesOfAbsence"},{"method":"get","path":"/absenceManagement/v5/workers/:ID/leavesOfAbsence/:subresourceID","operationId":"getLeaveOfAbsence"},{"method":"post","path":"/absenceManagement/v5/workers/:ID/correctTimeOffEntry","operationId":"workdayAbsenceManagementPostWorkersByIDCorrectTimeOffEntry"},{"method":"post","path":"/absenceManagement/v5/workers/:ID/requestTimeOff","operationId":"workdayAbsenceManagementPostWorkersByIDRequestTimeOff"},{"method":"get","path":"/absenceManagement/v5/workers/:ID/eligibleAbsenceTypes","operationId":"workdayAbsenceManagementGetWorkersByIDEligibleAbsenceTypes"},{"method":"get","path":"/absenceManagement/v5/workers/:ID/timeOffDetails/:subresourceID","operationId":"getTimeOffDetail"},{"method":"get","path":"/absenceManagement/v5/workers/:ID","operationId":"workdayAbsenceManagementGetWorkersByID"},{"method":"get","path":"/absenceManagement/v5/workers/:ID/timeOffDetails","operationId":"listTimeOffDetails"},{"method":"get","path":"/absenceManagement/v5/workers/:ID/eligibleAbsenceTypes/:subresourceID","operationId":"workdayAbsenceManagementGetWorkersByIDEligibleAbsenceTypesBySubresourceID"},{"method":"get","path":"/absenceManagement/v5/workers/:ID/validTimeOffDates","operationId":"workdayAbsenceManagementGetWorkersByIDValidTimeOffDates"},{"method":"get","path":"/absenceManagement/v5/balances","operationId":"workdayAbsenceManagementGetBalances"},{"method":"get","path":"/absenceManagement/v5/balances/:ID","operationId":"workdayAbsenceManagementGetBalancesByID"},{"method":"get","path":"/absenceManagement/v5/values/timeOff/status/","operationId":"workdayAbsenceManagementGetValuesTimeOffStatus"},{"method":"get","path":"/absenceManagement/v5/values/leave/status/","operationId":"workdayAbsenceManagementGetValuesLeaveStatus"}],"coverage":{"documentScope":"full","runtimeFidelity":"modeled","counts":{"operations":15},"notes":["All 15 operations in the pinned 2026-07-27 Workday Absence Management v5 artifact are mounted: 4 captured handlers and 11 per-instance repository-backed operations.","Modeled reads return stored resources, relationship-scoped collections, or native 404s; modeled writes provide read-after-write lifecycle behavior and never return request-seeded schema witnesses.","Full means the complete pinned service artifact, not the whole Workday platform.","Explicitly excluded: Workday Web Services (SOAP/WWS); Workday Graph API; Workday Query Language (WQL), a separate Platform API family; Reports-as-a-Service (RaaS) and tenant custom reports; Finance, Payroll, Student, and non-HR Platform REST services; Experimental alpha, beta, and labs services; Tenant-configured actions absent from the pinned public artifacts."]},"specPath":"/api/purple-suite/contracts/hris/workday/absence-management-v5/openapi.json","key":"hris/workday/absence-management-v5","system":"hris","paint":"workday","productLabel":"Workday","runtimeBase":"/api/purple-suite/{instanceId}/contracts/hris/workday","productDocsPath":"/api/purple-suite/docs/hris/workday","docsPath":"/api/purple-suite/docs/hris/workday/absence-management-v5","primary":false,"source":"painted"},{"id":"time-tracking-v5","label":"Workday Time Tracking v5 — full pinned service","version":"v5","protocol":"rest","specKind":"openapi","authProfiles":[{"id":"oauth2-bearer","label":"OAuth 2.0 bearer token","kind":"bearer","description":"The painted runtime validates a PurpleSuite instance key in the Workday bearer-token transport."}],"authVerifierId":"workday-time-tracking-v5-bearer","credentialModel":"instance-key","direction":"outbound","runtimeOperations":[{"method":"get","path":"/timeTracking/v5/timeAttestationPrompts","operationId":"workdayTimeTrackingGetTimeAttestationPrompts"},{"method":"get","path":"/timeTracking/v5/timeValidations","operationId":"workdayTimeTrackingGetTimeValidations"},{"method":"get","path":"/timeTracking/v5/timeClockEvents","operationId":"workdayTimeTrackingGetTimeClockEvents"},{"method":"post","path":"/timeTracking/v5/timeClockEvents","operationId":"workdayTimeTrackingPostTimeClockEvents"},{"method":"get","path":"/timeTracking/v5/timeClockEvents/:ID","operationId":"workdayTimeTrackingGetTimeClockEventsByID"},{"method":"put","path":"/timeTracking/v5/timeClockEvents/:ID","operationId":"workdayTimeTrackingPutTimeClockEventsByID"},{"method":"delete","path":"/timeTracking/v5/timeClockEvents/:ID","operationId":"workdayTimeTrackingDeleteTimeClockEventsByID"},{"method":"post","path":"/timeTracking/v5/workerTimeAttestation","operationId":"workdayTimeTrackingPostWorkerTimeAttestation"},{"method":"get","path":"/timeTracking/v5/workerTimeAttestation/:ID/followupWorkerTimeAttestation","operationId":"workdayTimeTrackingGetWorkerTimeAttestationByIDFollowupWorkerTimeAttestation"},{"method":"get","path":"/timeTracking/v5/workerTimeAttestation/:ID","operationId":"workdayTimeTrackingGetWorkerTimeAttestationByID"},{"method":"get","path":"/timeTracking/v5/workerTimeAttestation/:ID/followupTimeAttestationPrompt","operationId":"workdayTimeTrackingGetWorkerTimeAttestationByIDFollowupTimeAttestationPrompt"},{"method":"get","path":"/timeTracking/v5/workerTimeBlocks","operationId":"listWorkerTimeBlocks"},{"method":"get","path":"/timeTracking/v5/workerTimeBlocks/:ID","operationId":"getWorkerTimeBlock"},{"method":"get","path":"/timeTracking/v5/workers","operationId":"workdayTimeTrackingGetWorkers"},{"method":"get","path":"/timeTracking/v5/workers/:ID/period","operationId":"workdayTimeTrackingGetWorkersByIDPeriod"},{"method":"post","path":"/timeTracking/v5/workers/:ID/workerTimeBlock","operationId":"workdayTimeTrackingPostWorkersByIDWorkerTimeBlock"},{"method":"get","path":"/timeTracking/v5/workers/:ID/timeTotals/:subresourceID","operationId":"workdayTimeTrackingGetWorkersByIDTimeTotalsBySubresourceID"},{"method":"get","path":"/timeTracking/v5/workers/:ID/timeTotals","operationId":"workdayTimeTrackingGetWorkersByIDTimeTotals"},{"method":"get","path":"/timeTracking/v5/workers/:ID","operationId":"workdayTimeTrackingGetWorkersByID"},{"method":"post","path":"/timeTracking/v5/workers/:ID/timeReviewEvents","operationId":"workdayTimeTrackingPostWorkersByIDTimeReviewEvents"},{"method":"patch","path":"/timeTracking/v5/workers/:ID/workerTimeBlock/:subresourceID","operationId":"workdayTimeTrackingPatchWorkersByIDWorkerTimeBlockBySubresourceID"},{"method":"delete","path":"/timeTracking/v5/workers/:ID/workerTimeBlock/:subresourceID","operationId":"workdayTimeTrackingDeleteWorkersByIDWorkerTimeBlockBySubresourceID"},{"method":"get","path":"/timeTracking/v5/values/timeTypes/projects/","operationId":"workdayTimeTrackingGetValuesTimeTypesProjects"},{"method":"get","path":"/timeTracking/v5/values/timeTypes/defaultTimeEntryCode/","operationId":"workdayTimeTrackingGetValuesTimeTypesDefaultTimeEntryCode"},{"method":"get","path":"/timeTracking/v5/values/timeTypes/timeEntryCodes/","operationId":"workdayTimeTrackingGetValuesTimeTypesTimeEntryCodes"},{"method":"get","path":"/timeTracking/v5/values/timeTypes/projectPlanTasks/","operationId":"workdayTimeTrackingGetValuesTimeTypesProjectPlanTasks"},{"method":"get","path":"/timeTracking/v5/values/enterTimeByType/timeTypeNested/","operationId":"workdayTimeTrackingGetValuesEnterTimeByTypeTimeTypeNested"},{"method":"get","path":"/timeTracking/v5/values/timeValues/workerTimeZone/","operationId":"workdayTimeTrackingGetValuesTimeValuesWorkerTimeZone"},{"method":"get","path":"/timeTracking/v5/values/timeValues/outReason/","operationId":"workdayTimeTrackingGetValuesTimeValuesOutReason"},{"method":"get","path":"/timeTracking/v5/values/timeValues/positions/","operationId":"workdayTimeTrackingGetValuesTimeValuesPositions"}],"coverage":{"documentScope":"full","runtimeFidelity":"modeled","counts":{"operations":30},"notes":["All 30 operations in the pinned 2026-07-27 Workday Time Tracking v5 artifact are mounted: 2 captured handlers and 28 per-instance repository-backed operations.","Modeled reads return stored resources, relationship-scoped collections, or native 404s; modeled writes provide read-after-write lifecycle behavior and never return request-seeded schema witnesses.","Full means the complete pinned service artifact, not the whole Workday platform.","Explicitly excluded: Workday Web Services (SOAP/WWS); Workday Graph API; Workday Query Language (WQL), a separate Platform API family; Reports-as-a-Service (RaaS) and tenant custom reports; Finance, Payroll, Student, and non-HR Platform REST services; Experimental alpha, beta, and labs services; Tenant-configured actions absent from the pinned public artifacts."]},"specPath":"/api/purple-suite/contracts/hris/workday/time-tracking-v5/openapi.json","key":"hris/workday/time-tracking-v5","system":"hris","paint":"workday","productLabel":"Workday","runtimeBase":"/api/purple-suite/{instanceId}/contracts/hris/workday","productDocsPath":"/api/purple-suite/docs/hris/workday","docsPath":"/api/purple-suite/docs/hris/workday/time-tracking-v5","primary":false,"source":"painted"},{"id":"talent-management-v2","label":"Workday Talent Management v2 — full pinned service","version":"v2","protocol":"rest","specKind":"openapi","authProfiles":[{"id":"oauth2-bearer","label":"OAuth 2.0 bearer token","kind":"bearer","description":"The painted runtime validates a PurpleSuite instance key in the Workday bearer-token transport."}],"authVerifierId":"workday-talent-management-v2-bearer","credentialModel":"instance-key","direction":"outbound","runtimeOperations":[{"method":"get","path":"/talentManagement/v2/successionPlans","operationId":"workdayTalentManagementGetSuccessionPlans"},{"method":"post","path":"/talentManagement/v2/successionPlans","operationId":"workdayTalentManagementPostSuccessionPlans"},{"method":"get","path":"/talentManagement/v2/successionPlans/:ID","operationId":"workdayTalentManagementGetSuccessionPlansByID"},{"method":"get","path":"/talentManagement/v2/mentorships","operationId":"workdayTalentManagementGetMentorships"},{"method":"post","path":"/talentManagement/v2/mentorships/:ID/close","operationId":"workdayTalentManagementPostMentorshipsByIDClose"},{"method":"get","path":"/talentManagement/v2/mentorships/:ID","operationId":"workdayTalentManagementGetMentorshipsByID"},{"method":"post","path":"/talentManagement/v2/mentorships/:ID/edit","operationId":"workdayTalentManagementPostMentorshipsByIDEdit"},{"method":"post","path":"/talentManagement/v2/createMentorshipForWorker","operationId":"workdayTalentManagementPostCreateMentorshipForWorker"},{"method":"post","path":"/talentManagement/v2/createMentorshipForMe","operationId":"workdayTalentManagementPostCreateMentorshipForMe"},{"method":"get","path":"/talentManagement/v2/successionPlanEvents","operationId":"workdayTalentManagementGetSuccessionPlanEvents"},{"method":"post","path":"/talentManagement/v2/successionPlanEvents","operationId":"workdayTalentManagementPostSuccessionPlanEvents"},{"method":"get","path":"/talentManagement/v2/successionPlanEvents/:ID/candidates","operationId":"workdayTalentManagementGetSuccessionPlanEventsByIDCandidates"},{"method":"post","path":"/talentManagement/v2/successionPlanEvents/:ID/candidates","operationId":"workdayTalentManagementPostSuccessionPlanEventsByIDCandidates"},{"method":"get","path":"/talentManagement/v2/successionPlanEvents/:ID/candidates/:subresourceID","operationId":"workdayTalentManagementGetSuccessionPlanEventsByIDCandidatesBySubresourceID"},{"method":"patch","path":"/talentManagement/v2/successionPlanEvents/:ID/candidates/:subresourceID","operationId":"workdayTalentManagementPatchSuccessionPlanEventsByIDCandidatesBySubresourceID"},{"method":"delete","path":"/talentManagement/v2/successionPlanEvents/:ID/candidates/:subresourceID","operationId":"workdayTalentManagementDeleteSuccessionPlanEventsByIDCandidatesBySubresourceID"},{"method":"post","path":"/talentManagement/v2/successionPlanEvents/:ID/submit","operationId":"workdayTalentManagementPostSuccessionPlanEventsByIDSubmit"},{"method":"get","path":"/talentManagement/v2/successionPlanEvents/:ID","operationId":"workdayTalentManagementGetSuccessionPlanEventsByID"},{"method":"get","path":"/talentManagement/v2/values/successionPlan/readiness/","operationId":"workdayTalentManagementGetValuesSuccessionPlanReadiness"},{"method":"get","path":"/talentManagement/v2/values/successionPlan/members/","operationId":"workdayTalentManagementGetValuesSuccessionPlanMembers"},{"method":"get","path":"/talentManagement/v2/values/successionPlan/strategies/","operationId":"workdayTalentManagementGetValuesSuccessionPlanStrategies"}],"coverage":{"documentScope":"full","runtimeFidelity":"modeled","counts":{"operations":21},"notes":["All 21 operations in the pinned 2026-07-27 Workday Talent Management v2 artifact are mounted: 0 captured handlers and 21 per-instance repository-backed operations.","Modeled reads return stored resources, relationship-scoped collections, or native 404s; modeled writes provide read-after-write lifecycle behavior and never return request-seeded schema witnesses.","Full means the complete pinned service artifact, not the whole Workday platform.","Explicitly excluded: Workday Web Services (SOAP/WWS); Workday Graph API; Workday Query Language (WQL), a separate Platform API family; Reports-as-a-Service (RaaS) and tenant custom reports; Finance, Payroll, Student, and non-HR Platform REST services; Experimental alpha, beta, and labs services; Tenant-configured actions absent from the pinned public artifacts."]},"specPath":"/api/purple-suite/contracts/hris/workday/talent-management-v2/openapi.json","key":"hris/workday/talent-management-v2","system":"hris","paint":"workday","productLabel":"Workday","runtimeBase":"/api/purple-suite/{instanceId}/contracts/hris/workday","productDocsPath":"/api/purple-suite/docs/hris/workday","docsPath":"/api/purple-suite/docs/hris/workday/talent-management-v2","primary":false,"source":"painted"},{"id":"performance-management-v2","label":"Workday Performance Management v2 — full pinned service","version":"v2","protocol":"rest","specKind":"openapi","authProfiles":[{"id":"oauth2-bearer","label":"OAuth 2.0 bearer token","kind":"bearer","description":"The painted runtime validates a PurpleSuite instance key in the Workday bearer-token transport."}],"authVerifierId":"workday-performance-management-v2-bearer","credentialModel":"instance-key","direction":"outbound","runtimeOperations":[{"method":"get","path":"/performanceManagement/v2/workers","operationId":"workdayPerformanceManagementGetWorkers"},{"method":"get","path":"/performanceManagement/v2/workers/:ID/anytimeFeedbackEntries/:subresourceID","operationId":"workdayPerformanceManagementGetWorkersByIDAnytimeFeedbackEntriesBySubresourceID"},{"method":"get","path":"/performanceManagement/v2/workers/:ID","operationId":"workdayPerformanceManagementGetWorkersByID"},{"method":"get","path":"/performanceManagement/v2/workers/:ID/anytimeFeedbackEntries","operationId":"workdayPerformanceManagementGetWorkersByIDAnytimeFeedbackEntries"},{"method":"post","path":"/performanceManagement/v2/workers/:ID/anytimeFeedbackEntries","operationId":"workdayPerformanceManagementPostWorkersByIDAnytimeFeedbackEntries"},{"method":"get","path":"/performanceManagement/v2/feedbackBadges","operationId":"workdayPerformanceManagementGetFeedbackBadges"},{"method":"get","path":"/performanceManagement/v2/feedbackBadges/:ID","operationId":"workdayPerformanceManagementGetFeedbackBadgesByID"}],"coverage":{"documentScope":"full","runtimeFidelity":"modeled","counts":{"operations":7},"notes":["All 7 operations in the pinned 2026-07-27 Workday Performance Management v2 artifact are mounted: 0 captured handlers and 7 per-instance repository-backed operations.","Modeled reads return stored resources, relationship-scoped collections, or native 404s; modeled writes provide read-after-write lifecycle behavior and never return request-seeded schema witnesses.","Full means the complete pinned service artifact, not the whole Workday platform.","Explicitly excluded: Workday Web Services (SOAP/WWS); Workday Graph API; Workday Query Language (WQL), a separate Platform API family; Reports-as-a-Service (RaaS) and tenant custom reports; Finance, Payroll, Student, and non-HR Platform REST services; Experimental alpha, beta, and labs services; Tenant-configured actions absent from the pinned public artifacts."]},"specPath":"/api/purple-suite/contracts/hris/workday/performance-management-v2/openapi.json","key":"hris/workday/performance-management-v2","system":"hris","paint":"workday","productLabel":"Workday","runtimeBase":"/api/purple-suite/{instanceId}/contracts/hris/workday","productDocsPath":"/api/purple-suite/docs/hris/workday","docsPath":"/api/purple-suite/docs/hris/workday/performance-management-v2","primary":false,"source":"painted"},{"id":"performance-enablement-v5","label":"Workday Performance Enablement v5 — full pinned service","version":"v5","protocol":"rest","specKind":"openapi","authProfiles":[{"id":"oauth2-bearer","label":"OAuth 2.0 bearer token","kind":"bearer","description":"The painted runtime validates a PurpleSuite instance key in the Workday bearer-token transport."}],"authVerifierId":"workday-performance-enablement-v5-bearer","credentialModel":"instance-key","direction":"outbound","runtimeOperations":[{"method":"post","path":"/performanceEnablement/v5/cascadedGoalEvent","operationId":"workdayPerformanceEnablementPostCascadedGoalEvent"},{"method":"get","path":"/performanceEnablement/v5/workerGoalEvents","operationId":"workdayPerformanceEnablementGetWorkerGoalEvents"},{"method":"post","path":"/performanceEnablement/v5/workerGoalEvents","operationId":"workdayPerformanceEnablementPostWorkerGoalEvents"},{"method":"post","path":"/performanceEnablement/v5/workerGoalEvents/:ID/goals","operationId":"workdayPerformanceEnablementPostWorkerGoalEventsByIDGoals"},{"method":"post","path":"/performanceEnablement/v5/workerGoalEvents/:ID/submit","operationId":"workdayPerformanceEnablementPostWorkerGoalEventsByIDSubmit"},{"method":"get","path":"/performanceEnablement/v5/workerGoalEvents/:ID","operationId":"workdayPerformanceEnablementGetWorkerGoalEventsByID"},{"method":"post","path":"/performanceEnablement/v5/myPerformanceReviews","operationId":"workdayPerformanceEnablementPostMyPerformanceReviews"},{"method":"post","path":"/performanceEnablement/v5/organizationGoals","operationId":"workdayPerformanceEnablementPostOrganizationGoals"},{"method":"patch","path":"/performanceEnablement/v5/organizationGoals/:ID","operationId":"workdayPerformanceEnablementPatchOrganizationGoalsByID"},{"method":"get","path":"/performanceEnablement/v5/feedbackBadges","operationId":"workdayPerformanceEnablementGetFeedbackBadges"},{"method":"get","path":"/performanceEnablement/v5/feedbackBadges/:ID","operationId":"workdayPerformanceEnablementGetFeedbackBadgesByID"},{"method":"get","path":"/performanceEnablement/v5/workers","operationId":"workdayPerformanceEnablementGetWorkers"},{"method":"get","path":"/performanceEnablement/v5/workers/:ID/goals","operationId":"listGoals"},{"method":"get","path":"/performanceEnablement/v5/workers/:ID/requestedFeedbackOnSelfEvents/:subresourceID","operationId":"workdayPerformanceEnablementGetWorkersByIDRequestedFeedbackOnSelfEventsBySubresourceID"},{"method":"get","path":"/performanceEnablement/v5/workers/:ID/requestedFeedbackOnWorkerEvents/:subresourceID","operationId":"workdayPerformanceEnablementGetWorkersByIDRequestedFeedbackOnWorkerEventsBySubresourceID"},{"method":"get","path":"/performanceEnablement/v5/workers/:ID/requestedFeedbackOnSelfEvents","operationId":"workdayPerformanceEnablementGetWorkersByIDRequestedFeedbackOnSelfEvents"},{"method":"post","path":"/performanceEnablement/v5/workers/:ID/requestedFeedbackOnSelfEvents","operationId":"workdayPerformanceEnablementPostWorkersByIDRequestedFeedbackOnSelfEvents"},{"method":"get","path":"/performanceEnablement/v5/workers/:ID/requestedFeedbackOnWorkerEvents","operationId":"workdayPerformanceEnablementGetWorkersByIDRequestedFeedbackOnWorkerEvents"},{"method":"post","path":"/performanceEnablement/v5/workers/:ID/requestedFeedbackOnWorkerEvents","operationId":"workdayPerformanceEnablementPostWorkersByIDRequestedFeedbackOnWorkerEvents"},{"method":"get","path":"/performanceEnablement/v5/workers/:ID/goals/:subresourceID","operationId":"getGoal"},{"method":"get","path":"/performanceEnablement/v5/workers/:ID/anytimeFeedbackEvents","operationId":"workdayPerformanceEnablementGetWorkersByIDAnytimeFeedbackEvents"},{"method":"post","path":"/performanceEnablement/v5/workers/:ID/anytimeFeedbackEvents","operationId":"workdayPerformanceEnablementPostWorkersByIDAnytimeFeedbackEvents"},{"method":"get","path":"/performanceEnablement/v5/workers/:ID","operationId":"workdayPerformanceEnablementGetWorkersByID"},{"method":"get","path":"/performanceEnablement/v5/workers/:ID/developmentItems/:subresourceID","operationId":"workdayPerformanceEnablementGetWorkersByIDDevelopmentItemsBySubresourceID"},{"method":"patch","path":"/performanceEnablement/v5/workers/:ID/developmentItems/:subresourceID","operationId":"workdayPerformanceEnablementPatchWorkersByIDDevelopmentItemsBySubresourceID"},{"method":"get","path":"/performanceEnablement/v5/workers/:ID/developmentItems","operationId":"workdayPerformanceEnablementGetWorkersByIDDevelopmentItems"},{"method":"get","path":"/performanceEnablement/v5/workers/:ID/anytimeFeedbackEvents/:subresourceID","operationId":"workdayPerformanceEnablementGetWorkersByIDAnytimeFeedbackEventsBySubresourceID"},{"method":"get","path":"/performanceEnablement/v5/giveRequestedFeedbackEvents","operationId":"workdayPerformanceEnablementGetGiveRequestedFeedbackEvents"},{"method":"get","path":"/performanceEnablement/v5/giveRequestedFeedbackEvents/:ID","operationId":"workdayPerformanceEnablementGetGiveRequestedFeedbackEventsByID"},{"method":"patch","path":"/performanceEnablement/v5/giveRequestedFeedbackEvents/:ID","operationId":"workdayPerformanceEnablementPatchGiveRequestedFeedbackEventsByID"},{"method":"get","path":"/performanceEnablement/v5/values/manageGoals/status/","operationId":"workdayPerformanceEnablementGetValuesManageGoalsStatus"},{"method":"get","path":"/performanceEnablement/v5/values/manageGoals/categories/","operationId":"workdayPerformanceEnablementGetValuesManageGoalsCategories"},{"method":"get","path":"/performanceEnablement/v5/values/feedbackTemplate/feedbackTemplate/","operationId":"workdayPerformanceEnablementGetValuesFeedbackTemplateFeedbackTemplate"},{"method":"get","path":"/performanceEnablement/v5/values/reviewTemplate/templateForMyPerformanceReview/","operationId":"workdayPerformanceEnablementGetValuesReviewTemplateTemplateForMyPerformanceReview"},{"method":"get","path":"/performanceEnablement/v5/values/organizationGoal/goalPeriods/","operationId":"workdayPerformanceEnablementGetValuesOrganizationGoalGoalPeriods"},{"method":"get","path":"/performanceEnablement/v5/values/organizationGoal/organizations/","operationId":"workdayPerformanceEnablementGetValuesOrganizationGoalOrganizations"},{"method":"get","path":"/performanceEnablement/v5/values/organizationGoal/supportingInitiatives/","operationId":"workdayPerformanceEnablementGetValuesOrganizationGoalSupportingInitiatives"},{"method":"get","path":"/performanceEnablement/v5/values/workersToNotify/workersToNotify/","operationId":"workdayPerformanceEnablementGetValuesWorkersToNotifyWorkersToNotify"},{"method":"get","path":"/performanceEnablement/v5/values/feedbackResponder/feedbackResponder/","operationId":"workdayPerformanceEnablementGetValuesFeedbackResponderFeedbackResponder"},{"method":"get","path":"/performanceEnablement/v5/values/cascadeGoal/talentPools/","operationId":"workdayPerformanceEnablementGetValuesCascadeGoalTalentPools"},{"method":"get","path":"/performanceEnablement/v5/values/relatesTo/relatesTo/","operationId":"workdayPerformanceEnablementGetValuesRelatesToRelatesTo"},{"method":"get","path":"/performanceEnablement/v5/values/feedbackOnWorker/feedbackOnWorker/","operationId":"workdayPerformanceEnablementGetValuesFeedbackOnWorkerFeedbackOnWorker"}],"coverage":{"documentScope":"full","runtimeFidelity":"modeled","counts":{"operations":42},"notes":["All 42 operations in the pinned 2026-07-27 Workday Performance Enablement v5 artifact are mounted: 2 captured handlers and 40 per-instance repository-backed operations.","Modeled reads return stored resources, relationship-scoped collections, or native 404s; modeled writes provide read-after-write lifecycle behavior and never return request-seeded schema witnesses.","Full means the complete pinned service artifact, not the whole Workday platform.","Explicitly excluded: Workday Web Services (SOAP/WWS); Workday Graph API; Workday Query Language (WQL), a separate Platform API family; Reports-as-a-Service (RaaS) and tenant custom reports; Finance, Payroll, Student, and non-HR Platform REST services; Experimental alpha, beta, and labs services; Tenant-configured actions absent from the pinned public artifacts."]},"specPath":"/api/purple-suite/contracts/hris/workday/performance-enablement-v5/openapi.json","key":"hris/workday/performance-enablement-v5","system":"hris","paint":"workday","productLabel":"Workday","runtimeBase":"/api/purple-suite/{instanceId}/contracts/hris/workday","productDocsPath":"/api/purple-suite/docs/hris/workday","docsPath":"/api/purple-suite/docs/hris/workday/performance-enablement-v5","primary":false,"source":"painted"},{"id":"recruiting-v4","label":"Workday Recruiting v4 — full pinned service","version":"v4","protocol":"rest","specKind":"openapi","authProfiles":[{"id":"oauth2-bearer","label":"OAuth 2.0 bearer token","kind":"bearer","description":"The painted runtime validates a PurpleSuite instance key in the Workday bearer-token transport."}],"authVerifierId":"workday-recruiting-v4-bearer","credentialModel":"instance-key","direction":"outbound","runtimeOperations":[{"method":"get","path":"/recruiting/v4/interviews","operationId":"workdayRecruitingGetInterviews"},{"method":"get","path":"/recruiting/v4/interviews/:ID/feedback","operationId":"workdayRecruitingGetInterviewsByIDFeedback"},{"method":"post","path":"/recruiting/v4/interviews/:ID/feedback","operationId":"workdayRecruitingPostInterviewsByIDFeedback"},{"method":"get","path":"/recruiting/v4/interviews/:ID","operationId":"workdayRecruitingGetInterviewsByID"},{"method":"get","path":"/recruiting/v4/interviews/:ID/feedback/:subresourceID","operationId":"workdayRecruitingGetInterviewsByIDFeedbackBySubresourceID"},{"method":"post","path":"/recruiting/v4/prospects","operationId":"workdayRecruitingPostProspects"},{"method":"get","path":"/recruiting/v4/prospects/:ID/educations/:subresourceID","operationId":"workdayRecruitingGetProspectsByIDEducationsBySubresourceID"},{"method":"get","path":"/recruiting/v4/prospects/:ID/languages/:subresourceID","operationId":"workdayRecruitingGetProspectsByIDLanguagesBySubresourceID"},{"method":"get","path":"/recruiting/v4/prospects/:ID/resumeAttachments","operationId":"workdayRecruitingGetProspectsByIDResumeAttachments"},{"method":"post","path":"/recruiting/v4/prospects/:ID/resumeAttachments","operationId":"workdayRecruitingPostProspectsByIDResumeAttachments"},{"method":"get","path":"/recruiting/v4/prospects/:ID/experiences","operationId":"workdayRecruitingGetProspectsByIDExperiences"},{"method":"post","path":"/recruiting/v4/prospects/:ID/experiences","operationId":"workdayRecruitingPostProspectsByIDExperiences"},{"method":"get","path":"/recruiting/v4/prospects/:ID/languages","operationId":"workdayRecruitingGetProspectsByIDLanguages"},{"method":"post","path":"/recruiting/v4/prospects/:ID/languages","operationId":"workdayRecruitingPostProspectsByIDLanguages"},{"method":"get","path":"/recruiting/v4/prospects/:ID/skills/:subresourceID","operationId":"workdayRecruitingGetProspectsByIDSkillsBySubresourceID"},{"method":"get","path":"/recruiting/v4/prospects/:ID/resumeAttachments","operationId":"workdayRecruitingGetProspectsByIDResumeAttachmentsTypeViewFile","discriminator":{"kind":"query","operation":"workdayRecruitingGetProspectsByIDResumeAttachmentsTypeViewFile","parameter":"type","value":"viewFile"}},{"method":"get","path":"/recruiting/v4/prospects/:ID/skills","operationId":"workdayRecruitingGetProspectsByIDSkills"},{"method":"post","path":"/recruiting/v4/prospects/:ID/skills","operationId":"workdayRecruitingPostProspectsByIDSkills"},{"method":"get","path":"/recruiting/v4/prospects/:ID/experiences/:subresourceID","operationId":"workdayRecruitingGetProspectsByIDExperiencesBySubresourceID"},{"method":"get","path":"/recruiting/v4/prospects/:ID/educations","operationId":"workdayRecruitingGetProspectsByIDEducations"},{"method":"post","path":"/recruiting/v4/prospects/:ID/educations","operationId":"workdayRecruitingPostProspectsByIDEducations"},{"method":"get","path":"/recruiting/v4/prospects/:ID","operationId":"workdayRecruitingGetProspectsByID"},{"method":"get","path":"/recruiting/v4/prospects/:ID/resumeAttachments/:subresourceID","operationId":"workdayRecruitingGetProspectsByIDResumeAttachmentsBySubresourceIDTypeViewFile","discriminator":{"kind":"query","operation":"workdayRecruitingGetProspectsByIDResumeAttachmentsBySubresourceIDTypeViewFile","parameter":"type","value":"viewFile"}},{"method":"get","path":"/recruiting/v4/prospects/:ID/resumeAttachments/:subresourceID","operationId":"workdayRecruitingGetProspectsByIDResumeAttachmentsBySubresourceID"},{"method":"get","path":"/recruiting/v4/jobPostings","operationId":"workdayRecruitingGetJobPostings"},{"method":"get","path":"/recruiting/v4/jobPostings/:ID/questionnaire","operationId":"workdayRecruitingGetJobPostingsByIDQuestionnaire"},{"method":"get","path":"/recruiting/v4/jobPostings/:ID/questionnaire/:subresourceID","operationId":"workdayRecruitingGetJobPostingsByIDQuestionnaireBySubresourceID"},{"method":"get","path":"/recruiting/v4/jobPostings/:ID/candidateAvailabilityTemplate/:subresourceID","operationId":"workdayRecruitingGetJobPostingsByIDCandidateAvailabilityTemplateBySubresourceID"},{"method":"get","path":"/recruiting/v4/jobPostings/:ID","operationId":"workdayRecruitingGetJobPostingsByID"},{"method":"get","path":"/recruiting/v4/jobPostings/:ID/candidateAvailabilityTemplate","operationId":"workdayRecruitingGetJobPostingsByIDCandidateAvailabilityTemplate"},{"method":"get","path":"/recruiting/v4/values/common/countries/","operationId":"workdayRecruitingGetValuesCommonCountries"}],"coverage":{"documentScope":"full","runtimeFidelity":"modeled","counts":{"operations":31},"notes":["All 31 operations in the pinned 2026-07-27 Workday Recruiting v4 artifact are mounted: 0 captured handlers and 31 per-instance repository-backed operations.","Modeled reads return stored resources, relationship-scoped collections, or native 404s; modeled writes provide read-after-write lifecycle behavior and never return request-seeded schema witnesses.","Two artifact paths contain ?type=archive; runtime routing canonicalizes only those exact single-value query discriminators while retaining both official operation identities.","Full means the complete pinned service artifact, not the whole Workday platform.","Explicitly excluded: Workday Web Services (SOAP/WWS); Workday Graph API; Workday Query Language (WQL), a separate Platform API family; Reports-as-a-Service (RaaS) and tenant custom reports; Finance, Payroll, Student, and non-HR Platform REST services; Experimental alpha, beta, and labs services; Tenant-configured actions absent from the pinned public artifacts."]},"specPath":"/api/purple-suite/contracts/hris/workday/recruiting-v4/openapi.json","key":"hris/workday/recruiting-v4","system":"hris","paint":"workday","productLabel":"Workday","runtimeBase":"/api/purple-suite/{instanceId}/contracts/hris/workday","productDocsPath":"/api/purple-suite/docs/hris/workday","docsPath":"/api/purple-suite/docs/hris/workday/recruiting-v4","primary":false,"source":"painted"}],"key":"hris/workday","source":"painted"},{"system":"identity","paint":"purplesuite","available":true,"label":"Purple Identity API","runtimeBase":"/api/purple-suite/identity","docsPath":"/api/purple-suite/docs/identity/purplesuite","description":"Purple Identity — the canonical people directory for a Purple Suite instance. Every other app (HRIS, Calendar, Expense, ITSM, …) draws its internal people from this same roster, so an email means the same person everywhere. Exposes an OData-queryable /people collection AND an emulation of the Moveworks Identity Gateway (GET /users, GET /users/{userId}) so a deployment can sync its user directory directly from Purple Suite.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Identity API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/identity/purplesuite/openapi.json","runtimeOperations":[],"key":"identity/purplesuite/native-openapi","system":"identity","paint":"purplesuite","productLabel":"Purple Identity API","runtimeBase":"/api/purple-suite/identity","productDocsPath":"/api/purple-suite/docs/identity/purplesuite","docsPath":"/api/purple-suite/docs/identity/purplesuite/native-openapi","description":"Purple Identity — the canonical people directory for a Purple Suite instance. Every other app (HRIS, Calendar, Expense, ITSM, …) draws its internal people from this same roster, so an email means the same person everywhere. Exposes an OData-queryable /people collection AND an emulation of the Moveworks Identity Gateway (GET /users, GET /users/{userId}) so a deployment can sync its user directory directly from Purple Suite.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"identity/purplesuite","source":"native"},{"system":"instances","paint":"purplesuite","available":true,"label":"Purple Suite Instance Management API","runtimeBase":"/api/purple-suite","docsPath":"/api/purple-suite/docs/instances/purplesuite","description":"Manage a Purple Suite instance: lifecycle, MCP settings, data (seed/export/import/reset), and **outbound webhooks**.\n\n**Auth.** Every operation except `POST /instances` (create) is authenticated with the instance's Personal Access Token: send `Authorization: Bearer <PAT>` and the `X-Instance-ID` header. The PAT is returned once when the instance is created and is shown in the app under Settings → Credentials.\n\n**Shared instances (view-only).** An instance shared by link from the app can also be read with a **viewer token** in place of the PAT (same headers). Viewer requests are read-only: any non-GET method, and the settings/export reads on this API, return `403` with `code: viewer_read_only` or `owner_only`. Viewer tokens are minted by the app for internal users and stop working the moment sharing is turned off.\n\n**Webhooks.** A webhook fires an HTTP POST to your `url` when a subscribed event occurs (e.g. `hris.time_off_request.created`). Subscriptions support exact event types and wildcards: `*` (everything) and `<app>.*` (a whole app).\n\n**Signing.** When a webhook has `signingEnabled`, each delivery is signed with the instance signing secret: header `X-PurpleSuite-Signature: sha256=<hex>` over `\"<X-PurpleSuite-Timestamp>.<rawBody>\"` (HMAC-SHA256). Generate/rotate the secret via `POST /instances/{instanceId}/webhook-signing/rotate`.\n\n**Custom headers.** Each webhook may carry arbitrary outbound headers (e.g. an `Authorization` for your receiver). Header values flagged `encrypted` are stored encrypted at rest and never returned (masked on read).","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Suite Instance Management API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/instances/openapi.json","runtimeOperations":[],"key":"instances/purplesuite/native-openapi","system":"instances","paint":"purplesuite","productLabel":"Purple Suite Instance Management API","runtimeBase":"/api/purple-suite","productDocsPath":"/api/purple-suite/docs/instances/purplesuite","docsPath":"/api/purple-suite/docs/instances/purplesuite/native-openapi","description":"Manage a Purple Suite instance: lifecycle, MCP settings, data (seed/export/import/reset), and **outbound webhooks**.\n\n**Auth.** Every operation except `POST /instances` (create) is authenticated with the instance's Personal Access Token: send `Authorization: Bearer <PAT>` and the `X-Instance-ID` header. The PAT is returned once when the instance is created and is shown in the app under Settings → Credentials.\n\n**Shared instances (view-only).** An instance shared by link from the app can also be read with a **viewer token** in place of the PAT (same headers). Viewer requests are read-only: any non-GET method, and the settings/export reads on this API, return `403` with `code: viewer_read_only` or `owner_only`. Viewer tokens are minted by the app for internal users and stop working the moment sharing is turned off.\n\n**Webhooks.** A webhook fires an HTTP POST to your `url` when a subscribed event occurs (e.g. `hris.time_off_request.created`). Subscriptions support exact event types and wildcards: `*` (everything) and `<app>.*` (a whole app).\n\n**Signing.** When a webhook has `signingEnabled`, each delivery is signed with the instance signing secret: header `X-PurpleSuite-Signature: sha256=<hex>` over `\"<X-PurpleSuite-Timestamp>.<rawBody>\"` (HMAC-SHA256). Generate/rotate the secret via `POST /instances/{instanceId}/webhook-signing/rotate`.\n\n**Custom headers.** Each webhook may carry arbitrary outbound headers (e.g. an `Authorization` for your receiver). Header values flagged `encrypted` are stored encrypted at rest and never returned (masked on read).","primary":true,"source":"native"}],"key":"instances/purplesuite","source":"native"},{"system":"itsm","paint":"pagerduty","available":true,"label":"PagerDuty","runtimeBase":"/api/purple-suite/{instanceId}/contracts/itsm/pagerduty","docsPath":"/api/purple-suite/docs/itsm/pagerduty","primaryProfileId":"pagerduty-rest-v2","profiles":[{"id":"pagerduty-rest-v2","label":"PagerDuty REST API v2 — incidents, on-calls and schedules core","version":"PagerDuty/api-schema main, reference/REST/openapiv3.json; openapi 3.0.2, info.version 2.0.0","protocol":"rest","direction":"bidirectional","specKind":"openapi","authProfiles":[{"id":"api-token","label":"Authorization: Token token=<API_KEY>","kind":"authorization-token","credentialModel":"instance-key","description":"PagerDuty's REST API key transport, verbatim: `Authorization: Token token=<API_KEY>`. The PurpleSuite instance key stands in for the vendor REST API key, and every request must also send `Accept: application/vnd.pagerduty+json;version=2`. The key is account-scoped, as a PagerDuty general access key is; there is no user-scoped OAuth token and no requester user, so write operations identify their actor through the `From` header exactly as the pinned document requires."}],"authVerifierId":"pagerduty-rest-api-token","credentialModel":"instance-key","runtimeOperations":[{"method":"get","path":"/escalation_policies","operationId":"listEscalationPolicies"},{"method":"get","path":"/escalation_policies/:id","operationId":"getEscalationPolicy"},{"method":"get","path":"/incidents","operationId":"listIncidents"},{"method":"put","path":"/incidents","operationId":"updateIncidents"},{"method":"post","path":"/incidents","operationId":"createIncident"},{"method":"get","path":"/incidents/:id","operationId":"getIncident"},{"method":"put","path":"/incidents/:id","operationId":"updateIncident"},{"method":"get","path":"/incidents/:id/log_entries","operationId":"listIncidentLogEntries"},{"method":"get","path":"/incidents/:id/notes","operationId":"listIncidentNotes"},{"method":"post","path":"/incidents/:id/notes","operationId":"createIncidentNote"},{"method":"get","path":"/oncalls","operationId":"listOnCalls"},{"method":"get","path":"/priorities","operationId":"listPriorities"},{"method":"get","path":"/schedules","operationId":"listSchedules"},{"method":"get","path":"/schedules/:id","operationId":"getSchedule"},{"method":"put","path":"/schedules/:id","operationId":"updateSchedule"},{"method":"get","path":"/services","operationId":"listServices"},{"method":"get","path":"/services/:id","operationId":"getService"},{"method":"get","path":"/users","operationId":"listUsers"},{"method":"get","path":"/users/:id","operationId":"getUser"},{"method":"get","path":"/users/me","operationId":"getCurrentUser"}],"coverage":{"documentScope":"bounded","runtimeFidelity":"modeled","counts":{"operations":20},"notes":["19 modeled-core plus 1 unavailable operation of 157 in the pinned subset; 137 are outside executable scope. The pinned subset is itself nine whole path families of PagerDuty's 273-path REST catalog: Incidents, On-Calls, Schedules, Services, Escalation Policies, Users, Teams, Log Entries and Priorities. Event Orchestration, Automation Actions, Business Services, Analytics, Status Pages, Audit Records, Incident Workflows, Webhook Subscriptions, Rulesets, Custom Fields, V3 Schedules and the remaining families are absent from the pinned document; see source.lock.json x-purplesuite-subset.familiesAbsent.","GET /oncalls is computed from the persisted escalation policies and schedule layers on every request — rotation turn boundaries from rotation_virtual_start plus rotation_turn_length_seconds, daily and weekly restriction windows evaluated in the schedule's own time zone, later layers overriding earlier ones, and schedule_reference versus user_reference escalation targets resolved separately. Reordering a layer's users through PUT /schedules/{id} changes the on-call answer for an unchanged time window. No on-call row is stored.","Narrowed deliberately: include[] sideloading, per-request time_zone rendering, the escalation-policy and service sort_by orders, schedule overrides and previews, incident merge, snooze, responder requests, status updates, alerts, custom fields and incident types are removed from the served document rather than accepted and ignored. Bodies are closed to undeclared properties and bounded; the pinned schemas declare no additionalProperties and no length bounds anywhere.","GET /users/me is unavailable, not modeled. A PagerDuty account-scoped REST API key has no requester user, so the adapter returns the vendor error envelope and never a synthetic user. The instance key is account-scoped by construction.","Six defects in the vendor document constrain what can be emitted and are recorded verbatim in source.lock.json knownDefects: components.schemas.Channel has an unsatisfiable oneOf, so LogEntry.channel is omitted; AcknowledgeLogEntry's type enum contradicts its own LogEntry base, so no acknowledgement log entry can validate and none is emitted (acknowledgement state is recorded on the incident); Incident.resolved_at, Incident.priority, Oncall.schedule, Oncall.start, Oncall.end and ScheduleLayer.end are non-nullable while the document's own examples give them null, so the adapter omits them instead of emitting an undeclared null; header_Content-Type is required on bodyless GETs and is relaxed to optional there; statuses[] and urgencies[] declare type string while documenting repetition and are served as arrays; and IncidentBody.details is declared an object while the POST /incidents example sends a string, so the served request accepts either.","Error envelopes use the document's `{ error: { code, message, errors[] } }` shape exactly. The pinned document constrains `code` only as an integer and carries no error examples, so the numeric code values are modeled, not pinned. Rate limiting (429), plan-ability gating (402), permission scoping (403) and request-size limits (413) stay declared and are never emitted. Handler-emitted statuses are a strict subset of the served declarations; the transport 401/404 and the unexpected-failure 500 sit outside that subset by design and are recorded in coverage.md.","The served `api_key` scheme adds one key the pinned document does not carry: `x-default`, holding the literal `Token token=your-api-key` header value whose format the pinned scheme states in prose only. An apiKey credential is the whole Authorization value, so a docs console given only the pinned scheme prefills a bare key and its own cURL sample documents the transport wrongly. Every pinned field is unchanged and the pinned artifact is not mutated; `x-default` is the same vendor extension Klaviyo's own document ships.","self and html_url are omitted from every response object. Both are declared nullable. The adapter will not emit an absolute vendor origin a client could follow off-instance, and the painted base is not a public PagerDuty origin."]},"specPath":"/api/purple-suite/contracts/itsm/pagerduty/pagerduty-rest-v2/openapi.json","primaryAliasSpecPath":"/api/purple-suite/contracts/itsm/pagerduty/openapi.json","key":"itsm/pagerduty/pagerduty-rest-v2","system":"itsm","paint":"pagerduty","productLabel":"PagerDuty","runtimeBase":"/api/purple-suite/{instanceId}/contracts/itsm/pagerduty","productDocsPath":"/api/purple-suite/docs/itsm/pagerduty","docsPath":"/api/purple-suite/docs/itsm/pagerduty/pagerduty-rest-v2","primary":true,"source":"painted"}],"key":"itsm/pagerduty","source":"painted"},{"system":"itsm","paint":"purplesuite","available":true,"label":"Purple Suite ITSM API","runtimeBase":"/api/purple-suite/itsm","docsPath":"/api/purple-suite/docs/itsm/purplesuite","description":"\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Suite ITSM API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/itsm/purplesuite/openapi.json","runtimeOperations":[],"key":"itsm/purplesuite/native-openapi","system":"itsm","paint":"purplesuite","productLabel":"Purple Suite ITSM API","runtimeBase":"/api/purple-suite/itsm","productDocsPath":"/api/purple-suite/docs/itsm/purplesuite","docsPath":"/api/purple-suite/docs/itsm/purplesuite/native-openapi","description":"\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"itsm/purplesuite","source":"native"},{"system":"itsm","paint":"servicenow","available":true,"label":"ServiceNow","runtimeBase":"/api/purple-suite/{instanceId}/contracts/itsm/servicenow","docsPath":"/api/purple-suite/docs/itsm/servicenow","primaryProfileId":"servicenow-zurich-now-get","profiles":[{"id":"servicenow-zurich-now-get","label":"ServiceNow REST API zurich — GET /api/now/* persistent modeled service","version":"zurich","protocol":"rest","authProfiles":[{"id":"basic","label":"HTTP Basic — emulator compatibility","kind":"basic","credentialModel":"instance-key","description":"Authorization: Basic base64(user:password). This is ServiceNow's real transport for these routes, declared in the pinned document as an http/basic scheme. PurpleSuite maps the password position to the selected instance key and ignores the username, which authenticates as the synthetic integration identity purple.integration. No vendor-visible header is added."}],"authVerifierId":"servicenow-basic-instance-key","credentialModel":"instance-key","direction":"bidirectional","runtimeOperations":[{"method":"get","path":"/api/now/awa/agents/:user_id","operationId":"get_awa_agent_get_now_awa_agents_user_id"},{"method":"get","path":"/api/now/:api_version/awa/agents/:user_id","operationId":"get_awa_agent_get_now_awa_agents_user_id__versioned_url"},{"method":"get","path":"/api/now/awa/agents/:user_id/capacities","operationId":"get_awa_agent_get_now_awa_agents_user_id_capacities"},{"method":"get","path":"/api/now/:api_version/awa/agents/:user_id/capacities","operationId":"get_awa_agent_get_now_awa_agents_user_id_capacities__versioned_url"},{"method":"get","path":"/api/now/awa/agents/:user_id/presence_states","operationId":"get_awa_agent_get_now_awa_agents_user_id_presence_states"},{"method":"get","path":"/api/now/:api_version/awa/agents/:user_id/presence_states","operationId":"get_awa_agent_get_now_awa_agents_user_id_presence_states__versioned_url"},{"method":"get","path":"/api/now/account","operationId":"get_account_get_now_account"},{"method":"get","path":"/api/now/:api_version/account","operationId":"get_account_get_now_account__versioned_url"},{"method":"get","path":"/api/now/account/:id","operationId":"get_account_get_now_account_id"},{"method":"get","path":"/api/now/:api_version/account/:id","operationId":"get_account_get_now_account_id__versioned_url"},{"method":"get","path":"/api/now/actsub/activities","operationId":"get_activitysubscriptions_get_now_actsub_activities"},{"method":"get","path":"/api/now/:api_version/actsub/activities","operationId":"get_activitysubscriptions_get_now_actsub_activities__versioned_url"},{"method":"get","path":"/api/now/actsub/facets/:activity_context/:context_instance","operationId":"get_activitysubscriptions_get_now_actsub_facets_activity_context_context_instance"},{"method":"get","path":"/api/now/:api_version/actsub/facets/:activity_context/:context_instance","operationId":"get_activitysubscriptions_get_now_actsub_facets_activity_context_context_instance__versioned_url"},{"method":"get","path":"/api/now/stats/:tableName","operationId":"get_aggregate_get_now_stats_tablename"},{"method":"get","path":"/api/now/:api_version/stats/:tableName","operationId":"get_aggregate_get_now_stats_tablename__versioned_url"},{"method":"get","path":"/api/now/cmdb/app_service/:sys_id/getContent","operationId":"get_application_service_get_now_cmdb_app_service_sys_id_getcontent"},{"method":"get","path":"/api/now/cmdb/csdm/app_service/find_service","operationId":"get_application_service_get_now_cmdb_csdm_app_service_find_service"},{"method":"get","path":"/api/now/attachment","operationId":"get_attachment_get_now_attachment"},{"method":"get","path":"/api/now/v1/attachment","operationId":"get_attachment_get_now_attachment__versioned_url"},{"method":"get","path":"/api/now/attachment/:sys_id","operationId":"get_attachment_get_now_attachment_sys_id"},{"method":"get","path":"/api/now/v1/attachment/:sys_id","operationId":"get_attachment_get_now_attachment_sys_id__versioned_url"},{"method":"get","path":"/api/now/attachment/:sys_id/file","operationId":"get_attachment_get_now_attachment_sys_id_file"},{"method":"get","path":"/api/now/v1/attachment/:sys_id/file","operationId":"get_attachment_get_now_attachment_sys_id_file__versioned_url"},{"method":"get","path":"/api/now/cilifecyclemgmt/actions/:sys_id","operationId":"get_ci_lifecycle_management_get_now_cilifecyclemgmt_actions_sys_id"},{"method":"get","path":"/api/now/:api_version/cilifecyclemgmt/actions/:sys_id","operationId":"get_ci_lifecycle_management_get_now_cilifecyclemgmt_actions_sys_id__versioned_url"},{"method":"get","path":"/api/now/cilifecyclemgmt/compatActions","operationId":"get_ci_lifecycle_management_get_now_cilifecyclemgmt_compatactions"},{"method":"get","path":"/api/now/:api_version/cilifecyclemgmt/compatActions","operationId":"get_ci_lifecycle_management_get_now_cilifecyclemgmt_compatactions__versioned_url"},{"method":"get","path":"/api/now/cilifecyclemgmt/leases/:sys_id/expired","operationId":"get_ci_lifecycle_management_get_now_cilifecyclemgmt_leases_sys_id_expired"},{"method":"get","path":"/api/now/:api_version/cilifecyclemgmt/leases/:sys_id/expired","operationId":"get_ci_lifecycle_management_get_now_cilifecyclemgmt_leases_sys_id_expired__versioned_url"},{"method":"get","path":"/api/now/cilifecyclemgmt/notAllowedAction","operationId":"get_ci_lifecycle_management_get_now_cilifecyclemgmt_notallowedaction"},{"method":"get","path":"/api/now/:api_version/cilifecyclemgmt/notAllowedAction","operationId":"get_ci_lifecycle_management_get_now_cilifecyclemgmt_notallowedaction__versioned_url"},{"method":"get","path":"/api/now/cilifecyclemgmt/notAllowedOpsTransition","operationId":"get_ci_lifecycle_management_get_now_cilifecyclemgmt_notallowedopstransition"},{"method":"get","path":"/api/now/:api_version/cilifecyclemgmt/notAllowedOpsTransition","operationId":"get_ci_lifecycle_management_get_now_cilifecyclemgmt_notallowedopstransition__versioned_url"},{"method":"get","path":"/api/now/cilifecyclemgmt/requestors/:req_id/valid","operationId":"get_ci_lifecycle_management_get_now_cilifecyclemgmt_requestors_req_id_valid"},{"method":"get","path":"/api/now/:api_version/cilifecyclemgmt/requestors/:req_id/valid","operationId":"get_ci_lifecycle_management_get_now_cilifecyclemgmt_requestors_req_id_valid__versioned_url"},{"method":"get","path":"/api/now/cilifecyclemgmt/statuses/:sys_id","operationId":"get_ci_lifecycle_management_get_now_cilifecyclemgmt_statuses_sys_id"},{"method":"get","path":"/api/now/:api_version/cilifecyclemgmt/statuses/:sys_id","operationId":"get_ci_lifecycle_management_get_now_cilifecyclemgmt_statuses_sys_id__versioned_url"},{"method":"get","path":"/api/now/cmdb/instance/:className","operationId":"get_cmdb_instance_get_now_cmdb_instance_classname"},{"method":"get","path":"/api/now/:api_version/cmdb/instance/:className","operationId":"get_cmdb_instance_get_now_cmdb_instance_classname__versioned_url"},{"method":"get","path":"/api/now/cmdb/instance/:className/:sys_id","operationId":"get_cmdb_instance_get_now_cmdb_instance_classname_sys_id"},{"method":"get","path":"/api/now/:api_version/cmdb/instance/:className/:sys_id","operationId":"get_cmdb_instance_get_now_cmdb_instance_classname_sys_id__versioned_url"},{"method":"get","path":"/api/now/cmdb/meta/:className","operationId":"get_cmdb_meta_get_now_cmdb_meta_classname"},{"method":"get","path":"/api/now/:api_version/cmdb/meta/:className","operationId":"get_cmdb_meta_get_now_cmdb_meta_classname__versioned_url"},{"method":"get","path":"/api/now/v1/attachment_csm","operationId":"get_csm_attachment_get_now_attachment_csm"},{"method":"get","path":"/api/now/:api_version/attachment_csm","operationId":"get_csm_attachment_get_now_attachment_csm__versioned_url"},{"method":"get","path":"/api/now/v1/attachment_csm/:sys_id","operationId":"get_csm_attachment_get_now_attachment_csm_sys_id"},{"method":"get","path":"/api/now/:api_version/attachment_csm/:sys_id","operationId":"get_csm_attachment_get_now_attachment_csm_sys_id__versioned_url"},{"method":"get","path":"/api/now/v1/attachment_csm/:sys_id/file","operationId":"get_csm_attachment_get_now_attachment_csm_sys_id_file"},{"method":"get","path":"/api/now/:api_version/attachment_csm/:sys_id/file","operationId":"get_csm_attachment_get_now_attachment_csm_sys_id_file__versioned_url"},{"method":"get","path":"/api/now/sn_atf_tg/test_generation_progress","operationId":"get_cloud_runner_test_generation_get_now_sn_atf_tg_test_generation_progress"},{"method":"get","path":"/api/now/sn_atf_tg/test_runner_progress","operationId":"get_cloud_runner_test_runner_get_now_sn_atf_tg_test_runner_progress"},{"method":"get","path":"/api/now/sn_atf_tg/is_valid_cloud_user","operationId":"get_cloud_runner_test_user_get_now_sn_atf_tg_is_valid_cloud_user"},{"method":"get","path":"/api/now/sn_atf_tg/test_user_progress","operationId":"get_cloud_runner_test_user_get_now_sn_atf_tg_test_user_progress"},{"method":"get","path":"/api/now/cmp_catalog_api/itemsbyciclass","operationId":"get_cloud_services_catalog_get_now_cmp_catalog_api_itemsbyciclass"},{"method":"get","path":"/api/now/cmp_catalog_api/itemsbyrb","operationId":"get_cloud_services_catalog_get_now_cmp_catalog_api_itemsbyrb"},{"method":"get","path":"/api/now/cmp_catalog_api/services","operationId":"get_cloud_services_catalog_get_now_cmp_catalog_api_services"},{"method":"get","path":"/api/now/cmp_catalog_api/stacks","operationId":"get_cloud_services_catalog_get_now_cmp_catalog_api_stacks"},{"method":"get","path":"/api/now/cmp_catalog_api/status","operationId":"get_cloud_services_catalog_get_now_cmp_catalog_api_status"},{"method":"get","path":"/api/now/consumer","operationId":"get_consumer_get_now_consumer"},{"method":"get","path":"/api/now/:api_version/consumer","operationId":"get_consumer_get_now_consumer__versioned_url"},{"method":"get","path":"/api/now/consumer/:id","operationId":"get_consumer_get_now_consumer_id"},{"method":"get","path":"/api/now/:api_version/consumer/:id","operationId":"get_consumer_get_now_consumer_id__versioned_url"},{"method":"get","path":"/api/now/contact","operationId":"get_contact_get_now_contact"},{"method":"get","path":"/api/now/:api_version/contact","operationId":"get_contact_get_now_contact__versioned_url"},{"method":"get","path":"/api/now/contact/:id","operationId":"get_contact_get_now_contact_id"},{"method":"get","path":"/api/now/:api_version/contact/:id","operationId":"get_contact_get_now_contact_id__versioned_url"},{"method":"get","path":"/api/now/data_classification/getAllDataClasses","operationId":"get_data_classification_get_data_classification_getalldataclasses"},{"method":"get","path":"/api/now/email/:id","operationId":"get_email_get_now_email_id"},{"method":"get","path":"/api/now/:api_version/email/:id","operationId":"get_email_get_now_email_id__versioned_url"},{"method":"get","path":"/api/now/import/:stagingTableName/:sys_id","operationId":"get_import_set_get_now_import_stagingtablename_sys_id"},{"method":"get","path":"/api/now/:api_version/import/:stagingTableName/:sys_id","operationId":"get_import_set_get_now_import_stagingtablename_sys_id__versioned_url"},{"method":"get","path":"/api/now/clotho/table/:table/:subject/:metric","operationId":"get_metricbase_time_series_get_now_clotho_table_table_subject_metric"},{"method":"get","path":"/api/now/:api_version/clotho/table/:table/:subject/:metric","operationId":"get_metricbase_time_series_get_now_clotho_table_table_subject_metric__versioned_url"},{"method":"get","path":"/api/now/clotho/transform/:table/:metric","operationId":"get_metricbase_time_series_get_now_clotho_transform_table_metric"},{"method":"get","path":"/api/now/:api_version/clotho/transform/:table/:metric","operationId":"get_metricbase_time_series_get_now_clotho_transform_table_metric__versioned_url"},{"method":"get","path":"/api/now/agent_intelligence/solution/prediction","operationId":"get_predictive_intelligence_get_agent_intelligence_solution_prediction"},{"method":"get","path":"/api/now/agent_intelligence/solution/:solution_name/prediction","operationId":"get_predictive_intelligence_get_agent_intelligence_solution_solution_name_prediction"},{"method":"get","path":"/now/:api_version/agent_intelligence/solution/prediction","operationId":"get_predictive_intelligence_get_agent_intelligence_solution_solution_name_prediction__versioned_url"},{"method":"get","path":"/api/now/pa/scorecards","operationId":"get_scorecards_get_now_pa_scorecards"},{"method":"get","path":"/api/now/:api_version/pa/scorecards","operationId":"get_scorecards_get_now_pa_scorecards__versioned_url"},{"method":"get","path":"/api/now/js/debugpoints/script/:tableName/:sysId/:fieldName","operationId":"get_script_debugger_get_js_debugpoints_script_tablename_sysid_fieldname"},{"method":"get","path":"/api/now/scim/Companies","operationId":"get_scim_get_scim_companies"},{"method":"get","path":"/api/now/:api_version/scim/Companies","operationId":"get_scim_get_scim_companies__versioned_url"},{"method":"get","path":"/api/now/scim/CoostCenters/:cost_center_id","operationId":"get_scim_get_scim_costcenters_cost_center_id"},{"method":"get","path":"/api/now/:api_version/scim/CostCenters/:cost_center_id","operationId":"get_scim_get_scim_costcenters_cost_center_id__versioned_url"},{"method":"get","path":"/api/now/scim/CostCenters","operationId":"get_scim_get_scim_costcenters"},{"method":"get","path":"/api/now/:api_version/scim/CostCenters","operationId":"get_scim_get_scim_costcenters__versioned_url"},{"method":"get","path":"/api/now/scim/Departments","operationId":"get_scim_get_scim_departments"},{"method":"get","path":"/api/now/:api_version/scim/Departments","operationId":"get_scim_get_scim_departments__versioned_url"},{"method":"get","path":"/api/now/scim/Departments/:department_id","operationId":"get_scim_get_scim_departments_deparment_id"},{"method":"get","path":"/api/now/:api_version/scim/Departments/:department_id","operationId":"get_scim_get_scim_departments_deparment_id__versioned_url"},{"method":"get","path":"/api/now/scim/Groups","operationId":"get_scim_get_scim_groups"},{"method":"get","path":"/api/now/:api_version/scim/Groups","operationId":"get_scim_get_scim_groups__versioned_url"},{"method":"get","path":"/api/now/scim/Groups/:company_id","operationId":"get_scim_get_scim_companies_company_id"},{"method":"get","path":"/api/now/:api_version/scim/Companies/:company_id","operationId":"get_scim_get_scim_companies_company_id__versioned_url"},{"method":"get","path":"/api/now/scim/Groups/:group_id","operationId":"get_scim_get_scim_groups_group_id"},{"method":"get","path":"/api/now/:api_version/scim/Groups/:group_id","operationId":"get_scim_get_scim_groups_group_id__versioned_url"},{"method":"get","path":"/api/now/scim/Locations","operationId":"get_scim_get_scim_locations"},{"method":"get","path":"/api/now/:api_version/scim/Locations","operationId":"get_scim_get_scim_locations__versioned_url"},{"method":"get","path":"/api/now/scim/Locations/:location_id","operationId":"get_scim_get_scim_locations_location_id"},{"method":"get","path":"/api/now/:api_version/scim/Locations/:location_id","operationId":"get_scim_get_scim_locations_location_id__versioned_url"},{"method":"get","path":"/api/now/scim/ResourceTypes","operationId":"get_scim_get_scim_resourcetypes"},{"method":"get","path":"/api/now/:api_version/scim/ResourceTypes","operationId":"get_scim_get_scim_resourcetypes__versioned_url"},{"method":"get","path":"/api/now/scim/ResourceTypes/:ResourceName","operationId":"get_scim_get_scim_resourcetypes_resourcename"},{"method":"get","path":"/api/now/:api_version/scim/ResourceTypes/:ResourceName","operationId":"get_scim_get_scim_resourcetypes_resourcename__versioned_url"},{"method":"get","path":"/api/now/scim/Schemas","operationId":"get_scim_get_scim_schemas"},{"method":"get","path":"/api/now/:api_version/scim/Schemas","operationId":"get_scim_get_scim_schemas__versioned_url"},{"method":"get","path":"/api/now/scim/Schemas/:SchemaName","operationId":"get_scim_get_scim_schemas_schemaname"},{"method":"get","path":"/api/now/:api_version/scim/Schemas/:SchemaName","operationId":"get_scim_get_scim_schemas_schemaname__versioned_url"},{"method":"get","path":"/api/now/scim/ServiceProviderConfig","operationId":"get_scim_get_scim_serviceproviderconfig"},{"method":"get","path":"/api/now/:api_version/scim/ServiceProviderConfig","operationId":"get_scim_get_scim_serviceproviderconfig__versioned_url"},{"method":"get","path":"/api/now/scim/Users","operationId":"get_scim_get_scim_users"},{"method":"get","path":"/api/now/:api_version/scim/Users","operationId":"get_scim_get_scim_users__versioned_url"},{"method":"get","path":"/api/now/scim/Users/:user_id","operationId":"get_scim_get_scim_users_user_id"},{"method":"get","path":"/api/now/:api_version/scim/Users/:user_id","operationId":"get_scim_get_scim_users_user_id__versioned_url"},{"method":"get","path":"/api/now/table/:tableName","operationId":"get_table_get_now_table_tablename"},{"method":"get","path":"/api/now/:api_version/table/:tableName","operationId":"get_table_get_now_table_tablename__versioned_url"},{"method":"get","path":"/api/now/table/:tableName/:sys_id","operationId":"get_table_get_now_table_tablename_sys_id"},{"method":"get","path":"/api/now/:api_version/table/:tableName/:sys_id","operationId":"get_table_get_now_table_tablename_sys_id__versioned_url"},{"method":"get","path":"/api/now/wrapup/code/:code_id","operationId":"get_wrap_up_get_now_wrapup_code_code_id"},{"method":"get","path":"/api/now/:api_version/wrapup/code/:code_id","operationId":"get_wrap_up_get_now_wrapup_code_code_id__versioned_url"},{"method":"get","path":"/api/now/wrapup/segment/agent/:agent_id/interaction/:interaction_id","operationId":"get_wrap_up_get_now_wrapup_segment_agent_agent_id_interaction_interaction_id"},{"method":"get","path":"/api/now/:api_version/wrapup/segment/agent/:agent_id/interaction/:interaction_id","operationId":"get_wrap_up_get_now_wrapup_segment_agent_agent_id_interaction_interaction_id__versioned_url"},{"method":"get","path":"/api/now/wrapup/segment/:segment_id","operationId":"get_wrap_up_get_now_wrapup_segment_segment_id"},{"method":"get","path":"/api/now/:api_version/wrapup/segment/:segment_id","operationId":"get_wrap_up_get_now_wrapup_segment_segment_id__versioned_url"}],"coverage":{"documentScope":"bounded","runtimeFidelity":"modeled","counts":{"operations":126},"notes":["The published surface is the complete GET /api/now/* set: 70 vendor operations, mounted as 126 routes because ServiceNow serves both a default and a versioned URL form and the pinned artifact records both. GET /api/now/table/* is a strict subset of this scope.","45 operations are modeled against persistent per-instance state. One Firestore-backed ServiceNow table store backs all of them: the Table and Aggregate APIs are the generic surface, and the Attachment, CSM Attachment, CMDB Instance, CMDB Meta, Account, Contact, Consumer, SCIM, Import Set, Data Classification, Email, and CI Lifecycle Management APIs are projections over the same rows — which is how ServiceNow itself is built.","25 operations are unavailable: schema-visible, mounted, and failing closed with ServiceNow's documented 403 before any state is read. Each rests on a prerequisite the vendor's own page states — an add-on plugin, a paid ITOM entitlement, a documented role, a trained ML model, or vendor-hosted infrastructure. None returns a fabricated success. COVERAGE_LEDGER.md names the axis for each.","The pinned artifact is scraped rather than vendor-published and declares no response schemas at all (x-scraped.not_derived). Response shape is therefore pinned to a second source: the official per-family reference pages. Every schema in the served document carries x-purplesuite-response-source naming the page it came from, so document readers can separate what the artifact declared from what was sourced alongside it.","The error envelope is the one part of this contract that is corroborated rather than vendor-documented: no ServiceNow reference page prints it. The status codes, their meanings, and the v1-404/v2-200 empty-result rule are officially sourced; the JSON envelope is taken from real instance responses quoted in vendor community threads and is recorded at that rank. SCIM's envelope is different and is officially documented.","Eight in-scope operations were repaired from defective path keys, and five from a malformed x-servicenow-versioned-url, per the pin's own x-catalog-notice.actually_required, whose disposition is REPORTED, NOT REPAIRED and instructs consumers to override. Three findings go beyond that notice: a fourth defect family it does not enumerate (keys missing the /api segment), a fifth in the versioned URLs (the Attachment API records a literal v1 rather than the placeholder), and the Email operation, whose default route survives nowhere in the pin and was recovered from the official Email API page.","Two source defects are preserved rather than silently corrected, because x-scraped declares paths reliable and operation ids derived: the /scim/CoostCenters typo, and the /scim/Groups/{company_id} wire collision with /scim/Groups/{group_id}. Both collide-able ids serve the same group retrieval so the collision cannot yield divergent results.","No write operation is in scope, so the create/update/delete lifecycle proof is replaced by a cross-projection coherence proof: the same stored row surfaces through table/sys_user and scim/Users, through table/customer_account and account, and through table/sys_attachment and attachment, and stats counts agree with X-Total-Count.","oauth2 is declared in the pinned document but unhosted: /oauth_token.do is outside the GET /api/now/* scope, so no verifier is mounted for it."]},"specKind":"openapi","specPath":"/api/purple-suite/contracts/itsm/servicenow/servicenow-zurich-now-get/openapi.json","primaryAliasSpecPath":"/api/purple-suite/contracts/itsm/servicenow/openapi.json","key":"itsm/servicenow/servicenow-zurich-now-get","system":"itsm","paint":"servicenow","productLabel":"ServiceNow","runtimeBase":"/api/purple-suite/{instanceId}/contracts/itsm/servicenow","productDocsPath":"/api/purple-suite/docs/itsm/servicenow","docsPath":"/api/purple-suite/docs/itsm/servicenow/servicenow-zurich-now-get","primary":true,"source":"painted"},{"id":"servicenow-zurich-table-write","label":"ServiceNow Zurich — Table API writes (modeled core)","version":"zurich","protocol":"rest","authProfiles":[{"id":"basic","label":"HTTP Basic — emulator compatibility","kind":"basic","credentialModel":"instance-key","description":"Authorization: Basic base64(user:password). This is ServiceNow's real transport for these routes, declared in the pinned document as an http/basic scheme. PurpleSuite maps the password position to the selected instance key and ignores the username, which authenticates as the synthetic integration identity purple.integration. No vendor-visible header is added."}],"authVerifierId":"servicenow-basic-instance-key","credentialModel":"instance-key","direction":"bidirectional","runtimeOperations":[{"method":"post","path":"/api/now/table/:tableName","operationId":"post_table_post_now_table_tablename"},{"method":"post","path":"/api/now/:api_version/table/:tableName","operationId":"post_table_post_now_table_tablename__versioned_url"},{"method":"patch","path":"/api/now/table/:tableName/:sys_id","operationId":"patch_table_patch_now_table_tablename_sys_id"},{"method":"patch","path":"/api/now/:api_version/table/:tableName/:sys_id","operationId":"patch_table_patch_now_table_tablename_sys_id__versioned_url"},{"method":"put","path":"/api/now/table/:tableName/:sys_id","operationId":"put_table_put_now_table_tablename_sys_id"},{"method":"put","path":"/api/now/:api_version/table/:tableName/:sys_id","operationId":"put_table_put_now_table_tablename_sys_id__versioned_url"},{"method":"delete","path":"/api/now/table/:tableName/:sys_id","operationId":"delete_table_delete_now_table_tablename_sys_id"},{"method":"delete","path":"/api/now/:api_version/table/:tableName/:sys_id","operationId":"delete_table_delete_now_table_tablename_sys_id__versioned_url"}],"coverage":{"documentScope":"bounded","runtimeFidelity":"modeled","counts":{"operations":8},"notes":["Four Table API write operations, each mounted at its default and versioned URL. All four are modeled-core, with narrowed table and field schemas; this is not full ServiceNow runtime parity.","POST creates persistent records with generated sys_id and transactional number allocation; PUT/PATCH change supplied fields; DELETE is persistent and deletion-stable. These records share storage with Table GET and Aggregate.","Basic authentication uses the instance key in the vendor password position. No hosted OAuth, business rules, ACL administration, custom fields, or workflow engine is claimed."]},"specKind":"openapi","specPath":"/api/purple-suite/contracts/itsm/servicenow/servicenow-zurich-table-write/openapi.json","key":"itsm/servicenow/servicenow-zurich-table-write","system":"itsm","paint":"servicenow","productLabel":"ServiceNow","runtimeBase":"/api/purple-suite/{instanceId}/contracts/itsm/servicenow","productDocsPath":"/api/purple-suite/docs/itsm/servicenow","docsPath":"/api/purple-suite/docs/itsm/servicenow/servicenow-zurich-table-write","primary":false,"source":"painted"}],"key":"itsm/servicenow","source":"painted"},{"system":"itsm","paint":"tines","available":true,"label":"Tines","runtimeBase":"/api/purple-suite/{instanceId}/contracts/itsm/tines","docsPath":"/api/purple-suite/docs/itsm/tines","primaryProfileId":"tines-rest-v1","profiles":[{"id":"tines-rest-v1","label":"Tines REST API — PurpleSuite executable core","version":"openapi 3.0.3, info.version 1.0.0, info.title \"Tines Stories API\"","protocol":"rest","direction":"bidirectional","specKind":"openapi","authProfiles":[{"id":"user-token","label":"X-User-Token: <API_KEY>","kind":"api-key","credentialModel":"instance-key","description":"Tines' own API-key header, verbatim. The PurpleSuite instance key is the token value, and the instance itself comes from the route base only, never from a header. A key that cannot reach a resource receives 404 rather than 403, exactly as the pinned security-scheme description and Tines' authentication page both state."},{"id":"bearer-token","label":"Authorization: Bearer <API_KEY>","kind":"bearer","credentialModel":"instance-key","description":"The equivalent bearer transport for the same key. The pinned document declares apiKey and bearerAuth as alternatives on every operation, so both are accepted and neither is preferred."}],"authVerifierId":"tines-rest-user-token","credentialModel":"instance-key","runtimeOperations":[{"method":"get","path":"/api/v2/cases","operationId":"get_api_v2_cases"},{"method":"post","path":"/api/v2/cases","operationId":"post_api_v2_cases"},{"method":"get","path":"/api/v2/cases/:id","operationId":"get_api_v2_cases_by_id"},{"method":"patch","path":"/api/v2/cases/:id","operationId":"patch_api_v2_cases_by_id"},{"method":"put","path":"/api/v2/cases/:id","operationId":"put_api_v2_cases_by_id"},{"method":"delete","path":"/api/v2/cases/:id","operationId":"delete_api_v2_cases_by_id"},{"method":"get","path":"/api/v2/cases/:case_id/comments","operationId":"get_api_v2_cases_by_case_id_comments"},{"method":"post","path":"/api/v2/cases/:case_id/comments","operationId":"post_api_v2_cases_by_case_id_comments"},{"method":"get","path":"/api/v2/cases/:case_id/comments/:id","operationId":"get_api_v2_cases_by_case_id_comments_by_id"},{"method":"patch","path":"/api/v2/cases/:case_id/comments/:id","operationId":"patch_api_v2_cases_by_case_id_comments_by_id"},{"method":"put","path":"/api/v2/cases/:case_id/comments/:id","operationId":"put_api_v2_cases_by_case_id_comments_by_id"},{"method":"delete","path":"/api/v2/cases/:case_id/comments/:id","operationId":"delete_api_v2_cases_by_case_id_comments_by_id"},{"method":"get","path":"/api/v2/cases/:case_id/tasks","operationId":"get_api_v2_cases_by_case_id_tasks"},{"method":"post","path":"/api/v2/cases/:case_id/tasks","operationId":"post_api_v2_cases_by_case_id_tasks"},{"method":"get","path":"/api/v2/cases/:case_id/tasks/:id","operationId":"get_api_v2_cases_by_case_id_tasks_by_id"},{"method":"patch","path":"/api/v2/cases/:case_id/tasks/:id","operationId":"patch_api_v2_cases_by_case_id_tasks_by_id"},{"method":"put","path":"/api/v2/cases/:case_id/tasks/:id","operationId":"put_api_v2_cases_by_case_id_tasks_by_id"},{"method":"delete","path":"/api/v2/cases/:case_id/tasks/:id","operationId":"delete_api_v2_cases_by_case_id_tasks_by_id"},{"method":"get","path":"/api/v2/cases/:case_id/assignees","operationId":"get_api_v2_cases_by_case_id_assignees"},{"method":"get","path":"/api/v2/cases/:case_id/activities","operationId":"get_api_v2_cases_by_case_id_activities"},{"method":"get","path":"/api/v2/cases/:case_id/pdf","operationId":"get_api_v2_cases_by_case_id_pdf"},{"method":"get","path":"/api/v1/teams","operationId":"get_api_v1_teams"},{"method":"get","path":"/api/v1/teams/:id","operationId":"get_api_v1_teams_by_id"},{"method":"get","path":"/api/v1/admin/users","operationId":"get_api_v1_admin_users"},{"method":"get","path":"/api/v1/admin/users/:id","operationId":"get_api_v1_admin_users_by_id"},{"method":"get","path":"/api/v1/case_sub_statuses","operationId":"get_api_v1_case_sub_statuses"},{"method":"get","path":"/api/v1/tags","operationId":"get_api_v1_tags"},{"method":"get","path":"/api/v1/info","operationId":"get_api_v1_info"}],"coverage":{"documentScope":"bounded","runtimeFidelity":"mixed","counts":{"operations":28},"notes":["27 modeled-core plus 1 unavailable operation of 369 in the pinned document; 341 are outside executable scope and are listed one row each in coverage.md. The pinned artifact is the complete published Tines surface, not a subset — the bound is on what this adapter executes, not on what it pinned.","The served core is one coherent Cases v2 lifecycle — create, retrieve, list, update, close, delete, with comments, tasks, assignees and the activity timeline — plus the tenant reads a case references by id (teams, admin users, case sub-statuses, tags, info). Every id this contract emits resolves through another served operation, so a client can traverse the surface without a dangling reference.","Cases v2 is served rather than Cases v1. Both are pinned; v2 is the current generation and names its path parameters consistently, while the v1 Cases family is one of the surfaces the published document names inconsistently enough that 44 of its path parameters had to be reconciled with their own routes before it could be validated at all.","Stories, Actions, Events, Records, Global Resources, Run Script Environments, SCIM, Audit Logs, Admin roles/licence/SMTP/tunnels/sync-destinations and the AI surfaces are pinned and documented but not executed. Story and Action execution needs the Tines workflow engine; the AI surfaces need a hosted model; tunnels, SMTP and sync destinations need outbound network the contract deliberately does not make.","Case PDF export is the single unavailable operation. It validates the request far enough to prove the case exists, then refuses in the vendor's error envelope. No fabricated document is returned and no state changes.","The pinned document declares no error responses at all: all 369 operations publish only 200, 201 or 204, and no error schema or example appears anywhere. The handler-emitted 400, 401, 404, 422 and 500 therefore sit outside the served declarations by design, use { error: <message> }, and are modeled rather than pinned. Two error behaviours are honoured because the vendor documents them in prose: an under-privileged key receives 404 rather than 403, and a missing credential receives 401.","Two vendor schema defects are narrowed away rather than approximated. case.assignees, case.activities, case.linked_cases, case.fields and case.tasks are each declared as a $ref to a singular object schema while the resource is a collection, and admin_user.team_memberships has the same defect; an array cannot validate against type:object, so no emittable value is both schema-conformant and correct. The served schemas drop those members and the adapter never emits them. Assignees, activities and tasks stay reachable through their own served sub-resource operations, each of which types its collection correctly.","The pinned PaginationMeta declares current_page, per_page, total_pages and total_count while every published Tines response example shows current_page, previous_page, next_page, next_page_number, per_page, pages and count. The adapter emits the vendor's documented shape, which validates against the pinned schema because it declares neither a required array nor additionalProperties:false. per_page defaults to 20 and is capped at 500, as Tines documents.","case.resolved_by is omitted until a case is closed. The pinned schema declares it as a non-nullable $ref to the user object, but an open case has no resolver, so there is no value it could carry: emitting null would be undeclared and emitting a fabricated resolver would be worse. The schema declares no required array, so omission is conformant.","case.url is omitted. It is an absolute tenant origin, and this contract will not emit a link a client could follow off-instance.","The 48-member filters object on GET /api/v2/cases is narrowed in the served document to the six members this adapter evaluates. A filter that were accepted and ignored would make a filtered list indistinguishable from an unfiltered one, which is the failure a grader cannot see.","People come from the shared PurpleSuite identity roster, so a Tines user here is the same human the instance's HRIS and calendar apps know, joined on email. Cases, comments, tasks and assignees are all persisted per instance: a case created through POST /api/v2/cases is returned by the list, the retrieve, its own comments and tasks collections, and its assignees read, and a delete removes its comments and tasks with it.","The pinned artifact is the vendor's published document with one disclosed class of mechanical repair: Tines names path parameters differently from its own route templates, leaving 45 placeholders undeclared and 44 declared parameters absent from their routes. Reconciling them is what makes the document callable and validatable at all; descriptions, schemas, bodies and responses are untouched, and the per-operation detail travels inside the artifact. Exactly one served operation is affected — GET /api/v1/admin/users/{id}, whose user_id parameter was renamed to id to match its route."]},"specPath":"/api/purple-suite/contracts/itsm/tines/tines-rest-v1/openapi.json","primaryAliasSpecPath":"/api/purple-suite/contracts/itsm/tines/openapi.json","key":"itsm/tines/tines-rest-v1","system":"itsm","paint":"tines","productLabel":"Tines","runtimeBase":"/api/purple-suite/{instanceId}/contracts/itsm/tines","productDocsPath":"/api/purple-suite/docs/itsm/tines","docsPath":"/api/purple-suite/docs/itsm/tines/tines-rest-v1","primary":true,"source":"painted"}],"key":"itsm/tines","source":"painted"},{"system":"lms","paint":"purplesuite","available":true,"label":"Purple Suite LMS API","runtimeBase":"/api/purple-suite/lms","docsPath":"/api/purple-suite/docs/lms/purplesuite","description":"Learning Management System (LMS) API — manage a course catalog and learner enrollments. Resembles tools like Cornerstone, Docebo, and SAP SuccessFactors Learning. Pairs with Purple HRS skills/goals for skill-gap-driven learning.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Suite LMS API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/lms/purplesuite/openapi.json","runtimeOperations":[],"key":"lms/purplesuite/native-openapi","system":"lms","paint":"purplesuite","productLabel":"Purple Suite LMS API","runtimeBase":"/api/purple-suite/lms","productDocsPath":"/api/purple-suite/docs/lms/purplesuite","docsPath":"/api/purple-suite/docs/lms/purplesuite/native-openapi","description":"Learning Management System (LMS) API — manage a course catalog and learner enrollments. Resembles tools like Cornerstone, Docebo, and SAP SuccessFactors Learning. Pairs with Purple HRS skills/goals for skill-gap-driven learning.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"lms/purplesuite","source":"native"},{"system":"manager-experience","paint":"purplesuite","available":true,"label":"Purple Suite Manager Experience API","runtimeBase":"/api/purple-suite/manager-experience","docsPath":"/api/purple-suite/docs/manager-experience/purplesuite","description":"Source system for the Manager Hub plugins: a manager's Teams chats/channels, Outlook mail, Jira sprint health & issues, Workday learning & certifications, SAP SuccessFactors certifications, and ServiceNow HR profile/org lookups for their direct reports. The data layer (chats, messages, issues, enrollments, certifications) is Purple-native CRUD+OData; the contract layer reproduces each real vendor's exact wire format so an agent built against Manager Experience works unchanged against the live vendor.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Suite Manager Experience API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/manager-experience/purplesuite/openapi.json","runtimeOperations":[],"key":"manager-experience/purplesuite/native-openapi","system":"manager-experience","paint":"purplesuite","productLabel":"Purple Suite Manager Experience API","runtimeBase":"/api/purple-suite/manager-experience","productDocsPath":"/api/purple-suite/docs/manager-experience/purplesuite","docsPath":"/api/purple-suite/docs/manager-experience/purplesuite/native-openapi","description":"Source system for the Manager Hub plugins: a manager's Teams chats/channels, Outlook mail, Jira sprint health & issues, Workday learning & certifications, SAP SuccessFactors certifications, and ServiceNow HR profile/org lookups for their direct reports. The data layer (chats, messages, issues, enrollments, certifications) is Purple-native CRUD+OData; the contract layer reproduces each real vendor's exact wire format so an agent built against Manager Experience works unchanged against the live vendor.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"manager-experience/purplesuite","source":"native"},{"system":"pages","paint":"notion","available":true,"label":"Notion","runtimeBase":"/api/purple-suite/{instanceId}/contracts/pages/notion","docsPath":"/api/purple-suite/docs/pages/notion","primaryProfileId":"notion-v1-2026-03-11","profiles":[{"id":"notion-v1-2026-03-11","label":"Notion API 2026-03-11 — resource operations","version":"2026-03-11","protocol":"rest","authProfiles":[{"id":"bearer-instance-key","label":"Integration token — emulator compatibility","kind":"bearer","credentialModel":"instance-key","description":"Authorization: Bearer <token>. This is Notion's real and only transport for the resource API; PurpleSuite maps the token position to the selected instance key and adds no vendor-visible header. Every request must also carry Notion-Version: 2026-03-11, which the document marks required on all 61 operations."},{"id":"bearer-oauth-access-token","label":"OAuth access token issued by this instance","kind":"bearer","requestAware":true,"credentialModel":"dedicated","description":"An access token minted by this instance's modeled OAuth flow, presented through the same bearer transport. Tokens are persisted only as SHA-256 digests, and a refresh token is refused here — `_token_type` is checked, so a refresh credential cannot reach a resource route."}],"authVerifierId":"notion-bearer-hybrid","credentialModel":"dedicated","credentialRequirements":{"description":"The verifier must see the whole request: it resolves the bearer value against this instance's OAuth token digests before falling back to the instance key, and enforces the required Notion-Version header ahead of every handler.","requestAware":true},"direction":"bidirectional","runtimeOperations":[{"method":"delete","path":"/v1/agents/:agent_id","operationId":"delete-agent"},{"method":"get","path":"/v1/agents/:agent_id","operationId":"get-agent"},{"method":"patch","path":"/v1/agents/:agent_id/credit_limit","operationId":"update-agent-credit-limit"},{"method":"get","path":"/v1/agents/:agent_id/insights","operationId":"get-agent-insights"},{"method":"patch","path":"/v1/agents/:agent_id/status","operationId":"update-agent-status"},{"method":"post","path":"/v1/agents/batch","operationId":"agent-batch"},{"method":"post","path":"/v1/agents/query","operationId":"query-agents"},{"method":"get","path":"/v1/async_tasks/:task_id","operationId":"retrieve-async-task"},{"method":"delete","path":"/v1/blocks/:block_id","operationId":"delete-a-block"},{"method":"get","path":"/v1/blocks/:block_id","operationId":"retrieve-a-block"},{"method":"patch","path":"/v1/blocks/:block_id","operationId":"update-a-block"},{"method":"get","path":"/v1/blocks/:block_id/children","operationId":"get-block-children"},{"method":"patch","path":"/v1/blocks/:block_id/children","operationId":"patch-block-children"},{"method":"post","path":"/v1/blocks/meeting_notes","operationId":"create-meeting-note"},{"method":"post","path":"/v1/blocks/meeting_notes/query","operationId":"query-meeting-notes"},{"method":"get","path":"/v1/comments","operationId":"list-comments"},{"method":"post","path":"/v1/comments","operationId":"create-a-comment"},{"method":"delete","path":"/v1/comments/:comment_id","operationId":"delete-a-comment"},{"method":"get","path":"/v1/comments/:comment_id","operationId":"retrieve-comment"},{"method":"patch","path":"/v1/comments/:comment_id","operationId":"update-a-comment"},{"method":"get","path":"/v1/custom_emojis","operationId":"list-custom-emojis"},{"method":"post","path":"/v1/data_sources","operationId":"create-a-database"},{"method":"get","path":"/v1/data_sources/:data_source_id","operationId":"retrieve-a-data-source"},{"method":"patch","path":"/v1/data_sources/:data_source_id","operationId":"update-a-data-source"},{"method":"post","path":"/v1/data_sources/:data_source_id/query","operationId":"post-database-query"},{"method":"get","path":"/v1/data_sources/:data_source_id/templates","operationId":"list-data-source-templates"},{"method":"post","path":"/v1/databases","operationId":"create-database"},{"method":"get","path":"/v1/databases/:database_id","operationId":"retrieve-database"},{"method":"patch","path":"/v1/databases/:database_id","operationId":"update-database"},{"method":"get","path":"/v1/file_uploads","operationId":"list-file-uploads"},{"method":"post","path":"/v1/file_uploads","operationId":"create-file"},{"method":"get","path":"/v1/file_uploads/:file_upload_id","operationId":"retrieve-file-upload"},{"method":"post","path":"/v1/file_uploads/:file_upload_id/complete","operationId":"complete-file-upload"},{"method":"post","path":"/v1/file_uploads/:file_upload_id/send","operationId":"upload-file"},{"method":"post","path":"/v1/pages","operationId":"post-page"},{"method":"get","path":"/v1/pages/:page_id","operationId":"retrieve-a-page"},{"method":"patch","path":"/v1/pages/:page_id","operationId":"patch-page"},{"method":"get","path":"/v1/pages/:page_id/markdown","operationId":"retrieve-page-markdown"},{"method":"patch","path":"/v1/pages/:page_id/markdown","operationId":"update-page-markdown"},{"method":"post","path":"/v1/pages/:page_id/move","operationId":"move-page"},{"method":"get","path":"/v1/pages/:page_id/properties/:property_id","operationId":"retrieve-a-page-property"},{"method":"post","path":"/v1/search","operationId":"post-search"},{"method":"post","path":"/v1/sessions","operationId":"update-session"},{"method":"get","path":"/v1/sessions/:session_id","operationId":"retrieve-session"},{"method":"post","path":"/v1/sessions/:session_id/cancel","operationId":"cancel-session"},{"method":"post","path":"/v1/sessions/:session_id/events/query","operationId":"query-session-events"},{"method":"post","path":"/v1/sessions/query","operationId":"query-sessions"},{"method":"get","path":"/v1/users","operationId":"get-users"},{"method":"get","path":"/v1/users/:user_id","operationId":"get-user"},{"method":"get","path":"/v1/users/me","operationId":"get-self"},{"method":"get","path":"/v1/views","operationId":"list-views"},{"method":"post","path":"/v1/views","operationId":"create-view"},{"method":"delete","path":"/v1/views/:view_id","operationId":"delete-view"},{"method":"get","path":"/v1/views/:view_id","operationId":"retrieve-a-view"},{"method":"patch","path":"/v1/views/:view_id","operationId":"update-a-view"},{"method":"post","path":"/v1/views/:view_id/queries","operationId":"create-view-query"},{"method":"delete","path":"/v1/views/:view_id/queries/:query_id","operationId":"delete-view-query"},{"method":"get","path":"/v1/views/:view_id/queries/:query_id","operationId":"get-view-query-results"}],"coverage":{"documentScope":"full","runtimeFidelity":"mixed","counts":{"operations":58},"notes":["This document publishes the 58 operations Notion authenticates with a bearer token at Notion-Version 2026-03-11. The 3 OAuth operations use HTTP Basic and are the sibling profile; together the two publish all 61 operations the vendor exposes. Nothing is pruned.","58 of 61 operations are fully modeled against persistent per-instance state: the block tree, the data-source property schema and its values, the shared query engine, cursor pagination, comments, views and materialised view queries, multipart upload accounting, agents, and sessions.","create-file is modeled-core: the derived document narrows `mode` to `single_part`/`multi_part`, and an `external_url` request is rejected with Notion's 400 rather than silently accepted. Importing that way would require an outbound fetch of a caller-supplied URL, which this emulator does not do.","update-session is modeled-core: the derived document keeps only the `{session_id, actions}` branch, which approves or rejects a pending `required_action` and is a real state transition. The `{message}` and `{session_id, continue_from}` branches ask a Notion-hosted agent to generate output and are refused rather than answered with fabricated content.","create-meeting-note is unavailable and cannot be narrowed: both branches of its request require an audio or video source, so producing a note means transcribing media on Notion-hosted models. It keeps its exact schema and a mounted route that validates the request first and then fails closed, so a malformed body is still reported as such.","formula and rollup property values are published as declared and read null: both need an expression evaluator, and the document types them nullable rather than this contract inventing a number.","The 31 webhooks are outbound deliveries. They stay in the document under `webhooks` and have no mounted receiver; inventing an inbound endpoint for them would fabricate a surface the vendor does not expose.","Markdown round-trips exactly for ten block types and renders one way only for the other 26, because Markdown has no syntax for the distinction. COVERAGE_LEDGER.md and markdown.ts name them."]},"specKind":"openapi","specPath":"/api/purple-suite/contracts/pages/notion/notion-v1-2026-03-11/openapi.json","primaryAliasSpecPath":"/api/purple-suite/contracts/pages/notion/openapi.json","key":"pages/notion/notion-v1-2026-03-11","system":"pages","paint":"notion","productLabel":"Notion","runtimeBase":"/api/purple-suite/{instanceId}/contracts/pages/notion","productDocsPath":"/api/purple-suite/docs/pages/notion","docsPath":"/api/purple-suite/docs/pages/notion/notion-v1-2026-03-11","primary":true,"source":"painted"},{"id":"notion-oauth-2026-03-11","label":"Notion OAuth 2026-03-11 — token lifecycle","version":"2026-03-11","protocol":"rest","authProfiles":[{"id":"basic-client-credentials","label":"Client credentials — emulator compatibility","kind":"basic","credentialModel":"instance-key","description":"Authorization: Basic base64(client_id:client_secret), which is Notion's real transport for these three routes. PurpleSuite maps the client-secret position to the selected instance key; the client id is public by design and is accepted as written. No vendor-visible header is added."}],"authVerifierId":"notion-oauth-basic","credentialModel":"instance-key","direction":"bidirectional","runtimeOperations":[{"method":"post","path":"/v1/oauth/introspect","operationId":"introspect-token"},{"method":"post","path":"/v1/oauth/revoke","operationId":"revoke-token"},{"method":"post","path":"/v1/oauth/token","operationId":"create-a-token"}],"coverage":{"documentScope":"full","runtimeFidelity":"modeled","counts":{"operations":3},"notes":["The complete OAuth surface: create-a-token, revoke-token, introspect-token. All three are fully modeled — this is not a stub that returns a fixed token.","Authorization codes are one-use: the exchange deletes the code in the same transaction that mints the token pair, so a replay is rejected with `invalid_grant`.","Rotation is atomic. A refresh mints a new pair and deactivates the old pair together, so a crash cannot leave two live pairs or none, and the previous access token stops working immediately.","Tokens are persisted only as SHA-256 digests keyed by kind, so the stored state cannot be replayed as a credential. Revoking either half of a pair revokes the other.","Notion's OAuth errors use Notion's own `{object, status, code, message}` envelope, not RFC 6749's `{error, error_description}`; only the code enum differs from the resource API's, and both are derived from the pinned document.","Notion's hosted authorization *page* is a browser flow this contract does not reproduce, so codes are minted by the emulator for its own client and suites. That is a boundary on the consent UI, not on the token endpoints."]},"specKind":"openapi","specPath":"/api/purple-suite/contracts/pages/notion/notion-oauth-2026-03-11/openapi.json","key":"pages/notion/notion-oauth-2026-03-11","system":"pages","paint":"notion","productLabel":"Notion","runtimeBase":"/api/purple-suite/{instanceId}/contracts/pages/notion","productDocsPath":"/api/purple-suite/docs/pages/notion","docsPath":"/api/purple-suite/docs/pages/notion/notion-oauth-2026-03-11","primary":false,"source":"painted"}],"key":"pages/notion","source":"painted"},{"system":"pages","paint":"purplesuite","available":true,"label":"Purple Suite Pages API","runtimeBase":"/api/purple-suite/pages","docsPath":"/api/purple-suite/docs/pages/purplesuite","description":"\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Suite Pages API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/pages/purplesuite/openapi.json","runtimeOperations":[],"key":"pages/purplesuite/native-openapi","system":"pages","paint":"purplesuite","productLabel":"Purple Suite Pages API","runtimeBase":"/api/purple-suite/pages","productDocsPath":"/api/purple-suite/docs/pages/purplesuite","docsPath":"/api/purple-suite/docs/pages/purplesuite/native-openapi","description":"\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"pages/purplesuite","source":"native"},{"system":"pm","paint":"asana","available":true,"label":"Asana","runtimeBase":"/api/purple-suite/{instanceId}/contracts/pm/asana","docsPath":"/api/purple-suite/docs/pm/asana","primaryProfileId":"rest-v1","profiles":[{"id":"rest-v1","label":"Asana REST API v1 — project and task workflows","version":"1.0","protocol":"rest","specKind":"openapi","direction":"bidirectional","credentialModel":"instance-key","authVerifierId":"asana-pat-v1","authProfiles":[{"id":"pat","label":"Personal access token","kind":"bearer","credentialModel":"instance-key","description":"The instance key occupies Asana's Bearer PAT transport; it identifies this emulator workspace's first shared-roster user. OAuth authorization grants are external and not emulated."}],"runtimeOperations":[{"method":"get","path":"/api/1.0/access_requests","operationId":"getAccessRequests"},{"method":"post","path":"/api/1.0/access_requests","operationId":"createAccessRequest"},{"method":"post","path":"/api/1.0/access_requests/:access_request_gid/approve","operationId":"approveAccessRequest"},{"method":"post","path":"/api/1.0/access_requests/:access_request_gid/reject","operationId":"rejectAccessRequest"},{"method":"get","path":"/api/1.0/workspaces/:workspace_gid/agents","operationId":"getAgentsForWorkspace"},{"method":"get","path":"/api/1.0/agents/:agent_gid","operationId":"getAgent"},{"method":"get","path":"/api/1.0/workspaces/:workspace_gid/ai_studio/runs","operationId":"getAiStudioRuns"},{"method":"get","path":"/api/1.0/workspaces/:workspace_gid/ai_studio/seats","operationId":"getAiStudioSeats"},{"method":"get","path":"/api/1.0/allocations/:allocation_gid","operationId":"getAllocation"},{"method":"put","path":"/api/1.0/allocations/:allocation_gid","operationId":"updateAllocation"},{"method":"delete","path":"/api/1.0/allocations/:allocation_gid","operationId":"deleteAllocation"},{"method":"get","path":"/api/1.0/allocations","operationId":"getAllocations"},{"method":"post","path":"/api/1.0/allocations","operationId":"createAllocation"},{"method":"get","path":"/api/1.0/attachments/:attachment_gid","operationId":"getAttachment"},{"method":"delete","path":"/api/1.0/attachments/:attachment_gid","operationId":"deleteAttachment"},{"method":"get","path":"/api/1.0/attachments","operationId":"getAttachmentsForObject"},{"method":"post","path":"/api/1.0/attachments","operationId":"createAttachmentForObject"},{"method":"get","path":"/api/1.0/workspaces/:workspace_gid/audit_log_events","operationId":"getAuditLogEvents"},{"method":"post","path":"/api/1.0/batch","operationId":"createBatchRequest"},{"method":"get","path":"/api/1.0/budgets","operationId":"getBudgets"},{"method":"post","path":"/api/1.0/budgets","operationId":"createBudget"},{"method":"get","path":"/api/1.0/budgets/:budget_gid","operationId":"getBudget"},{"method":"put","path":"/api/1.0/budgets/:budget_gid","operationId":"updateBudget"},{"method":"delete","path":"/api/1.0/budgets/:budget_gid","operationId":"deleteBudget"},{"method":"get","path":"/api/1.0/projects/:project_gid/custom_field_settings","operationId":"getCustomFieldSettingsForProject"},{"method":"get","path":"/api/1.0/portfolios/:portfolio_gid/custom_field_settings","operationId":"getCustomFieldSettingsForPortfolio"},{"method":"get","path":"/api/1.0/goals/:goal_gid/custom_field_settings","operationId":"getCustomFieldSettingsForGoal"},{"method":"get","path":"/api/1.0/teams/:team_gid/custom_field_settings","operationId":"getCustomFieldSettingsForTeam"},{"method":"post","path":"/api/1.0/custom_fields","operationId":"createCustomField"},{"method":"get","path":"/api/1.0/custom_fields/:custom_field_gid","operationId":"getCustomField"},{"method":"put","path":"/api/1.0/custom_fields/:custom_field_gid","operationId":"updateCustomField"},{"method":"delete","path":"/api/1.0/custom_fields/:custom_field_gid","operationId":"deleteCustomField"},{"method":"get","path":"/api/1.0/workspaces/:workspace_gid/custom_fields","operationId":"getCustomFieldsForWorkspace"},{"method":"post","path":"/api/1.0/custom_fields/:custom_field_gid/enum_options","operationId":"createEnumOptionForCustomField"},{"method":"post","path":"/api/1.0/custom_fields/:custom_field_gid/enum_options/insert","operationId":"insertEnumOptionForCustomField"},{"method":"put","path":"/api/1.0/enum_options/:enum_option_gid","operationId":"updateEnumOption"},{"method":"get","path":"/api/1.0/custom_types","operationId":"getCustomTypes"},{"method":"get","path":"/api/1.0/custom_types/:custom_type_gid","operationId":"getCustomType"},{"method":"get","path":"/api/1.0/events","operationId":"getEvents"},{"method":"post","path":"/api/1.0/exports/graph","operationId":"createGraphExport"},{"method":"post","path":"/api/1.0/exports/resource","operationId":"createResourceExport"},{"method":"get","path":"/api/1.0/goal_relationships/:goal_relationship_gid","operationId":"getGoalRelationship"},{"method":"put","path":"/api/1.0/goal_relationships/:goal_relationship_gid","operationId":"updateGoalRelationship"},{"method":"get","path":"/api/1.0/goal_relationships","operationId":"getGoalRelationships"},{"method":"post","path":"/api/1.0/goals/:goal_gid/addSupportingRelationship","operationId":"addSupportingRelationship"},{"method":"post","path":"/api/1.0/goals/:goal_gid/removeSupportingRelationship","operationId":"removeSupportingRelationship"},{"method":"get","path":"/api/1.0/goals/:goal_gid","operationId":"getGoal"},{"method":"put","path":"/api/1.0/goals/:goal_gid","operationId":"updateGoal"},{"method":"delete","path":"/api/1.0/goals/:goal_gid","operationId":"deleteGoal"},{"method":"get","path":"/api/1.0/goals","operationId":"getGoals"},{"method":"post","path":"/api/1.0/goals","operationId":"createGoal"},{"method":"post","path":"/api/1.0/goals/:goal_gid/setMetric","operationId":"createGoalMetric"},{"method":"post","path":"/api/1.0/goals/:goal_gid/setMetricCurrentValue","operationId":"updateGoalMetric"},{"method":"post","path":"/api/1.0/goals/:goal_gid/addFollowers","operationId":"addFollowers"},{"method":"post","path":"/api/1.0/goals/:goal_gid/removeFollowers","operationId":"removeFollowers"},{"method":"get","path":"/api/1.0/goals/:goal_gid/parentGoals","operationId":"getParentGoalsForGoal"},{"method":"post","path":"/api/1.0/goals/:goal_gid/addCustomFieldSetting","operationId":"addCustomFieldSettingForGoal"},{"method":"post","path":"/api/1.0/goals/:goal_gid/removeCustomFieldSetting","operationId":"removeCustomFieldSettingForGoal"},{"method":"get","path":"/api/1.0/jobs/:job_gid","operationId":"getJob"},{"method":"get","path":"/api/1.0/memberships","operationId":"getMemberships"},{"method":"post","path":"/api/1.0/memberships","operationId":"createMembership"},{"method":"get","path":"/api/1.0/memberships/:membership_gid","operationId":"getMembership"},{"method":"put","path":"/api/1.0/memberships/:membership_gid","operationId":"updateMembership"},{"method":"delete","path":"/api/1.0/memberships/:membership_gid","operationId":"deleteMembership"},{"method":"get","path":"/api/1.0/ooo_entries/:ooo_entry_gid","operationId":"getOooEntry"},{"method":"put","path":"/api/1.0/ooo_entries/:ooo_entry_gid","operationId":"updateOooEntry"},{"method":"delete","path":"/api/1.0/ooo_entries/:ooo_entry_gid","operationId":"deleteOooEntry"},{"method":"get","path":"/api/1.0/ooo_entries","operationId":"getOooEntries"},{"method":"post","path":"/api/1.0/ooo_entries","operationId":"createOooEntry"},{"method":"post","path":"/api/1.0/organization_exports","operationId":"createOrganizationExport"},{"method":"get","path":"/api/1.0/organization_exports/:organization_export_gid","operationId":"getOrganizationExport"},{"method":"get","path":"/api/1.0/portfolio_memberships","operationId":"getPortfolioMemberships"},{"method":"get","path":"/api/1.0/portfolio_memberships/:portfolio_membership_gid","operationId":"getPortfolioMembership"},{"method":"get","path":"/api/1.0/portfolios/:portfolio_gid/portfolio_memberships","operationId":"getPortfolioMembershipsForPortfolio"},{"method":"get","path":"/api/1.0/portfolios","operationId":"getPortfolios"},{"method":"post","path":"/api/1.0/portfolios","operationId":"createPortfolio"},{"method":"get","path":"/api/1.0/portfolios/:portfolio_gid","operationId":"getPortfolio"},{"method":"put","path":"/api/1.0/portfolios/:portfolio_gid","operationId":"updatePortfolio"},{"method":"delete","path":"/api/1.0/portfolios/:portfolio_gid","operationId":"deletePortfolio"},{"method":"get","path":"/api/1.0/portfolios/:portfolio_gid/items","operationId":"getItemsForPortfolio"},{"method":"post","path":"/api/1.0/portfolios/:portfolio_gid/addItem","operationId":"addItemForPortfolio"},{"method":"post","path":"/api/1.0/portfolios/:portfolio_gid/removeItem","operationId":"removeItemForPortfolio"},{"method":"post","path":"/api/1.0/portfolios/:portfolio_gid/addCustomFieldSetting","operationId":"addCustomFieldSettingForPortfolio"},{"method":"post","path":"/api/1.0/portfolios/:portfolio_gid/removeCustomFieldSetting","operationId":"removeCustomFieldSettingForPortfolio"},{"method":"post","path":"/api/1.0/portfolios/:portfolio_gid/addMembers","operationId":"addMembersForPortfolio"},{"method":"post","path":"/api/1.0/portfolios/:portfolio_gid/removeMembers","operationId":"removeMembersForPortfolio"},{"method":"post","path":"/api/1.0/portfolios/:portfolio_gid/duplicate","operationId":"duplicatePortfolio"},{"method":"get","path":"/api/1.0/project_briefs/:project_brief_gid","operationId":"getProjectBrief"},{"method":"put","path":"/api/1.0/project_briefs/:project_brief_gid","operationId":"updateProjectBrief"},{"method":"delete","path":"/api/1.0/project_briefs/:project_brief_gid","operationId":"deleteProjectBrief"},{"method":"post","path":"/api/1.0/projects/:project_gid/project_briefs","operationId":"createProjectBrief"},{"method":"get","path":"/api/1.0/project_memberships/:project_membership_gid","operationId":"getProjectMembership"},{"method":"get","path":"/api/1.0/projects/:project_gid/project_memberships","operationId":"getProjectMembershipsForProject"},{"method":"get","path":"/api/1.0/project_portfolio_settings/:project_portfolio_setting_gid","operationId":"getProjectPortfolioSetting"},{"method":"put","path":"/api/1.0/project_portfolio_settings/:project_portfolio_setting_gid","operationId":"updateProjectPortfolioSetting"},{"method":"get","path":"/api/1.0/projects/:project_gid/project_portfolio_settings","operationId":"getProjectPortfolioSettingsForProject"},{"method":"get","path":"/api/1.0/portfolios/:portfolio_gid/project_portfolio_settings","operationId":"getProjectPortfolioSettingsForPortfolio"},{"method":"get","path":"/api/1.0/project_statuses/:project_status_gid","operationId":"getProjectStatus"},{"method":"delete","path":"/api/1.0/project_statuses/:project_status_gid","operationId":"deleteProjectStatus"},{"method":"get","path":"/api/1.0/projects/:project_gid/project_statuses","operationId":"getProjectStatusesForProject"},{"method":"post","path":"/api/1.0/projects/:project_gid/project_statuses","operationId":"createProjectStatusForProject"},{"method":"get","path":"/api/1.0/project_templates/:project_template_gid","operationId":"getProjectTemplate"},{"method":"delete","path":"/api/1.0/project_templates/:project_template_gid","operationId":"deleteProjectTemplate"},{"method":"get","path":"/api/1.0/project_templates","operationId":"getProjectTemplates"},{"method":"get","path":"/api/1.0/teams/:team_gid/project_templates","operationId":"getProjectTemplatesForTeam"},{"method":"post","path":"/api/1.0/project_templates/:project_template_gid/instantiateProject","operationId":"instantiateProject"},{"method":"get","path":"/api/1.0/projects","operationId":"getProjects"},{"method":"post","path":"/api/1.0/projects","operationId":"createProject"},{"method":"get","path":"/api/1.0/projects/:project_gid","operationId":"getProject"},{"method":"put","path":"/api/1.0/projects/:project_gid","operationId":"updateProject"},{"method":"delete","path":"/api/1.0/projects/:project_gid","operationId":"deleteProject"},{"method":"post","path":"/api/1.0/projects/:project_gid/duplicate","operationId":"duplicateProject"},{"method":"get","path":"/api/1.0/tasks/:task_gid/projects","operationId":"getProjectsForTask"},{"method":"get","path":"/api/1.0/teams/:team_gid/projects","operationId":"getProjectsForTeam"},{"method":"post","path":"/api/1.0/teams/:team_gid/projects","operationId":"createProjectForTeam"},{"method":"get","path":"/api/1.0/workspaces/:workspace_gid/projects","operationId":"getProjectsForWorkspace"},{"method":"post","path":"/api/1.0/workspaces/:workspace_gid/projects","operationId":"createProjectForWorkspace"},{"method":"get","path":"/api/1.0/workspaces/:workspace_gid/projects/search","operationId":"searchProjectsForWorkspace"},{"method":"post","path":"/api/1.0/projects/:project_gid/addCustomFieldSetting","operationId":"addCustomFieldSettingForProject"},{"method":"post","path":"/api/1.0/projects/:project_gid/removeCustomFieldSetting","operationId":"removeCustomFieldSettingForProject"},{"method":"get","path":"/api/1.0/projects/:project_gid/task_counts","operationId":"getTaskCountsForProject"},{"method":"post","path":"/api/1.0/projects/:project_gid/addMembers","operationId":"addMembersForProject"},{"method":"post","path":"/api/1.0/projects/:project_gid/removeMembers","operationId":"removeMembersForProject"},{"method":"post","path":"/api/1.0/projects/:project_gid/addFollowers","operationId":"addFollowersForProject"},{"method":"post","path":"/api/1.0/projects/:project_gid/removeFollowers","operationId":"removeFollowersForProject"},{"method":"post","path":"/api/1.0/projects/:project_gid/saveAsTemplate","operationId":"projectSaveAsTemplate"},{"method":"get","path":"/api/1.0/rates","operationId":"getRates"},{"method":"post","path":"/api/1.0/rates","operationId":"createRate"},{"method":"get","path":"/api/1.0/rates/:rate_gid","operationId":"getRate"},{"method":"put","path":"/api/1.0/rates/:rate_gid","operationId":"updateRate"},{"method":"delete","path":"/api/1.0/rates/:rate_gid","operationId":"deleteRate"},{"method":"get","path":"/api/1.0/reactions","operationId":"getReactionsOnObject"},{"method":"get","path":"/api/1.0/roles","operationId":"getRoles"},{"method":"post","path":"/api/1.0/roles","operationId":"createRole"},{"method":"get","path":"/api/1.0/roles/:role_gid","operationId":"getRole"},{"method":"put","path":"/api/1.0/roles/:role_gid","operationId":"updateRole"},{"method":"delete","path":"/api/1.0/roles/:role_gid","operationId":"deleteRole"},{"method":"post","path":"/api/1.0/rule_triggers/:rule_trigger_gid/run","operationId":"triggerRule"},{"method":"get","path":"/api/1.0/sections/:section_gid","operationId":"getSection"},{"method":"put","path":"/api/1.0/sections/:section_gid","operationId":"updateSection"},{"method":"delete","path":"/api/1.0/sections/:section_gid","operationId":"deleteSection"},{"method":"get","path":"/api/1.0/projects/:project_gid/sections","operationId":"getSectionsForProject"},{"method":"post","path":"/api/1.0/projects/:project_gid/sections","operationId":"createSectionForProject"},{"method":"post","path":"/api/1.0/sections/:section_gid/addTask","operationId":"addTaskForSection"},{"method":"post","path":"/api/1.0/projects/:project_gid/sections/insert","operationId":"insertSectionForProject"},{"method":"get","path":"/api/1.0/status_updates/:status_update_gid","operationId":"getStatus"},{"method":"delete","path":"/api/1.0/status_updates/:status_update_gid","operationId":"deleteStatus"},{"method":"get","path":"/api/1.0/status_updates","operationId":"getStatusesForObject"},{"method":"post","path":"/api/1.0/status_updates","operationId":"createStatusForObject"},{"method":"get","path":"/api/1.0/stories/:story_gid","operationId":"getStory"},{"method":"put","path":"/api/1.0/stories/:story_gid","operationId":"updateStory"},{"method":"delete","path":"/api/1.0/stories/:story_gid","operationId":"deleteStory"},{"method":"get","path":"/api/1.0/tasks/:task_gid/stories","operationId":"getStoriesForTask"},{"method":"post","path":"/api/1.0/tasks/:task_gid/stories","operationId":"createStoryForTask"},{"method":"get","path":"/api/1.0/goals/:goal_gid/stories","operationId":"getStoriesForGoal"},{"method":"post","path":"/api/1.0/goals/:goal_gid/stories","operationId":"createStoryForGoal"},{"method":"get","path":"/api/1.0/tags","operationId":"getTags"},{"method":"post","path":"/api/1.0/tags","operationId":"createTag"},{"method":"get","path":"/api/1.0/tags/:tag_gid","operationId":"getTag"},{"method":"put","path":"/api/1.0/tags/:tag_gid","operationId":"updateTag"},{"method":"delete","path":"/api/1.0/tags/:tag_gid","operationId":"deleteTag"},{"method":"get","path":"/api/1.0/tasks/:task_gid/tags","operationId":"getTagsForTask"},{"method":"get","path":"/api/1.0/workspaces/:workspace_gid/tags","operationId":"getTagsForWorkspace"},{"method":"post","path":"/api/1.0/workspaces/:workspace_gid/tags","operationId":"createTagForWorkspace"},{"method":"get","path":"/api/1.0/task_templates","operationId":"getTaskTemplates"},{"method":"get","path":"/api/1.0/task_templates/:task_template_gid","operationId":"getTaskTemplate"},{"method":"delete","path":"/api/1.0/task_templates/:task_template_gid","operationId":"deleteTaskTemplate"},{"method":"post","path":"/api/1.0/task_templates/:task_template_gid/instantiateTask","operationId":"instantiateTask"},{"method":"get","path":"/api/1.0/tasks","operationId":"getTasks"},{"method":"post","path":"/api/1.0/tasks","operationId":"createTask"},{"method":"get","path":"/api/1.0/tasks/:task_gid","operationId":"getTask"},{"method":"put","path":"/api/1.0/tasks/:task_gid","operationId":"updateTask"},{"method":"delete","path":"/api/1.0/tasks/:task_gid","operationId":"deleteTask"},{"method":"post","path":"/api/1.0/tasks/:task_gid/duplicate","operationId":"duplicateTask"},{"method":"get","path":"/api/1.0/projects/:project_gid/tasks","operationId":"getTasksForProject"},{"method":"get","path":"/api/1.0/sections/:section_gid/tasks","operationId":"getTasksForSection"},{"method":"get","path":"/api/1.0/tags/:tag_gid/tasks","operationId":"getTasksForTag"},{"method":"get","path":"/api/1.0/user_task_lists/:user_task_list_gid/tasks","operationId":"getTasksForUserTaskList"},{"method":"get","path":"/api/1.0/tasks/:task_gid/subtasks","operationId":"getSubtasksForTask"},{"method":"post","path":"/api/1.0/tasks/:task_gid/subtasks","operationId":"createSubtaskForTask"},{"method":"post","path":"/api/1.0/tasks/:task_gid/setParent","operationId":"setParentForTask"},{"method":"get","path":"/api/1.0/tasks/:task_gid/dependencies","operationId":"getDependenciesForTask"},{"method":"post","path":"/api/1.0/tasks/:task_gid/addDependencies","operationId":"addDependenciesForTask"},{"method":"post","path":"/api/1.0/tasks/:task_gid/removeDependencies","operationId":"removeDependenciesForTask"},{"method":"get","path":"/api/1.0/tasks/:task_gid/dependents","operationId":"getDependentsForTask"},{"method":"post","path":"/api/1.0/tasks/:task_gid/addDependents","operationId":"addDependentsForTask"},{"method":"post","path":"/api/1.0/tasks/:task_gid/removeDependents","operationId":"removeDependentsForTask"},{"method":"post","path":"/api/1.0/tasks/:task_gid/addProject","operationId":"addProjectForTask"},{"method":"post","path":"/api/1.0/tasks/:task_gid/removeProject","operationId":"removeProjectForTask"},{"method":"post","path":"/api/1.0/tasks/:task_gid/addTag","operationId":"addTagForTask"},{"method":"post","path":"/api/1.0/tasks/:task_gid/removeTag","operationId":"removeTagForTask"},{"method":"post","path":"/api/1.0/tasks/:task_gid/addFollowers","operationId":"addFollowersForTask"},{"method":"post","path":"/api/1.0/tasks/:task_gid/removeFollowers","operationId":"removeFollowerForTask"},{"method":"get","path":"/api/1.0/workspaces/:workspace_gid/tasks/custom_id/:custom_id","operationId":"getTaskForCustomID"},{"method":"get","path":"/api/1.0/workspaces/:workspace_gid/tasks/search","operationId":"searchTasksForWorkspace"},{"method":"get","path":"/api/1.0/team_memberships/:team_membership_gid","operationId":"getTeamMembership"},{"method":"get","path":"/api/1.0/team_memberships","operationId":"getTeamMemberships"},{"method":"get","path":"/api/1.0/teams/:team_gid/team_memberships","operationId":"getTeamMembershipsForTeam"},{"method":"get","path":"/api/1.0/users/:user_gid/team_memberships","operationId":"getTeamMembershipsForUser"},{"method":"post","path":"/api/1.0/teams","operationId":"createTeam"},{"method":"get","path":"/api/1.0/teams/:team_gid","operationId":"getTeam"},{"method":"put","path":"/api/1.0/teams/:team_gid","operationId":"updateTeam"},{"method":"get","path":"/api/1.0/workspaces/:workspace_gid/teams","operationId":"getTeamsForWorkspace"},{"method":"get","path":"/api/1.0/users/:user_gid/teams","operationId":"getTeamsForUser"},{"method":"post","path":"/api/1.0/teams/:team_gid/addUser","operationId":"addUserForTeam"},{"method":"post","path":"/api/1.0/teams/:team_gid/removeUser","operationId":"removeUserForTeam"},{"method":"get","path":"/api/1.0/time_periods/:time_period_gid","operationId":"getTimePeriod"},{"method":"get","path":"/api/1.0/time_periods","operationId":"getTimePeriods"},{"method":"get","path":"/api/1.0/time_tracking_categories/:time_tracking_category_gid","operationId":"getTimeTrackingCategory"},{"method":"put","path":"/api/1.0/time_tracking_categories/:time_tracking_category_gid","operationId":"updateTimeTrackingCategory"},{"method":"delete","path":"/api/1.0/time_tracking_categories/:time_tracking_category_gid","operationId":"deleteTimeTrackingCategory"},{"method":"get","path":"/api/1.0/time_tracking_categories/:time_tracking_category_gid/time_tracking_entries","operationId":"getTimeTrackingEntriesForTimeTrackingCategory"},{"method":"get","path":"/api/1.0/time_tracking_categories","operationId":"getTimeTrackingCategories"},{"method":"post","path":"/api/1.0/time_tracking_categories","operationId":"createTimeTrackingCategory"},{"method":"get","path":"/api/1.0/tasks/:task_gid/time_tracking_entries","operationId":"getTimeTrackingEntriesForTask"},{"method":"post","path":"/api/1.0/tasks/:task_gid/time_tracking_entries","operationId":"createTimeTrackingEntry"},{"method":"get","path":"/api/1.0/time_tracking_entries/:time_tracking_entry_gid","operationId":"getTimeTrackingEntry"},{"method":"put","path":"/api/1.0/time_tracking_entries/:time_tracking_entry_gid","operationId":"updateTimeTrackingEntry"},{"method":"delete","path":"/api/1.0/time_tracking_entries/:time_tracking_entry_gid","operationId":"deleteTimeTrackingEntry"},{"method":"get","path":"/api/1.0/time_tracking_entries","operationId":"getTimeTrackingEntries"},{"method":"get","path":"/api/1.0/timesheet_approval_statuses/:timesheet_approval_status_gid","operationId":"getTimesheetApprovalStatus"},{"method":"put","path":"/api/1.0/timesheet_approval_statuses/:timesheet_approval_status_gid","operationId":"updateTimesheetApprovalStatus"},{"method":"get","path":"/api/1.0/timesheet_approval_statuses","operationId":"getTimesheetApprovalStatuses"},{"method":"post","path":"/api/1.0/timesheet_approval_statuses","operationId":"createTimesheetApprovalStatus"},{"method":"get","path":"/api/1.0/workspaces/:workspace_gid/typeahead","operationId":"typeaheadForWorkspace"},{"method":"get","path":"/api/1.0/user_task_lists/:user_task_list_gid","operationId":"getUserTaskList"},{"method":"get","path":"/api/1.0/users/:user_gid/user_task_list","operationId":"getUserTaskListForUser"},{"method":"get","path":"/api/1.0/users","operationId":"getUsers"},{"method":"get","path":"/api/1.0/users/:user_gid","operationId":"getUser"},{"method":"put","path":"/api/1.0/users/:user_gid","operationId":"updateUser"},{"method":"get","path":"/api/1.0/users/:user_gid/favorites","operationId":"getFavoritesForUser"},{"method":"get","path":"/api/1.0/teams/:team_gid/users","operationId":"getUsersForTeam"},{"method":"get","path":"/api/1.0/workspaces/:workspace_gid/users","operationId":"getUsersForWorkspace"},{"method":"get","path":"/api/1.0/workspaces/:workspace_gid/users/:user_gid","operationId":"getUserForWorkspace"},{"method":"put","path":"/api/1.0/workspaces/:workspace_gid/users/:user_gid","operationId":"updateUserForWorkspace"},{"method":"get","path":"/api/1.0/webhooks","operationId":"getWebhooks"},{"method":"post","path":"/api/1.0/webhooks","operationId":"createWebhook"},{"method":"get","path":"/api/1.0/webhooks/:webhook_gid","operationId":"getWebhook"},{"method":"put","path":"/api/1.0/webhooks/:webhook_gid","operationId":"updateWebhook"},{"method":"delete","path":"/api/1.0/webhooks/:webhook_gid","operationId":"deleteWebhook"},{"method":"get","path":"/api/1.0/workspace_memberships/:workspace_membership_gid","operationId":"getWorkspaceMembership"},{"method":"get","path":"/api/1.0/users/:user_gid/workspace_memberships","operationId":"getWorkspaceMembershipsForUser"},{"method":"get","path":"/api/1.0/workspaces/:workspace_gid/workspace_memberships","operationId":"getWorkspaceMembershipsForWorkspace"},{"method":"get","path":"/api/1.0/workspaces","operationId":"getWorkspaces"},{"method":"get","path":"/api/1.0/workspaces/:workspace_gid","operationId":"getWorkspace"},{"method":"put","path":"/api/1.0/workspaces/:workspace_gid","operationId":"updateWorkspace"},{"method":"post","path":"/api/1.0/workspaces/:workspace_gid/addUser","operationId":"addUserForWorkspace"},{"method":"post","path":"/api/1.0/workspaces/:workspace_gid/removeUser","operationId":"removeUserForWorkspace"},{"method":"get","path":"/api/1.0/workspaces/:workspace_gid/events","operationId":"getWorkspaceEvents"}],"coverage":{"documentScope":"full","runtimeFidelity":"modeled","counts":{"operations":249},"notes":["The full pinned v1 resource API contains 249 operations. Supported project, task, section, tag, comment and directory workflows share persistent instance state; write schemas explicitly narrow to implemented fields. Other ordinary API operations and hosted features are not yet implemented; they remain documented and return Asana-shaped 403 errors.","OAuth authorization/token endpoints are outside the pinned resource API. AI, jobs, enterprise provisioning, webhooks, binary files, custom fields and other hosted services fail closed. These unavailable operations are implementation gaps, not a claim that all require a hosted service. No external requests or success fabrication."]},"specPath":"/api/purple-suite/contracts/pm/asana/rest-v1/openapi.json","primaryAliasSpecPath":"/api/purple-suite/contracts/pm/asana/openapi.json","key":"pm/asana/rest-v1","system":"pm","paint":"asana","productLabel":"Asana","runtimeBase":"/api/purple-suite/{instanceId}/contracts/pm/asana","productDocsPath":"/api/purple-suite/docs/pm/asana","docsPath":"/api/purple-suite/docs/pm/asana/rest-v1","primary":true,"source":"painted"}],"key":"pm/asana","source":"painted"},{"system":"pm","paint":"azuredevops","available":true,"label":"Azure DevOps","runtimeBase":"/api/purple-suite/{instanceId}/contracts/pm/azuredevops","docsPath":"/api/purple-suite/docs/pm/azuredevops","primaryProfileId":"wit-7-2-preview","profiles":[{"id":"wit-7-2-preview","label":"Azure DevOps Work Item Tracking 7.2-preview","version":"7.2-preview","protocol":"rest","direction":"bidirectional","specKind":"openapi","authProfiles":[{"id":"access-token","label":"HTTP Basic — instance key in the personal access token position","kind":"basic","credentialModel":"instance-key","description":"Authorization: Basic base64(anything:instance-key). This is the vendor's own personal access token transport; the instance key stands in for the PAT. Microsoft's OAuth 2.0 authorization code flow is published in the document but targets Microsoft's identity service and is not hosted here."}],"authVerifierId":"pm-azuredevops-pat","credentialModel":"instance-key","runtimeOperations":[{"method":"get","path":"/:organization/_apis/wit/artifactlinktypes","operationId":"Artifact Link Types_List"},{"method":"get","path":"/:organization/_apis/wit/workitemicons","operationId":"Work Item Icons_List"},{"method":"get","path":"/:organization/_apis/wit/workitemicons/:icon","operationId":"Work Item Icons_Get"},{"method":"get","path":"/:organization/_apis/wit/workitemrelationtypes","operationId":"Work Item Relation Types_List"},{"method":"get","path":"/:organization/_apis/wit/workitemrelationtypes/:relation","operationId":"Work Item Relation Types_Get"},{"method":"get","path":"/:organization/_apis/wit/workitemtransitions","operationId":"Work Item Transitions_List"},{"method":"get","path":"/:organization/_apis/work/accountmyworkrecentactivity","operationId":"Account My Work Recent Activity_List"},{"method":"get","path":"/:organization/:project/_apis/githubconnections","operationId":"Github Connections_Get Github Connections"},{"method":"get","path":"/:organization/:project/_apis/githubconnections/:connectionId/repos","operationId":"Github Connections_Get Github Connection Repositories"},{"method":"post","path":"/:organization/:project/_apis/githubconnections/:connectionId/reposBatch","operationId":"Github Connections_Update"},{"method":"post","path":"/:organization/:project/_apis/wit/artifacturiquery","operationId":"Artifact Uri Query_Query"},{"method":"post","path":"/:organization/:project/_apis/wit/attachments","operationId":"Attachments_Create"},{"method":"delete","path":"/:organization/:project/_apis/wit/attachments/:id","operationId":"Attachments_Delete"},{"method":"get","path":"/:organization/:project/_apis/wit/attachments/:id","operationId":"Attachments_Get"},{"method":"put","path":"/:organization/:project/_apis/wit/attachments/:id","operationId":"Attachments_Upload Chunk"},{"method":"get","path":"/:organization/:project/_apis/wit/classificationnodes","operationId":"Classification Nodes_Get Root Nodes"},{"method":"post","path":"/:organization/:project/_apis/wit/classificationnodes/:structureGroup/:path","operationId":"Classification Nodes_Create Or Update"},{"method":"delete","path":"/:organization/:project/_apis/wit/classificationnodes/:structureGroup/:path","operationId":"Classification Nodes_Delete"},{"method":"get","path":"/:organization/:project/_apis/wit/classificationnodes/:structureGroup/:path","operationId":"Classification Nodes_Get"},{"method":"patch","path":"/:organization/:project/_apis/wit/classificationnodes/:structureGroup/:path","operationId":"Classification Nodes_Update"},{"method":"post","path":"/:organization/:project/_apis/wit/fields","operationId":"Fields_Create"},{"method":"get","path":"/:organization/:project/_apis/wit/fields","operationId":"Fields_List"},{"method":"delete","path":"/:organization/:project/_apis/wit/fields/:fieldNameOrRefName","operationId":"Fields_Delete"},{"method":"get","path":"/:organization/:project/_apis/wit/fields/:fieldNameOrRefName","operationId":"Fields_Get"},{"method":"patch","path":"/:organization/:project/_apis/wit/fields/:fieldNameOrRefName","operationId":"Fields_Update"},{"method":"post","path":"/:organization/:project/_apis/wit/projectprocessmigration","operationId":"Project Process Migration_Migrate Projects Process"},{"method":"get","path":"/:organization/:project/_apis/wit/queries","operationId":"Queries_List"},{"method":"post","path":"/:organization/:project/_apis/wit/queries/:query","operationId":"Queries_Create"},{"method":"delete","path":"/:organization/:project/_apis/wit/queries/:query","operationId":"Queries_Delete"},{"method":"get","path":"/:organization/:project/_apis/wit/queries/:query","operationId":"Queries_Get"},{"method":"patch","path":"/:organization/:project/_apis/wit/queries/:query","operationId":"Queries_Update"},{"method":"post","path":"/:organization/:project/_apis/wit/queriesbatch","operationId":"Queries_Get Queries Batch"},{"method":"get","path":"/:organization/:project/_apis/wit/recyclebin","operationId":"Recyclebin_Get Deleted Work Item Shallow References"},{"method":"delete","path":"/:organization/:project/_apis/wit/recyclebin/:id","operationId":"Recyclebin_Destroy Work Item"},{"method":"get","path":"/:organization/:project/_apis/wit/recyclebin/:id","operationId":"Recyclebin_Get"},{"method":"patch","path":"/:organization/:project/_apis/wit/recyclebin/:id","operationId":"Recyclebin_Restore Work Item"},{"method":"get","path":"/:organization/:project/_apis/wit/reporting/workitemlinks","operationId":"Reporting Work Item Links_Get"},{"method":"get","path":"/:organization/:project/_apis/wit/reporting/workitemrevisions","operationId":"Reporting Work Item Revisions_Read Reporting Revisions Get"},{"method":"post","path":"/:organization/:project/_apis/wit/reporting/workitemrevisions","operationId":"Reporting Work Item Revisions_Read Reporting Revisions Post"},{"method":"get","path":"/:organization/:project/_apis/wit/reporting/workItemRevisions/discussions","operationId":"Work Item Revisions Discussions_Read Reporting Discussions"},{"method":"post","path":"/:organization/:project/_apis/wit/sendmail","operationId":"Send Mail_Send Mail"},{"method":"get","path":"/:organization/:project/_apis/wit/tags","operationId":"Tags_List"},{"method":"delete","path":"/:organization/:project/_apis/wit/tags/:tagIdOrName","operationId":"Tags_Delete"},{"method":"get","path":"/:organization/:project/_apis/wit/tags/:tagIdOrName","operationId":"Tags_Get"},{"method":"patch","path":"/:organization/:project/_apis/wit/tags/:tagIdOrName","operationId":"Tags_Update"},{"method":"post","path":"/:organization/:project/_apis/wit/tempqueries","operationId":"Temp Queries_Create"},{"method":"get","path":"/:organization/:project/_apis/wit/workitems","operationId":"Work Items_List"},{"method":"post","path":"/:organization/:project/_apis/wit/workitems/$:type","operationId":"Work Items_Create"},{"method":"get","path":"/:organization/:project/_apis/wit/workitems/$:type","operationId":"Work Items_Get Work Item Template"},{"method":"delete","path":"/:organization/:project/_apis/wit/workitems/:id","operationId":"Work Items_Delete"},{"method":"get","path":"/:organization/:project/_apis/wit/workitems/:id","operationId":"Work Items_Get Work Item"},{"method":"patch","path":"/:organization/:project/_apis/wit/workitems/:id","operationId":"Work Items_Update"},{"method":"get","path":"/:organization/:project/_apis/wit/workItems/:id/revisions","operationId":"Revisions_List"},{"method":"get","path":"/:organization/:project/_apis/wit/workItems/:id/revisions/:revisionNumber","operationId":"Revisions_Get"},{"method":"get","path":"/:organization/:project/_apis/wit/workItems/:id/updates","operationId":"Updates_List"},{"method":"get","path":"/:organization/:project/_apis/wit/workItems/:id/updates/:updateNumber","operationId":"Updates_Get"},{"method":"post","path":"/:organization/:project/_apis/wit/workItems/:workItemId/comments","operationId":"Comments_Add Comment"},{"method":"get","path":"/:organization/:project/_apis/wit/workItems/:workItemId/comments","operationId":"Comments_Get Comments Batch"},{"method":"delete","path":"/:organization/:project/_apis/wit/workItems/:workItemId/comments/:commentId","operationId":"Comments_Delete"},{"method":"get","path":"/:organization/:project/_apis/wit/workItems/:workItemId/comments/:commentId","operationId":"Comments_Get Comment"},{"method":"patch","path":"/:organization/:project/_apis/wit/workItems/:workItemId/comments/:commentId","operationId":"Comments_Update Comment"},{"method":"get","path":"/:organization/:project/_apis/wit/workItems/:workItemId/comments/:commentId/reactions","operationId":"Comments Reactions_List"},{"method":"put","path":"/:organization/:project/_apis/wit/workItems/:workItemId/comments/:commentId/reactions/:reactionType","operationId":"Comments Reactions_Create"},{"method":"delete","path":"/:organization/:project/_apis/wit/workItems/:workItemId/comments/:commentId/reactions/:reactionType","operationId":"Comments Reactions_Delete"},{"method":"get","path":"/:organization/:project/_apis/wit/workItems/:workItemId/comments/:commentId/reactions/:reactionType/users","operationId":"Comment Reactions Engaged Users_List"},{"method":"get","path":"/:organization/:project/_apis/wit/workItems/:workItemId/comments/:commentId/versions","operationId":"Comments Versions_List"},{"method":"get","path":"/:organization/:project/_apis/wit/workItems/:workItemId/comments/:commentId/versions/:version","operationId":"Comments Versions_Get"},{"method":"post","path":"/:organization/:project/_apis/wit/workitemsbatch","operationId":"Work Items_Get Work Items Batch"},{"method":"post","path":"/:organization/:project/_apis/wit/workitemsdelete","operationId":"Work Items_Delete Work Items"},{"method":"get","path":"/:organization/:project/_apis/wit/workitemtypecategories","operationId":"Work Item Type Categories_List"},{"method":"get","path":"/:organization/:project/_apis/wit/workitemtypecategories/:category","operationId":"Work Item Type Categories_Get"},{"method":"get","path":"/:organization/:project/_apis/wit/workitemtypes","operationId":"Work Item Types_List"},{"method":"get","path":"/:organization/:project/_apis/wit/workitemtypes/:type","operationId":"Work Item Types_Get"},{"method":"get","path":"/:organization/:project/_apis/wit/workitemtypes/:type/fields","operationId":"Work Item Types Field_List"},{"method":"get","path":"/:organization/:project/_apis/wit/workitemtypes/:type/fields/:field","operationId":"Work Item Types Field_Get"},{"method":"get","path":"/:organization/:project/_apis/wit/workitemtypes/:type/states","operationId":"Work Item Type States_List"},{"method":"post","path":"/:organization/:project/:team/_apis/wit/templates","operationId":"Templates_Create"},{"method":"get","path":"/:organization/:project/:team/_apis/wit/templates","operationId":"Templates_List"},{"method":"delete","path":"/:organization/:project/:team/_apis/wit/templates/:templateId","operationId":"Templates_Delete"},{"method":"get","path":"/:organization/:project/:team/_apis/wit/templates/:templateId","operationId":"Templates_Get"},{"method":"put","path":"/:organization/:project/:team/_apis/wit/templates/:templateId","operationId":"Templates_Replace Template"},{"method":"post","path":"/:organization/:project/:team/_apis/wit/wiql","operationId":"Wiql_Query By Wiql"},{"method":"head","path":"/:organization/:project/:team/_apis/wit/wiql/:id","operationId":"Wiql_Get"},{"method":"get","path":"/:organization/:project/:team/_apis/wit/wiql/:id","operationId":"Wiql_Query By Id"}],"coverage":{"documentScope":"full","runtimeFidelity":"mixed","counts":{"operations":84,"types":105},"notes":["All 84 operations in the pinned 7.2-preview document are published and mounted: 67 modeled, 12 modeled-core, 5 unavailable. Nothing is omitted to make exactness pass.","The five unavailable operations (send mail, project process migration, and the three GitHub connection operations) reach services outside PurpleSuite. Each validates its request and returns the vendor's error envelope; none fabricates a success or mutates state.","Multi-segment values for the {path} and {query} route parameters must be percent-encoded. Azure DevOps also accepts them unencoded across path segments; a painted route is one Express path and cannot express both.","An instance hosts one organization, one project and one team. The {organization}, {project} and {team} route parameters are validated against them; any other value is a 404, never an empty 200.","Queries_Update renames a query and, for a folder, moves its descendants with it in one transaction; a rename onto an existing sibling path is a 409. Reparenting a query by supplying a new path is not modeled.","A chunked attachment upload requires a Content-Range on every chunk and validates it against the bytes actually sent, the declared total, and the total the upload started from. The attachment stays unreadable until exactly that many bytes have arrived.","The UI and the API share one persistent per-instance work item store and use the vendor's Basic transport, paths and api-version gating."]},"specPath":"/api/purple-suite/contracts/pm/azuredevops/wit-7-2-preview/openapi.json","primaryAliasSpecPath":"/api/purple-suite/contracts/pm/azuredevops/openapi.json","key":"pm/azuredevops/wit-7-2-preview","system":"pm","paint":"azuredevops","productLabel":"Azure DevOps","runtimeBase":"/api/purple-suite/{instanceId}/contracts/pm/azuredevops","productDocsPath":"/api/purple-suite/docs/pm/azuredevops","docsPath":"/api/purple-suite/docs/pm/azuredevops/wit-7-2-preview","primary":true,"source":"painted"}],"key":"pm/azuredevops","source":"painted"},{"system":"pm","paint":"jira","available":true,"label":"Jira","runtimeBase":"/api/purple-suite/{instanceId}/contracts/pm/jira","docsPath":"/api/purple-suite/docs/pm/jira","primaryProfileId":"jira-cloud-platform-v3","profiles":[{"id":"jira-cloud-platform-v3","label":"Jira Cloud platform v3 — issue core","version":"1001.0.0-SNAPSHOT-b0380760584d59a844a637560bce3ca4d5aec84d","protocol":"rest","direction":"bidirectional","specKind":"openapi","authProfiles":[{"id":"basic","label":"HTTP Basic — instance key in API-token position","kind":"basic","credentialModel":"instance-key","description":"Use Authorization Basic base64(email:instance-key). The instance key replaces the API token; a single synthetic integration user is authenticated. OAuth and Connect JWT are outside this bounded profile."}],"authVerifierId":"jira-basic-instance-key","credentialModel":"instance-key","runtimeOperations":[{"method":"get","path":"/rest/api/3/field","operationId":"getFields"},{"method":"post","path":"/rest/api/3/issue","operationId":"createIssue"},{"method":"delete","path":"/rest/api/3/issue/:issueIdOrKey","operationId":"deleteIssue"},{"method":"get","path":"/rest/api/3/issue/:issueIdOrKey","operationId":"getIssue"},{"method":"put","path":"/rest/api/3/issue/:issueIdOrKey","operationId":"editIssue"},{"method":"put","path":"/rest/api/3/issue/:issueIdOrKey/assignee","operationId":"assignIssue"},{"method":"get","path":"/rest/api/3/issue/:issueIdOrKey/comment","operationId":"getComments"},{"method":"post","path":"/rest/api/3/issue/:issueIdOrKey/comment","operationId":"addComment"},{"method":"delete","path":"/rest/api/3/issue/:issueIdOrKey/comment/:id","operationId":"deleteComment"},{"method":"get","path":"/rest/api/3/issue/:issueIdOrKey/comment/:id","operationId":"getComment"},{"method":"put","path":"/rest/api/3/issue/:issueIdOrKey/comment/:id","operationId":"updateComment"},{"method":"get","path":"/rest/api/3/issue/:issueIdOrKey/transitions","operationId":"getTransitions"},{"method":"post","path":"/rest/api/3/issue/:issueIdOrKey/transitions","operationId":"doTransition"},{"method":"get","path":"/rest/api/3/issuetype","operationId":"getIssueAllTypes"},{"method":"get","path":"/rest/api/3/myself","operationId":"getCurrentUser"},{"method":"get","path":"/rest/api/3/priority","operationId":"getPriorities"},{"method":"get","path":"/rest/api/3/project/search","operationId":"searchProjects"},{"method":"get","path":"/rest/api/3/project/:projectIdOrKey","operationId":"getProject"},{"method":"get","path":"/rest/api/3/project/:projectIdOrKey/statuses","operationId":"getAllStatuses"},{"method":"get","path":"/rest/api/3/search/jql","operationId":"searchAndReconsileIssuesUsingJql"},{"method":"post","path":"/rest/api/3/search/jql","operationId":"searchAndReconsileIssuesUsingJqlPost"},{"method":"get","path":"/rest/api/3/status","operationId":"getStatuses"},{"method":"get","path":"/rest/api/3/users","operationId":"getAllUsersDefault"}],"coverage":{"documentScope":"bounded","runtimeFidelity":"modeled","counts":{"operations":23},"notes":["23 modeled-core operations out of 619 in the pinned official source. The remaining operations are outside the published executable scope, not fabricated successes or misclassified as vendor-hosted failures.","The UI and API share persistent issue/comment/sprint state and use the vendor's Basic transport and paths. This is not full Jira API parity."]},"specPath":"/api/purple-suite/contracts/pm/jira/jira-cloud-platform-v3/openapi.json","primaryAliasSpecPath":"/api/purple-suite/contracts/pm/jira/openapi.json","key":"pm/jira/jira-cloud-platform-v3","system":"pm","paint":"jira","productLabel":"Jira","runtimeBase":"/api/purple-suite/{instanceId}/contracts/pm/jira","productDocsPath":"/api/purple-suite/docs/pm/jira","docsPath":"/api/purple-suite/docs/pm/jira/jira-cloud-platform-v3","primary":true,"source":"painted"},{"id":"jira-software-agile-v1","label":"Jira Software Agile 1.0 — board and sprint core","version":"1001.0.0","protocol":"rest","direction":"bidirectional","specKind":"openapi","authProfiles":[{"id":"basic","label":"HTTP Basic — instance key in API-token position","kind":"basic","credentialModel":"instance-key","description":"Use Authorization Basic base64(email:instance-key). The instance key replaces the API token; a single synthetic integration user is authenticated. OAuth and Connect JWT are outside this bounded profile."}],"authVerifierId":"jira-basic-instance-key","credentialModel":"instance-key","runtimeOperations":[{"method":"post","path":"/rest/agile/1.0/backlog/issue","operationId":"moveIssuesToBacklog"},{"method":"get","path":"/rest/agile/1.0/board","operationId":"getAllBoards"},{"method":"get","path":"/rest/agile/1.0/board/:boardId","operationId":"getBoard"},{"method":"get","path":"/rest/agile/1.0/board/:boardId/backlog","operationId":"getIssuesForBacklog"},{"method":"get","path":"/rest/agile/1.0/board/:boardId/configuration","operationId":"getConfiguration"},{"method":"get","path":"/rest/agile/1.0/board/:boardId/issue","operationId":"getIssuesForBoard"},{"method":"get","path":"/rest/agile/1.0/board/:boardId/sprint","operationId":"getAllSprints"},{"method":"get","path":"/rest/agile/1.0/board/:boardId/sprint/:sprintId/issue","operationId":"getBoardIssuesForSprint"},{"method":"get","path":"/rest/agile/1.0/issue/:issueIdOrKey","operationId":"getIssue"},{"method":"post","path":"/rest/agile/1.0/sprint","operationId":"createSprint"},{"method":"delete","path":"/rest/agile/1.0/sprint/:sprintId","operationId":"deleteSprint"},{"method":"get","path":"/rest/agile/1.0/sprint/:sprintId","operationId":"getSprint"},{"method":"post","path":"/rest/agile/1.0/sprint/:sprintId","operationId":"partiallyUpdateSprint"},{"method":"put","path":"/rest/agile/1.0/sprint/:sprintId","operationId":"updateSprint"},{"method":"get","path":"/rest/agile/1.0/sprint/:sprintId/issue","operationId":"getIssuesForSprint"},{"method":"post","path":"/rest/agile/1.0/sprint/:sprintId/issue","operationId":"moveIssuesToSprintAndRank"}],"coverage":{"documentScope":"bounded","runtimeFidelity":"modeled","counts":{"operations":16},"notes":["16 modeled-core operations out of 105 in the pinned official source. The remaining operations are outside the published executable scope, not fabricated successes or misclassified as vendor-hosted failures.","The UI and API share persistent issue/comment/sprint state and use the vendor's Basic transport and paths. This is not full Jira API parity."]},"specPath":"/api/purple-suite/contracts/pm/jira/jira-software-agile-v1/openapi.json","key":"pm/jira/jira-software-agile-v1","system":"pm","paint":"jira","productLabel":"Jira","runtimeBase":"/api/purple-suite/{instanceId}/contracts/pm/jira","productDocsPath":"/api/purple-suite/docs/pm/jira","docsPath":"/api/purple-suite/docs/pm/jira/jira-software-agile-v1","primary":false,"source":"painted"}],"key":"pm/jira","source":"painted"},{"system":"pm","paint":"linear","available":true,"label":"Linear","runtimeBase":"/api/purple-suite/{instanceId}/contracts/pm/linear","docsPath":"/api/purple-suite/docs/pm/linear","primaryProfileId":"graphql-issues","profiles":[{"id":"graphql-issues","label":"Linear GraphQL — issue and comment lifecycle","version":"23f11eb41ef63ba219ec582911079c19d1abbf62","protocol":"graphql","specKind":"graphql","authProfiles":[{"id":"personal-key","label":"Personal API key","kind":"authorization-token","credentialModel":"instance-key","description":"Authorization: <API_KEY>. The local personal-key position maps to the instance key. OAuth token issuance is outside this profile."}],"authVerifierId":"linear-personal-key","credentialModel":"instance-key","direction":"bidirectional","runtimeOperations":[{"method":"post","path":"/graphql","operationId":"linearGraphql"}],"graphqlRootOperations":[{"kind":"query","name":"issue","group":"Issues and workspace","runtime":"core"},{"kind":"query","name":"issues","group":"Issues and workspace","runtime":"core"},{"kind":"query","name":"team","group":"Issues and workspace","runtime":"core"},{"kind":"query","name":"teams","group":"Issues and workspace","runtime":"core"},{"kind":"query","name":"user","group":"Issues and workspace","runtime":"core"},{"kind":"query","name":"users","group":"Issues and workspace","runtime":"core"},{"kind":"query","name":"viewer","group":"Issues and workspace","runtime":"core"},{"kind":"query","name":"workflowState","group":"Issues and workspace","runtime":"core"},{"kind":"query","name":"workflowStates","group":"Issues and workspace","runtime":"core"},{"kind":"mutation","name":"commentCreate","group":"Issues and comments","runtime":"core"},{"kind":"mutation","name":"commentDelete","group":"Issues and comments","runtime":"core"},{"kind":"mutation","name":"commentUpdate","group":"Issues and comments","runtime":"core"},{"kind":"mutation","name":"issueArchive","group":"Issues and comments","runtime":"core"},{"kind":"mutation","name":"issueCreate","group":"Issues and comments","runtime":"core"},{"kind":"mutation","name":"issueDelete","group":"Issues and comments","runtime":"core"},{"kind":"mutation","name":"issueUnarchive","group":"Issues and comments","runtime":"core"},{"kind":"mutation","name":"issueUpdate","group":"Issues and comments","runtime":"core"}],"coverage":{"documentScope":"bounded","runtimeFidelity":"modeled","counts":{"operations":1,"roots":17},"notes":["17 of 630 official GraphQL roots are published, with explicitly narrowed fields and inputs. They execute against persistent per-instance state.","Issues and comments support create/read/update/delete; issue archive/restore and Relay pagination are modeled. Teams, users and workflow states are a synthetic read-only directory.","The complete official 630 root schema is pinned and inventoried in COVERAGE_LEDGER.md. Unimplemented ordinary roots are pending work, not claimed as external-service limitations; they are absent from this executable schema.","OAuth grants, projects, cycles, labels, filters, subscriptions, uploads and integrations are not implemented. This is not complete Linear compatibility."]},"specPath":"/api/purple-suite/contracts/pm/linear/graphql-issues/schema.graphql","primaryAliasSpecPath":"/api/purple-suite/contracts/pm/linear/schema.graphql","key":"pm/linear/graphql-issues","system":"pm","paint":"linear","productLabel":"Linear","runtimeBase":"/api/purple-suite/{instanceId}/contracts/pm/linear","productDocsPath":"/api/purple-suite/docs/pm/linear","docsPath":"/api/purple-suite/docs/pm/linear/graphql-issues","primary":true,"source":"painted"}],"key":"pm/linear","source":"painted"},{"system":"pm","paint":"purplesuite","available":true,"label":"Purple Suite PM API","runtimeBase":"/api/purple-suite/pm","docsPath":"/api/purple-suite/docs/pm/purplesuite","description":"\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Suite PM API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/pm/purplesuite/openapi.json","runtimeOperations":[],"key":"pm/purplesuite/native-openapi","system":"pm","paint":"purplesuite","productLabel":"Purple Suite PM API","runtimeBase":"/api/purple-suite/pm","productDocsPath":"/api/purple-suite/docs/pm/purplesuite","docsPath":"/api/purple-suite/docs/pm/purplesuite/native-openapi","description":"\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"pm/purplesuite","source":"native"},{"system":"purple-talent","paint":"purplesuite","available":true,"label":"Purple Suite PurpleTalent API","runtimeBase":"/api/purple-suite/purple-talent","docsPath":"/api/purple-suite/docs/purple-talent/purplesuite","description":"Mock of external talent-intelligence MCP tools. Tool surface includes original 6 confirmed tools plus 15 extended Studio tools. All data is deterministic per instance — see ./evalFixture.ts. See docs/superpowers/specs/2026-07-13-purple-talent-mock-design.md for the original design specs and purple-talent-studio-tool-mocking-reference.md for the extended tools specifications.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Suite PurpleTalent API OpenAPI","version":"2.1.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/purple-talent/purplesuite/openapi.json","runtimeOperations":[],"key":"purple-talent/purplesuite/native-openapi","system":"purple-talent","paint":"purplesuite","productLabel":"Purple Suite PurpleTalent API","runtimeBase":"/api/purple-suite/purple-talent","productDocsPath":"/api/purple-suite/docs/purple-talent/purplesuite","docsPath":"/api/purple-suite/docs/purple-talent/purplesuite/native-openapi","description":"Mock of external talent-intelligence MCP tools. Tool surface includes original 6 confirmed tools plus 15 extended Studio tools. All data is deterministic per instance — see ./evalFixture.ts. See docs/superpowers/specs/2026-07-13-purple-talent-mock-design.md for the original design specs and purple-talent-studio-tool-mocking-reference.md for the extended tools specifications.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"purple-talent/purplesuite","source":"native"},{"system":"retail-banking","paint":"purplesuite","available":true,"label":"Purple Retail Banking API","runtimeBase":"/api/purple-suite/retail-banking","docsPath":"/api/purple-suite/docs/retail-banking/purplesuite","description":"Core retail banking source system: customers, accounts, transactions, cards, products, loans & applications, plus the relationship/servicing layer (interactions, opportunities, complaints). Every record carries a `country` (IN | AU | US) and self-describing money; narrow any list with the `country` filter.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Retail Banking API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/retail-banking/purplesuite/openapi.json","runtimeOperations":[],"key":"retail-banking/purplesuite/native-openapi","system":"retail-banking","paint":"purplesuite","productLabel":"Purple Retail Banking API","runtimeBase":"/api/purple-suite/retail-banking","productDocsPath":"/api/purple-suite/docs/retail-banking/purplesuite","docsPath":"/api/purple-suite/docs/retail-banking/purplesuite/native-openapi","description":"Core retail banking source system: customers, accounts, transactions, cards, products, loans & applications, plus the relationship/servicing layer (interactions, opportunities, complaints). Every record carries a `country` (IN | AU | US) and self-describing money; narrow any list with the `country` filter.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"retail-banking/purplesuite","source":"native"},{"system":"risk-compliance","paint":"purplesuite","available":true,"label":"Purple Risk & Compliance API","runtimeBase":"/api/purple-suite/risk-compliance","docsPath":"/api/purple-suite/docs/risk-compliance/purplesuite","description":"BFSI risk & compliance source system: KYC/CDD profiles & remediation, fraud alerts & investigation cases, AML watchlist, and policy/SOP knowledge. Customer-linked records share the retail-banking `customer_id` (CUST-####). Records carry a `country` (IN | AU | US); narrow any list with the `country` filter.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Risk & Compliance API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/risk-compliance/purplesuite/openapi.json","runtimeOperations":[],"key":"risk-compliance/purplesuite/native-openapi","system":"risk-compliance","paint":"purplesuite","productLabel":"Purple Risk & Compliance API","runtimeBase":"/api/purple-suite/risk-compliance","productDocsPath":"/api/purple-suite/docs/risk-compliance/purplesuite","docsPath":"/api/purple-suite/docs/risk-compliance/purplesuite/native-openapi","description":"BFSI risk & compliance source system: KYC/CDD profiles & remediation, fraud alerts & investigation cases, AML watchlist, and policy/SOP knowledge. Customer-linked records share the retail-banking `customer_id` (CUST-####). Records carry a `country` (IN | AU | US); narrow any list with the `country` filter.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"risk-compliance/purplesuite","source":"native"},{"system":"scm","paint":"purplesuite","available":true,"label":"Purple Suite SCM API","runtimeBase":"/api/purple-suite/scm","docsPath":"/api/purple-suite/docs/scm/purplesuite","description":"\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Suite SCM API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/scm/purplesuite/openapi.json","runtimeOperations":[],"key":"scm/purplesuite/native-openapi","system":"scm","paint":"purplesuite","productLabel":"Purple Suite SCM API","runtimeBase":"/api/purple-suite/scm","productDocsPath":"/api/purple-suite/docs/scm/purplesuite","docsPath":"/api/purple-suite/docs/scm/purplesuite/native-openapi","description":"\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"scm/purplesuite","source":"native"},{"system":"tasks-approvals","paint":"purplesuite","available":true,"label":"Purple Suite Tasks & Approvals API","runtimeBase":"/api/purple-suite/tasks-approvals","docsPath":"/api/purple-suite/docs/tasks-approvals/purplesuite","description":"Internal admin CRUD (/tasks, /approvals) is OData-queryable per the platform standard. GET /todos and GET /todos/config instead mirror the REAL sn_ex_emp_hub_mw Todos API response shape byte-for-byte (see mw-task-mock/Specs/schemas/mw_todos*.schema.json) — that is the surface an agent connector should call.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Suite Tasks & Approvals API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/tasks-approvals/purplesuite/openapi.json","runtimeOperations":[],"key":"tasks-approvals/purplesuite/native-openapi","system":"tasks-approvals","paint":"purplesuite","productLabel":"Purple Suite Tasks & Approvals API","runtimeBase":"/api/purple-suite/tasks-approvals","productDocsPath":"/api/purple-suite/docs/tasks-approvals/purplesuite","docsPath":"/api/purple-suite/docs/tasks-approvals/purplesuite/native-openapi","description":"Internal admin CRUD (/tasks, /approvals) is OData-queryable per the platform standard. GET /todos and GET /todos/config instead mirror the REAL sn_ex_emp_hub_mw Todos API response shape byte-for-byte (see mw-task-mock/Specs/schemas/mw_todos*.schema.json) — that is the surface an agent connector should call.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"tasks-approvals/purplesuite","source":"native"},{"system":"time","paint":"purplesuite","available":true,"label":"Purple Time API","runtimeBase":"/api/purple-suite/time","docsPath":"/api/purple-suite/docs/time/purplesuite","description":"Workforce time & attendance — clock in/out, meal and rest breaks, schedules, timecards, and meal-break compliance exceptions. Resembles tools like ADP Time and Ceridian Dayforce.\n\nThe signature flow is meal-break compliance: `POST /meal-compliance/evaluate` finds employees who have been on the clock past their country's meal threshold, records a `MEAL_BREAK_DUE` exception, and fires the `time.meal_break.due` webhook. Acting on it — `POST /clock` with `action: \"meal_start\"` — records the punch and automatically resolves that exception.\n\n**Where this sits next to Purple HRS.** Purple Time is the source of truth for hours ACTUALLY WORKED: it owns clock in/out punches, the timecards derived from them, schedules, and meal-break compliance. Purple HRS owns the payroll- and HR-facing views of time — its `/timesheets` are weekly hours summaries that feed payroll (no punches, no breaks), its `/time-off-requests` are absence requests, and it remains the system of record for PTO balances. Ask Purple Time \"when did they clock in, and do they owe a break?\"; ask Purple HRS \"how many hours go to payroll this week, and what leave is booked?\".\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Time API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/time/purplesuite/openapi.json","runtimeOperations":[],"key":"time/purplesuite/native-openapi","system":"time","paint":"purplesuite","productLabel":"Purple Time API","runtimeBase":"/api/purple-suite/time","productDocsPath":"/api/purple-suite/docs/time/purplesuite","docsPath":"/api/purple-suite/docs/time/purplesuite/native-openapi","description":"Workforce time & attendance — clock in/out, meal and rest breaks, schedules, timecards, and meal-break compliance exceptions. Resembles tools like ADP Time and Ceridian Dayforce.\n\nThe signature flow is meal-break compliance: `POST /meal-compliance/evaluate` finds employees who have been on the clock past their country's meal threshold, records a `MEAL_BREAK_DUE` exception, and fires the `time.meal_break.due` webhook. Acting on it — `POST /clock` with `action: \"meal_start\"` — records the punch and automatically resolves that exception.\n\n**Where this sits next to Purple HRS.** Purple Time is the source of truth for hours ACTUALLY WORKED: it owns clock in/out punches, the timecards derived from them, schedules, and meal-break compliance. Purple HRS owns the payroll- and HR-facing views of time — its `/timesheets` are weekly hours summaries that feed payroll (no punches, no breaks), its `/time-off-requests` are absence requests, and it remains the system of record for PTO balances. Ask Purple Time \"when did they clock in, and do they owe a break?\"; ask Purple HRS \"how many hours go to payroll this week, and what leave is booked?\".\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"time/purplesuite","source":"native"},{"system":"workiq","paint":"purplesuite","available":true,"label":"Purple Suite WorkIQ API","runtimeBase":"/api/purple-suite/workiq","docsPath":"/api/purple-suite/docs/workiq/purplesuite","description":"Conversational workplace-assistant API. Resembles Microsoft 365 Copilot / WorkIQ-style chat: start a session, then submit natural-language queries and receive synthesized answers with citations over the tenant's mail, calendar and collaboration data. This demo instance answers from a fixed set of canned responses rather than reasoning over live data.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primaryProfileId":"native-openapi","profiles":[{"id":"native-openapi","label":"Purple Suite WorkIQ API OpenAPI","version":"1.0.0","protocol":"rest","specKind":"openapi","specPath":"/api/purple-suite/contracts/workiq/purplesuite/openapi.json","runtimeOperations":[],"key":"workiq/purplesuite/native-openapi","system":"workiq","paint":"purplesuite","productLabel":"Purple Suite WorkIQ API","runtimeBase":"/api/purple-suite/workiq","productDocsPath":"/api/purple-suite/docs/workiq/purplesuite","docsPath":"/api/purple-suite/docs/workiq/purplesuite/native-openapi","description":"Conversational workplace-assistant API. Resembles Microsoft 365 Copilot / WorkIQ-style chat: start a session, then submit natural-language queries and receive synthesized answers with citations over the tenant's mail, calendar and collaboration data. This demo instance answers from a fixed set of canned responses rather than reasoning over live data.\n\n---\n\n**Acting as a user (`X-PS-Impersonate-User`).** Every endpoint accepts an optional `X-PS-Impersonate-User` request header whose value is the email of the instance user to act as. The effective user resolves in this order: the header if present, else the instance's configured default MCP user, else none. User-scoped paths additionally accept the literal `me` in place of an email, and Graph-style apps also serve `/me/…` twins of their `/users/{email}/…` paths that resolve the same way. This header is honored by all operations but is intentionally omitted from each operation's parameter list so it is not surfaced as a per-tool argument by MCP clients; see the `ImpersonateUser` entry under `components.parameters`.","primary":true,"source":"native"}],"key":"workiq/purplesuite","source":"native"}]}