Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

API Reference

The Content Manager plugin exposes a REST API under /_plugins/_content_manager/. All endpoints require authentication.


Subscription Management

Get CTI Subscription

Retrieves the current CTI subscription token.

Request

  • Method: GET
  • Path: /_plugins/_content_manager/subscription

Example Request

curl -sk -u admin:admin \
  "https://192.168.56.6:9200/_plugins/_content_manager/subscription"

Example Response (subscription exists)

{
  "access_token": "AYjcyMzY3ZDhiNmJkNTY",
  "token_type": "Bearer"
}

Example Response (no subscription)

{
  "message": "Token not found",
  "status": 404
}

Status Codes

CodeDescription
200Subscription token returned
404No subscription registered

Register CTI Subscription

Registers a new CTI subscription using a device code obtained from the Wazuh CTI Console.

Request

  • Method: POST
  • Path: /_plugins/_content_manager/subscription

Request Body

FieldTypeRequiredDescription
device_codeStringYesDevice authorization code from CTI Console
client_idStringYesOAuth client identifier
expires_inIntegerYesToken expiration time in seconds
intervalIntegerYesPolling interval in seconds

Example Request

curl -sk -u admin:admin -X POST \
  "https://192.168.56.6:9200/_plugins/_content_manager/subscription" \
  -H 'Content-Type: application/json' \
  -d '{
    "device_code": "GmRhmhcxhwAzkoEqiMEg_DnyEysNkuNhszIySk9eS",
    "client_id": "a17c21ed",
    "expires_in": 1800,
    "interval": 5
  }'

Example Response

{
  "message": "Subscription created successfully",
  "status": 201
}

Status Codes

CodeDescription
201Subscription registered successfully
400Missing required fields (device_code, client_id, expires_in, interval)
401Unauthorized — endpoint accessed by unexpected user
500Internal error

Delete CTI Subscription

Removes the current CTI subscription token and revokes all associated credentials.

Request

  • Method: DELETE
  • Path: /_plugins/_content_manager/subscription

Example Request

curl -sk -u admin:admin -X DELETE \
  "https://192.168.56.6:9200/_plugins/_content_manager/subscription"

Example Response (success)

{
  "message": "Subscription deleted successfully",
  "status": 200
}

Example Response (no subscription)

{
  "message": "Token not found",
  "status": 404
}

Status Codes

CodeDescription
200Subscription deleted
404No subscription to delete

Content Updates

Trigger Manual Sync

Triggers an immediate content synchronization with the CTI API. Requires a valid subscription.

Request

  • Method: POST
  • Path: /_plugins/_content_manager/update

Example Request

curl -sk -u admin:admin -X POST \
  "https://192.168.56.6:9200/_plugins/_content_manager/update"

Example Response (success)

{
  "message": "Content update triggered successfully",
  "status": 200
}

Example Response (no subscription)

{
  "message": "Token not found. Please create a subscription before attempting to update.",
  "status": 404
}

Status Codes

CodeDescription
200Sync triggered successfully
404No subscription token found
409A content update is already in progress
429Rate limit exceeded
500Internal error during sync

Logtest

Execute Logtest

Sends a log event to the Wazuh Engine for analysis and returns the decoded and matched result. The Indexer acts as a pass-through: it forwards the payload to the Engine via Unix socket and returns the Engine’s response.

Note: A testing policy must be loaded in the Engine for logtest to execute successfully. Load a policy via the policy promotion endpoint.

Request

  • Method: POST
  • Path: /_plugins/_content_manager/logtest

Request Body

FieldTypeRequiredDescription
queueIntegerYesQueue number for logtest execution
locationStringYesLog file path or logical source location
eventStringYesRaw log event to test
agent_metadataObjectNoOptional agent metadata passed to the Engine
trace_levelStringNoTrace verbosity: NONE, BASIC, or FULL

Example Request

