---
title: "Upsert a Vercel Marketplace installation"
method: PUT
path: "/v1/installations/{installationId}"
tags: ["Vercel"]
---

# Upsert a Vercel Marketplace installation

`PUT /v1/installations/{installationId}`

Create or update an installation. Vercel sends this when a customer
installs (or re-sends it idempotently). The acting account is taken from
the signed token claims, not this body. There is one installation per
Vercel team, and an installation can own many Xata organizations.

## Path parameters

- `installationId` string, required

## Request body

- UpsertInstallationRequest
  - `scopes` string[], required — Scopes granted to the installation.
  - `acceptedPolicies` object, required — Map of policy id to the acceptance timestamp (RFC 3339), e.g. {"toc": "2024-02-28T10:00:00Z"}.
  - `credentials` InstallationCredentials, required
    - `access_token` string, required — Installation access token that authenticates our outbound Partner API calls to Vercel. Stored encrypted at rest.
    - `token_type` string, required — Token type (e.g. "Bearer").
  - `account` InstallationAccount, required — The Vercel account/team installing the integration.
    - `name` string — Team name (absent for personal accounts).
    - `url` string, required — URL of the account on Vercel.
    - `contact` object — Contact details for the account.
      - `email` string, required
      - `name` string

## Response `204`

Installation created or updated. No body. (Vercel's contract also
allows a 200 with an installation-level billingPlan/notification
body; Xata does not use installation-level billing plans.)

## Other responses

- `400` — Error response.
- `403` — Error response.
- `409` — Error response.

---

[API](https://skmtc.net/xata/apis/xata-api.md) · [All operations](https://skmtc.net/xata/apis/xata-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/xata/xata-api/revisions/8748e6c0be4c/schema)
