Deploy BPMN, DMN and form resources
HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("http://localhost:8080/v2/deployments")) .header("Authorization", "Bearer <token>") .header("Content-Type", "multipart/form-data; boundary=---011000010111000001101001") .method("POST", HttpRequest.BodyPublishers.ofString("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"resources\"\r\nContent-Type: text/plain\r\n\r\nexample\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tenantId\"\r\nContent-Type: text/plain\r\n\r\nexample\r\n-----011000010111000001101001--\r\n")) .build();HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());System.out.println(response.body());const url = 'http://localhost:8080/v2/deployments';const form = new FormData();form.append('resources', 'example');form.append('tenantId', 'example');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url http://localhost:8080/v2/deployments \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: multipart/form-data' \ --form resources=example \ --form tenantId=exampleDeploys one or more resources (.bpmn, .dmn, .form) as a single
deployment. Each decision of a DMN resource is listed as one
decisionDefinition entry, followed by one decisionRequirements
entry for the resource’s decision requirements graph. A
byte-identical resource that is deployed again reuses the existing
version. Cluster mode does not yet deploy DMN through this route: a
deployment with a DMN resource answers 409 there before anything
is deployed (POST /v1/deployments deploys decisions in every mode).
A deployment whose user tasks lack the user-task implementation marker
succeeds, and the answer lists each of those tasks in warnings.
Authorizations
Section titled “Authorizations”Parameters
Section titled “ Parameters ”Header Parameters
Section titled “Header Parameters”Tenant selection. A principal bound to one tenant may omit it; if
sent, it must equal that tenant (403 otherwise). A principal that
may act in several tenants must send it on every request:
without it the request is refused with 400, and a tenant it may
not act in is refused with 403.
Makes a retried command safe. A repeat with the same key and the same
body replays the first answer. A repeat with the same key and a
different body is refused with 409.
Request Bodyrequired
Section titled “Request Bodyrequired”Multipart form. Each file part is one resource, and its file name
(ending in .bpmn or .form) is the resource name. An optional text
part named tenantId must be the caller’s tenant.
object
Responses
Section titled “ Responses ”The deployment was committed.
object
Positive signed 64-bit entity key, written as a decimal string.
Exactly one of processDefinition, decisionDefinition, decisionRequirements and form is set. The other members are null.
object
object
The decision’s DMN name; empty when it has none.
Positive signed 64-bit entity key, written as a decimal string.
Positive signed 64-bit entity key, written as a decimal string.
object
The graph’s DMN name; empty when it has none.
Positive signed 64-bit entity key, written as a decimal string.
Part of the wire shape. This release always sends null.
Present only when the deployment succeeded with warnings. Each entry names one element; the same warnings are written to the engine log.
object
USER_TASK_WITHOUT_MARKER: a user task without the user-task
implementation marker. It still runs as a native user task,
with the task-list lifecycle and API; no job is created for it,
so a job worker waiting for one would wait forever.
Example
{ "deploymentKey": "2251799813685249", "deployments": [ { "processDefinition": { "processDefinitionKey": "2251799813685249" }, "decisionDefinition": { "decisionDefinitionKey": "2251799813685249", "decisionRequirementsKey": "2251799813685249" }, "decisionRequirements": { "decisionRequirementsKey": "2251799813685249" }, "form": { "formKey": "2251799813685249" } } ], "warnings": [ { "code": "USER_TASK_WITHOUT_MARKER" } ]}The request is malformed, or it uses a property or filter this release does not support.
An RFC 9457 problem document. type is a stable TinyConductor URN.
object
The request path.
Present only on mode-not-supported. It names the engine’s mode.
Example
{ "type": "urn:bpm:error:invalid-argument", "title": "Bad Request", "status": 400, "detail": "entity key must be a positive int64 string", "instance": "/v2/process-instances/0"}No valid credential was presented.
An RFC 9457 problem document. type is a stable TinyConductor URN.
object
The request path.
Present only on mode-not-supported. It names the engine’s mode.
Example
{ "type": "urn:bpm:error:unauthorized", "title": "Unauthorized", "status": 401, "detail": "A valid bearer credential is required", "instance": "/v2/deployments"}Headers
Section titled “Headers”The caller lacks the required permission, a tenant named in the request is not the caller’s tenant, or a cookie write has no valid CSRF token.
An RFC 9457 problem document. type is a stable TinyConductor URN.
object
The request path.
Present only on mode-not-supported. It names the engine’s mode.
Example
{ "type": "urn:bpm:error:forbidden", "title": "Forbidden", "status": 403, "detail": "The principal lacks the action this route requires", "instance": "/v2/deployments"}An idempotency-key conflict, or a command the target’s current state does not allow.
An RFC 9457 problem document. type is a stable TinyConductor URN.
object
The request path.
Present only on mode-not-supported. It names the engine’s mode.
Example
{ "type": "urn:bpm:error:conflict", "title": "Conflict", "status": 409, "detail": "The idempotency key is already associated with another request", "instance": "/v2/deployments"}The body exceeds the configured request-size bound.
An RFC 9457 problem document. type is a stable TinyConductor URN.
object
The request path.
Present only on mode-not-supported. It names the engine’s mode.
Example
{ "type": "urn:bpm:error:payload-too-large", "title": "Payload Too Large", "status": 413, "detail": "The request exceeds the configured size limit", "instance": "/v2/deployments"}The tenant’s quota is exhausted.
An RFC 9457 problem document. type is a stable TinyConductor URN.
object
The request path.
Present only on mode-not-supported. It names the engine’s mode.
Example
{ "type": "urn:bpm:error:quota-exhausted", "title": "Quota Exhausted", "status": 429, "detail": "The tenant active-instance quota is exhausted", "instance": "/v2/deployments"}An internal failure. The details are never exposed.
An RFC 9457 problem document. type is a stable TinyConductor URN.
object
The request path.
Present only on mode-not-supported. It names the engine’s mode.
Example
{ "type": "urn:bpm:error:internal", "title": "Internal Server Error", "status": 500, "detail": "The request could not be completed", "instance": "/v2/deployments"}The operation is not offered in the engine’s current deployment mode.
An RFC 9457 problem document. type is a stable TinyConductor URN.
object
The request path.
Present only on mode-not-supported. It names the engine’s mode.
Example
{ "type": "urn:bpm:error:mode-not-supported", "title": "Mode Not Supported", "status": 501, "detail": "/v2/clock is not supported in bundled mode: the deterministic virtual clock and the storage-free reset exist only for the Embedded engine; Bundled and Cluster run on the system clock over durable history, which cannot be pinned, rewound or discarded", "instance": "/v2/clock", "mode": "bundled"}Backpressure, or a dependency is not ready. Retry with the same idempotency key.
An RFC 9457 problem document. type is a stable TinyConductor URN.
object
The request path.
Present only on mode-not-supported. It names the engine’s mode.
Example
{ "type": "urn:bpm:error:unavailable", "title": "Service Unavailable", "status": 503, "detail": "The required engine service is not ready", "instance": "/v2/deployments"}