curl -sk -u admin:admin -X POST \
  "https://192.168.56.6:9200/_plugins/_content_manager/logtest" \
  -H 'Content-Type: application/json' \
  -d '{
    "queue": 1,
    "location": "/var/log/auth.log",
    "agent_metadata": {},
    "event": "Dec 19 12:00:00 host sshd[123]: Failed password for root from 10.0.0.1 port 12345 ssh2",
    "trace_level": "NONE"
  }'

Example Response (success)

{
  "status": "OK",
  "result": {
    "output": "{\"wazuh\":{\"protocol\":{\"queue\":1,\"location\":\"syscheck\"},\"integration\":{\"category\":\"Security\",\"name\":\"integration/wazuh-core/0\",\"decoders\":[\"core-wazuh-message\",\"integrations\"]}},\"event\":{\"original\":\"Dec 19 12:00:00 host sshd[123]: Failed password for root from 10.0.0.1 port 12345 ssh2\"},\"@timestamp\":\"2026-02-19T12:00:00Z\"}",
    "asset_traces": [
      {
        "asset": "decoder/core-wazuh-message/0",
        "success": true,
        "traces": ["@timestamp: get_date -> Success"]
      }
    ]
  }
}

Example Response (Engine unavailable)

{
  "message": "Error communicating with Engine socket: Connection refused",
  "status": 500
}

Status Codes

CodeDescription
200Logtest executed successfully
400Invalid request body
500Engine socket communication error

Policy

Update Draft Policy

Updates the routing policy in the draft space. The policy defines which integrations are active, the root decoder, enrichment types, and how events are routed through the Engine.

Note: The integrations array allows reordering but does not allow adding or removing entries — integration membership is managed via the integration CRUD endpoints.

Request

  • Method: PUT
  • Path: /_plugins/_content_manager/policy

Request Body

FieldTypeRequiredDescription
resourceObjectYesThe policy resource object

Fields within resource:

FieldTypeRequiredDescription
titleStringNoHuman-readable policy name
root_decoderStringNoIdentifier of the root decoder for event processing
integrationsArrayNoList of integration IDs (reorder only, no add/remove)
filtersArrayNoList of filter UUIDs
enrichmentsArrayNoEnrichment types: file, domain-name, ip, url, geo (no duplicates)
authorStringYesAuthor of the policy
descriptionStringYesBrief description
documentationStringYesDocumentation text or URL
referencesArrayYesExternal reference URLs

Example Request

curl -sk -u admin:admin -X PUT \
  "https://192.168.56.6:9200/_plugins/_content_manager/policy" \
  -H 'Content-Type: application/json' \
  -d '{
    "resource": {
      "title": "Draft policy",
      "root_decoder": "",
      "integrations": [
        "f16f33ec-a5ea-4dc4-bf33-616b1562323a"
      ],
      "filters": [],
      "enrichments": [],
      "author": "Wazuh Inc.",
      "description": "Custom policy",
      "documentation": "",
      "references": [
        "https://wazuh.com"
      ]
    }
  }'

Example Response

{
  "message": "kQPmV5wBi_TgruUn97RT",
  "status": 200
}

The message field contains the OpenSearch document ID of the updated policy.

Status Codes

CodeDescription
200Policy updated
400Missing resource field, missing required fields, or invalid enrichments
500Internal error

Rules

Create Rule

Creates a new detection rule in the draft space. The rule is linked to the specified parent integration and validated by the Security Analytics Plugin.

Request

  • Method: POST
  • Path: /_plugins/_content_manager/rules

Request Body

FieldTypeRequiredDescription
integrationStringYesUUID of the parent integration (must be in draft space)
resourceObjectYesThe rule definition

Fields within resource:

FieldTypeRequiredDescription
titleStringYesRule title (must be unique within the draft space)
descriptionStringNoRule description
authorStringNoRule author
sigma_idStringNoSigma rule ID
referencesArrayNoReference URLs
enabledBooleanNoWhether the rule is enabled
statusStringNoRule status (e.g., experimental, stable)
levelStringNoAlert level (e.g., low, medium, high, critical)
logsourceObjectNoLog source definition (product, category)
detectionObjectNoSigma detection logic with condition and selection fields

