openapi: 3.1.0 info: title: v0 App agent hooks API version: '0' description: Full stack vibe coding API termsOfService: https://vercel.com/legal/api-terms servers: - url: https://api.v0.dev/v1 tags: - name: hooks paths: /hooks: get: summary: Find Hooks description: Retrieves a list of existing hooks in your workspace. Useful for managing active webhooks tied to chat events or deployments. operationId: hooks.find tags: - hooks responses: '200': description: Success content: application/json: schema: type: object properties: object: type: string const: list data: type: array items: $ref: '#/components/schemas/HookSummary' required: - object - data additionalProperties: false '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/UnauthorizedError' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ForbiddenError' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/NotFoundError' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/ConflictError' '413': description: Payload Too Large content: application/json: schema: $ref: '#/components/schemas/PayloadTooLargeError' '422': description: Unprocessable Entity content: application/json: schema: $ref: '#/components/schemas/UnprocessableEntityError' '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/TooManyRequestsError' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerError' security: - apiKey: [] post: summary: Create Hook description: Creates a new webhook that listens for specific events. Supports optional association with a chat. operationId: hooks.create tags: - hooks requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: A human-readable name for the hook. events: type: array items: type: string enum: - chat.created - chat.updated - chat.deleted - message.created - message.updated - message.deleted - message.finished description: List of event types the hook should subscribe to. chatId: description: The ID of a chat to scope the hook to. type: string url: type: string format: uri description: The target URL to receive the webhook payloads. required: - name - events - url additionalProperties: false responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/HookDetail' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/UnauthorizedError' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ForbiddenError' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/NotFoundError' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/ConflictError' '413': description: Payload Too Large content: application/json: schema: $ref: '#/components/schemas/PayloadTooLargeError' '422': description: Unprocessable Entity content: application/json: schema: $ref: '#/components/schemas/UnprocessableEntityError' '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/TooManyRequestsError' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerError' security: - apiKey: [] /hooks/{hookId}: get: summary: Get Hook description: Retrieves the details of a specific webhook using its ID. operationId: hooks.getById tags: - hooks responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/HookDetail' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/UnauthorizedError' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ForbiddenError' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/NotFoundError' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/ConflictError' '413': description: Payload Too Large content: application/json: schema: $ref: '#/components/schemas/PayloadTooLargeError' '422': description: Unprocessable Entity content: application/json: schema: $ref: '#/components/schemas/UnprocessableEntityError' '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/TooManyRequestsError' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerError' parameters: - name: hookId in: path required: true schema: type: string description: The unique identifier of the hook to retrieve. security: - apiKey: [] patch: summary: Update Hook description: Updates the configuration of an existing webhook, including its name, event subscriptions, or target URL. operationId: hooks.update tags: - hooks requestBody: required: true content: application/json: schema: type: object properties: name: description: A new name for the hook. type: string events: description: Updated list of event types to subscribe to. type: array items: type: string enum: - chat.created - chat.updated - chat.deleted - message.created - message.updated - message.deleted - message.finished url: description: A new URL to send webhook payloads to. type: string format: uri additionalProperties: false responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/HookDetail' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/UnauthorizedError' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ForbiddenError' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/NotFoundError' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/ConflictError' '413': description: Payload Too Large content: application/json: schema: $ref: '#/components/schemas/PayloadTooLargeError' '422': description: Unprocessable Entity content: application/json: schema: $ref: '#/components/schemas/UnprocessableEntityError' '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/TooManyRequestsError' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerError' parameters: - name: hookId in: path required: true schema: type: string description: The ID of the webhook to update. Provided as a path parameter. security: - apiKey: [] delete: summary: Delete Hook description: Deletes a webhook based on its ID. This action is irreversible. operationId: hooks.delete tags: - hooks responses: '200': description: Success content: application/json: schema: type: object properties: id: type: string object: type: string const: hook deleted: type: boolean const: true required: - id - object - deleted additionalProperties: false '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/UnauthorizedError' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ForbiddenError' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/NotFoundError' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/ConflictError' '413': description: Payload Too Large content: application/json: schema: $ref: '#/components/schemas/PayloadTooLargeError' '422': description: Unprocessable Entity content: application/json: schema: $ref: '#/components/schemas/UnprocessableEntityError' '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/TooManyRequestsError' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerError' parameters: - name: hookId in: path required: true schema: type: string description: The ID of the webhook to delete. Provided as a path parameter. security: - apiKey: [] components: schemas: HookDetail: type: object properties: id: type: string description: A unique identifier for the webhook. object: type: string const: hook description: Fixed value identifying this object as a webhook. name: type: string description: A user-defined name to label the webhook. events: type: array items: type: string enum: - chat.created - chat.updated - chat.deleted - message.created - message.updated - message.deleted - message.finished description: List of event types this webhook is subscribed to. chatId: description: Optional ID of the chat that this webhook is scoped to. type: string url: type: string description: Target URL that receives event payloads for this webhook. required: - id - object - name - events - url additionalProperties: false description: Full configuration details for a webhook, including its scope and subscription. InternalServerError: type: object properties: error: type: object properties: message: type: string type: type: string const: internal_server_error required: - message - type additionalProperties: false required: - error additionalProperties: false ForbiddenError: type: object properties: error: type: object properties: message: type: string type: type: string const: forbidden_error required: - message - type additionalProperties: false required: - error additionalProperties: false NotFoundError: type: object properties: error: type: object properties: message: type: string type: type: string const: not_found_error required: - message - type additionalProperties: false required: - error additionalProperties: false TooManyRequestsError: type: object properties: error: type: object properties: message: type: string type: type: string const: too_many_requests_error required: - message - type additionalProperties: false required: - error additionalProperties: false UnauthorizedError: type: object properties: error: type: object properties: message: type: string type: type: string const: unauthorized_error required: - message - type additionalProperties: false required: - error additionalProperties: false UnprocessableEntityError: type: object properties: error: type: object properties: message: type: string type: type: string const: unprocessable_entity_error required: - message - type additionalProperties: false required: - error additionalProperties: false PayloadTooLargeError: type: object properties: error: type: object properties: message: type: string type: type: string const: payload_too_large_error required: - message - type additionalProperties: false required: - error additionalProperties: false HookSummary: type: object properties: id: type: string description: A unique identifier for the webhook. object: type: string const: hook description: Fixed value identifying this object as a webhook. name: type: string description: A user-defined name to label the webhook. required: - id - object - name additionalProperties: false description: Summary of a webhook, including its ID and display name. ConflictError: type: object properties: error: type: object properties: message: type: string type: type: string const: conflict_error required: - message - type additionalProperties: false required: - error additionalProperties: false securitySchemes: apiKey: type: apiKey in: header name: Authorization description: Your v0 API key. Get one at https://v0.app/chat/settings/keys externalDocs: description: Find more info here url: https://vercel.com/docs/v0/api