---
title: "Create Chat"
method: POST
path: "/chats"
tags: ["Chats"]
---

# Create Chat

`POST /chats`

Creates a new chat from a prompt. The request blocks until the model response is complete and returns the chat.

## Request body

- object
  - `message` string, required — The prompt or instruction to send to the model.
  - `systemPrompt` string — System-level context for the chat, such as frameworks or development environment details.
  - `modelConfiguration` object — Overrides for the model behavior.
    - `modelId` 'v0-mini' | 'v0-pro' | 'v0-max' | 'v0-max-fast', required — Model to use for the generation.
    - `imageGenerations` boolean, required — Enables image generations to generate up to 5 images per version.
  - `attachments` object[] — Files or assets to include with the message.
    - `url` string, required — URL of the attachment.
  - `mcpServerIds` string[] — MCP server IDs to enable. When omitted, uses default enabled servers.
  - `skills` union[] — Skills to force-attach to the chat. Supports skills.sh (`remote`), user/team memory (`memory`), and project (`project`) skills. Maximum 3.
    - union — A skill to force-attach to the chat. Skills provide domain-specific knowledge to the AI. Use `remote` for skills.sh skills, `memory` for user/team memory skills (including design-system skills), and `project` for skills defined in the chat repo.
      - object
        - `type` 'remote', required — Discriminator: a skills.sh skill.
        - `id` string, required — Skill ID from skills.sh.
      - object
        - `type` 'memory', required — Discriminator: a user- or team-scoped memory skill.
        - `scope` 'user' | 'team', required — Whether the skill lives in user or team memory.
        - `skillName` string, required — Name of the memory skill to attach.
      - object
        - `type` 'project', required — Discriminator: a skill defined in the project repo.
        - `skillName` string, required — Name of the project skill to attach.
  - `privacy` 'public' | 'private' | 'team' | 'team-edit' | 'unlisted' — Visibility setting for the new chat.
  - `title` string — Title for the new chat.
  - `metadata` object — Arbitrary key-value data to attach to the chat.

## Response `200`

A chat response that also reports the usage.

- ChatWithUsage — A chat response that also reports the usage.
  - `chat` object, required
    - `id` string, required — Unique chat identifier.
    - `title` string — Chat title, if generated.
    - `privacy` 'public' | 'private' | 'team' | 'team-edit' | 'unlisted', required — Visibility setting of the chat.
    - `createdAt` string, date-time, required — ISO timestamp of when the chat was created.
    - `updatedAt` string, date-time — ISO timestamp of when the chat was last updated.
    - `authorId` string, required — ID of the user who created the chat.
    - `vercelProjectId` string — Associated Vercel project ID, if any.
    - `metadata` object, required — User-defined key-value metadata.
    - `writePermission` boolean, required — Whether the caller has write access to this chat.
  - `usage` object, required — Token usage and credit cost for prompt.
    - `tokens` object, required — Token counts for this message.
      - `input` number, required — Prompt input value (non-cached).
      - `output` number, required — Completion output value.
      - `cacheRead` number, required — Cache-read input value.
      - `cacheWrite` number, required — Cache-write input value.
      - `total` number, required — Sum of input, output, cacheRead, and cacheWrite.
    - `creditsCost` object, required — Credit cost for this message.
      - `input` number, required — Prompt input value (non-cached).
      - `output` number, required — Completion output value.
      - `cacheRead` number, required — Cache-read input value.
      - `cacheWrite` number, required — Cache-write input value.
      - `total` number, required — Sum of input, output, cacheRead, and cacheWrite.

## Other responses

- `401` — Response for status 401
- `403` — Response for status 403
- `404` — Response for status 404
- `422` — Response for status 422
- `500` — Response for status 500

## Changes

- **2026-07-30** `da68370a2aea` — 22 breaking, 16 warning, 22 info
  - removed `subschema #1, subschema #2, subschema #3` from the `skills/items/` request property `anyOf` list
  - removed the enum value `v0-auto` of the request property `modelConfiguration/modelId`
  - the `message` request property's minLength was increased from `0` to `1`
  - removed the required property `apiUrl` from the response with the `200` status
  - …56 more
- **2026-07-21** `b53921245779` — 1 warning, 1 info
  - added the new `v0-opus-4.7-fast` enum value to the `modelConfiguration/modelId` response property for the response status `200`
  - added the new optional request property `skills`
- **2026-04-30** `670c302548ec` — 1 warning, 4 info
  - added the new `v0-opus-4.7` enum value to the `modelConfiguration/modelId` response property for the response status `200`
  - added the new optional request property `attachedSkillIds`
  - request property `modelConfiguration/modelId` reactivated
  - added the optional property `vercelProjectId` to the response with the `200` status
  - …1 more
- **2026-03-06** `b73ab7a6f317` — 1 info
  - added the new optional request property `mcpServerIds`
- …earlier changes not shown

[Full history](https://skmtc.dev/vercel/apis/v0-platform-api-beta/changes/chats/post.md)

---

[API](https://skmtc.dev/vercel/apis/v0-platform-api-beta.md) · [All operations](https://skmtc.dev/vercel/apis/v0-platform-api-beta/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/vercel/v0-platform-api-beta/revisions/ca413e5ca710/schema)