Example Request

curl -sk -u admin:admin -X POST \
  "https://192.168.56.6:9200/_plugins/_content_manager/rules" \
  -H 'Content-Type: application/json' \
  -d '{
    "integration": "6b7b7645-00da-44d0-a74b-cffa7911e89c",
    "resource": {
      "title": "Test Rule",
      "description": "A Test rule",
      "author": "Tester",
      "sigma_id": "string",
      "references": [
        "https://wazuh.com"
      ],
      "enabled": true,
      "status": "experimental",
      "logsource": {
        "product": "system",
        "category": "system"
      },
      "detection": {
        "condition": "selection",
        "selection": {
          "event.action": [
            "hash_test_event"
          ]
        }
      },
      "level": "low"
    }
  }'

Example Response

{
  "message": "6e1c43f1-f09b-4cec-bb59-00e3a52b7930",
  "status": 201
}

The message field contains the UUID of the created rule.

Status Codes

CodeDescription
201Rule created
400Missing fields, duplicate title, integration not in draft space, or validation failure
500Internal error or SAP unavailable

Update Rule

Updates an existing rule in the draft space.

Request

  • Method: PUT
  • Path: /_plugins/_content_manager/rules/{id}

Parameters

NameInTypeRequiredDescription
idPathString (UUID)YesRule document ID

Request Body

FieldTypeRequiredDescription
resourceObjectYesUpdated rule definition (same fields as create)

Example Request

curl -sk -u admin:admin -X PUT \
  "https://192.168.56.6:9200/_plugins/_content_manager/rules/6e1c43f1-f09b-4cec-bb59-00e3a52b7930" \
  -H 'Content-Type: application/json' \
  -d '{
    "resource": {
      "title": "Test Hash Generation Rule",
      "description": "A rule to verify that SHA-256 hashes are calculated correctly upon creation.",
      "author": "Tester",
      "status": "experimental",
      "logsource": {
        "product": "system",
        "category": "system"
      },
      "detection": {
        "condition": "selection",
        "selection": {
          "event.action": [
            "hash_test_event"
          ]
        }
      },
      "level": "low"
    }
  }'

Example Response

{
  "message": "6e1c43f1-f09b-4cec-bb59-00e3a52b7930",
  "status": 200
}

Status Codes

CodeDescription
200Rule updated
400Invalid request, not in draft space, or validation failure
404Rule not found
500Internal error

Delete Rule

Deletes a rule from the draft space. The rule is also removed from any integrations that reference it.

Request

  • Method: DELETE
  • Path: /_plugins/_content_manager/rules/{id}

Parameters

NameInTypeRequiredDescription
idPathString (UUID)YesRule document ID

Example Request

curl -sk -u admin:admin -X DELETE \
  "https://192.168.56.6:9200/_plugins/_content_manager/rules/6e1c43f1-f09b-4cec-bb59-00e3a52b7930"

Example Response

{
  "message": "6e1c43f1-f09b-4cec-bb59-00e3a52b7930",
  "status": 200
}

Status Codes

CodeDescription
200Rule deleted
404Rule not found
500Internal error

Decoders

Create Decoder

Creates a new log decoder in the draft space. The decoder is validated against the Wazuh Engine before being stored, and automatically linked to the specified integration.

Note: A testing policy must be loaded in the Engine for decoder validation to succeed.

Request

  • Method: POST
  • Path: /_plugins/_content_manager/decoders

Request Body

FieldTypeRequiredDescription
integrationStringYesUUID of the parent integration (must be in draft space)
resourceObjectYesThe decoder definition

Fields within resource:

