{
  "schema": "aaes/capability-pack/1",
  "provider": "five9",
  "version": "1.0.0",
  "description": "Read Five9 agent details, active calls, contacts, and queue wait times; update contacts, place outbound calls, and finish calls with a disposition. Covers the session-based Agent and Supervisor REST APIs, not administration.",
  "notes": "Draft: the full Five9 Agent and Supervisor REST API developer guide was unavailable during review. On 2026-09-21, developer.five9.com remained unreachable and the vendor-hosted guide redirected to a login-gated portal; apidocs.five9.com was also unavailable in the review environment. Session, expiry, revocation, and call-disposition behavior across states remain unverified. Obtain those terms before enabling.\n\nThe registered paths come from the Five9 Developer Program's starter-kit repository, its agent_VCC_boilerplate.html sample, and the publicly hosted CRM SDK documentation. The repository's own README states that it is not an official or supported Five9 resource.\n\nAPI coverage: this pack covers real-time call control and supervision through the session-based Agent and Supervisor REST API, with agent paths under /appsvcs/rs/svc and supervisor paths under /supsvcs/rs/svc. It does not cover the separate Configuration Web Services SOAP/WSDL API (users, campaigns, calling lists, skills, and dispositions, on api.<region>.five9.com or api.five9.com /wsadmin/...), which uses its own admin credentials, or the Statistics Web Services SOAP API. Domain administration needs a separate registration and review.\n\nHost setup: a logged-in session calls https://app.five9.com/appsvcs/rs/svc/auth/metadata to obtain its data-center API host and port from metadata.dataCenters[].apiUrls[]. Replace the reserved five9-vcc.invalid host in every endpoint, resource locator, and egress allowlist entry together. The allowlist matches the authority exactly. If the returned port is not 443, review that port as well; the entries here specify the authority only.\n\nAuthentication: the retrieved sample uses browser session credentials (fetch credentials: 'include'). This pack stores a session cookie in the customer's vault and requires an external process to obtain and refresh it. No bearer scheme was verified; whether the gated guide supports HTTP Basic or API tokens for server-side callers remains an open review item.\n\nApproval classification: calls.make_external places a live outbound call and declares create and send at R3; send requires human approval. calls.dispose records a disposition and finishes a call according to the sample, but termination behavior in every state is unverified. Where it ends an active customer call, that interruption cannot be reversed. Although update has an R2 floor, this capability declares delete and update at R3 to cover the possible termination.\n\nExcluded operations: Configuration Web Services and Statistics Web Services; recording views and downloads (including POST /supsvcs/rs/svc/supervisors/{id}/agents/{id}/recording_views, which exposes recorded customer conversations); contact deletion and do-not-call (DNC) list changes; campaign start/stop and calling-list loading, which can drive mass outbound dialing; supervisor monitoring, whisper, and barge-in; and WebSocket event channels. Each requires its own registration and review.\n\nRe-review on 2026-10-29: the legacy vendor PDF URL still redirected to the Five9 Documentation Center login portal. The guide bundle, its table of contents and a candidate vendor-hosted raw PDF were inaccessible through the web reader. The public Technical Requirements guide names the Agent and Supervisor REST API guide but supplies no registered operation contract. The Five9 GitHub organization lists admin and chat samples, not this REST reference. All seven operations and the session contract remain unverified against first-party operation documentation; keep this pack disabled.",
  "credential": {
    "secret_ref_id": "secret-ref-five9-vcc-session-cookie",
    "custody": "customer_vault",
    "inject": "header",
    "inject_name": "Cookie",
    "note": "Store the complete Cookie header value for a dedicated Five9 VCC agent or supervisor user in the client's secret manager. An external deployment process logs in, captures the issued session cookie, and refreshes the reference. The executor injects that value unchanged and does not log in.\n\nThe retrieved sample authenticates through a logged-in browser session. The full developer guide is gated, and HTTP Basic or token authentication for server-side callers has not been verified. Obtain the guide's session, expiry, and revocation terms before enabling.\n\nConfirm session expiry and logout invalidation against the vendor guide before enabling; neither behavior was verified against first-party operation documentation in this review. The retrieved sources do not establish that changing a password or disabling a user invalidates an existing session. Refresh before expiry; an expired session fails closed. On suspected exposure, terminate the session itself rather than relying on account changes.\n\nUse a dedicated user with only the agent or supervisor permissions these capabilities need: the session inherits the user's full permissions. Keep its value only in executor memory for a call, never in logs, traces, diagnostics, or crash dumps. Do not enable the pack if the deployment cannot meet those requirements."
  },
  "capabilities": [
    {
      "capability_id": "five9.agent.info.read",
      "version": "1.0.0",
      "kind": "tool",
      "risk_tier": "R0",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN",
      "data_class": "pii",
      "egress_allowlist": [
        "five9-vcc.invalid"
      ],
      "endpoint": "https://five9-vcc.invalid/appsvcs/rs/svc/agents/AGENT_ID",
      "method": "GET",
      "connector": "http",
      "custody": "customer_vault",
      "secret_ref_id": "secret-ref-five9-vcc-session-cookie",
      "inject": "header",
      "inject_name": "Cookie",
      "actions": [
        "read"
      ],
      "resource_id": "five9-vcc-agents",
      "description": "Read one agent's profile and state, which are personal data, through /appsvcs/rs/svc/agents/{agentId}, a path exercised by the retrieved starter kit. Bind AGENT_ID to a concrete agent and replace the reserved host with the customer's data-center API host before enabling.",
      "requires_review": true
    },
    {
      "capability_id": "five9.calls.read",
      "version": "1.0.0",
      "kind": "tool",
      "risk_tier": "R0",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN",
      "data_class": "pii",
      "egress_allowlist": [
        "five9-vcc.invalid"
      ],
      "endpoint": "https://five9-vcc.invalid/appsvcs/rs/svc/agents/AGENT_ID/interactions/calls",
      "method": "GET",
      "connector": "http",
      "custody": "customer_vault",
      "secret_ref_id": "secret-ref-five9-vcc-session-cookie",
      "inject": "header",
      "inject_name": "Cookie",
      "actions": [
        "read"
      ],
      "resource_id": "five9-vcc-agents",
      "description": "List an agent's active calls through the starter kit's agent-context /interactions/calls path. Records include customer numbers and campaign IDs and are classified as pii (personal data). Bind AGENT_ID and replace the reserved host before enabling.",
      "requires_review": true
    },
    {
      "capability_id": "five9.contacts.read",
      "version": "1.0.0",
      "kind": "tool",
      "risk_tier": "R0",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN",
      "data_class": "pii",
      "egress_allowlist": [
        "five9-vcc.invalid"
      ],
      "endpoint": "https://five9-vcc.invalid/appsvcs/rs/svc/orgs/ORG_ID/contacts/CONTACT_ID",
      "method": "GET",
      "connector": "http",
      "custody": "customer_vault",
      "secret_ref_id": "secret-ref-five9-vcc-session-cookie",
      "inject": "header",
      "inject_name": "Cookie",
      "actions": [
        "read"
      ],
      "resource_id": "five9-vcc-contacts",
      "description": "Read one contact's personal data through /orgs/{orgId}/contacts/{contactId}, a path exercised by the retrieved starter kit. Bind ORG_ID and CONTACT_ID and replace the reserved host before enabling.",
      "requires_review": true
    },
    {
      "capability_id": "five9.contacts.update",
      "version": "1.0.0",
      "kind": "tool",
      "risk_tier": "R2",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN",
      "data_class": "pii",
      "egress_allowlist": [
        "five9-vcc.invalid"
      ],
      "endpoint": "https://five9-vcc.invalid/appsvcs/rs/svc/orgs/ORG_ID/contacts/CONTACT_ID",
      "method": "PUT",
      "connector": "http",
      "custody": "customer_vault",
      "secret_ref_id": "secret-ref-five9-vcc-session-cookie",
      "inject": "header",
      "inject_name": "Cookie",
      "actions": [
        "update"
      ],
      "resource_id": "five9-vcc-contacts",
      "description": "Update one contact through PUT /orgs/{orgId}/contacts/{contactId}, as exercised by the retrieved starter kit. The unrestricted body can overwrite any writable field the session user has permission to change; the pack imposes no field-level limit. Bind ORG_ID and CONTACT_ID and replace the reserved host before enabling.",
      "requires_review": true
    },
    {
      "capability_id": "five9.supervisor.ewt.read",
      "version": "1.0.0",
      "kind": "tool",
      "risk_tier": "R0",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN",
      "data_class": "internal",
      "egress_allowlist": [
        "five9-vcc.invalid"
      ],
      "endpoint": "https://five9-vcc.invalid/supsvcs/rs/svc/orgs/ORG_ID/ewt/group/SKILL_GROUP_ID/MEDIA_TYPE_ID",
      "method": "GET",
      "connector": "http",
      "custody": "customer_vault",
      "secret_ref_id": "secret-ref-five9-vcc-session-cookie",
      "inject": "header",
      "inject_name": "Cookie",
      "actions": [
        "read"
      ],
      "resource_id": "five9-vcc-supervisor",
      "description": "Read expected wait time for a skill group on the supervisor-context path (/supsvcs/rs/svc/...), classified as internal data: an aggregate queue statistic, not customer data. This capability exercises the supervisor side of the Agent/Supervisor split; it grants nothing on the separate SOAP admin or statistics surfaces. ORG_ID, SKILL_GROUP_ID and MEDIA_TYPE_ID are placeholders the deployment binds before enabling, and the host is a reserved placeholder to substitute before enabling.",
      "requires_review": true
    },
    {
      "capability_id": "five9.calls.make_external",
      "version": "1.0.0",
      "kind": "tool",
      "risk_tier": "R3",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN",
      "data_class": "pii",
      "egress_allowlist": [
        "five9-vcc.invalid"
      ],
      "endpoint": "https://five9-vcc.invalid/appsvcs/rs/svc/agents/AGENT_ID/interactions/make_external_call",
      "method": "POST",
      "connector": "http",
      "custody": "customer_vault",
      "secret_ref_id": "secret-ref-five9-vcc-session-cookie",
      "inject": "header",
      "inject_name": "Cookie",
      "actions": [
        "create",
        "send"
      ],
      "resource_id": "five9-vcc-agents",
      "description": "Initiate an outbound external call from the agent's session (agent-context POST.../interactions/make_external_call, as exercised by the retrieved starter kit): the effect rings a telephone number supplied in the request body and opens a live voice interaction with an end recipient, and the recipient may receive the call before any cancellation. The capability is registered as create and send at the minimum R3 tier — send is one of the designated actions requiring human approval.\n\nOn supported AAES-mediated execution paths, irreversible actions require approval by an authorized person; this does not prevent calls through bypass or observation-only paths.\n\nThe request body carries the destination number and campaign id unrestricted, so the vendor verb being a POST-create does not lower the effect; the dialed number is personal data. AGENT_ID is a placeholder the deployment binds before enabling, and the host is a reserved placeholder to substitute before enabling.",
      "requires_review": true
    },
    {
      "capability_id": "five9.calls.dispose",
      "version": "1.0.0",
      "kind": "tool",
      "risk_tier": "R3",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN",
      "data_class": "pii",
      "egress_allowlist": [
        "five9-vcc.invalid"
      ],
      "endpoint": "https://five9-vcc.invalid/appsvcs/rs/svc/agents/AGENT_ID/interactions/calls/CALL_ID/dispose",
      "method": "PUT",
      "connector": "http",
      "custody": "customer_vault",
      "secret_ref_id": "secret-ref-five9-vcc-session-cookie",
      "inject": "header",
      "inject_name": "Cookie",
      "actions": [
        "delete",
        "update"
      ],
      "resource_id": "five9-vcc-agents",
      "description": "Finish a call and record its disposition through PUT /interactions/calls/{callId}/dispose, according to the retrieved starter kit's method comment. The full developer guide was unavailable, so termination of active calls in every state has not been verified. Where this operation ends an active customer call, the interruption cannot be reversed.\n\nThe registration declares update for the disposition and delete for the possible termination, at R3. Delete requires human approval. Bind AGENT_ID and CALL_ID and replace the reserved host before enabling.",
      "requires_review": true
    }
  ],
  "resources": [
    {
      "resource_id": "five9-vcc-agents",
      "kind": "api",
      "locator": "https://five9-vcc.invalid/appsvcs/rs/svc/agents",
      "data_class": "pii",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN"
    },
    {
      "resource_id": "five9-vcc-contacts",
      "kind": "api",
      "locator": "https://five9-vcc.invalid/appsvcs/rs/svc/orgs/ORG_ID/contacts",
      "data_class": "pii",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN"
    },
    {
      "resource_id": "five9-vcc-supervisor",
      "kind": "api",
      "locator": "https://five9-vcc.invalid/supsvcs/rs/svc",
      "data_class": "internal",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN"
    }
  ],
  "review": {
    "state": "draft",
    "date": "2026-10-29",
    "sources": [
      "https://github.com/Five9DeveloperProgram/Five9-Agent-Sup-REST-API-Starter-Kit (retrieved 2026-09-21)",
      "https://raw.githubusercontent.com/Five9DeveloperProgram/Five9-Agent-Sup-REST-API-Starter-Kit/main/README.md (retrieved 2026-09-21)",
      "https://raw.githubusercontent.com/Five9DeveloperProgram/Five9-Agent-Sup-REST-API-Starter-Kit/main/agent_VCC_boilerplate.html (retrieved 2026-09-21)",
      "https://cdn.prod.us.five9.net/stable/crm-sdk-lib/doc/ (retrieved 2026-09-21)"
    ],
    "reviewer_id": "aaes-eng"
  }
}
