Skip to content
'; user_status_content.firstChild.appendChild(avatarContainer); } else { // Placeholder for LoggedOutUserMenu let loggedOutContainer = document.createElement('div'); // if LoggedOutUserMenu fallback let userBtn = document.createElement('button'); userBtn.style.width = "33px"; userBtn.style.height = "33px"; userBtn.style.display = "flex"; userBtn.style.alignItems = "center"; userBtn.style.justifyContent = "center"; userBtn.style.color = "var(--ds-gray-900)"; userBtn.style.border = "1px solid var(--ds-gray-300)"; userBtn.style.borderRadius = "100%"; userBtn.style.cursor = "pointer"; userBtn.style.background = "transparent"; userBtn.style.padding = "0"; // user icon ( from geist) let svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); svg.setAttribute('data-testid', 'geist-icon'); svg.setAttribute('height', '16'); svg.setAttribute('stroke-linejoin', 'round'); svg.setAttribute('style', 'color:currentColor'); svg.setAttribute('viewBox', '0 0 16 16'); svg.setAttribute('width', '16'); let path = document.createElementNS('http://www.w3.org/2000/svg', 'path'); path.setAttribute('fill-rule', 'evenodd'); path.setAttribute('clip-rule', 'evenodd'); path.setAttribute('d', 'M7.75 0C5.95507 0 4.5 1.45507 4.5 3.25V3.75C4.5 5.54493 5.95507 7 7.75 7H8.25C10.0449 7 11.5 5.54493 11.5 3.75V3.25C11.5 1.45507 10.0449 0 8.25 0H7.75ZM6 3.25C6 2.2835 6.7835 1.5 7.75 1.5H8.25C9.2165 1.5 10 2.2835 10 3.25V3.75C10 4.7165 9.2165 5.5 8.25 5.5H7.75C6.7835 5.5 6 4.7165 6 3.75V3.25ZM2.5 14.5V13.1709C3.31958 11.5377 4.99308 10.5 6.82945 10.5H9.17055C11.0069 10.5 12.6804 11.5377 13.5 13.1709V14.5H2.5ZM6.82945 9C4.35483 9 2.10604 10.4388 1.06903 12.6857L1 12.8353V13V15.25V16H1.75H14.25H15V15.25V13V12.8353L14.931 12.6857C13.894 10.4388 11.6452 9 9.17055 9H6.82945Z'); path.setAttribute('fill', 'currentColor'); svg.appendChild(path); userBtn.appendChild(svg); loggedOutContainer.appendChild(userBtn); loggedOutContainer.style.display = 'flex'; loggedOutContainer.style.gap = '8px'; loggedOutContainer.style.alignItems = 'center'; user_status_content.firstChild.appendChild(loggedOutContainer); } })();
Menu

Deployment integration actions

Last updated July 18, 2025

With deployment integration actions, integration providers can enable integration resource tasks to be performed such as branching a database, setting environment variables, and running readiness checks. It then allows integration users to configure and trigger these actions automatically during a deployment.

For example, you can use deployment integration actions with the checks API to create integrations that provide testing functionality to deployments.

  1. Action declaration:

    • An integration product declares deployment actions with an ID, name, and metadata.
    • Actions can specify configuration options that integration users can modify.
    • Actions can include suggestions for default actions to run such as "this action should be run on previews".
  2. Project configuration:

    • When a resource is connected to a project, integration users select which actions should be triggered during deployments.
    • Integration users are also presented with suggestions on what actions to run if these were configured in the action declaration.
  3. Deployment execution:

    • When a deployment is created, the configured actions are registered on the deployment.
    • The registered actions trigger the deployment.integration.action.start webhook.
    • If a deployment is canceled, the deployment.integration.action.cancel webhook is triggered.
  4. Resource-side processing:

    • The integration provider processes the webhook, executing the necessary resource-side actions such as creating a database branch.
    • During the processing of these actions, the build is blocked and the deployment set in a provisioning state.
    • Once complete, the integration provider updates the action status.
  5. Deployment unblock:

    • Vercel validates the completed action, updates environment variables, and unblocks the deployment.

As an integration provider, to allow your integration users to add deployment actions to an installed native integration, follow these steps:

  1. Declare the deployment actions for your native integration product.

    1. Open the Integration Console.
    2. Select your Marketplace integration and click Manage.
    3. Edit an existing product or create a new one.
    4. Go to Deployment Actions in the left-side menu.
    5. Create an action by assigning it a slug and a name.

    Next, handle webhook events and perform API actions in your integration server. Review the example marketplace integration server code repository.

  2. Handle the deployment.integration.action.start webhook. This webhook triggers when a deployment starts an action.

    This is a webhook payload example:

    {
      "installationId": "icfg_1234567",
      "action": "branch",
      "resourceId": "abc-def-1334",
      "deployment": { "id": "dpl_568301234" }
    }

    This payload provides IDs for the installation, action, resource, and deployment.

  3. You can retrieve additional deployment details using the Get a deployment by ID or URL endpoint:

    curl https://api.vercel.com/v13/deployments/dpl_568301234 \
      -H "Authorization: {access_token}"

    You can create your access_token from Vercel's account settings.

    Review the full code for handling the deployment start in the example marketplace integration server.

  4. Once an action is processed, update its status using the Update Deployment Integration Action REST API endpoint.

    Example request to this endpoint:

    PATCH https://api.vercel.com/v1/deployments/{deploymentId}/integrations/{installationId}/resources/{resourceId}/actions/{action}

    Example request body to send that includes the resulting updated resource secrets:

    {
      "status": "succeeded",
      "outcomes": [
        {
          "kind": "resource-secrets",
          "secrets": [{ "name": "TOP_SECRET", "value": "****" }]
        }
      ]
    }
  5. When a deployment is canceled, the deployment.integration.action.cancel webhook is triggered. You should handle this action to clean up any partially completed actions.

    Use the deployment.integration.action.cleanup webhook to clean up any persistent state linked to the deployment. It's triggered when a deployment is removed from the system.


Was this helpful?

supported.