FieldTypeDescription
nameStringDecoder name identifier (e.g., decoder/core-wazuh-message/0)
enabledBooleanWhether the decoder is enabled
checkArrayDecoder check logic — array of condition objects
normalizeArrayNormalization rules — array of mapping objects
metadataObjectDecoder metadata (see below)

Fields within metadata:

FieldTypeDescription
titleStringHuman-readable decoder title
descriptionStringDecoder description
moduleStringModule name
compatibilityStringCompatibility description
authorObjectAuthor info (name, email, url)
referencesArrayReference URLs
versionsArraySupported versions

Example Request

curl -sk -u admin:admin -X POST \
  "https://192.168.56.6:9200/_plugins/_content_manager/decoders" \
  -H 'Content-Type: application/json' \
  -d '{
    "integration": "0aa4fc6f-1cfd-4a7c-b30b-643f32950f1f",
    "resource": {
      "enabled": true,
      "metadata": {
        "author": {
          "name": "Wazuh, Inc."
        },
        "compatibility": "All wazuh events.",
        "description": "Base decoder to process Wazuh message format.",
        "module": "wazuh",
        "references": [
          "https://documentation.wazuh.com/"
        ],
        "title": "Wazuh message decoder",
        "versions": [
          "Wazuh 5.*"
        ]
      },
      "name": "decoder/core-wazuh-message/0",
      "check": [
        {
          "tmp_json.event.action": "string_equal(\"netflow_flow\")"
        }
      ],
      "normalize": [
        {
          "map": [
            {
              "@timestamp": "get_date()"
            }
          ]
        }
      ]
    }
  }'

Example Response

{
  "message": "d_0a6aaebe-dd0b-44cc-a787-ffefd4aac175",
  "status": 201
}

The message field contains the UUID of the created decoder (prefixed with d_).

Status Codes

CodeDescription
201Decoder created
400Missing integration field, integration not in draft space, or Engine validation failure
500Engine unavailable or internal error

Update Decoder

Updates an existing decoder in the draft space. The decoder is re-validated against the Wazuh Engine.

Request

  • Method: PUT
  • Path: /_plugins/_content_manager/decoders/{id}

Parameters

NameInTypeRequiredDescription
idPathStringYesDecoder document ID

Request Body

FieldTypeRequiredDescription
resourceObjectYesUpdated decoder definition (same fields as create)

Example Request

curl -sk -u admin:admin -X PUT \
  "https://192.168.56.6:9200/_plugins/_content_manager/decoders/bb6d0245-8c1d-42d1-8edb-4e0907cf45e0" \
  -H 'Content-Type: application/json' \
  -d '{
    "resource": {
      "name": "decoder/test-decoder/0",
      "enabled": false,
      "metadata": {
        "title": "Test Decoder UPDATED",
        "description": "Updated description",
        "author": {
          "name": "Hello there"
        }
      },
      "check": [],
      "normalize": []
    }
  }'

Example Response

{
  "message": "bb6d0245-8c1d-42d1-8edb-4e0907cf45e0",
  "status": 200
}

Status Codes

CodeDescription
200Decoder updated
400Invalid request, not in draft space, or Engine validation failure
404Decoder not found
500Internal error

Delete Decoder

Deletes a decoder from the draft space. The decoder is also removed from any integrations that reference it.

Request

  • Method: DELETE
  • Path: /_plugins/_content_manager/decoders/{id}

Parameters

NameInTypeRequiredDescription
idPathStringYesDecoder document ID

Example Request

curl -sk -u admin:admin -X DELETE \
  "https://192.168.56.6:9200/_plugins/_content_manager/decoders/acbdba85-09c4-45a0-a487-61c8eeec58e6"

Example Response

{
  "message": "acbdba85-09c4-45a0-a487-61c8eeec58e6",
  "status": 200
}

Status Codes

CodeDescription
200Decoder deleted
404Decoder not found
500Internal error

Integrations

Create Integration

Creates a new integration in the draft space. An integration is a logical grouping of related rules, decoders, and KVDBs. The integration is validated against the Engine and registered in the Security Analytics Plugin.

