mirror of
https://github.com/mailscope/kumomta.git
synced 2026-09-22 01:15:31 +00:00
This commit implements a kumomta-specific message transfer protocol that is intended to be used to migrate messages from one kumomta node to another. The transfer is carried out using an HTTP POST request to the destination node's http listener. The request includes the full message metadata and body, in a compressed form. An xfer request can be made via `kcli xfer` (and thus also via an HTTP API endpoint). It works similarly to a rebind operation; you specify the criteria to be used to match scheduled queues, along with the target node for the xfer, and kumomta will find matching queues, drain out the messages, make an adjustment to the metadata to capture current scheduling information, and then place the messages into an xfer queue. The xfer queue has hard-coded scheduling queue configuration of its own, with the base retry interval set to 10 seconds, which should be suitably aggressive for the intended use case. You may apply shaping to affect the number of concurrent requests in a similar way to how TSA shaping is configured. On the receiving side, the incoming xfer sanity check to prohibit trying to xfer to itself. The spool id of the Message is not suitable to be reused verbatim on another node (spool ids include the local mac address and creation timestamp information, as well as a random component), so the receiving side will derive an id that should be suitable for use on that node. The originating node id and spool id will be preserved in metadata to aid in tracing. It is possible for an xfer request to target an existing xfer queue, so that you can correct/update the target in various circumstances. In that situation the messages will be "simply" moved from the source queue to the destination queue. It is possible to cancel an xfer request via `kcli xfer-cancel` (and thus also via an HTTP API endpoint). You specify the target queue, which must be an xfer queue, and it will have its messages drained and the metadata changes that were applied when the xfer was initiated will be reversed, allowing the messages to then be reinserted into their originating queue. refs: https://github.com/KumoCorp/kumomta/issues/311
1690 lines
53 KiB
JSON
1690 lines
53 KiB
JSON
{
|
|
"openapi": "3.0.3",
|
|
"info": {
|
|
"title": "kumod",
|
|
"description": "",
|
|
"license": {
|
|
"name": "Apache-2.0"
|
|
},
|
|
"version": "2025.10.07-5b5145ae"
|
|
},
|
|
"paths": {
|
|
"/api/admin/bounce/v1": {
|
|
"get": {
|
|
"tags": [
|
|
"bounce"
|
|
],
|
|
"summary": "Allows the system operator to list all currently active administrative bounces that have been",
|
|
"description": "configured.",
|
|
"operationId": "bounce_v1_list",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Returned information about current admin bounces",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/BounceV1ListEntry"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"bounce"
|
|
],
|
|
"summary": "Allows the system operator to administratively bounce messages that match",
|
|
"description": "certain criteria, or if no criteria are provided, ALL messages.",
|
|
"operationId": "bounce_v1",
|
|
"requestBody": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/BounceV1Request"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Bounce added successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/BounceV1Response"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"tags": [
|
|
"bounce"
|
|
],
|
|
"summary": "Allows the system operator to delete an administrative bounce entry by its id.",
|
|
"operationId": "bounce_v1_delete",
|
|
"requestBody": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/BounceV1CancelRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Removed the requested bounce id"
|
|
},
|
|
"404": {
|
|
"description": "The requested bounce id is no longer, or never was, valid"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/bump-config-epoch": {
|
|
"post": {
|
|
"tags": [
|
|
"config"
|
|
],
|
|
"summary": "Allows the system operator to trigger a configuration epoch bump,",
|
|
"description": "which causes various configs that are using the Epoch strategy to\nbe re-evaluated by triggering the appropriate callbacks.",
|
|
"operationId": "bump_config_epoch",
|
|
"responses": {
|
|
"200": {
|
|
"description": "bump successful"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/inspect-message/v1": {
|
|
"get": {
|
|
"tags": [
|
|
"inspect"
|
|
],
|
|
"summary": "Retrieve information about a message given its spool id.",
|
|
"operationId": "inspect_v1",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "query",
|
|
"description": "The spool identifier for the message whose information\nis being requested",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SpoolId"
|
|
}
|
|
},
|
|
{
|
|
"name": "want_body",
|
|
"in": "query",
|
|
"description": "If true, return the message body in addition to the\nmetadata",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Obtained message information",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/InspectMessageV1Response"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/inspect-sched-q/v1": {
|
|
"get": {
|
|
"tags": [
|
|
"inspect"
|
|
],
|
|
"summary": "Retrieve information about messages in a scheduled queue.",
|
|
"operationId": "inspect_v1",
|
|
"parameters": [
|
|
{
|
|
"name": "queue_name",
|
|
"in": "query",
|
|
"description": "The name of the scheduled queue",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "want_body",
|
|
"in": "query",
|
|
"description": "If true, return the message body in addition to the\nmetadata",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"description": "Return up to `limit` messages in the queue sample.\nDepending on the strategy configured for the queue,\nmessages may not be directly reachable via this endpoint.\nIf no limit is provided, all messages in the queue will\nbe sampled.",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"nullable": true,
|
|
"minimum": 0
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Obtained queue information",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/InspectQueueV1Response"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/ready-q-states/v1": {
|
|
"get": {
|
|
"tags": [
|
|
"inspect"
|
|
],
|
|
"summary": "Retrieve information about the states that apply to a set of",
|
|
"description": "ready queues, or all queues if no specific queues were named\nin the request.",
|
|
"operationId": "readyq_states",
|
|
"parameters": [
|
|
{
|
|
"name": "queues",
|
|
"in": "query",
|
|
"description": "Which queues to request. If empty, request all queue states.",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Obtained state information",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ReadyQueueStateResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/rebind/v1": {
|
|
"post": {
|
|
"tags": [
|
|
"rebind"
|
|
],
|
|
"summary": "Allows the system operator to administratively rebind messages.",
|
|
"description": "Rebinding can target queues that match\ncertain criteria, or if no criteria are provided, ALL queues.\nRebinding is moving a message from one scheduled queue into another.\nQueue selection is based upon the envelope recipient and message\nmetadata as described in <https://docs.kumomta.com/reference/queues/>",
|
|
"operationId": "rebind_v1",
|
|
"requestBody": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RebindV1Request"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Rebind added successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RebindV1Response"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/set_diagnostic_log_filter/v1": {
|
|
"post": {
|
|
"tags": [
|
|
"logging"
|
|
],
|
|
"summary": "Changes the diagnostic log filter dynamically.",
|
|
"description": "See <https://docs.kumomta.com/reference/kumo/set_diagnostic_log_filter/>\nfor more information on diagnostic log filters.",
|
|
"operationId": "set_diagnostic_log_filter_v1",
|
|
"requestBody": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SetDiagnosticFilterRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Diagnostic level set successfully"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/suspend-ready-q/v1": {
|
|
"get": {
|
|
"tags": [
|
|
"suspend"
|
|
],
|
|
"summary": "List the active ready-queue suspensions",
|
|
"operationId": "list",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Suspended",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SuspendReadyQueueV1ListEntry"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"suspend"
|
|
],
|
|
"summary": "Define a suspension for a ready queue",
|
|
"operationId": "suspend",
|
|
"requestBody": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SuspendReadyQueueV1Request"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Suspended",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SuspendV1Response"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"tags": [
|
|
"suspend"
|
|
],
|
|
"summary": "Remove a ready-queue suspension",
|
|
"operationId": "delete",
|
|
"requestBody": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SuspendV1CancelRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Removed the suspension"
|
|
},
|
|
"404": {
|
|
"description": "Suspension either expired or was never valid"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/suspend/v1": {
|
|
"get": {
|
|
"tags": [
|
|
"suspend"
|
|
],
|
|
"summary": "List the active scheduled-queue suspensions",
|
|
"operationId": "list",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Suspended",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SuspendV1ListEntry"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"suspend"
|
|
],
|
|
"summary": "Define a suspension for a scheduled queue",
|
|
"operationId": "suspend",
|
|
"requestBody": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SuspendV1Request"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Suspended",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SuspendV1Response"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"tags": [
|
|
"suspend"
|
|
],
|
|
"summary": "Remove a scheduled-queue suspension",
|
|
"operationId": "delete",
|
|
"requestBody": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SuspendV1CancelRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Removed the suspension"
|
|
},
|
|
"404": {
|
|
"description": "Suspension either expired or was never valid"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/xfer/cancel/v1": {
|
|
"post": {
|
|
"tags": [
|
|
"xfer"
|
|
],
|
|
"summary": "Allows the system operator to stop a message transfer that was",
|
|
"description": "previously initiated via the `/api/admin/xfer/v1` API endpoint.\nThe cancellation works by walking the xfer scheduled queue,\nreversing the metadata changes made as part of setting up the\nxfer (to restore the original scheduling information) and then\nre-inserting the message into an appropriate scheduled queue.\n\nThe cancellation is \"instantaneous\" in the sense that it applies\njust once to the specified xfer scheduled queue. Any other messages\nthat are in-flight or imminently about to be reinserted into\nthat scheduled queue will not be considered, so you may need\nto trigger the cancellation a few times over short time span\nto ensure that all messages are taken out of the xfer queue.\n\nCancellation requests always complete asynchronously because\nthey may operate on very large quantities of messages, and it\nis infeasible to wait for completion in the context of\na single HTTP request.",
|
|
"operationId": "xfer_cancel_v1",
|
|
"requestBody": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/XferCancelV1Request"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Xfer added successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/XferV1Response"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/xfer/v1": {
|
|
"post": {
|
|
"tags": [
|
|
"xfer"
|
|
],
|
|
"summary": "Allows the system operator to transfer messages from the current",
|
|
"description": "node to some other target node.\nThe transfer (xfer) can target queues that match\ncertain criteria, or if no criteria are provided, ALL queues.\nQueue selection is based upon the envelope recipient and message\nmetadata as described in <https://docs.kumomta.com/reference/queues/>.\nMessages in the selected queues will be moved into an xfer queue\nwhose name is based on the target specified by the transfer request.",
|
|
"operationId": "xfer_v1",
|
|
"requestBody": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/XferV1Request"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Xfer added successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/XferV1Response"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/check-liveness/v1": {
|
|
"get": {
|
|
"tags": [
|
|
"liveness"
|
|
],
|
|
"summary": "Useful for load balancers to determine when service is available",
|
|
"description": "and ready to receive messages",
|
|
"operationId": "check_liveness_v1",
|
|
"responses": {
|
|
"200": {
|
|
"description": "ready to accept messages"
|
|
},
|
|
"503": {
|
|
"description": "service is not currently available"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/inject/v1": {
|
|
"post": {
|
|
"tags": [
|
|
"inject"
|
|
],
|
|
"summary": "Inject a message using a given message body, with template expansion,",
|
|
"description": "to a list of recipients.",
|
|
"operationId": "inject_v1",
|
|
"requestBody": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/InjectV1Request"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Message(s) injected successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/InjectV1Response"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/xfer/inject/v1": {
|
|
"post": {
|
|
"tags": [
|
|
"xfer"
|
|
],
|
|
"summary": "Performs a message transfer.",
|
|
"description": "This is considered to be an internal API and should not be\ntargeted by external consumers.",
|
|
"operationId": "inject_xfer_v1",
|
|
"requestBody": {
|
|
"description": "",
|
|
"content": {
|
|
"application/octet-stream": {
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "binary"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Message transferred successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/XferResponseV1"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"components": {
|
|
"schemas": {
|
|
"Attachment": {
|
|
"type": "object",
|
|
"required": [
|
|
"data",
|
|
"content_type"
|
|
],
|
|
"properties": {
|
|
"base64": {
|
|
"type": "boolean",
|
|
"description": "If true, the `data` field must be encoded as base64"
|
|
},
|
|
"content_id": {
|
|
"type": "string",
|
|
"description": "Set the `Content-ID` header for this attachment.\nThis is used in multipart/related messages to\nembed inline images in text/html parts.",
|
|
"nullable": true
|
|
},
|
|
"content_type": {
|
|
"type": "string",
|
|
"description": "The MIME `Content-Type` header that should be\nset for this attachment."
|
|
},
|
|
"data": {
|
|
"type": "string",
|
|
"description": "The content of the payload.\nThis is interpreted as UTF-8 text unless the\n`base64` field is set to `true`."
|
|
},
|
|
"file_name": {
|
|
"type": "string",
|
|
"description": "The the preferred filename for the attachment",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"BounceV1CancelRequest": {
|
|
"type": "object",
|
|
"required": [
|
|
"id"
|
|
],
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
},
|
|
"BounceV1ListEntry": {
|
|
"type": "object",
|
|
"required": [
|
|
"id",
|
|
"reason",
|
|
"duration",
|
|
"bounced",
|
|
"total_bounced"
|
|
],
|
|
"properties": {
|
|
"bounced": {
|
|
"type": "object",
|
|
"description": "A map of queue name to number of bounced messages that\nwere processed by this entry since it was created.",
|
|
"additionalProperties": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"example": {
|
|
"gmail.com": 200,
|
|
"yahoo.com": 100
|
|
}
|
|
},
|
|
"campaign": {
|
|
"type": "string",
|
|
"description": "The campaign field of the original request, if any.",
|
|
"nullable": true
|
|
},
|
|
"domain": {
|
|
"type": "string",
|
|
"description": "The domain field of the original request, if any.",
|
|
"nullable": true
|
|
},
|
|
"duration": {
|
|
"type": "string",
|
|
"description": "The time remaining until this entry expires and is automatically\nremoved."
|
|
},
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"description": "The id of this bounce rule. Corresponds to the `id` field\nreturned by the originating request that set up the bounce,\nand can be used to identify this particular entry if you\nwish to delete it later.",
|
|
"example": "552016f1-08e7-4e90-9da3-fd5c25acd069"
|
|
},
|
|
"reason": {
|
|
"type": "string",
|
|
"description": "The reason field of the original request"
|
|
},
|
|
"routing_domain": {
|
|
"type": "string",
|
|
"description": "The routing_domain field of the original request, if any.",
|
|
"nullable": true
|
|
},
|
|
"tenant": {
|
|
"type": "string",
|
|
"description": "The tenant field of the original request, if any.",
|
|
"nullable": true
|
|
},
|
|
"total_bounced": {
|
|
"type": "integer",
|
|
"description": "The sum of the number of bounced messages reported by\nthe `bounced` field.",
|
|
"minimum": 0
|
|
}
|
|
}
|
|
},
|
|
"BounceV1Request": {
|
|
"type": "object",
|
|
"description": "Describes which messages should be bounced.\nThe criteria apply to the scheduled queue associated\nwith a given message.",
|
|
"required": [
|
|
"reason"
|
|
],
|
|
"properties": {
|
|
"campaign": {
|
|
"type": "string",
|
|
"description": "The campaign name to match. If omitted, any campaign will match.",
|
|
"nullable": true
|
|
},
|
|
"domain": {
|
|
"type": "string",
|
|
"description": "The domain name to match. If omitted, any domain will match.",
|
|
"example": "example.com",
|
|
"nullable": true
|
|
},
|
|
"duration": {
|
|
"type": "string",
|
|
"description": "Defaults to \"5m\". Specifies how long this bounce directive remains active.\nWhile active, newly injected messages that match the bounce criteria\nwill also be bounced.",
|
|
"example": "20m",
|
|
"nullable": true
|
|
},
|
|
"expires": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/DateTime"
|
|
}
|
|
],
|
|
"nullable": true
|
|
},
|
|
"queue_names": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "If present, queue_names takes precedence over `campaign`,\n`tenant`, and `domain` and specifies the exact set of\nscheduled queue names to which the bounce applies."
|
|
},
|
|
"reason": {
|
|
"type": "string",
|
|
"description": "Reason to log in the delivery log. Each matching message will be bounced\nwith an AdminBounce record unless you suppress logging.\nThe reason will also be shown in the list of currently active admin\nbounces.",
|
|
"example": "Cleaning up a bad send"
|
|
},
|
|
"routing_domain": {
|
|
"type": "string",
|
|
"description": "The routing_domain name to match. If omitted, any routing_domain will match.",
|
|
"nullable": true
|
|
},
|
|
"suppress_logging": {
|
|
"type": "boolean",
|
|
"description": "If true, do not generate AdminBounce delivery logs for matching\nmessages."
|
|
},
|
|
"tenant": {
|
|
"type": "string",
|
|
"description": "The tenant to match. If omitted, any tenant will match.",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"BounceV1Response": {
|
|
"type": "object",
|
|
"required": [
|
|
"id",
|
|
"bounced",
|
|
"total_bounced"
|
|
],
|
|
"properties": {
|
|
"bounced": {
|
|
"type": "object",
|
|
"description": "Deprecated: this field is no longer populated, as bounces\nare now always asynchronous. In earlier versions the following\napplies:\n\nA map of queue name to number of bounced messages that\nwere processed as part of the initial sweep.\nAdditional bounces may be generated if/when other messages\nthat match the rule are discovered, but those obviously\ncannot be reported in the context of the initial request.",
|
|
"additionalProperties": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"deprecated": true,
|
|
"example": {
|
|
"gmail.com": 200,
|
|
"yahoo.com": 100
|
|
}
|
|
},
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"description": "The id of the bounce rule that was registered.\nThis can be used later to delete the rule if desired.",
|
|
"example": "552016f1-08e7-4e90-9da3-fd5c25acd069"
|
|
},
|
|
"total_bounced": {
|
|
"type": "integer",
|
|
"description": "Deprecated: this field is no longer populated, as bounces are\nnow always asynchronous. In earlier versions the following applies:\n\nThe sum of the number of bounced messages reported by\nthe `bounced` field.",
|
|
"deprecated": true,
|
|
"example": 300,
|
|
"minimum": 0
|
|
}
|
|
}
|
|
},
|
|
"Content": {
|
|
"oneOf": [
|
|
{
|
|
"type": "string",
|
|
"description": "A complete MIME message string"
|
|
},
|
|
{
|
|
"type": "object",
|
|
"description": "Describe the MIME structure to be created",
|
|
"properties": {
|
|
"attachments": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/Attachment"
|
|
},
|
|
"description": "Optional list of attachments"
|
|
},
|
|
"from": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/FromHeader"
|
|
}
|
|
],
|
|
"nullable": true
|
|
},
|
|
"headers": {
|
|
"type": "object",
|
|
"description": "Optional map of headers to include in the message.\nThis is a map of header name to header value",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
},
|
|
"example": {
|
|
"X-Tenant": "MyTenant"
|
|
}
|
|
},
|
|
"html_body": {
|
|
"type": "string",
|
|
"description": "If set, will be used to create a text/html part",
|
|
"nullable": true
|
|
},
|
|
"reply_to": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/FromHeader"
|
|
}
|
|
],
|
|
"nullable": true
|
|
},
|
|
"subject": {
|
|
"type": "string",
|
|
"description": "Set the Subject: header",
|
|
"nullable": true
|
|
},
|
|
"text_body": {
|
|
"type": "string",
|
|
"description": "If set, will be used to create a text/plain part",
|
|
"nullable": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"description": "The message content.\nCan either be a fully formed MIME message, or a json\nobject describing the MIME structure that should be created."
|
|
},
|
|
"FromHeader": {
|
|
"type": "object",
|
|
"required": [
|
|
"email"
|
|
],
|
|
"properties": {
|
|
"email": {
|
|
"type": "string",
|
|
"description": "The email address of the sender",
|
|
"example": "sales@sender-example.com"
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"description": "The displayable name of the sender",
|
|
"example": "Sales",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"Header": {
|
|
"oneOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "",
|
|
"maxItems": 2,
|
|
"minItems": 2
|
|
}
|
|
],
|
|
"description": "An email header."
|
|
},
|
|
"InjectV1Request": {
|
|
"type": "object",
|
|
"required": [
|
|
"envelope_sender",
|
|
"recipients",
|
|
"content"
|
|
],
|
|
"properties": {
|
|
"content": {
|
|
"$ref": "#/components/schemas/Content"
|
|
},
|
|
"deferred_generation": {
|
|
"type": "boolean",
|
|
"description": "When set to true, the injection request will be queued\nand the actual generation and substitution will happen\nasynchronously with respect to the injection request."
|
|
},
|
|
"deferred_spool": {
|
|
"type": "boolean",
|
|
"description": "When set to true, the message will not be written to\nthe spool until it encounters its first transient failure.\nThis can improve injection rate but introduces the risk\nof loss of accountability for the message if the system\nwere to crash before the message is delivered or written\nto spool, so use with caution!"
|
|
},
|
|
"envelope_sender": {
|
|
"type": "string",
|
|
"description": "Specify the envelope sender that will be sent in the\nMAIL FROM portion of SMTP.",
|
|
"example": "some.id@bounces.sender-example.com"
|
|
},
|
|
"recipients": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/Recipient"
|
|
},
|
|
"description": "The list of recipients"
|
|
},
|
|
"substitutions": {
|
|
"type": "object",
|
|
"description": "When using templating, this is the map of placeholder\nname to replacement value that should be used by\nthe templating engine. This map applies to all\nrecipients, with the per-recipient substitutions\ntaking precedence.",
|
|
"additionalProperties": {},
|
|
"example": {
|
|
"campaign_title": "Fall Campaign"
|
|
}
|
|
},
|
|
"trace_headers": {
|
|
"$ref": "#/components/schemas/HttpTraceHeaders"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"InjectV1Response": {
|
|
"type": "object",
|
|
"required": [
|
|
"success_count",
|
|
"fail_count",
|
|
"failed_recipients",
|
|
"errors"
|
|
],
|
|
"properties": {
|
|
"errors": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "The list of error messages"
|
|
},
|
|
"fail_count": {
|
|
"type": "integer",
|
|
"description": "The number of messages that failed to inject",
|
|
"minimum": 0
|
|
},
|
|
"failed_recipients": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "The list of failed recipients"
|
|
},
|
|
"success_count": {
|
|
"type": "integer",
|
|
"description": "The number of messages that were injected successfully",
|
|
"minimum": 0
|
|
}
|
|
}
|
|
},
|
|
"InspectMessageV1Response": {
|
|
"type": "object",
|
|
"required": [
|
|
"id",
|
|
"message"
|
|
],
|
|
"properties": {
|
|
"id": {
|
|
"$ref": "#/components/schemas/SpoolId"
|
|
},
|
|
"message": {
|
|
"$ref": "#/components/schemas/MessageInformation"
|
|
}
|
|
}
|
|
},
|
|
"MessageInformation": {
|
|
"type": "object",
|
|
"required": [
|
|
"sender",
|
|
"recipient",
|
|
"meta"
|
|
],
|
|
"properties": {
|
|
"data": {
|
|
"type": "string",
|
|
"description": "If `want_body` was set in the original request,\nholds the message body",
|
|
"nullable": true
|
|
},
|
|
"due": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/DateTime"
|
|
}
|
|
],
|
|
"nullable": true
|
|
},
|
|
"meta": {
|
|
"description": "The message metadata"
|
|
},
|
|
"num_attempts": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"nullable": true,
|
|
"minimum": 0
|
|
},
|
|
"recipient": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "The envelope-to address",
|
|
"example": "recipient@example.com"
|
|
},
|
|
"scheduling": {
|
|
"nullable": true
|
|
},
|
|
"sender": {
|
|
"type": "string",
|
|
"description": "The envelope sender",
|
|
"example": "sender@sender.example.com"
|
|
}
|
|
}
|
|
},
|
|
"QueueState": {
|
|
"type": "object",
|
|
"required": [
|
|
"context",
|
|
"since"
|
|
],
|
|
"properties": {
|
|
"context": {
|
|
"type": "string"
|
|
},
|
|
"since": {
|
|
"$ref": "#/components/schemas/DateTime"
|
|
}
|
|
}
|
|
},
|
|
"ReadyQueueStateRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"queues": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Which queues to request. If empty, request all queue states."
|
|
}
|
|
}
|
|
},
|
|
"ReadyQueueStateResponse": {
|
|
"type": "object",
|
|
"required": [
|
|
"states_by_ready_queue"
|
|
],
|
|
"properties": {
|
|
"states_by_ready_queue": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"$ref": "#/components/schemas/QueueState"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"RebindV1Request": {
|
|
"type": "object",
|
|
"description": "Describes which messages should be rebound.\nThe criteria apply to the scheduled queue associated\nwith a given message.",
|
|
"required": [
|
|
"reason",
|
|
"data"
|
|
],
|
|
"properties": {
|
|
"always_flush": {
|
|
"type": "boolean",
|
|
"description": "If true, make all matched messages immediately eligible for\ndelivery. When false, (the default), only messages whose\nqueue has changed will be made immediately eligible."
|
|
},
|
|
"campaign": {
|
|
"type": "string",
|
|
"description": "The campaign name to match. If omitted, any campaign will match.",
|
|
"nullable": true
|
|
},
|
|
"data": {
|
|
"type": "object",
|
|
"description": "The data, a json object with string keys AND values to pass to the\nrebind operation",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"domain": {
|
|
"type": "string",
|
|
"description": "The domain name to match. If omitted, any domain will match.",
|
|
"example": "example.com",
|
|
"nullable": true
|
|
},
|
|
"reason": {
|
|
"type": "string",
|
|
"description": "Reason to log in the delivery log. Each matching message will log\nwith an AdminRebind record unless you suppress logging.",
|
|
"example": "Cleaning up a bad send"
|
|
},
|
|
"routing_domain": {
|
|
"type": "string",
|
|
"description": "The routing_domain name to match. If omitted, any routing_domain will match.",
|
|
"nullable": true
|
|
},
|
|
"suppress_logging": {
|
|
"type": "boolean",
|
|
"description": "If true, do not generate AdminRebind delivery logs for matching\nmessages."
|
|
},
|
|
"tenant": {
|
|
"type": "string",
|
|
"description": "The tenant to match. If omitted, any tenant will match.",
|
|
"nullable": true
|
|
},
|
|
"trigger_rebind_event": {
|
|
"type": "boolean",
|
|
"description": "If true, a `rebind` event will be triggered and passed each\nmessage and the supplied data.\nIf false, no event will be triggered and each field in data\nwill be applied to the msg metadata, overwriting any previous\nvalue for that key."
|
|
}
|
|
}
|
|
},
|
|
"RebindV1Response": {
|
|
"type": "object"
|
|
},
|
|
"Recipient": {
|
|
"type": "object",
|
|
"required": [
|
|
"email"
|
|
],
|
|
"properties": {
|
|
"email": {
|
|
"type": "string",
|
|
"description": "The email address of the recipient",
|
|
"example": "john.smith@mailbox-example.com"
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"description": "The displayable name of the recipient",
|
|
"example": "John Smith",
|
|
"nullable": true
|
|
},
|
|
"substitutions": {
|
|
"type": "object",
|
|
"description": "When using templating, this is the map of placeholder\nname to replacement value that should be used by the\ntemplating engine when processing just this recipient.\nNote that `name` is implicitly set from the `name`\nfield, so you do not need to duplicate it here.",
|
|
"additionalProperties": {},
|
|
"example": {
|
|
"age": 42,
|
|
"gender": "male"
|
|
}
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"SetDiagnosticFilterRequest": {
|
|
"type": "object",
|
|
"required": [
|
|
"filter"
|
|
],
|
|
"properties": {
|
|
"filter": {
|
|
"type": "string",
|
|
"description": "The diagnostic filter spec to use",
|
|
"example": "kumod=trace"
|
|
}
|
|
}
|
|
},
|
|
"SpoolId": {
|
|
"type": "string",
|
|
"description": "Identifies a message within the spool of its host node.",
|
|
"example": "d7ef132b5d7711eea8c8000c29c33806"
|
|
},
|
|
"SuspendReadyQueueV1ListEntry": {
|
|
"type": "object",
|
|
"required": [
|
|
"id",
|
|
"name",
|
|
"reason",
|
|
"duration",
|
|
"expires"
|
|
],
|
|
"properties": {
|
|
"duration": {
|
|
"type": "string",
|
|
"description": "how long until this suspension expires and is automatically removed"
|
|
},
|
|
"expires": {
|
|
"$ref": "#/components/schemas/DateTime"
|
|
},
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"description": "The id for the suspension. Can be used to cancel the suspension."
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"description": "The name of the ready queue that is suspended"
|
|
},
|
|
"reason": {
|
|
"type": "string",
|
|
"description": "The reason for the suspension",
|
|
"example": "pause while working on resolving a block with the destination postmaster"
|
|
}
|
|
}
|
|
},
|
|
"SuspendReadyQueueV1Request": {
|
|
"type": "object",
|
|
"required": [
|
|
"name",
|
|
"reason"
|
|
],
|
|
"properties": {
|
|
"duration": {
|
|
"type": "string",
|
|
"description": "Specifies how long this suspension remains active.",
|
|
"nullable": true
|
|
},
|
|
"expires": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/DateTime"
|
|
}
|
|
],
|
|
"nullable": true
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"description": "The name of the ready queue that should be suspended"
|
|
},
|
|
"reason": {
|
|
"type": "string",
|
|
"description": "The reason for the suspension",
|
|
"example": "pause while working on resolving a block with the destination postmaster"
|
|
}
|
|
}
|
|
},
|
|
"SuspendV1CancelRequest": {
|
|
"type": "object",
|
|
"required": [
|
|
"id"
|
|
],
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"description": "The id of the suspension to cancel"
|
|
}
|
|
}
|
|
},
|
|
"SuspendV1ListEntry": {
|
|
"type": "object",
|
|
"required": [
|
|
"id",
|
|
"reason",
|
|
"duration"
|
|
],
|
|
"properties": {
|
|
"campaign": {
|
|
"type": "string",
|
|
"description": "The campaign name to match. If omitted, any campaign will match.",
|
|
"nullable": true
|
|
},
|
|
"domain": {
|
|
"type": "string",
|
|
"description": "The domain name to match. If omitted, any domain will match.",
|
|
"nullable": true
|
|
},
|
|
"duration": {
|
|
"type": "string",
|
|
"description": "Specifies how long this suspension remains active."
|
|
},
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"description": "The id of the suspension. This can be used later to cancel\nthe suspension."
|
|
},
|
|
"reason": {
|
|
"type": "string",
|
|
"description": "The reason for the suspension",
|
|
"example": "pause while working on resolving a deliverability issue"
|
|
},
|
|
"tenant": {
|
|
"type": "string",
|
|
"description": "The tenant name to match. If omitted, any tenant will match.",
|
|
"nullable": true
|
|
}
|
|
}
|
|
},
|
|
"SuspendV1Request": {
|
|
"type": "object",
|
|
"required": [
|
|
"reason"
|
|
],
|
|
"properties": {
|
|
"campaign": {
|
|
"type": "string",
|
|
"description": "The campaign name to match. If omitted, any campaign will match.",
|
|
"nullable": true
|
|
},
|
|
"domain": {
|
|
"type": "string",
|
|
"description": "The domain name to match. If omitted, any domain will match.",
|
|
"nullable": true
|
|
},
|
|
"duration": {
|
|
"type": "string",
|
|
"description": "Specifies how long this suspension remains active.",
|
|
"nullable": true
|
|
},
|
|
"expires": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/DateTime"
|
|
}
|
|
],
|
|
"nullable": true
|
|
},
|
|
"queue_names": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "If present, queue_names takes precedence over `campaign`,\n`tenant`, and `domain` and specifies the exact set of\nscheduled queue names to which the suspension applies."
|
|
},
|
|
"reason": {
|
|
"type": "string",
|
|
"description": "The reason for the suspension",
|
|
"example": "pause while working on resolving a block with the destination postmaster"
|
|
},
|
|
"tenant": {
|
|
"type": "string",
|
|
"description": "The tenant name to match. If omitted, any tenant will match.",
|
|
"nullable": true
|
|
}
|
|
}
|
|
},
|
|
"SuspendV1Response": {
|
|
"type": "object",
|
|
"required": [
|
|
"id"
|
|
],
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"description": "The id of the suspension. This can be used later to cancel\nthe suspension."
|
|
}
|
|
}
|
|
},
|
|
"TraceHeaders": {
|
|
"type": "object",
|
|
"properties": {
|
|
"header_name": {
|
|
"type": "string",
|
|
"description": "The name of the supplemental trace header"
|
|
},
|
|
"include_meta_names": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "List of meta keys that should be included in the\nsupplemental header"
|
|
},
|
|
"received_header": {
|
|
"type": "boolean",
|
|
"description": "Whether to add a Received: header"
|
|
},
|
|
"supplemental_header": {
|
|
"type": "boolean",
|
|
"description": "Whether to add a supplemental trace header to encode\nadditional metadata"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"XferCancelV1Request": {
|
|
"type": "object",
|
|
"required": [
|
|
"queue_name",
|
|
"reason"
|
|
],
|
|
"properties": {
|
|
"queue_name": {
|
|
"type": "string",
|
|
"description": "The name of the xfer scheduled queue"
|
|
},
|
|
"reason": {
|
|
"type": "string",
|
|
"description": "Reason to log in the delivery log. Each matching message will log\nwith an AdminRebind record to indicate that it was moved from\nits containing queue, and this reason will be included in that record.",
|
|
"example": "Scaling down"
|
|
}
|
|
}
|
|
},
|
|
"XferCancelV1Response": {
|
|
"type": "object"
|
|
},
|
|
"XferV1Request": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/XferProtocol"
|
|
},
|
|
{
|
|
"type": "object",
|
|
"required": [
|
|
"reason"
|
|
],
|
|
"properties": {
|
|
"campaign": {
|
|
"type": "string",
|
|
"description": "The campaign name to match. If omitted, any campaign will match.",
|
|
"nullable": true
|
|
},
|
|
"domain": {
|
|
"type": "string",
|
|
"description": "The domain name to match. If omitted, any domain will match.",
|
|
"example": "example.com",
|
|
"nullable": true
|
|
},
|
|
"queue_names": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "If present, queue_names takes precedence over `campaign`,\n`tenant`, and `domain` and specifies the exact set of\nscheduled queue names to which the xfer applies."
|
|
},
|
|
"reason": {
|
|
"type": "string",
|
|
"description": "Reason to log in the delivery log. Each matching message will log\nwith an AdminRebind record to indicate that it was moved from\nits containing queue, and this reason will be included in that record.",
|
|
"example": "Scaling down"
|
|
},
|
|
"routing_domain": {
|
|
"type": "string",
|
|
"description": "The routing_domain name to match. If omitted, any routing_domain will match.",
|
|
"nullable": true
|
|
},
|
|
"tenant": {
|
|
"type": "string",
|
|
"description": "The tenant to match. If omitted, any tenant will match.",
|
|
"nullable": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"description": "Describes which messages should be transferred to another\nkumomta node.\nThe criteria apply to the scheduled queue associated\nwith a given message."
|
|
},
|
|
"XferV1Response": {
|
|
"type": "object"
|
|
}
|
|
},
|
|
"responses": {
|
|
"BounceV1Response": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"required": [
|
|
"id",
|
|
"bounced",
|
|
"total_bounced"
|
|
],
|
|
"properties": {
|
|
"bounced": {
|
|
"type": "object",
|
|
"description": "Deprecated: this field is no longer populated, as bounces\nare now always asynchronous. In earlier versions the following\napplies:\n\nA map of queue name to number of bounced messages that\nwere processed as part of the initial sweep.\nAdditional bounces may be generated if/when other messages\nthat match the rule are discovered, but those obviously\ncannot be reported in the context of the initial request.",
|
|
"additionalProperties": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"deprecated": true,
|
|
"example": {
|
|
"gmail.com": 200,
|
|
"yahoo.com": 100
|
|
}
|
|
},
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"description": "The id of the bounce rule that was registered.\nThis can be used later to delete the rule if desired.",
|
|
"example": "552016f1-08e7-4e90-9da3-fd5c25acd069"
|
|
},
|
|
"total_bounced": {
|
|
"type": "integer",
|
|
"description": "Deprecated: this field is no longer populated, as bounces are\nnow always asynchronous. In earlier versions the following applies:\n\nThe sum of the number of bounced messages reported by\nthe `bounced` field.",
|
|
"deprecated": true,
|
|
"example": 300,
|
|
"minimum": 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"InjectV1Response": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"required": [
|
|
"success_count",
|
|
"fail_count",
|
|
"failed_recipients",
|
|
"errors"
|
|
],
|
|
"properties": {
|
|
"errors": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "The list of error messages"
|
|
},
|
|
"fail_count": {
|
|
"type": "integer",
|
|
"description": "The number of messages that failed to inject",
|
|
"minimum": 0
|
|
},
|
|
"failed_recipients": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "The list of failed recipients"
|
|
},
|
|
"success_count": {
|
|
"type": "integer",
|
|
"description": "The number of messages that were injected successfully",
|
|
"minimum": 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"InspectMessageV1Response": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"required": [
|
|
"id",
|
|
"message"
|
|
],
|
|
"properties": {
|
|
"id": {
|
|
"$ref": "#/components/schemas/SpoolId"
|
|
},
|
|
"message": {
|
|
"$ref": "#/components/schemas/MessageInformation"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"InspectQueueV1Response": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"required": [
|
|
"queue_name",
|
|
"messages",
|
|
"num_scheduled",
|
|
"queue_config",
|
|
"delayed_metric",
|
|
"now",
|
|
"last_changed"
|
|
],
|
|
"properties": {
|
|
"delayed_metric": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"last_changed": {
|
|
"$ref": "#/components/schemas/DateTime"
|
|
},
|
|
"messages": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/InspectMessageV1Response"
|
|
}
|
|
},
|
|
"now": {
|
|
"$ref": "#/components/schemas/DateTime"
|
|
},
|
|
"num_scheduled": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"queue_config": {},
|
|
"queue_name": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"ReadyQueueStateResponse": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"required": [
|
|
"states_by_ready_queue"
|
|
],
|
|
"properties": {
|
|
"states_by_ready_queue": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"$ref": "#/components/schemas/QueueState"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"XferCancelV1Response": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"XferV1Response": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"securitySchemes": {
|
|
"basic_auth": {
|
|
"type": "http",
|
|
"scheme": "basic"
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"basic_auth": [
|
|
""
|
|
]
|
|
}
|
|
]
|
|
}
|