Vultr Message Center (1.0.0)

Download OpenAPI specification:

Deliveries

Create Delivery

Accepts a delivery request. The service will persist the delivery to the database, then asynchronously call the customer's endpoint via HTTPS POST with an HMAC-SHA256 signature.

The response is 201 with no body — the delivery is queued and will be attempted asynchronously. Use the GET /v1/deliveries/{id} endpoint to check the delivery status.

Authorizations:
API Key
Request Body schema: application/json
required
url
required
string <uri>

The customer's endpoint URL. Must be HTTPS.

event_type
required
string

The type of event that triggered the delivery.

required
object

The JSON payload to send to the customer's endpoint.

secret
required
string

The HMAC secret used to sign the payload. The signature is sent in the X-Vultr-Signature header as sha256=<hex digest>.

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "http_status_code": 422,
  • "message": "url is required",
  • "internal_message": "url is required"
}

Get Delivery Status

Retrieve the status of a delivery by its UUID.

Authorizations:
API Key
path Parameters
id
required
string <uuid>

The UUID of the delivery.

Responses

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "url": "string",
  • "event_type": "string",
  • "payload": { },
  • "status": "pending",
  • "retry_count": 0,
  • "max_retries": 10,
  • "last_response": {
    },
  • "last_error": "string",
  • "next_retry_at": "string",
  • "created_at": "string",
  • "updated_at": "string"
}

Health

Health Check

View the current status of the message center service.

Responses

Response samples

Content type
application/json
{
  • "status": "ok"
}

Queue Consumer

Start Log Queue Consumption

Schedules background consumption of a RabbitMQ queue. Messages are buffered into Redis and flushed to the logs database table when the queue is deleted or an [END_OF_STREAM] sentinel message is received.

Returns 202 Accepted immediately. Actual consumption runs in a background worker process.

Authorizations:
API Key
path Parameters
queue
required
string^[a-zA-Z0-9._-]+$

The RabbitMQ queue name.

Request Body schema: application/json
optional
prefix
string^[a-zA-Z0-9._-]+$

Prefix to tag log entries with. Defaults to the queue name.

Responses

Request samples

Content type
application/json
{
  • "prefix": "log"
}

Response samples

Content type
application/json
{
  • "status": "accepted",
  • "queue": "log_queue",
  • "prefix": "log",
  • "message": "Queue consumption started. Logs will be buffered to Redis and flushed to the database on completion."
}

Stream Queue Messages

Opens a Server-Sent Events (SSE) stream that consumes messages directly from the specified RabbitMQ queue in real-time. Each message is delivered as an SSE message event with the message body in the data field.

The stream stays open until the client disconnects, the queue is deleted, or the idle timeout (default 300s) is reached.

Authorizations:
API Key
path Parameters
queue
required
string^[a-zA-Z0-9._-]+$

The RabbitMQ queue name.

Responses

Response samples

Content type
application/json
{
  • "http_status_code": 422,
  • "message": "url is required",
  • "internal_message": "url is required"
}

Get Queue Stats

Retrieves queue statistics from the RabbitMQ management API, including message counts, consumer count, and idle state.

Authorizations:
API Key
path Parameters
queue
required
string^[a-zA-Z0-9._-]+$

The RabbitMQ queue name.

Responses

Response samples

Content type
application/json
{
  • "queue": "log_queue",
  • "vhost": "message-center-dev",
  • "messages": 0,
  • "messages_ready": 0,
  • "messages_unacknowledged": 0,
  • "consumers": 1,
  • "durable": true,
  • "idle_since": "2026-08-27T05:52:36.510+00:00"
}

Logs

Get Streaming Logs

Retrieve log entries for a given entity. The {prefix} identifies the log type (e.g. order) and {id} is the entity identifier (e.g. the order UUID).

The RabbitMQ queue name follows the convention {prefix}-{id}.

Behaviour:

  • If the background consumer has already flushed the logs to the database, all entries are returned as a single JSON response (status: complete).
  • If the consumer is still buffering messages in Redis, a text/event-stream (SSE) response is returned so the client can read entries in near real-time.
  • If neither Redis nor the database has any data, a 404 is returned.
Authorizations:
API Key
path Parameters
prefix
required
string^[a-zA-Z0-9._-]+$

The log type prefix (e.g. order).

id
required
string^[a-zA-Z0-9._-]+$

The entity identifier (e.g. order UUID). Also used as the queue suffix.

Responses

Response samples

Content type
{
  • "prefix": "order",
  • "id": "550e8400-e29b-41d4-a716-446655440000",
  • "queue": "order-550e8400-e29b-41d4-a716-446655440000",
  • "status": "complete",
  • "count": 42,
  • "logs": [
    ]
}

Log Viewer

Serves an HTML page with an Alpine.js-based log viewer that connects to the SSE stream at /v1/log/{prefix}/{id} and displays log entries in real-time.

path Parameters
prefix
required
string^[a-zA-Z0-9._-]+$

The log type prefix (e.g. order).

id
required
string^[a-zA-Z0-9._-]+$

The entity identifier (e.g. order UUID). Also used as the queue suffix.

Responses

Response samples

Content type
application/json
{
  • "http_status_code": 422,
  • "message": "url is required",
  • "internal_message": "url is required"
}