Request

  • Method: POST
  • Path: /_plugins/_content_manager/integrations

Request Body

FieldTypeRequiredDescription
resourceObjectYesThe integration definition

Fields within resource:

FieldTypeRequiredDescription
titleStringYesIntegration title (must be unique in draft space)
authorStringYesAuthor of the integration
categoryStringYesCategory (e.g., cloud-services, network-activity, security, system-activity)
descriptionStringNoDescription
documentationStringNoDocumentation text or URL
referencesArrayNoReference URLs
enabledBooleanNoWhether the integration is enabled

Note: Do not include the id field — it is auto-generated by the Indexer.

Example Request

curl -sk -u admin:admin -X POST \
  "https://192.168.56.6:9200/_plugins/_content_manager/integrations" \
  -H 'Content-Type: application/json' \
  -d '{
    "resource": {
      "title": "azure-functions",
      "author": "Wazuh Inc.",
      "category": "cloud-services",
      "description": "This integration supports Azure Functions app logs.",
      "documentation": "https://docs.wazuh.com/integrations/azure-functions",
      "references": [
        "https://wazuh.com"
      ],
      "enabled": true
    }
  }'

Example Response

{
  "message": "94e5a2af-505e-4164-ab62-576a71873308",
  "status": 201
}

The message field contains the UUID of the created integration.

Status Codes

CodeDescription
201Integration created
400Missing required fields (title, author, category), duplicate title, or validation failure
500Internal error or SAP/Engine unavailable

Update Integration

Updates an existing integration in the draft space. Only integrations in the draft space can be updated.

Request

  • Method: PUT
  • Path: /_plugins/_content_manager/integrations/{id}

Parameters

NameInTypeRequiredDescription
idPathString (UUID)YesIntegration document ID

Request Body

FieldTypeRequiredDescription
resourceObjectYesUpdated integration definition

Fields within resource (all required for update):

FieldTypeRequiredDescription
titleStringYesIntegration title
authorStringYesAuthor
categoryStringYesCategory
descriptionStringYesDescription
documentationStringYesDocumentation text or URL
referencesArrayYesReference URLs
enabledBooleanNoWhether the integration is enabled
rulesArrayYesOrdered list of rule IDs
decodersArrayYesOrdered list of decoder IDs
kvdbsArrayYesOrdered list of KVDB IDs

Note: The rules, decoders, and kvdbs arrays are mandatory on update to allow reordering. Pass empty arrays [] if the integration has none.

Example Request

curl -sk -u admin:admin -X PUT \
  "https://192.168.56.6:9200/_plugins/_content_manager/integrations/94e5a2af-505e-4164-ab62-576a71873308" \
  -H 'Content-Type: application/json' \
  -d '{
    "resource": {
      "title": "azure-functions-update",
      "author": "Wazuh Inc.",
      "category": "cloud-services",
      "description": "This integration supports Azure Functions app logs.",
      "documentation": "updated documentation",
      "references": [],
      "enabled": true,
      "rules": [],
      "decoders": [],
      "kvdbs": []
    }
  }'

Example Response

{
  "message": "94e5a2af-505e-4164-ab62-576a71873308",
  "status": 200
}

Status Codes

CodeDescription
200Integration updated
400Invalid request, missing required fields, not in draft space, or duplicate title
404Integration not found
500Internal error

Delete Integration

Deletes an integration from the draft space. The integration must have no attached decoders, rules, or KVDBs — delete those first.

Request

  • Method: DELETE
  • Path: /_plugins/_content_manager/integrations/{id}

Parameters

NameInTypeRequiredDescription
idPathString (UUID)YesIntegration document ID

Example Request

curl -sk -u admin:admin -X DELETE \
  "https://192.168.56.6:9200/_plugins/_content_manager/integrations/94e5a2af-505e-4164-ab62-576a71873308"

