Skip to main content
Meta events are operational events generated by Convoy for specific activities happening within your Convoy project. This allows you to subscribe and listen for events and perform any action based on these events within your own internal systems, providing a seamless headless experience. Convoy uses webhooks to notify you of these events.

Types of event

At the moment, these are the events we currently support with plans to add some more later in the future.
EventDescription
endpoint.createdAn endpoint was created
endpoint.updatedAn endpoint was updated
endpoint.deletedAn endpoint was deleted
eventdelivery.successAn event delivery was successful
eventdelivery.failedAn event delivery failed

Payload Structure

endpoint.created
{
  event_type: "endpoint.created",
  data: {
    uid: "01H3FRSZYKNYWGPVV46RN98PM5",
    title: "testes",
    status: "active",
    secrets: [
      {
        uid: "01H3FRSZYKNYWGPVV46T42NYA8",
        value: "Vuk5LM0uujddIsqO5v_eSuz88",
        created_at: "2023-06-21T21:02:19.73106+01:00",
        deleted_at: null,
        expires_at: null,
        updated_at: "2023-06-21T21:02:19.73106+01:00"
      }
    ],
    owner_id: "582b0124-b0fe-45e0-9063-86877f797647",
    created_at: "2023-06-21T21:02:19.73104+01:00",
    deleted_at: null,
    project_id: "01H28MWP1TQV5AC5QR54BSX8HJ",
    rate_limit: 5000,
    target_url: "https://us.getconvoy.cloud/ingest/GzuS7KiIFPyyFrG5",
    updated_at: "2023-06-21T21:02:19.73104+01:00",
    description: "testing endpoint",
    http_timeout: "10s",
    authentication: null,
    advanced_signatures: false,
    rate_limit_duration: "1m0s"
  }
}

endpoint.updated
{
  event_type: "endpoint.updated",
  data: {
    uid: "01H3FRZ6SX9CDKZTEY6TMQAPWD",
    project_id: "01H28MWP1TQV5AC5QR54BSX8HJ",
    owner_id: "582b0124-b0fe-45e0-9063-86877f797647",
    target_url: "https://webhook.site/202ad8fc-653c-492a-bdaa-0ac2bd34c981",
    title: "endpoint-2",
    secrets: [
      {
        uid: "01H3FRZ6SX9CDKZTEY6V7F2Z5P",
        value: "skl2qo-2JoqAKrwD3tL3YHUt_",
        expires_at: null,
        created_at: "2023-06-21T21:05:10.589879+01:00",
        updated_at: "2023-06-21T21:05:10.589879+01:00",
        deleted_at: null
      }
    ],
    advanced_signatures: false,
    description: "",
    http_timeout: "",
    rate_limit: 5000,
    status: "active",
    rate_limit_duration: "1m0s",
    authentication: null,
    created_at: "2023-06-21T21:05:10.596435+01:00",
    updated_at: "2023-06-29T14:57:42.733584+01:00",
    deleted_at: null
  }
}
endpoint.deleted
{
	"event_type": "endpoint.deleted",
	"data": {
		"uid": "01H28MXEGATHC7TH1J3Y28WJSV",
		"project_id": "01H28MWP1TQV5AC5QR54BSX8HJ",
		"target_url": "https://us.getconvoy.cloud/ingest/GzuS7KiIFPyyFrG5",
		"title": "paystack-prod",
		"secrets": [
			{
				"uid": "01H28MXEGATHC7TH1J3YBR4G85",
				"value": "HZ00wI-b2KMmkRYDeh_9M82q2",
				"expires_at": null,
				"created_at": "2023-06-06T16:23:55.786899+01:00",
				"updated_at": "2023-06-06T16:23:55.786899+01:00",
				"deleted_at": null
			}
		],
		"advanced_signatures": false,
		"description": "",
		"http_timeout": "",
		"rate_limit": 5000,
		"status": "active",
		"rate_limit_duration": "1m0s",
		"authentication": {
			"api_key": {
				"header_value": "",
				"header_name": ""
			}
		},
		"created_at": "2023-06-06T16:23:55.792566+01:00",
		"updated_at": "2023-06-20T15:21:21.376987+01:00",
		"deleted_at": null
	}
}
For eventdelivery.failed, the failure reason is available as data.description (for example Retry limit exceeded). For lower-level network/request errors, data.attempt.error carries the underlying error (for example a timeout, connection refused, DNS, or TLS error), as shown above. data.attempt.error is only present when the request failed before a response was received; when the endpoint returns an HTTP response (for example 400 or 500), data.attempt.http_status is set instead and data.attempt.error is omitted. data.attempt.ip_address is the resolved endpoint address; it is populated once a connection is established (so it is empty on DNS or connection-refused failures, but present on a response timeout like the one above). Both eventdelivery.success and eventdelivery.failed also include delivery timestamps: data.acknowledged_at is when Convoy accepted and queued the delivery (the start of the latency clock), data.attempt.requested_at is when Convoy sent the HTTP request, and data.attempt.responded_at is when the response came back. responded_at is omitted when no response was received (for example a timeout or connection failure), as in the failed example above. Meta events are completely optional and can be turned on under the Project settings page. All you need to do is provide a webhook URL to receive these events, a secret for signing the payload (optional) and the events you would like to subscribe to.
Meta Events Form

Viewing Meta Events

You can also view a list of all your Meta events.
Meta Events Log

Meta Event Signature

We use the secret either provided by you or generated by us to sign the payload using SHA256 hashing algorithm and hex encoding. The value is contained in the X-Convoy-Signature header, and you can use that to validate that the event was sent by Convoy.