---
title: "Create an event"
method: POST
path: "/v1/projects/{projectID}/events"
tags: ["Events"]
---

# Create an event

`POST /v1/projects/{projectID}/events`

This endpoint creates an endpoint event
The 201 body includes uid (the event id). Use GET /events/{eventID} or GET /eventdeliveries?eventId= to follow the send.

## Path parameters

- `projectID` string, required

## Request body

- ModelsCreateEvent
  - `app_id` string — Deprecated but necessary for backward compatibility.
  - `custom_headers` object, nullable — Specifies custom headers you want convoy to add when the event is dispatched to your endpoint
  - `data` object, nullable — Data is an arbitrary JSON value that gets sent as the body of the webhook to the endpoints
  - `endpoint_id` string — Specifies the endpoint to send this event to. Required unless the deprecated app_id is provided.
  - `event_type` string — Event Type is used for filtering and debugging e.g invoice.paid
  - `idempotency_key` string — Specify a key for event deduplication

## Response `201`

Created

- object
  - `message` string
  - `status` boolean
  - `data` ModelsEventQueuedResponse
    - `event_type` string
    - `idempotency_key` string
    - `uid` string — UID is the event id.

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `404` — Not Found

## Changes

- **2026-08-27** (v3) `df004d06c6c2` — 1 breaking, 4 info
  - the `allOf[subschema #2]/data` response's property type/format changed from ``/`` to `object`/`` for status `201`
  - added the optional property `allOf[subschema #2]/data/event_type` to the response with the `201` status
  - added the optional property `allOf[subschema #2]/data/idempotency_key` to the response with the `201` status
  - added the optional property `allOf[subschema #2]/data/uid` to the response with the `201` status
  - …1 more
- **2026-07-20** (v3) `bae289777c91` — 8 breaking, 6 info
  - the response property `allOf[subschema #2]/data` became nullable for the status `201`
  - the response property `allOf[subschema #2]/data` became nullable for the status `400`
  - the response property `allOf[subschema #2]/data` became nullable for the status `401`
  - the response property `allOf[subschema #2]/data` became nullable for the status `404`
  - …10 more
- **2024-07-12** (v3) `59336767e79a` — 1 breaking, 1 info
  - removed the success response with the status `200`
  - added the success response with the status `201`
- …earlier changes not shown

[Full history](https://skmtc.dev/getconvoy/apis/convoy-api-reference/changes/v1/projects/:projectID/events/post.md)

---

[API](https://skmtc.dev/getconvoy/apis/convoy-api-reference.md) · [All operations](https://skmtc.dev/getconvoy/apis/convoy-api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/getconvoy/convoy-api-reference/revisions/df004d06c6c2/schema)