Example Response

{
  "message": "94e5a2af-505e-4164-ab62-576a71873308",
  "status": 200
}

Example Response (has dependencies)

{
  "message": "Cannot delete integration because it has decoders attached",
  "status": 400
}

Status Codes

CodeDescription
200Integration deleted
400Integration has dependent resources (decoders/rules/kvdbs)
404Integration not found
500Internal error

KVDBs

Create KVDB

Creates a new key-value database in the draft space, linked to the specified integration.

Request

  • Method: POST
  • Path: /_plugins/_content_manager/kvdbs

Request Body

FieldTypeRequiredDescription
integrationStringYesUUID of the parent integration (must be in draft space)
resourceObjectYesThe KVDB definition

Fields within resource:

FieldTypeRequiredDescription
titleStringYesKVDB title
authorStringYesAuthor
contentObjectYesKey-value data (at least one entry required)
nameStringNoKVDB identifier name
enabledBooleanNoWhether the KVDB is enabled
descriptionStringNoDescription
documentationStringNoDocumentation
referencesArrayNoReference URLs

Example Request

curl -sk -u admin:admin -X POST \
  "https://192.168.56.6:9200/_plugins/_content_manager/kvdbs" \
  -H 'Content-Type: application/json' \
  -d '{
    "integration": "f16f33ec-a5ea-4dc4-bf33-616b1562323a",
    "resource": {
      "title": "non_standard_timezones",
      "name": "non_standard_timezones",
      "enabled": true,
      "author": "Wazuh Inc.",
      "content": {
        "non_standard_timezones": {
          "AEST": "Australia/Sydney",
          "CEST": "Europe/Berlin",
          "CST": "America/Chicago",
          "EDT": "America/New_York",
          "EST": "America/New_York",
          "IST": "Asia/Kolkata",
          "MST": "America/Denver",
          "PKT": "Asia/Karachi",
          "SST": "Asia/Singapore",
          "WEST": "Europe/London"
        }
      },
      "description": "",
      "documentation": "",
      "references": [
        "https://wazuh.com"
      ]
    }
  }'

Example Response

{
  "message": "9d4ec6d5-8e30-4ea3-be05-957968c02dae",
  "status": 201
}

The message field contains the UUID of the created KVDB.

Status Codes

CodeDescription
201KVDB created
400Missing integration or required resource fields, integration not in draft space
500Internal error

Update KVDB

Updates an existing KVDB in the draft space.

Request

  • Method: PUT
  • Path: /_plugins/_content_manager/kvdbs/{id}

Parameters

NameInTypeRequiredDescription
idPathString (UUID)YesKVDB document ID

Request Body

FieldTypeRequiredDescription
resourceObjectYesUpdated KVDB definition

Fields within resource (all required for update):

FieldTypeRequiredDescription
titleStringYesKVDB title
authorStringYesAuthor
contentObjectYesKey-value data
descriptionStringYesDescription
documentationStringYesDocumentation
referencesArrayYesReference URLs
nameStringNoKVDB identifier name
enabledBooleanNoWhether the KVDB is enabled

Example Request

curl -sk -u admin:admin -X PUT \
  "https://192.168.56.6:9200/_plugins/_content_manager/kvdbs/9d4ec6d5-8e30-4ea3-be05-957968c02dae" \
  -H 'Content-Type: application/json' \
  -d '{
    "resource": {
      "name": "test-UPDATED",
      "enabled": true,
      "author": "Wazuh.",
      "content": {
        "non_standard_timezones": {
          "AEST": "Australia/Sydney",
          "CEST": "Europe/Berlin",
          "CST": "America/Chicago",
          "EDT": "America/New_York",
          "EST": "America/New_York",
          "IST": "Asia/Kolkata",
          "MST": "America/Denver",
          "PKT": "Asia/Karachi",
          "SST": "Asia/Singapore",
          "WEST": "Europe/London"
        }
      },
      "description": "UPDATE",
      "documentation": "UPDATE.doc",
      "references": [
        "https://wazuh.com"
      ],
      "title": "non_standard_timezones-2"
    }
  }'

Example Response

{
  "message": "9d4ec6d5-8e30-4ea3-be05-957968c02dae",
  "status": 200
}

Status Codes

CodeDescription
200KVDB updated
400Invalid request, missing required fields, or not in draft space
404KVDB not found
500Internal error

Delete KVDB

Deletes a KVDB from the draft space. The KVDB is also removed from any integrations that reference it.

Request

  • Method: DELETE
  • Path: /_plugins/_content_manager/kvdbs/{id}

Parameters

NameInTypeRequiredDescription
idPathString (UUID)YesKVDB document ID

Example Request

curl -sk -u admin:admin -X DELETE \
  "https://192.168.56.6:9200/_plugins/_content_manager/kvdbs/9d4ec6d5-8e30-4ea3-be05-957968c02dae"

Example Response

{
  "message": "9d4ec6d5-8e30-4ea3-be05-957968c02dae",
  "status": 200
}

Status Codes

CodeDescription
200KVDB deleted
404KVDB not found
500Internal error

Promotion

Preview Promotion Changes

Returns a preview of changes that would be applied when promoting from the specified space. This is a dry-run operation that does not modify any content.

Request

  • Method: GET
  • Path: /_plugins/_content_manager/promote

Parameters

NameInTypeRequiredDescription
spaceQueryStringYesSource space to preview: draft or test

Example Request

curl -sk -u admin:admin \
  "https://192.168.56.6:9200/_plugins/_content_manager/promote?space=draft"

Example Response

{
  "changes": {
    "kvdbs": [
      {
        "operation": "add",
        "id": "4441d331-847a-43ed-acc6-4e09d8d6abb9"
      }
    ],
    "rules": [],
    "decoders": [],
    "filters": [],
    "integrations": [
      {
        "operation": "add",
        "id": "f16f33ec-a5ea-4dc4-bf33-616b1562323a"
      }
    ],
    "policy": [
      {
        "operation": "update",
        "id": "f75bda3d-1926-4a8d-9c75-66382109ab04"
      }
    ]
  }
}

The response lists changes grouped by content type. Each change includes:

  • operation: add, update, or remove
  • id: Document ID of the affected resource

Status Codes

CodeDescription
200Preview returned successfully
400Invalid or missing space parameter
500Internal error

Execute Promotion

Promotes content from the source space to the next space in the promotion chain (Draft → Test → Custom). The request body must include the source space and the changes to apply (typically obtained from the preview endpoint).

Request

  • Method: POST
  • Path: /_plugins/_content_manager/promote

Request Body

FieldTypeRequiredDescription
spaceStringYesSource space: draft or test
changesObjectYesChanges to promote (from preview response)

The changes object contains arrays for each content type (policy, integrations, kvdbs, decoders, rules, filters), each with operation and id fields.

Example Request

curl -sk -u admin:admin -X POST \
  "https://192.168.56.6:9200/_plugins/_content_manager/promote" \
  -H 'Content-Type: application/json' \
  -d '{
    "space": "draft",
    "changes": {
      "kvdbs": [],
      "decoders": [
        {
          "operation": "add",
          "id": "f56f3865-2827-464b-8335-30561b0f381b"
        }
      ],
      "rules": [],
      "filters": [],
      "integrations": [
        {
          "operation": "add",
          "id": "0aa4fc6f-1cfd-4a7c-b30b-643f32950f1f"
        }
      ],
      "policy": [
        {
          "operation": "update",
          "id": "baf9b03f-5872-4409-ab02-507b7f93d0c8"
        }
      ]
    }
  }'

Example Response

{
  "message": "Promotion completed successfully",
  "status": 200
}

Status Codes

CodeDescription
200Promotion successful
400Invalid request body or missing space field
500Engine communication error or validation failure