> ## Documentation Index > Fetch the complete documentation index at: https://docs.lobstersoftware.com/llms.txt > Use this file to discover all available pages before exploring further. # List profiles > Returns one page of the integration profiles the caller may view, filtered by the query parameters and ordered by `sort` (default: `id` ascending). `meta.total` counts the matching profiles; a `page` past the last one returns an empty `data` array. ## OpenAPI ````json GET /platform/api/profiles/preview { "openapi": "3.1.0", "info": { "title": "Lobster Platform API", "description": "**PREVIEW:** This API is in preview and under active development. Endpoints and schemas are subject to breaking changes, and backward compatibility is not guaranteed until the API is promoted to a stable version.\n\nREST API of the Lobster Platform for headless clients. Every operation, schema and member of this document carries a description, and the create operations carry complete examples. Each tag links the page of the Lobster documentation that explains its resources.\n\n## Authentication\nFour authentication flows are available. All of them produce a bearer token that must be sent as `Authorization: Bearer ` on every request.\n\n1. **Authorization code with PKCE** (acting as a user; works with Microsoft and other SSO): the steps are in the `OAuth2AuthorizationCode` security scheme.\n2. **OAuth2 Client Credentials** (machine-to-machine): exchange a client id/secret provisioned in the Lobster administration UI at `POST /dw/register/oauth/token` with `grant_type=client_credentials&client_id=&client_secret=`.\n3. **UI Session Bearer Token**: log in via the Lobster web UI, then exchange the session cookie for a token at `GET /auth/sessionBearerToken`.\n4. **Guest User Login Token**: append a GuestUser `loginToken` as a URL query parameter (`?loginToken=`) to establish a session without a password, then retrieve the bearer token the same way.", "version": "preview" }, "servers": [ { "url": "https://platform-beta-test.lobster-cloud.com" } ], "security": [ { "OAuth2": [] }, { "OAuth2AuthorizationCode": [] }, { "SessionBearer": [] } ], "tags": [ { "name": "Channels", "description": "The channels of a partner, the concrete connections a profile uses to receive or send.", "externalDocs": { "description": "Lobster documentation", "url": "https://docs.lobstersoftware.com/docs/en/manage-partners-channels" } }, { "name": "Functions", "description": "The catalogue of mapping functions a profile's mapping can call.", "externalDocs": { "description": "Lobster documentation", "url": "https://docs.lobstersoftware.com/docs/en/functions" } }, { "name": "Partners", "description": "Integration partners, the business parties profiles exchange data with.", "externalDocs": { "description": "Lobster documentation", "url": "https://docs.lobstersoftware.com/docs/en/manage-partners" } }, { "name": "Profiles", "description": "Integration profiles: what data comes in, how it is mapped and where the result goes.", "externalDocs": { "description": "Lobster documentation", "url": "https://docs.lobstersoftware.com/docs/en/profiles" } } ], "externalDocs": { "description": "Lobster documentation", "url": "https://docs.lobstersoftware.com/docs/en/profiles" }, "paths": { "/platform/api/profiles/preview": { "get": { "tags": [ "Profiles" ], "summary": "List profiles", "description": "Returns one page of the integration profiles the caller may view, filtered by the query parameters and ordered by `sort` (default: `id` ascending). `meta.total` counts the matching profiles; a `page` past the last one returns an empty `data` array.", "operationId": "listProfiles", "parameters": [ { "name": "page", "in": "query", "description": "Zero-based index of the page to return.", "schema": { "type": "integer", "format": "int32", "default": 0, "minimum": 0 } }, { "name": "size", "in": "query", "description": "Number of entries per page; a value out of range is rejected, not clamped.", "schema": { "type": "integer", "format": "int32", "default": 20, "maximum": 200, "minimum": 1 } }, { "name": "name", "in": "query", "description": "Exact, case-sensitive match on the profile name. Repeatable — repeated values OR.", "schema": { "type": "array", "items": { "type": "string" } } }, { "name": "nameContains", "in": "query", "description": "Case-insensitive substring match on the profile name.", "schema": { "type": "string" } }, { "name": "group", "in": "query", "description": "Exact, case-sensitive match on the `id` of the profile's group, as `GET /platform/api/profiles/preview/groups` returns it; `root` matches only profiles stored as `root`. Repeatable — repeated values OR.", "schema": { "type": "array", "items": { "type": "string" } } }, { "name": "active", "in": "query", "description": "Match on the active flag.", "schema": { "type": "boolean" } }, { "name": "sort", "in": "query", "description": "Sort key; a leading `-` sorts descending. Default: `id` ascending.", "schema": { "type": "string", "enum": [ "name", "-name", "lastModified", "-lastModified" ] } }, { "name": "inputAgentUrl", "in": "query", "description": "Exact match on the HTTP alias (`inputAgentSettings.url`) of a `WEBSERVICE` or `SOLUTION` profile; leading and trailing `/` are not significant. Repeatable — repeated values OR.", "schema": { "type": "array", "items": { "type": "string" } } }, { "name": "inputFormat", "in": "query", "description": "Exact match on the profile's `parsing.documentType` (e.g. `EDI`, `SAP_ALE`, `X12`). Repeatable — repeated values OR.", "schema": { "type": "array", "items": { "type": "string", "enum": [ "CSV", "XML", "EXCEL", "FIX", "DB", "EDI", "SAP_ALE", "X12", "BWA", "API", "JSON", "CARGO", "PARQUET" ] } } } ], "responses": { "200": { "description": "Profiles returned.", "content": { "application/json": { "schema": { "type": "object", "description": "Standard Platform API success envelope. Every response carries exactly one of `data` (success) or `error` (failure) at top level.", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/core.IntegrationProfile", "title": "IntegrationProfile" } }, "meta": { "$ref": "#/components/schemas/Meta" } }, "required": [ "data" ] }, "examples": { "One page of profiles": { "description": "The envelope as returned: the page in `data`, the paging state in `meta`.", "value": { "data": [ { "class": "core.IntegrationProfile", "id": "-111bfff0:19fcb9ef52b:-1a96.269e02ba175e9a7d:-111bfff0:19fcab91ac4:-8000", "name": "acme-order-import", "active": true, "group": "6bb76781_199702d94be_2714_9a14992bf4897187_6bb76781_1996f5f9530_-8000", "description": "Imports ACME purchase orders", "inputHandling": { "encoding": "UTF-8" } }, { "class": "core.IntegrationProfile", "id": "-111bfff0:19fcb9ef52b:22ec.269e02ba175e9a7d:-111bfff0:19fcab91ac4:-8000", "name": "acme-shipment-export", "active": false, "group": "6bb76781_199702d94be_2714_9a14992bf4897187_6bb76781_1996f5f9530_-8000", "description": "Exports shipment notifications", "inputHandling": { "encoding": "UTF-8" } } ], "meta": { "page": 0, "size": 20, "total": 2 } } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "500": { "$ref": "#/components/responses/ServerError" } } } } }, "components": { "schemas": { "core.IntegrationProfile": { "type": "object", "description": "An integration profile: what data comes in, how it is parsed and mapped, and where the result goes. It runs in six phases, each held by members of this object: 1 the input agent (`inputAgentSettings`), 2 parsing (`parsing`), 3 the mapping (`mappingSettings`), 4 optional database access (the SQL members of the target nodes and fields), 5 the integration unit that serialises the target tree (`integrationSettings`) and 6 the response units (`responseSettings`). Only `name` is required; a profile is live as soon as it is stored with `active: true`.", "properties": { "class": { "type": "string", "const": "core.IntegrationProfile", "description": "The type of this object, always `core.IntegrationProfile`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": false, "description": "Whether the profile runs. An active profile takes calls on its input agent (an HTTP alias answers under `/dw/Request/`) and a `Cron*` agent runs on its schedule from the moment it is stored; the change takes effect at once." }, "archiving": { "$ref": "#/components/schemas/core.ArchivingSettings", "description": "What happens to the input data after a run. `null` keeps every stored value.", "title": "ArchivingSettings" }, "created": { "type": "string", "$comment": "timestamp as utc time in milliseconds, serialized as a string", "description": "When the profile was created; assigned by the server.", "readOnly": true }, "databaseAccess": { "$ref": "#/components/schemas/core.DatabaseAccessSettings", "description": "Both database concerns in one place: the phase 4 SQL step after the mapping. `null` keeps every stored value.", "title": "DatabaseAccessSettings" }, "description": { "type": "string", "description": "Free text saying what the profile does." }, "documentation": { "$ref": "#/components/schemas/core.DocumentationSettings", "description": "Notes and a documentation link of the profile. `null` keeps every stored value.", "title": "DocumentationSettings" }, "errorHandling": { "$ref": "#/components/schemas/core.ErrorHandlingSettings", "description": "What happens when a job fails. `null` keeps every stored value.", "title": "ErrorHandlingSettings" }, "extensions": { "$ref": "#/components/schemas/core.ExtensionSettings", "description": "Pluggable Java classes the profile runs, and their parameter. Any change needs a data-admin session. `null` keeps every stored value.", "title": "ExtensionSettings" }, "governance": { "$ref": "#/components/schemas/core.GovernanceSettings", "description": "Administrative flags of the profile. `null` keeps every stored value.", "title": "GovernanceSettings" }, "group": { "type": "string", "description": "The `id` of the profile group the profile is listed under, as `GET /platform/api/profiles/preview/groups` returns it. Required on create: a missing, blank or `root` value, or an unknown id, is rejected as invalid. On an update by PATCH (also in overwrite mode), a missing, null or blank value keeps the stored group; a full replace by PUT must name the group, so there such a value is rejected as invalid. Any other value may only move the profile into an existing group, so `root` or an unknown id is rejected as invalid. A legacy value (such as `Default`, or `root` for a profile at the top level) is read back as stored and accepted while it stays unchanged.", "examples": [ "6bb76781_199702d94be_2714_9a14992bf4897187_6bb76781_1996f5f9530_-8000" ] }, "id": { "type": "string", "description": "The profile's identifier, an opaque string such as `-45e51368:1a0d2b4eb4f:59e3...:-8000`; assigned by the server. Use it as-is in `/platform/api/profiles/preview/{id}`. It is not the name: references to a profile from other objects and mapping functions use `name`.", "readOnly": true }, "inputAgentSettings": { "$ref": "#/components/schemas/core.ProfileInputAgentSettings", "description": "Phase 1, how data arrives: one input agent object naming its type in `class`, e.g. `core.HttpAgentSettings` (the profile listens on `/dw/Request/`) or a time-driven `core.CronHttpAgentSettings`, `core.CronFileAgentSettings`, ... that runs on a schedule.", "title": "ProfileInputAgentSettings" }, "inputHandling": { "$ref": "#/components/schemas/core.InputHandlingSettings", "description": "How the raw input is received before parsing. `null` keeps every stored value.", "title": "InputHandlingSettings" }, "inputValidation": { "$ref": "#/components/schemas/core.InputValidationSettings", "description": "The checks the parser runs on the parsed source tree. `null` keeps every stored value.", "title": "InputValidationSettings" }, "integrationClientId": { "type": "string", "description": "The client (tenant) of the instance that owns the profile; assigned by the server from the signed-in session, a sent value is ignored.", "readOnly": true }, "integrationSettings": { "$ref": "#/components/schemas/core.ProfileIntegrationSettings", "description": "Phase 5: the integration unit in `unit` that serialises the target tree after the mapping, e.g. `core.JsonCreationIU` or `core.XMLCreationIU`. A response unit sends that output when its `contentType` is `core.ResponseContentType_IU`; leave the unit out when no response unit sends it.", "title": "ProfileIntegrationSettings" }, "jobExecution": { "$ref": "#/components/schemas/core.JobExecutionSettings", "description": "How and how long a job runs. `null` keeps every stored value.", "title": "JobExecutionSettings" }, "lastModified": { "type": "string", "$comment": "timestamp as utc time in milliseconds, serialized as a string", "description": "When the profile was last stored, by the Lobster UI or this API; assigned by the server.", "readOnly": true }, "mappingBehaviour": { "$ref": "#/components/schemas/core.MappingBehaviourSettings", "description": "Phase 3 behaviour of the mapping (the trees themselves stay in `mappingSettings`). `null` keeps every stored value.", "title": "MappingBehaviourSettings" }, "mappingSettings": { "$ref": "#/components/schemas/core.MappingSettings", "description": "Phase 3, the mapping: the source structure (the parsed input), the target structure (what the profile builds) and the links between their fields. Function chains, conditions and database settings live on the target nodes and fields.", "title": "MappingSettings" }, "name": { "type": "string", "description": "The profile's name. Must be unique on the instance; look it up with `GET /platform/api/profiles/preview?name=`. Other objects and mapping functions that refer to a profile use this name; in a mapping it is readable as `VAR_PROFILENAME`.", "examples": [ "Purchase Order Import" ], "maxLength": 250, "minLength": 1 }, "parsing": { "$ref": "#/components/schemas/core.ParsingSettings", "description": "How the input is parsed (phase 2): the document type and the settings of its parser. `null` keeps every stored value.", "title": "ParsingSettings" }, "responseSettings": { "$ref": "#/components/schemas/core.ProfileResponseSettings", "description": "Phase 6: where the result goes, as the response units in `units` that run in list order (call an HTTP endpoint, write a file, send mail, ...). An HTTP caller gets data back only through a unit that returns it to the caller.", "title": "ProfileResponseSettings" }, "runtimeSettings": { "$ref": "#/components/schemas/core.RuntimeSettings", "description": "Profile-wide settings of the Vaadin editor that sit outside the input agent, phase 2 parsing, the mapping and the response units: scheduling window, throttling, checkpoints and free text. `null` keeps every stored value.", "title": "RuntimeSettings" }, "signature": { "$ref": "#/components/schemas/core.SignatureSettings", "description": "Verification of the input's signature. `null` keeps every stored value.", "title": "SignatureSettings" }, "skipMapping": { "type": "boolean", "default": false, "description": "Skips parsing and mapping (phases 2 to 5): the response units receive the input unchanged, so use a unit `contentType` that sends the original data. Structures and mappings are kept but not run." }, "splitting": { "$ref": "#/components/schemas/core.SplittingSettings", "description": "Every split setting in one place. `null` keeps every stored value.", "title": "SplittingSettings" }, "tags": { "type": "string", "description": "Free-text tags for finding the profile, one tag per line (separated by `\\n`).", "examples": [ "orders\\nshop" ] } }, "required": [ "name" ], "title": "IntegrationProfile" }, "Meta": { "type": "object", "additionalProperties": true, "description": "Everything about the response that is not the resource itself. Members may be added over time; ignore the ones you do not recognize.", "properties": { "page": { "type": "integer", "format": "int32", "description": "Zero-based index of the returned page." }, "size": { "type": "integer", "format": "int32", "description": "Number of entries per page." }, "total": { "type": "integer", "format": "int64", "description": "Number of entries across all pages." } } }, "core.ArchivingSettings": { "type": "object", "description": "What happens to the input data after a run. `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.ArchivingSettings", "description": "The type of this object, always `core.ArchivingSettings`. Required where the member it is sent in accepts several types." }, "handToArchiveSystem": { "type": "boolean", "default": false, "description": "Hands the input data over to the archive system after processing." }, "indexBackup": { "type": "boolean", "default": false, "description": "Indexes the input backup for search." }, "retainBackupDays": { "type": "integer", "format": "int32", "default": -1, "description": "Days a run's backup is retained. Must be at least `-1`, which follows the system-wide setting.", "minimum": -1 } }, "title": "ArchivingSettings" }, "core.DatabaseAccessSettings": { "type": "object", "description": "Database access of the profile. `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.DatabaseAccessSettings", "description": "The type of this object, always `core.DatabaseAccessSettings`. Required where the member it is sent in accepts several types." }, "phase4": { "$ref": "#/components/schemas/core.Phase4Settings", "description": "The SQL step run against a database after the mapping. `null` keeps every stored value.", "title": "Phase4Settings" }, "source": { "$ref": "#/components/schemas/core.DatabaseSourceSettings", "description": "The statement a Cron-SQL input runs. `null` keeps every stored value.", "title": "DatabaseSourceSettings" } }, "title": "DatabaseAccessSettings" }, "core.DocumentationSettings": { "type": "object", "description": "Notes and a documentation link of the profile. `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.DocumentationSettings", "description": "The type of this object, always `core.DocumentationSettings`. Required where the member it is sent in accepts several types." }, "documentationUrl": { "type": "string", "description": "URL of external documentation for the profile, `%CONST%` fillers allowed. Must not carry credentials (user info). Empty by default.", "examples": [ "https://docs.acme.example/edi/purchase-order" ] }, "importNote": { "type": "string", "description": "Free-text note shown when the profile is imported (for example, path adjustments). Empty by default." } }, "title": "DocumentationSettings" }, "core.ErrorHandlingSettings": { "type": "object", "description": "What happens when a job fails. `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.ErrorHandlingSettings", "description": "The type of this object, always `core.ErrorHandlingSettings`. Required where the member it is sent in accepts several types." }, "continueReadOnParseError": { "type": "boolean", "default": false, "description": "CSV only: skips a record that fails to parse instead of failing the job. Applies only while `parsing.documentType` is `CSV`, otherwise a changed value is rejected." }, "edifactContrl": { "$ref": "#/components/schemas/core.EdifactContrlSettings", "description": "The EDIFACT CONTRL acknowledgement. `null` keeps every stored value.", "title": "EdifactContrlSettings" }, "exceptionProfile": { "type": "string", "description": "Name of a profile to run when this one's job fails; must name an existing profile with a `core.MessageAgentSettings` input agent when changed - any other input agent type is never found for exception handling at run time. Empty runs none." }, "mailRecipient": { "type": "string", "description": "Mail address notified when a job fails in phase 2 to 5 (parsing/mapping/database), distinct from `responseSettings.errorRecipient` which covers phase 6. Empty sends none.", "examples": [ "ops@acme.example" ] }, "skipRecordOnError": { "type": "boolean", "default": false, "description": "Skips a record that errors instead of failing the whole job." }, "workflow": { "$ref": "#/components/schemas/core.WorkflowReference", "description": "The workflow to run when this profile's job fails, referenced by its `id`, which is the workflow's name. A profile that runs none reads back `null`; sending `null` keeps the stored workflow, an empty or `null` `id` runs none.", "title": "WorkflowReference" } }, "title": "ErrorHandlingSettings" }, "core.ExtensionSettings": { "type": "object", "description": "Pluggable Java classes the profile runs, and their parameter. `null` keeps every stored value; any change needs a data-admin session.", "properties": { "class": { "type": "string", "const": "core.ExtensionSettings", "description": "The type of this object, always `core.ExtensionSettings`. Required where the member it is sent in accepts several types." }, "environmentCheck": { "$ref": "#/components/schemas/core.EnvironmentCheckSettings", "description": "A check run before the job starts. `null` keeps every stored value.", "title": "EnvironmentCheckSettings" }, "postParser": { "$ref": "#/components/schemas/core.PostParserSettings", "description": "A postparser that runs after parsing. `null` keeps every stored value.", "title": "PostParserSettings" }, "preParser": { "$ref": "#/components/schemas/core.PreParserSettings", "description": "A preparser that runs before parsing. `null` keeps every stored value.", "title": "PreParserSettings" } }, "title": "ExtensionSettings" }, "core.GovernanceSettings": { "type": "object", "description": "Administrative flags of the profile. `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.GovernanceSettings", "description": "The type of this object, always `core.GovernanceSettings`. Required where the member it is sent in accepts several types." }, "privateData": { "type": "boolean", "default": false, "description": "Marks the profile as holding private data. Only a data administrator may change it." } }, "title": "GovernanceSettings" }, "core.ProfileInputAgentSettings": { "type": "object", "description": "Phase 1 of a profile, how its data arrives: `inputAgentSettings`. Event-driven agents (HTTP, FTP/SFTP/AS2/OFTP servers, mail, queues, messaging) start a job when data comes in; the `Cron*` agents fetch it on a schedule. Start with `core.HttpAgentSettings`, which a caller reaches on `/dw/Request/`.\n\nSend one of these types, named in `class`:\n- `core.DataQueueAgentSettings`: Polls a data queue on an IBM i (AS/400) system every `interval` milliseconds and starts one job per entry read (file name `DQ_.dat`).\n- `core.HttpAgentSettings`: Receives data through HTTP calls to `/dw/Request/`: each call runs the profile with the request body as input (GET, HEAD and DELETE get a placeholder document) and answers the caller.\n- `core.CronOftpAgentSettings`: Calls a partner over OFTP on the schedule in `cronSchedule` and picks up the files the partner has waiting; nothing is sent.\n- `core.FTPAgentSettings`: Receives files that partners upload to the platform's built-in FTP/FTPS server and starts a job for each file.\n- `core.CronPop3AgentSettings`: Fetches mails from a POP3 mailbox on the schedule in `cronSchedule` and routes the body and each attachment of every mail to a profile by the rules in `mailDispatchSettings`.\n- `core.MQTTAgentSettings`: Subscribes to a topic of an MQTT broker, reached through an MQTT connection alias, and starts a job for each received message, or for each batch when `messageBufferSize` is above 1.\n- `core.OFTPAgentSettings`: Receives files (OFTP virtual files) that partners send to the platform's OFTP server and starts a job for each file.\n- `core.CronImapAgentSettings`: Fetches mails from an IMAP mailbox on the schedule in `cronSchedule` and routes the body and each attachment of every mail to a profile by the rules in `mailDispatchSettings`.\n- `core.CronMongodbAgentSettings`: Reads documents from a MongoDB collection on the schedule in `cronSchedule`.\n- `core.AmqpV2AgentSettings`: Receives messages from a queue or topic of a message broker (AMQP 1.0, AMQP 0.9.1 or JMS) reached through an AMQP v2 connection alias and starts a job for each message, or for each batch when `accumulation` is enabled.\n- `core.PortalAgentSettings`: Receives data a user enters in a DataCockpit form: the form is generated from the profile's source structure, and submitting it runs the profile with the entered values as JSON.\n- `core.CronFileAgentSettings`: Picks up files from a directory on the Lobster server's file system on the schedule in `cronSchedule`.\n- `core.CronSqlAgentSettings`: Runs a SQL statement against a database on the schedule in `cronSchedule` and processes the rows it returns as one job.\n- `core.CronSftpAgentSettings`: Fetches files from a partner's SFTP server on the schedule in `cronSchedule`.\n- `core.SolutionAgentSettings`: Implements one operation of a data product's API as an HTTP endpoint at `/dw/Request/`, served like `core.HttpAgentSettings`.\n- `core.CronX400AgentSettings`: Fetches X.400 mails through the partner's X.400 channel on the schedule in `cronSchedule` and routes the body and each attachment of every mail to a profile by the rules in `mailDispatchSettings`.\n- `core.CronFtpAgentSettings`: Fetches files from a partner's FTP server on the schedule in `cronSchedule`.\n- `core.KafkaAgentSettings`: Consumes records from a Kafka topic through a Kafka connection alias and starts a job for each record, or for each batch when `messageBufferSize` is above 1.\n- `core.AS2AgentSettings`: Receives AS2 messages that partners send to the platform's AS2 server and starts a job with the payload.\n- `core.CronCloudStorageAgentSettings`: Fetches files from a cloud storage (such as Amazon S3, Azure, Google Cloud Storage, Dropbox, Google Drive or Microsoft 365) on the schedule in `cronSchedule`.\n- `core.CronLdapAgentSettings`: Searches an LDAP directory on the schedule in `cronSchedule` and processes all entries found as one JSON document `{\"_LDAPRecord\": [{...}, ...]}` with one object per entry, so the profile's input format is JSON.\n- `core.SmsAgentSettings`: Phase 1 of a profile, how its data arrives: `inputAgentSettings`.\n- `core.AS4AgentSettings`: Receives AS4 messages that partners send to the platform's AS4 server and starts a job with the payload.\n- `core.FaxAgentSettings`: Receives incoming faxes that arrive on a partner's fax channel.\n- `core.ManualUploadAgentSettings`: Receives data only when it is handed to the profile by hand, e.g. an uploaded file.\n- `core.SFTPAgentSettings`: Receives files that partners upload to the platform's built-in SSH server by SFTP or SCP and starts a job for each file.\n- `core.TcpAgentSettings`: Receives data on a TCP server socket the instance opens for the profile.\n- `core.CronCustomAgentSettings`: Runs a custom Java class on the schedule in `cronSchedule` and processes the data it returns.\n- `core.MessageAgentSettings`: Starts a job when a message for this profile arrives in the platform's internal message service under `context` and `queue`, e.g. one sent by another profile's `core.MessageProfileResponseUnit` with the same `context` and `queue`.\n- `core.GooglePubSubAgentSettings`: Configuration of a Google Pub/Sub input agent: pulls messages from a Google Cloud Pub/Sub subscription and starts the profile for each one.\n- `core.CronOrchestrationAgentSettings`: Runs an orchestration class of a platform module on the schedule in `cronSchedule` and processes the data it returns.\n- `core.AMQPAgentSettings`: Receives messages from a queue or topic of a message broker reached through an AMQP (Legacy) connection alias and starts a job for each message, or for each batch when `messageBufferSize` is above 1.\n- `core.CronSapAgentSettings`: Calls an SAP function module (RFC) on a schedule and processes its result as the profile's input.\n- `core.SMTPAgentSettings`: Phase 1 of a profile, how its data arrives: `inputAgentSettings`.\n- `core.CronSshAgentSettings`: Fetches files from a partner's server over SCP on the schedule in `cronSchedule`: it runs `scp` for `dir` plus `filePattern` and processes each received file as one job.\n- `core.CommLogAgentSettings`: Phase 1 of a profile, how its data arrives: `inputAgentSettings`.\n- `core.SapAleAgentSettings`: Phase 1 of a profile, how its data arrives: `inputAgentSettings`.\n- `core.CronWebdavAgentSettings`: Fetches files from a WebDAV server on the schedule in `cronSchedule`.\n- `core.RuleAgentSettings`: Phase 1 of a profile, how its data arrives: `inputAgentSettings`.\n- `core.CronHttpAgentSettings`: Fetches data by HTTP from a URL on a schedule: on each `cronSchedule` time it sends one request (`httpSettings`) and runs the profile with a non-empty 2xx answer as input; with paging (`selfTrigger`) it can follow further pages (paging needs `runInBackground` false, which switching paging on sets unless that write asks for background processing, and a profile that maps - else it is refused).\n- `core.IoTAgentSettings`: Connects the profile to OPC UA, in one of two ways chosen by `agentType`.", "discriminator": { "propertyName": "class" }, "oneOf": [ { "$ref": "#/components/schemas/core.DataQueueAgentSettings", "title": "DataQueueAgentSettings" }, { "$ref": "#/components/schemas/core.HttpAgentSettings", "title": "HttpAgentSettings" }, { "$ref": "#/components/schemas/core.CronOftpAgentSettings", "title": "CronOftpAgentSettings" }, { "$ref": "#/components/schemas/core.FTPAgentSettings", "title": "FTPAgentSettings" }, { "$ref": "#/components/schemas/core.CronPop3AgentSettings", "title": "CronPop3AgentSettings" }, { "$ref": "#/components/schemas/core.MQTTAgentSettings", "title": "MQTTAgentSettings" }, { "$ref": "#/components/schemas/core.OFTPAgentSettings", "title": "OFTPAgentSettings" }, { "$ref": "#/components/schemas/core.CronImapAgentSettings", "title": "CronImapAgentSettings" }, { "$ref": "#/components/schemas/core.CronMongodbAgentSettings", "title": "CronMongodbAgentSettings" }, { "$ref": "#/components/schemas/core.AmqpV2AgentSettings", "title": "AmqpV2AgentSettings" }, { "$ref": "#/components/schemas/core.PortalAgentSettings", "title": "PortalAgentSettings" }, { "$ref": "#/components/schemas/core.CronFileAgentSettings", "title": "CronFileAgentSettings" }, { "$ref": "#/components/schemas/core.CronSqlAgentSettings", "title": "CronSqlAgentSettings" }, { "$ref": "#/components/schemas/core.CronSftpAgentSettings", "title": "CronSftpAgentSettings" }, { "$ref": "#/components/schemas/core.SolutionAgentSettings", "title": "SolutionAgentSettings" }, { "$ref": "#/components/schemas/core.CronX400AgentSettings", "title": "CronX400AgentSettings" }, { "$ref": "#/components/schemas/core.CronFtpAgentSettings", "title": "CronFtpAgentSettings" }, { "$ref": "#/components/schemas/core.KafkaAgentSettings", "title": "KafkaAgentSettings" }, { "$ref": "#/components/schemas/core.AS2AgentSettings", "title": "AS2AgentSettings" }, { "$ref": "#/components/schemas/core.CronCloudStorageAgentSettings", "title": "CronCloudStorageAgentSettings" }, { "$ref": "#/components/schemas/core.CronLdapAgentSettings", "title": "CronLdapAgentSettings" }, { "$ref": "#/components/schemas/core.SmsAgentSettings", "title": "SmsAgentSettings" }, { "$ref": "#/components/schemas/core.AS4AgentSettings", "title": "AS4AgentSettings" }, { "$ref": "#/components/schemas/core.FaxAgentSettings", "title": "FaxAgentSettings" }, { "$ref": "#/components/schemas/core.ManualUploadAgentSettings", "title": "ManualUploadAgentSettings" }, { "$ref": "#/components/schemas/core.SFTPAgentSettings", "title": "SFTPAgentSettings" }, { "$ref": "#/components/schemas/core.TcpAgentSettings", "title": "TcpAgentSettings" }, { "$ref": "#/components/schemas/core.CronCustomAgentSettings", "title": "CronCustomAgentSettings" }, { "$ref": "#/components/schemas/core.MessageAgentSettings", "title": "MessageAgentSettings" }, { "$ref": "#/components/schemas/core.GooglePubSubAgentSettings", "title": "GooglePubSubAgentSettings" }, { "$ref": "#/components/schemas/core.CronOrchestrationAgentSettings", "title": "CronOrchestrationAgentSettings" }, { "$ref": "#/components/schemas/core.AMQPAgentSettings", "title": "AMQPAgentSettings" }, { "$ref": "#/components/schemas/core.CronSapAgentSettings", "title": "CronSapAgentSettings" }, { "$ref": "#/components/schemas/core.SMTPAgentSettings", "title": "SMTPAgentSettings" }, { "$ref": "#/components/schemas/core.CronSshAgentSettings", "title": "CronSshAgentSettings" }, { "$ref": "#/components/schemas/core.CommLogAgentSettings", "title": "CommLogAgentSettings" }, { "$ref": "#/components/schemas/core.SapAleAgentSettings", "title": "SapAleAgentSettings" }, { "$ref": "#/components/schemas/core.CronWebdavAgentSettings", "title": "CronWebdavAgentSettings" }, { "$ref": "#/components/schemas/core.RuleAgentSettings", "title": "RuleAgentSettings" }, { "$ref": "#/components/schemas/core.CronHttpAgentSettings", "title": "CronHttpAgentSettings" }, { "$ref": "#/components/schemas/core.IoTAgentSettings", "title": "IoTAgentSettings" } ], "title": "ProfileInputAgentSettings" }, "core.InputHandlingSettings": { "type": "object", "description": "How the raw input is received before parsing. `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.InputHandlingSettings", "description": "The type of this object, always `core.InputHandlingSettings`. Required where the member it is sent in accepts several types." }, "archive": { "$ref": "#/components/schemas/core.InputArchiveSettings", "description": "The input arrives as an archive. `null` keeps every stored value.", "title": "InputArchiveSettings" }, "encoding": { "type": "string", "default": "8859_1", "description": "Character encoding the input is read with in phase 2, a Java charset name (send `UTF-8` for JSON). Must be a known charset name. An `ISO-...` name is read back in its short form (`8859_1`).", "examples": [ "UTF-8" ] }, "skipAlreadyReceivedFiles": { "type": "boolean", "default": false, "description": "Skips a file already treated by Comm-Log; only meaningful for data received over a partner channel with Comm-Log active." } }, "title": "InputHandlingSettings" }, "core.InputValidationSettings": { "type": "object", "description": "Checks the parser runs on the parsed source tree, shared by every document type. `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.InputValidationSettings", "description": "The type of this object, always `core.InputValidationSettings`. Required where the member it is sent in accepts several types." }, "checkMandatoryAndType": { "type": "boolean", "default": false, "description": "Whether the parser checks that every source field has a value where the structure marks it mandatory, and that the value parses as the field's type." }, "checkMinMax": { "type": "boolean", "default": false, "description": "Whether the parser checks a source field's value against its structure's minimum/maximum (for `XML`, length) constraints. Stored per document type: a value sent unchanged on a write that switches `parsing.documentType` leaves the new type's stored value alone. Not supported while an XML profile's parser is `V4`: switching it on there is rejected, and it is left out of the response." }, "edifact": { "$ref": "#/components/schemas/core.EdifactValidationSettings", "description": "Checks applied to EDIFACT input. `null` keeps every stored value.", "title": "EdifactValidationSettings" }, "legacyTopLevelCheck": { "type": "boolean", "default": false, "description": "Whether only top-level source nodes that carry a value are checked, the pre-3.3.4 back-compatibility behaviour." }, "removeBlanks": { "type": "boolean", "default": false, "description": "Whether a fixed-length source field's padding is trimmed from its value before it is mapped." }, "semanticChecks": { "type": "boolean", "default": false, "description": "Whether the parser runs the source structure's semantic (cross-field) checks." } }, "title": "InputValidationSettings" }, "core.ProfileIntegrationSettings": { "type": "object", "description": "Phase 5 of a profile (`integrationSettings`): the integration unit that serialises the mapped target structure into an output document, e.g. JSON or XML. It runs after the mapping and before the response units; a response unit sends its output when its `contentType` is `core.ResponseContentType_IU`. Leave `unit` out when no response unit needs it.", "properties": { "class": { "type": "string", "const": "core.ProfileIntegrationSettings", "description": "The type of this object, always `core.ProfileIntegrationSettings`. Required where the member it is sent in accepts several types." }, "configFile": { "type": "string", "description": "Path of a configuration file on the Lobster server the integration unit reads, for a unit type that needs one (most do not). `null` keeps the stored value; send `\"\"` to clear it." }, "encoding": { "type": "string", "default": "8859_1", "description": "Character encoding the integration unit's own data is read in, as a Java charset name. `null` keeps the stored value.", "examples": [ "UTF-8" ] }, "postExecutionClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes the integration unit's output file before the response units run; empty runs none. Must be one of the post-executors installed on the instance (listed in `./etc/admin/datawizard/post_executer.properties`), unless it is already the stored value - a legally stored value that no longer resolves survives an unrelated edit. `null` keeps the stored value; send `\"\"` to switch it off. Runs only when an integration unit produced output. Its configuration file is not settable through this API. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "realmClient": { "type": "string", "default": "eai-wizard", "description": "Client id of the request the integration unit runs under; not shown in the profile editor. `null` keeps the stored value." }, "realmFunction": { "type": "integer", "format": "int32", "default": 1000, "description": "Function number of the request the integration unit runs under; not shown in the profile editor. `null` keeps the stored value." }, "realmSubFunction": { "type": "integer", "format": "int32", "default": 0, "description": "Sub-function number of the request the integration unit runs under; not shown in the profile editor. `null` keeps the stored value." }, "realmSupplier": { "type": "string", "default": "eai-wizard", "description": "Supplier id of the request the integration unit runs under; not shown in the profile editor. `null` keeps the stored value." }, "runOnlyIfVariable": { "type": "string", "description": "Name of a boolean target field or variable that gates whether the integration unit runs at all: empty always runs it, a non-empty name skips the unit for a record where that field or variable is not `true`. Ignored while `unit` is absent. `null` keeps the stored value; send `\"\"` to clear it." }, "unit": { "$ref": "#/components/schemas/core.ProfileIU", "description": "The integration unit that writes the target structure as a document: `core.JsonCreationIU`, `core.XMLCreationIU`, `core.EdifactCreationIU`, or `core.GenericIntegrationUnit` for any other class installed on the instance. Left out or `null`, the stored unit is kept, so a new profile then has none. Writing the same unit class as the one stored keeps its other parameters; writing a different class (or creating the unit) starts that class's parameters from its own defaults.", "title": "ProfileIU" } }, "title": "ProfileIntegrationSettings" }, "core.JobExecutionSettings": { "type": "object", "description": "How and how long a job runs. `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.JobExecutionSettings", "description": "The type of this object, always `core.JobExecutionSettings`. Required where the member it is sent in accepts several types." }, "limits": { "$ref": "#/components/schemas/core.JobExecutionLimits", "description": "Limits on the input a run accepts. `null` keeps every stored value.", "title": "JobExecutionLimits" }, "logPool": { "type": "string", "default": "STANDARD", "description": "Alias of the log pool the profile's run history is written to; must name a log pool that exists on the instance when changed." }, "maxProcessingMinutes": { "type": "integer", "format": "int32", "default": 0, "description": "Minutes a run may take before a notification mail is sent; `0` is unlimited. Must be at least `0`.", "minimum": 0 }, "priority": { "$ref": "#/components/schemas/core.ProfilePriority", "default": "NORMAL", "description": "Thread-pool priority the profile's jobs run at. Forced to `NORMAL` while `singleInstance` is `true`.", "title": "ProfilePriority" }, "singleInstance": { "type": "boolean", "default": false, "description": "Strict serial processing: only one job of the profile runs at a time. Forces `priority` to `NORMAL` and `responseSettings.asThread` to `false`." } }, "title": "JobExecutionSettings" }, "core.MappingBehaviourSettings": { "type": "object", "description": "Phase 3 behaviour of the mapping (the trees themselves stay in `mappingSettings`). `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.MappingBehaviourSettings", "description": "The type of this object, always `core.MappingBehaviourSettings`. Required where the member it is sent in accepts several types." }, "emptyValues": { "$ref": "#/components/schemas/core.EmptyValueSettings", "description": "How empty values are mapped. `null` keeps every stored value.", "title": "EmptyValueSettings" }, "fillAfterTemplate": { "type": "boolean", "default": false, "description": "Runs the filler again after a template operation." }, "fixRecordOutput": { "$ref": "#/components/schemas/core.FixRecordOutputSettings", "description": "FixRecord output. `null` keeps every stored value.", "title": "FixRecordOutputSettings" }, "mapper": { "$ref": "#/components/schemas/core.MapperType", "default": "EXTENDED", "description": "The data mapper the mapping runs with. A `V4` XML parser forces this to `EXTENDED` regardless of what is sent.", "title": "MapperType" }, "memory": { "$ref": "#/components/schemas/core.MappingMemorySettings", "description": "How the mapping holds its data. `null` keeps every stored value.", "title": "MappingMemorySettings" }, "newRecordOnSingleChangedValue": { "type": "boolean", "default": false, "description": "Starts a new output record as soon as a single one of the fields configured in the mapping changes, instead of requiring all of them to change; only meaningful for a `CSV`, `FIX`, `EXCEL`, `BWA`, `DB` or `SAP_ALE` `parsing.documentType`." }, "typeSafeVariables": { "type": "boolean", "default": true, "description": "Whether `resetOnNewRecord` on a `core.Variable` resets it to `initialValue` re-created from its declared type, instead of to an empty string regardless of type." }, "useMatchCodeValues": { "type": "boolean", "default": false, "description": "Uses matchcode values for functions in the mapping." }, "valuesMayBeBase64": { "type": "boolean", "default": false, "description": "Allows field values to be Base64-encoded." } }, "title": "MappingBehaviourSettings" }, "core.MappingSettings": { "type": "object", "description": "Held in a profile's `mappingSettings`: the source structure (the tree the parser fills from the input), the target structure (the tree the mapping builds) and the field links between them. The mapper walks the target tree depth-first in declared order; a target node repeats over the source node its `path` names, and each target field gets its value from its link, its function chain or its `fixValue`. Items are referenced by name everywhere, so keep every node and field name unique within its structure. A link must name an item its structure still contains after the write.", "properties": { "class": { "type": "string", "const": "core.MappingSettings", "description": "The type of this object, always `core.MappingSettings`. Required where the member it is sent in accepts several types." }, "constants": { "type": "array", "description": "The profile's constants: fixed name/value pairs a mapping function or filter can read like a variable, but which never change while the profile runs. A PATCH that sends this list replaces the whole set; a null list keeps the stored one.", "items": { "$ref": "#/components/schemas/core.ConstantDefinition", "title": "ConstantDefinition" } }, "mappings": { "type": "array", "description": "The field links: each `core.MappingLink` copies a source field's value into a target field, both named by field name. One source field may feed several target fields; a target field takes one link. \"For every source X produce a target Y\" is not a link but the target node's `path`. A PATCH replaces the whole list, so send the existing links along with the new ones. Must name fields present in their structure.", "items": { "$ref": "#/components/schemas/core.MappingLink", "title": "MappingLink" } }, "sourceStructure": { "$ref": "#/components/schemas/core.SourceDataStructure", "description": "The tree the parser fills from the input: `core.SourceNode` and `core.SourceField` items. For JSON input the top-level JSON object is the top-level source node, and object keys match items by name. A PATCH that sends its `nodes` replaces the whole tree, so send it complete.", "title": "SourceDataStructure" }, "targetStructure": { "$ref": "#/components/schemas/core.DestinationDataStructure", "description": "The tree the mapping builds and the integration unit serialises: `core.DestinationNode` and `core.DestinationField` items. A PATCH that sends its `nodes` replaces the whole tree, so send it complete.", "title": "DestinationDataStructure" }, "variables": { "type": "array", "description": "The profile's variables: every `core.Variable` a mapping function's `VARIABLE` parameter can read or write, both the ones the profile declared and the platform's built-in `VAR_*` ones. A PATCH that sends this list replaces the profile's own variables; a built-in `VAR_*` variable the list leaves out is kept, since the platform fills a built-in one at run time only while the profile declares it. A null list keeps the stored set.", "items": { "$ref": "#/components/schemas/core.Variable", "title": "Variable" } } }, "title": "MappingSettings" }, "core.ParsingSettings": { "type": "object", "description": "How the input is parsed (phase 2). `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.ParsingSettings", "description": "The type of this object, always `core.ParsingSettings`. Required where the member it is sent in accepts several types." }, "documentType": { "$ref": "#/components/schemas/core.IntegrationDataFormat", "description": "The document type of the input, which picks the parser that turns the data into `mappingSettings.sourceStructure`. `SCHEMA`, `SWAGGER`, `RAML`, `YAML`, `JSON_SCHEMA` and `MESSAGE_PACK` are refused: they name kinds of files a structure can be generated from, not document types a profile can parse.", "examples": [ "JSON" ], "title": "IntegrationDataFormat" }, "formatSettings": { "$ref": "#/components/schemas/core.AbstractFileFormatMetadata", "description": "Parser settings for the chosen `documentType`, e.g. `{\"class\": \"core.CSVFileMetadata\", \"delimiter\": \";\"}` for `CSV`. A read always publishes the class matching the stored `documentType` (`API` has none, so the member is absent for it); a write's class must match it.", "title": "AbstractFileFormatMetadata" } }, "title": "ParsingSettings" }, "core.ProfileResponseSettings": { "type": "object", "description": "Phase 6 of a profile, held in its `responseSettings`: where the result goes. `units` lists the response units (send by HTTP, write a file, publish to a broker, ...), which run one after another in list order after the integration unit; a unit that fails is logged as an error and the following units still run. The error members configure the mail sent to the data provider when a job of the profile fails. An HTTP caller only gets data back through a unit that returns it, e.g. `core.HttpProfileResponseUnit` with `returnResponseToCaller: true`.", "properties": { "class": { "type": "string", "const": "core.ProfileResponseSettings", "description": "The type of this object, always `core.ProfileResponseSettings`. Required where the member it is sent in accepts several types." }, "asThread": { "type": "boolean", "default": false, "description": "Runs the response units in their own thread instead of the job's own, so the job does not wait for them to finish. `null` keeps the stored value. Always `false` while `jobExecution.singleInstance` is `true`: left alone it is set so, switching it on then is not allowed." }, "attachInputToErrorMail": { "type": "boolean", "description": "Attaches the original input data to the error mail instead of only describing it. `null` keeps the stored value. Default `true` unless the instance is configured to default it off." }, "baseFileName": { "type": "string", "description": "Base file name a response unit's file-name placeholder resolves to, without extension. `null` keeps the stored value." }, "errorRecipient": { "type": "string", "description": "Mail address the error mail goes to when a job of this profile fails; the mail is sent only while this is non-blank. Several addresses are separated by `;`, `@VAR_SENDER@` is replaced by the sender of the input data and `%NAME%` system constants are resolved. `null` keeps the stored value; send `\"\"` to switch the mail off." }, "errorRecipients": { "type": "array", "description": "Further recipients of the error mail, one address per entry: a plain address is added as CC, `bcc:
` as BCC and `reply-to:
` as Reply-To. `@VAR_SENDER@` is replaced by the sender of the input data. Only used while `errorRecipient` is set. Omitting it or sending `null` keeps the stored list; send `[]` to clear it.", "items": { "type": "string" } }, "errorSubject": { "type": "string", "description": "Subject of the error mail. Placeholders are written `{--@NAME@--}`; available are `@VAR_PROFILENAME@`, `@VAR_JOBNR@`, `@VAR_FILENAME@`, `@VAR_SENDER@`, `@VAR_TIMESTAMP@`, `@VAR_ERROR@` and the profile's own variables, and `%NAME%` system constants are resolved. `null` keeps the stored value.", "examples": [ "Job {--@VAR_JOBNR@--} of {--@VAR_PROFILENAME@--} failed" ] }, "errorText": { "type": "string", "description": "Body of the error mail, with the same `{--@NAME@--}` placeholders as `errorSubject` (also `{--@VAR_SYS_EXCEPTION@--}` for the raw exception message); unknown placeholders are dropped. A new profile starts with a text naming the original file name and the job number. `null` keeps the stored value.", "examples": [ "Error: {--@VAR_ERROR@--}" ] }, "units": { "type": "array", "description": "The response units in execution order; each element names its type in `class`, e.g. `core.HttpProfileResponseUnit`. A sent array replaces the stored list: a unit left out is deleted, a `core.OpaqueProfileResponseUnit` too, and `[]` or `null` removes all. Configuration this API does not show (retries, conditions, dependencies between units, ...) survives only when the list comes back in its stored shape, same length and same type at every position (read, edit in place, send back); an insert, delete or reorder rebuilds every unit from the body with defaults for the rest. To change one unit alone, steer the element with `core$index` (its zero-based stored position).", "items": { "$ref": "#/components/schemas/core.ProfileResponseUnit", "title": "ProfileResponseUnit" } } }, "title": "ProfileResponseSettings" }, "core.RuntimeSettings": { "type": "object", "description": "Profile-wide runtime settings that sit outside the input agent, phase 2 parsing, the mapping and the response units: scheduling window, throttling, checkpoints and free text. `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.RuntimeSettings", "description": "The type of this object, always `core.RuntimeSettings`. Required where the member it is sent in accepts several types." }, "changeNote": { "type": "string", "description": "Free-text change note, shown in the profile's version history. Empty by default." }, "checkpointMail": { "$ref": "#/components/schemas/core.CheckpointMailSettings", "description": "The mail sent when a checkpoint window is missed. `null` keeps every stored member.", "title": "CheckpointMailSettings" }, "checkpoints": { "type": "array", "description": "Time windows in which the profile is expected to have run; a miss sends `checkpointMail`. The whole list is replaced on write: an element left out is deleted, `null` or omitted keeps the stored list.", "items": { "$ref": "#/components/schemas/core.ProfileCheckpoint", "title": "ProfileCheckpoint" } }, "errorOnSuspendedCall": { "type": "boolean", "default": false, "description": "Whether a call the input agent suspends (e.g. an inactive profile, or a full thread pool) answers an error to the caller instead of queueing silently." }, "keepInputInformation": { "type": "boolean", "default": true, "description": "Keeps the input's environment information (sender, receive time, ...) for later phases." }, "maxBound": { "type": "integer", "format": "int32", "default": 2147483647, "description": "Highest value the `` placeholder in a response unit's file name resolves to." }, "minBound": { "type": "integer", "format": "int32", "default": 1, "description": "Lowest value the `` placeholder in a response unit's file name resolves to." }, "noAutoRestartOfDefectiveJobs": { "type": "boolean", "default": false, "description": "Whether a job left in a crashed/defective state is prevented from auto-starting again on a server restart." }, "noErrorMail": { "type": "boolean", "default": false, "description": "Suppresses the error mail `responseSettings` would otherwise send on a failed job." }, "protectSyncAgent": { "type": "boolean", "default": false, "description": "Protects the input agent from being overwritten when the template profile this profile was derived from changes." }, "protectSyncInputTree": { "type": "boolean", "default": false, "description": "Protects the source structure from being overwritten when the template profile changes." }, "protectSyncOutputTree": { "type": "boolean", "default": false, "description": "Protects the target structure from being overwritten when the template profile changes." }, "protectSyncResponse": { "type": "boolean", "default": false, "description": "Protects the response units from being overwritten when the template profile changes." }, "protectSyncUnit": { "type": "boolean", "default": false, "description": "Protects the integration unit from being overwritten when the template profile changes." }, "readyForTransport": { "type": "boolean", "default": false, "description": "Marks the profile ready for transport between instances via the Transport Manager. Only a session with the Transport Manager flag right (or an admin) may change it." }, "replacesProfile": { "type": "string", "description": "Name of another profile this profile replaces: that profile is disabled once this one starts successfully. Empty replaces none." }, "throttling": { "$ref": "#/components/schemas/core.ThrottleType", "default": "SYSTEM", "description": "Whether the profile's jobs are throttled.", "title": "ThrottleType" }, "validFrom": { "type": "string", "$comment": "timestamp as utc time in milliseconds, serialized as a string", "description": "Start of the time frame the profile is allowed to run in, as epoch milliseconds in a string. Defaults to midnight of the day the profile is created.", "examples": [ "1790373600000" ] }, "validUntil": { "type": "string", "$comment": "timestamp as utc time in milliseconds, serialized as a string", "description": "End of the time frame the profile is allowed to run in, as epoch milliseconds in a string like `validFrom`. Defaults to 50 years after `validFrom`." } }, "title": "RuntimeSettings" }, "core.SignatureSettings": { "type": "object", "description": "Verification of the input's signature. `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.SignatureSettings", "description": "The type of this object, always `core.SignatureSettings`. Required where the member it is sent in accepts several types." }, "reportProfile": { "type": "string", "description": "Name of the profile the signature verification report is written through. Empty writes none; not checked for existence on write." }, "stopOnError": { "type": "boolean", "default": false, "description": "Aborts the job when signature verification fails, instead of continuing. Only meaningful while `verify` is `true`." }, "verify": { "type": "boolean", "default": false, "description": "Verifies the input's signature." } }, "title": "SignatureSettings" }, "core.SplittingSettings": { "type": "object", "description": "Every split setting in one place. `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.SplittingSettings", "description": "The type of this object, always `core.SplittingSettings`. Required where the member it is sent in accepts several types." }, "input": { "$ref": "#/components/schemas/core.SplittingInputSettings", "description": "Splitting the input into several jobs or chunks. `null` keeps every stored value.", "title": "SplittingInputSettings" }, "output": { "$ref": "#/components/schemas/core.SplitOutputSettings", "description": "Splitting the output per record. `null` keeps every stored value.", "title": "SplitOutputSettings" } }, "title": "SplittingSettings" }, "ErrorResponse": { "type": "object", "description": "Standard Platform API error envelope: every failed request carries a single `error` object. Every response carries exactly one of `data` (success) or `error` (failure) at top level.", "properties": { "error": { "$ref": "#/components/schemas/Error", "description": "What went wrong: branch on its `code`, show its `message`, and read `details` for one entry per failed member." } }, "required": [ "error" ] }, "core.Phase4Settings": { "type": "object", "description": "The SQL step run against a database after the mapping (phase 4). `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.Phase4Settings", "description": "The type of this object, always `core.Phase4Settings`. Required where the member it is sent in accepts several types." }, "continueOnSqlError": { "type": "boolean", "default": false, "description": "Continues with the next record when a phase 4 SQL statement errors, instead of failing the job." }, "enabled": { "type": "boolean", "default": false, "description": "Turns phase 4 on. Forced back to `false` while the profile's `integrationSettings.unit` is `core.SqlBulkUnit`." }, "onlyIfVariable": { "type": "string", "description": "Name of a profile variable that must resolve to `true` at run time for phase 4 to execute; empty always runs phase 4 while `enabled` is `true`." }, "trimValues": { "type": "boolean", "default": false, "description": "Trims SQL values before they are used in phase 4." } }, "title": "Phase4Settings" }, "core.DatabaseSourceSettings": { "type": "object", "description": "The statement a Cron-SQL input (`inputAgentSettings` of `core.CronSqlAgentSettings`) runs; applies only while the profile has one, otherwise a changed member is rejected. `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.DatabaseSourceSettings", "description": "The type of this object, always `core.DatabaseSourceSettings`. Required where the member it is sent in accepts several types." }, "connection": { "type": "string", "description": "Name of the database connection (alias) to query; it must already exist on the instance and be allowed for the profile's client. `%NAME%` constants and variables are resolved." }, "deleteAfterRead": { "$ref": "#/components/schemas/core.SqlDeleteMode", "default": "NONE", "description": "Whether, and how, the rows `statement` selected are deleted once the job has processed them.", "title": "SqlDeleteMode" }, "emptyResult": { "$ref": "#/components/schemas/core.SourceEmptyResultSettings", "description": "What the input does when `statement` returns no row. `null` keeps every stored value.", "title": "SourceEmptyResultSettings" }, "parameters": { "type": "array", "description": "Statement parameters bound positionally into `statement`. Left out keeps the stored ones; an empty list binds none.", "items": { "$ref": "#/components/schemas/core.SqlCronParameter", "title": "SqlCronParameter" } }, "statement": { "type": "string", "description": "The SQL statement to run. Lines starting with `--` are dropped. `@0:t@` passes the time of the previous run as a statement parameter, so a run can read only new rows. `%NAME%` constants and variables are resolved.", "examples": [ "SELECT id, name, amount FROM orders WHERE exported = 0" ] } }, "title": "DatabaseSourceSettings" }, "core.EdifactContrlSettings": { "type": "object", "description": "The CONTRL acknowledgement for EDIFACT input; applies only while `parsing.documentType` is `EDI`, otherwise a changed member is rejected. `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.EdifactContrlSettings", "description": "The type of this object, always `core.EdifactContrlSettings`. Required where the member it is sent in accepts several types." }, "enabled": { "type": "boolean", "default": false, "description": "Whether a CONTRL message is sent to the profile named in `profile`. Forced `false` while `parsing.formatSettings.tradacoms` is `true`; switching it on there is rejected." }, "profile": { "type": "string", "description": "Name of the profile that sends the CONTRL message; not checked for existence on write." } }, "title": "EdifactContrlSettings" }, "core.WorkflowReference": { "type": "object", "description": "A reference to a workflow by its `id`, which is the workflow's name.", "properties": { "class": { "type": "string", "const": "core.WorkflowReference", "description": "The type of this object, always `core.WorkflowReference`. Required where the member it is sent in accepts several types." }, "id": { "type": "string", "description": "The workflow's name, which identifies it: the latest version of the workflow with this name is started, ignoring upper and lower case. An empty or `null` id runs none.", "examples": [ "Notify Support" ] } }, "title": "WorkflowReference" }, "core.EnvironmentCheckSettings": { "type": "object", "description": "A check run before the job starts. `null` keeps every stored value; any change needs a data-admin session.", "properties": { "class": { "type": "string", "const": "core.EnvironmentCheckSettings", "description": "The type of this object, always `core.EnvironmentCheckSettings`. Required where the member it is sent in accepts several types." }, "className": { "type": "string", "description": "Fully qualified Java class name of an environment check run before the job starts; must be one of the environment checks installed on the instance when changed. Empty runs none. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=ENVIRONMENT_CHECK`.", "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=ENVIRONMENT_CHECK" }, "parameter": { "type": "string", "description": "Config file path for `className`; its content is not settable through this API." } }, "title": "EnvironmentCheckSettings" }, "core.PostParserSettings": { "type": "object", "description": "A postparser that runs after parsing. `null` keeps every stored value; any change needs a data-admin session.", "properties": { "class": { "type": "string", "const": "core.PostParserSettings", "description": "The type of this object, always `core.PostParserSettings`. Required where the member it is sent in accepts several types." }, "className": { "type": "string", "description": "Fully qualified Java class name of a postparser that runs after phase 2; must be one of the postparsers installed on the instance when changed. Empty runs none. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_PARSER`.", "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_PARSER" } }, "title": "PostParserSettings" }, "core.PreParserSettings": { "type": "object", "description": "A preparser that runs before parsing. `null` keeps every stored value; any change needs a data-admin session.", "properties": { "class": { "type": "string", "const": "core.PreParserSettings", "description": "The type of this object, always `core.PreParserSettings`. Required where the member it is sent in accepts several types." }, "className": { "type": "string", "description": "Fully qualified Java class name of a preparser that runs before phase 2; must be one of the preparsers installed on the instance when changed. `com.ebd.hub.datawizard.parser.DummyPreParser` skips the mapping while still handing the input on unchanged. Empty runs none. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=PRE_PARSER`.", "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=PRE_PARSER" }, "parameter": { "type": "string", "description": "Config file path for `className`; its content is not settable through this API." }, "resultOverwritesBackup": { "type": "boolean", "default": false, "description": "Whether the preparser's result overwrites the backup of the original input." } }, "title": "PreParserSettings" }, "core.DataQueueAgentSettings": { "type": "object", "description": "Polls a data queue on an IBM i (AS/400) system every `interval` milliseconds and starts one job per entry read (file name `DQ_.dat`). The entry text is the job's input, or, with `useSql`, the CSV result of `sqlStatement` run with the entry as parameter. Needs at least `host`, `user` and `queue`. Password: not settable through this API; an update through the API keeps it.", "properties": { "class": { "type": "string", "const": "core.DataQueueAgentSettings", "description": "The type of this object, always `core.DataQueueAgentSettings`. Required where the member it is sent in accepts several types." }, "alias": { "type": "string", "description": "Database alias `sqlStatement` runs on, allowed for the profile's client; `%name%` constants are resolved. Only used when `useSql` is true." }, "className": { "type": "string", "default": "com.ebd.hub.datawizard.util.DefaultAS400DataHandler", "description": "Java class that inserts the entry into `sqlStatement` when `useSql` is true (replaces `&1`). A custom class must be installed on the instance." }, "errorOnNoData": { "type": "boolean", "default": false, "description": "When true, an entry whose `sqlStatement` returns no rows is logged as a failed job; when false it is skipped silently. Only used when `useSql` is true." }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that reads the queue in a load-balanced installation; empty runs it on the active node. Leave it empty on a single-node installation." }, "host": { "type": "string", "description": "Host name or IP address of the IBM i (AS/400) system. `%name%` constants are resolved.", "examples": [ "as400.example.com" ] }, "interval": { "type": "integer", "format": "int64", "default": 1000, "description": "Milliseconds between two polls of the queue. Each poll reads entries until the queue is empty; with an interval of up to one minute at most 50 entries per poll.", "examples": [ 1000 ], "minimum": 50 }, "key": { "type": "string", "description": "Key for a keyed data queue: when set, the queue is read as a keyed queue and only entries with exactly this key are read. Empty reads a normal (non-keyed) queue." }, "queue": { "type": "string", "description": "Integrated file system path of the data queue object.", "examples": [ "/QSYS.LIB/MYLIB.LIB/ORDERS.DTAQ" ] }, "skipExecution": { "type": "array", "description": "Weekly time windows in which the queue is not read, e.g. a nightly backup of the IBM i system. Empty: the queue is polled all the time the profile is active.", "items": { "$ref": "#/components/schemas/core.DataQueueSkipExecution", "title": "DataQueueSkipExecution" } }, "sqlStatement": { "type": "string", "description": "SQL query run against the database `alias` for every entry read when `useSql` is true; with the default `className` every `&1` is replaced by the entry text, unescaped. Line breaks are replaced by spaces. The result rows, as comma-separated CSV, become the job's input; no rows means no job (see `errorOnNoData`).", "examples": [ "SELECT * FROM ORDERS WHERE ORDERNO = '&1'" ] }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true }, "useSql": { "type": "boolean", "default": false, "description": "When true, each entry read is not processed itself but used as parameter of `sqlStatement` on `alias`, and the query result is the job's input; when false the entry text is the input." }, "user": { "type": "string", "description": "User profile the agent signs on to the IBM i system with. `%name%` constants are resolved. A failed sign-on is logged at runtime, not rejected on save." } }, "title": "DataQueueAgentSettings" }, "core.HttpAgentSettings": { "type": "object", "description": "Receives data through HTTP calls to `/dw/Request/`: each call runs the profile with the request body as input (GET, HEAD and DELETE get a placeholder document) and answers the caller. Query parameters reach the mapping as variables `MSG_CALL_`. The endpoint needs no Platform API token: without `channelIds` (or credentials configured outside this API) anyone who knows the URL can call it. Minimal set: `url`, the accepted methods (e.g. `acceptHttpPost`), and to return data `useResponseOnSuccess: false` plus a response unit with `returnResponseToCaller: true`.", "properties": { "class": { "type": "string", "const": "core.HttpAgentSettings", "description": "The type of this object, always `core.HttpAgentSettings`. Required where the member it is sent in accepts several types." }, "acceptEmptyBody": { "type": "boolean", "default": false, "description": "What a POST, PUT or PATCH without body does. `false` refuses it with status 500 and runs no job; `true` runs the job with a placeholder document, e.g. `{ \"body\": \"data\" }` for JSON input." }, "acceptEmptyResponse": { "type": "boolean", "default": false, "description": "`true` answers every successful call with status 204 and no body, taking precedence over `useResponseOnSuccess` and `responseOnSuccess`." }, "acceptHttpDelete": { "type": "boolean", "default": false, "description": "`true` lets DELETE calls reach this profile. Its body is read only with `deleteHasPayload`; otherwise the job gets a placeholder document." }, "acceptHttpGet": { "type": "boolean", "default": false, "description": "`true` lets GET calls reach this profile. A GET carries no body: the job gets a placeholder document, and the query parameters as `MSG_CALL_` variables. A call with a method the agent does not accept does not match it." }, "acceptHttpHead": { "type": "boolean", "default": false, "description": "`true` lets HEAD calls reach this profile; the job gets a placeholder document." }, "acceptHttpPatch": { "type": "boolean", "default": false, "description": "`true` lets PATCH calls reach this profile; the request body is the job's input." }, "acceptHttpPost": { "type": "boolean", "default": true, "description": "`true` lets POST calls reach this profile; the request body is the job's input." }, "acceptHttpPut": { "type": "boolean", "default": false, "description": "`true` lets PUT calls reach this profile; the request body is the job's input." }, "acceptREST": { "type": "boolean", "default": false, "description": "`true` makes this a REST endpoint: calls to any sub-path of `url` match too, e.g. `orders/v1/42`; the part after `url` is put into the variable `MSG_CALL_HTTP_PATH_DATA` and split into named variables by `restUrlPlaceholder`." }, "apiResponseTestFiles": { "type": "array", "description": "Response examples for the generated OpenAPI document, taken from the profile's sample-response files; a listed file that does not exist can make the `?api` request fail. Has no effect on calls.", "items": { "$ref": "#/components/schemas/core.HttpAgentTestFile", "title": "HttpAgentTestFile" } }, "apiTestFiles": { "type": "array", "description": "Request examples for the generated OpenAPI document, taken from the profile's test-mapping sample files. Has no effect on calls.", "items": { "$ref": "#/components/schemas/core.HttpAgentTestFile", "title": "HttpAgentTestFile" } }, "asyncRequest": { "type": "boolean", "default": false, "description": "`true` hands the call to background processing and answers at once, before the job has run: with `responseOnSuccess` (or 204 with `acceptEmptyResponse`). A response unit can then not return data, so with `useResponseOnSuccess: false` the caller gets an error." }, "authenticationType": { "$ref": "#/components/schemas/core.HttpAuthenticationType", "default": "SYSTEM", "description": "HTTP authentication scheme the caller must use when authentication is required (see `channelIds`).", "title": "HttpAuthenticationType" }, "channelIds": { "type": "array", "description": "Ids of the partners' HTTP channels allowed to call this agent; list them with `GET /platform/api/partners/preview/{partnerId}/channels` (type `HTTP`). When set, a caller must authenticate as one of these channels (its `remoteId` as user plus its password, or a token accepted for it), else it gets 401. Empty requires no authentication. The ids are stored as sent, without checking that they exist.", "items": { "type": "integer", "format": "int64" } }, "deleteHasPayload": { "type": "boolean", "default": false, "description": "`true` reads the body of a DELETE call as the job's input, like for POST. Only relevant with `acceptHttpDelete`." }, "enableApi": { "type": "boolean", "default": true, "description": "`true` publishes a generated API description of the endpoint: `?api` returns an OpenAPI document as JSON (`?api&yaml` as YAML), for a SOAP agent `?wsdl` the WSDL. With `false` such calls run the profile like any other call." }, "errorCode": { "type": "string", "default": "500", "description": "HTTP status sent with `responseOnError` when the job fails, as text; a `%NAME%` constant may be used. A value that is not a number, or below `100`, falls back to `500` at run time. Empty or blank on a write is treated the same as absent. Always `500` while `webservice` is true.", "examples": [ "500" ] }, "errorCodeSettings": { "type": "array", "description": "Error bodies for further HTTP statuses besides `errorCode`, e.g. a status a mapping raises with `480 throw http exception` and an empty message. Also listed as error responses in the generated OpenAPI document.", "items": { "$ref": "#/components/schemas/core.HttpAgentErrorCode", "title": "HttpAgentErrorCode" } }, "invisibleForDmz": { "type": "boolean", "default": false, "description": "`true` refuses calls that reach the instance through the Lobster DMZ server (answered 404 as if no profile matched); only calls made directly to the instance get through." }, "jwtScopes": { "type": "string", "description": "OAuth2 scopes a JWT bearer token must carry to call this agent, separated by spaces; all listed scopes are required, more are fine, a token missing one gets 403. Empty checks no scopes. Only checked when the caller authenticates with a JWT bearer token.", "examples": [ "orders.read orders.write" ] }, "mimeType": { "type": "string", "default": "text/html", "description": "Content type of the answer to the caller, on success and when the job fails. A value containing `json` also makes the error placeholders JSON-escaped. Sent as the answer's `Content-Type`; a charset in it only labels the body and does not convert it. The profile output is sent as written, so set the unit's `encoding` to match the charset (e.g. `application/json; charset=UTF-8`). A fixed response message is sent as UTF-8, except when the input is unpacked as an archive (compressed input): then it is sent as ISO-8859-1. The job-error text is always ISO-8859-1, whatever charset is declared. Also the media type of the responses in the generated OpenAPI document.", "examples": [ "application/json" ] }, "multiPartFileKey": { "type": "string", "description": "For a `multipart/form-data` call: name of the part that carries the data to process. Empty takes the part named `file` if there is one, else the first file part. The other parts become variables `MSG_CALL_HTTP_MULTIPART_NAME` / `_VALUE`, their count `MSG_CALL_HTTP_MULTIPARTS`.", "examples": [ "document" ] }, "namespaceUrl": { "type": "string", "default": "http://tempuri.org", "description": "Target namespace of the WSDL generated for a SOAP agent and of its default SOAP answer. Only used while `webservice` is true." }, "params": { "type": "array", "description": "Elements named to match one of authorization, proxy-authorization, cookie, set-cookie, *password*, *passwd*, *pwd*, *passphrase*, *secret*, *credential*, *token*, *apikey*, *api.key*, *api-key* hold a secret: a read returns those encrypted, and a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else. Every other element is unaffected.", "items": { "$ref": "#/components/schemas/core.HttpAgentParam", "title": "HttpAgentParam" } }, "responseOnError": { "type": "string", "description": "Body sent with status `errorCode` when the job fails. Without `webservice`, absent or blank defaults to `[Job-Id @VAR_JOBNR@] failed`. Placeholders: `{--Exception--}` (error text), `{--ExceptionBase64--}`, `{--FullStackTraceException--}`, `@VAR_JOBNR@`; for a JSON `mimeType` the inserted texts are escaped for JSON, and with `webservice` the body is wrapped in a SOAP fault." }, "responseOnSuccess": { "type": "string", "description": "Fixed body sent to the caller after a successful job while `useResponseOnSuccess` is true; `@VAR_JOBNR@` and `@VAR_SYS_MESSAGE_ID@` are replaced with the job number and message id. Always used for an archive (e.g. ZIP) upload.", "examples": [ "{\"status\": \"ok\", \"job\": \"@VAR_JOBNR@\"}" ] }, "restUrlPlaceholder": { "type": "string", "description": "Names for the path segments after `url` in REST mode: a call to `/berlin/42` sets the variables `MSG_CALL_HTTP_REST_API_PATH_shop` = `berlin` and `MSG_CALL_HTTP_REST_API_PATH_petId` = `42`. A leading or trailing `/` is removed. Only evaluated while `acceptREST` is true.", "examples": [ "{shop}/{petId}" ] }, "swaggerResponseDesc": { "type": "string", "description": "Description of the success response in the generated OpenAPI document; only used while `responseOnSuccess` is empty, and `Success!` when this is empty too. Has no effect on calls." }, "swaggerTransformerVersion": { "$ref": "#/components/schemas/core.SwaggerTransformerVersion", "default": "Legacy", "description": "Generator of the `?api` OpenAPI document. Has no effect on calls.", "title": "SwaggerTransformerVersion" }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true }, "url": { "type": "string", "description": "Path the agent listens on, appended to `/dw/Request/`. Leading and trailing `/` do not matter; the rest must match exactly, unless `acceptREST` also admits sub-paths. Keep it unique: when several active profiles match a call (same path, method and `params`), one of them is taken.", "examples": [ "orders/v1" ] }, "useResponseOnSuccess": { "type": "boolean", "default": true, "description": "How the caller's success answer is produced. `true` sends the fixed text `responseOnSuccess`; `false` sends what a response unit with `returnResponseToCaller: true` hands back, and if none does the caller gets an error. Ignored while `acceptEmptyResponse` is true. With `false`, input that is split into several messages or an archive is refused." }, "webservice": { "type": "boolean", "default": false, "description": "`true` makes this a SOAP web service: `?wsdl` serves a generated WSDL (see `wsdlCreator`, `namespaceUrl`), errors are answered as SOAP faults with status 500 (ignoring `errorCode`), and multipart parts are not turned into variables. Through this API, `acceptHttpPost`, `acceptHttpGet`, `acceptHttpHead` and `acceptHttpDelete` keep the values sent." }, "wsdlCreator": { "type": "string", "default": "com.ebd.hub.datawizard.util.creator.DefaultWSDLCreator", "description": "How the WSDL and the success answer of a SOAP agent are built: `com.ebd.hub.datawizard.util.creator.DefaultWSDLCreator` answers with a fixed SOAP envelope carrying the job number (`ProfileReferenceID`), whatever `useResponseOnSuccess` says; `com.ebd.hub.datawizard.util.creator.ResponseWSDLCreator` derives the WSDL from the target structure. Only used while `webservice` is true." } }, "title": "HttpAgentSettings" }, "core.CronOftpAgentSettings": { "type": "object", "description": "Calls a partner over OFTP on the schedule in `cronSchedule` and picks up the files the partner has waiting; nothing is sent. Set `channel` to the partner's OFTP channel, which supplies the identities, passwords and address; `oftpTLS`, `oftpPort` and `oftpDmzOption` adjust the connection. Each received file becomes one job, except ENGDAT messages, which go to the ENGDAT handling.", "properties": { "class": { "type": "string", "const": "core.CronOftpAgentSettings", "description": "The type of this object, always `core.CronOftpAgentSettings`. Required where the member it is sent in accepts several types." }, "acceptEmptyFiles": { "type": "boolean", "description": "Stored but not evaluated: the OFTP agent processes every received file, whatever its size." }, "channel": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelOFTP", "description": "The OFTP partner channel to call, as `{\"id\": }`; list channels with `GET /platform/api/partners/preview/{partnerId}/channels` (type `OFTP`). Checked on write and read back resolved. Required: without it every run fails with \"No OFTP partner channel set\". The host comes from the channel's address. Its `direction` must be `OUT` or `IN_AND_OUT`, because the call opens the connection; this is checked on write. A channel that was deleted reads as no channel; a copy references none.", "title": "IntegrationPartnerChannelOFTP" }, "cronSchedule": { "type": "array", "description": "When the agent runs: a list of crontab expressions with six space-separated fields `second minute hour day-of-month month day-of-week`. The agent runs whenever any entry matches, in the server's time zone, and only while the profile is `active`. A field takes `*`, a number, a list `0,30`, a range `8-17` (hour ranges may wrap, `22-2`), a stepped range `8-18/2` or a step `*/15` (not `0/15`). Month is `1`-`12`, day-of-week `1` = Sunday to `7` = Saturday, and day-of-month also accepts `L` for the last day; names such as `MON` and `?` are not supported. Examples: `0 0 9 * * 2-6` weekdays at 09:00, `0 */15 * * * *` every 15 minutes, `0 0 0 L * *` at the end of each month. Put `0` in the second field. Not expressible: every second week, the n-th weekday of a month, holidays; `2-6` still runs on public holidays. Say so instead of approximating. An entry without exactly six fields, or one the scheduler itself could never load (an unparsable field such as `MON`, `* * * * * *`, a value out of range, ...), is refused - unless it is already stored exactly as sent, which an unrelated write of the profile must not start refusing. Omitted on create or sent empty, the agent runs every minute. A schedule made as an interval, time table or trigger reads back as an empty list and becomes a 1-minute interval on the next write of the profile.", "items": { "type": "string" } }, "destination": { "type": "string", "description": "Recipient SFID. Stored but not evaluated: the call uses the identities of `channel`." }, "errorProfile": { "type": "string", "description": "Name of a profile to start when a run of this agent fails, for example because the data cannot be fetched, or because no data is found and `missingIsError` is `true`. It is not started when the run is stopped. Leave it empty to start no profile. `null` keeps the stored value." }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that runs the agent in a load-balanced installation; empty runs it on the active node. Leave it empty on a single-node installation. `null` keeps the stored value." }, "fileFilterClassName": { "type": "string", "description": "Fully qualified name of a Java file filter class that decides which of the fetched files are processed; empty uses none. `null` keeps the stored value." }, "fileFilterConfigName": { "type": "string", "description": "Name of the configuration file of the `fileFilterClassName` class. `null` keeps the stored value." }, "host": { "type": "string", "description": "Host name or address to call; non-empty overrides the channel's address. `null` resets it to the default." }, "interval": { "type": "integer", "format": "int32", "description": "Minutes or seconds (`intervalUseSeconds`) between runs; applies only with `scheduleType` `INTERVAL`: absent on a read of another schedule type, and sent with one it is refused, so send both." }, "intervalUseSeconds": { "type": "boolean", "default": false, "description": "`true` makes `interval` seconds instead of minutes; like `interval`, only with `scheduleType` `INTERVAL`." }, "mailOnError": { "type": "boolean", "default": false, "description": "`true` sends the error mail when a run of the agent fails. `null` keeps the stored value." }, "maxProcessTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum run time of a job of the agent in minutes, `0` for no limit; see `maxTimeAbsolute`. `null` keeps the stored value." }, "maxTimeAbsolute": { "type": "boolean", "default": true, "description": "`true` reads the agent's maximum run time as an absolute time instead of a limit up to its next run. `null` keeps the stored value." }, "missingIsError": { "type": "boolean", "default": false, "description": "`true` fails the job when the agent finds no data to process. `null` keeps the stored value." }, "multipartBrowserMode": { "$ref": "#/components/schemas/core.HttpMultiPartMode", "default": "RFC6532", "description": "How the parts of a multipart request are encoded: `STRICT` (strict MIME headers), `RFC6532` (UTF-8 in part headers, e.g. non-ASCII file names), `COMPATIBLE` (browser-like, minimal part headers) or `SYSTEM` (the instance's setting). Used by `core.CronHttpAgentSettings` when multipart parts are sent; other agent types store it unused. `null` keeps the stored value.", "title": "HttpMultiPartMode" }, "oftpByTcpIp": { "type": "boolean", "default": true, "description": "`true` calls over TCP/IP, which `oftpTLS` then secures; `false` calls over ISDN. `null` resets it to the default." }, "oftpDmzOption": { "$ref": "#/components/schemas/core.OftpDmzOption", "default": "DMZ_BY_SYSTEM", "description": "Whether the call goes through the Lobster DMZ.", "title": "OftpDmzOption" }, "oftpPort": { "type": "integer", "format": "int32", "description": "Port to call; a value above `0` overrides the port of the channel's address. Omitted on create it is stored as `6619`, which then overrides the channel's port, so send `0` to use the channel's port.", "examples": [ 6619 ] }, "oftpServiceName": { "type": "string", "default": "OftpService", "description": "Name of the OFTP service on the instance that makes the call; only change it where several OFTP services are installed." }, "oftpTLS": { "type": "boolean", "default": true, "description": "`true` connects over TCP/IP with TLS, `false` over plain TCP/IP. It also decides the port used when neither `oftpPort` nor the channel's address has one: `6619` with TLS, `3305` without." }, "origin": { "type": "string", "description": "Sender SFID. Stored but not evaluated: the call uses the identities of `channel`." }, "profileAfterRun": { "type": "string", "description": "Name of a profile to start after a run of this agent. Leave it empty to start no profile. `null` keeps the stored value." }, "runInBackground": { "type": "boolean", "default": false, "description": "`true` hands every received file to a separate background job and continues with the next file at once, so several jobs of this profile run in parallel and their order is not guaranteed; `false` processes the files one after another within the run." }, "scheduleType": { "$ref": "#/components/schemas/core.CronScheduleType", "description": "How the agent decides when to run; decides which of `interval`/`intervalUseSeconds`, `timeTables`, `triggerType`/`trigger*`, `cronSchedule` applies. Absent on write keeps the stored schedule and every member below untouched, whatever it currently is - only a sent `scheduleType` (or a sent `cronSchedule`, which keeps its own legacy write behaviour) changes it. A schedule made in the editor as interval, time table or trigger is fully readable, unlike through `cronSchedule` alone.", "title": "CronScheduleType" }, "timeTables": { "type": "array", "description": "Fixed run times; apply only with `scheduleType` `TIMETABLE`: absent on a read of another schedule type, and entries sent with one are refused. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronTimeTableEntry", "title": "CronTimeTableEntry" } }, "timeZone": { "type": "string", "description": "Time zone the `cronSchedule` entries are read in, e.g. `Europe/Berlin`; empty uses the time zone of the server. `null` keeps the stored value." }, "triggerAuthenticationType": { "$ref": "#/components/schemas/core.HttpAuthenticationType", "default": "SYSTEM", "description": "Only for `triggerType` `HTTP`: authentication scheme required of the caller when `triggerHttpChannelIds` names channels (`OAUTH2` without channels acts as `SYSTEM`).", "title": "HttpAuthenticationType" }, "triggerContext": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message context another profile forwards under to reach this agent." }, "triggerHttpChannelIds": { "type": "array", "description": "Only for `triggerType` `HTTP`: ids of the partner HTTP channels allowed to call the trigger (its `remoteId` as user plus the channel's password). Setting a different, non-empty list turns off a literal user/password credential pair; that pair is not settable through this API. Empty/absent requires no authentication unless such credentials are set. Get channel ids with `GET /platform/api/partners/preview/{partnerId}/channels` (type `HTTP`).", "items": { "type": "integer", "format": "int64" } }, "triggerHttpContentType": { "type": "string", "default": "text/html", "description": "Only for `triggerType` `HTTP`: content type of the trigger's HTTP response." }, "triggerHttpInvisibleForDmz": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` refuses calls reaching the instance through the Lobster DMZ server." }, "triggerHttpParams": { "type": "array", "description": "Only for `triggerType` `HTTP`: constant key/value pairs merged into the started job, like `%name%` constants. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronHttpTriggerParam", "title": "CronHttpTriggerParam" } }, "triggerHttpPathInfo": { "type": "string", "description": "Only for `triggerType` `HTTP`: URL suffix the trigger is reachable under. Required for `HTTP`.", "examples": [ "myTrigger/v1" ] }, "triggerHttpReturnData": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: whether the job's result is sent back as the HTTP response; only takes effect with `triggerSynchron` true." }, "triggerOnAnyServer": { "type": "boolean", "default": false, "description": "Only for `triggerType` `PROFILE`: whether a load-balancing cluster may run the triggered job on any node instead of only the one that received the forward." }, "triggerQueue": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message queue another profile forwards under to reach this agent." }, "triggerSynchron": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` waits for the job and answers the HTTP call with its result (see `triggerHttpReturnData`); `false` answers at once." }, "triggerType": { "$ref": "#/components/schemas/core.CronTriggerType", "description": "What starts the agent; only meaningful with `scheduleType` `TRIGGER` or `CRONTAB_HTTP`.", "title": "CronTriggerType" }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "title": "CronOftpAgentSettings" }, "core.FTPAgentSettings": { "type": "object", "description": "Receives files that partners upload to the platform's built-in FTP/FTPS server and starts a job for each file. A partner logs in with the credentials of an FTP channel; this profile takes the file when that channel is one of its `channels` and the file matches `fileName` (and `dir`, if set); when several profiles match, the most specific one wins. Needs at least one entry in `channels`.", "properties": { "class": { "type": "string", "const": "core.FTPAgentSettings", "description": "The type of this object, always `core.FTPAgentSettings`. Required where the member it is sent in accepts several types." }, "acceptEmptyFiles": { "type": "boolean", "default": false, "description": "`true` also processes uploaded files of zero bytes; `false` skips them with a log entry." }, "channels": { "type": "array", "description": "FTP partner channels whose logins may deliver to this profile, each as `{\"id\": }` from `GET /platform/api/partners/preview/{partnerId}/channels` (type `FTP`). Only the id is read on write and neither its existence nor its type is checked; an entry that does not resolve to an FTP channel is left out on read. An existing channel's `direction` must be `IN` or `IN_AND_OUT`, which is checked on write. Without a channel the profile never receives anything.", "items": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelFTP", "title": "IntegrationPartnerChannelFTP" } }, "dir": { "type": "string", "description": "Sub-directory, relative to the partner's home directory on the Lobster FTP/SFTP server, that an upload must land in for this profile; separate several with `;`. `$USER$` is replaced by the uploading partner's login name. Empty accepts uploads in any directory.", "examples": [ "in/orders" ] }, "fileName": { "type": "string", "description": "File-name pattern a file the partner uploads must match for this profile to take it. `*` and `?` are wildcards and the match ignores case; `|` separates alternatives, an alternative starting with `regex:` is a regular expression, and `` is replaced by the current date. If several profiles accept an upload, the one with the longest matching `dir` and the most specific pattern wins.", "examples": [ "ORDERS_*.csv|INVOIC_*.csv" ] }, "processOnLogout": { "type": "boolean", "default": false, "description": "`true` collects the files a partner uploads during one session and processes them only when the partner logs out; `false` processes each file as soon as its upload is complete." }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "title": "FTPAgentSettings" }, "core.CronPop3AgentSettings": { "type": "object", "description": "Fetches mails from a POP3 mailbox on the schedule in `cronSchedule` and routes the body and each attachment of every mail to a profile by the rules in `mailDispatchSettings`. Set `channel` to the partner's Mail channel (or `host`, `port` and `user`) and at least one rule. Fetched mails are deleted from the mailbox.", "properties": { "class": { "type": "string", "const": "core.CronPop3AgentSettings", "description": "The type of this object, always `core.CronPop3AgentSettings`. Required where the member it is sent in accepts several types." }, "channel": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelMail", "description": "The Mail partner channel whose mailbox is polled, as `{\"id\": }`; list channels with `GET /platform/api/partners/preview/{partnerId}/channels` (type `Mail`). Checked on write and read back resolved. Server, protocol, login and password come from the channel; `host`, `port` and `user` override them when set. The channel must allow POP3 or IMAP retrieval respectively, otherwise every run fails. Without a channel `host` and `user` are required, and the password cannot be set through the API. Its `direction` must be `IN` or `IN_AND_OUT`, which is checked on write. A channel that was deleted reads as no channel; a copy references none.", "title": "IntegrationPartnerChannelMail" }, "cronSchedule": { "type": "array", "description": "When the agent runs: a list of crontab expressions with six space-separated fields `second minute hour day-of-month month day-of-week`. The agent runs whenever any entry matches, in the server's time zone, and only while the profile is `active`. A field takes `*`, a number, a list `0,30`, a range `8-17` (hour ranges may wrap, `22-2`), a stepped range `8-18/2` or a step `*/15` (not `0/15`). Month is `1`-`12`, day-of-week `1` = Sunday to `7` = Saturday, and day-of-month also accepts `L` for the last day; names such as `MON` and `?` are not supported. Examples: `0 0 9 * * 2-6` weekdays at 09:00, `0 */15 * * * *` every 15 minutes, `0 0 0 L * *` at the end of each month. Put `0` in the second field. Not expressible: every second week, the n-th weekday of a month, holidays; `2-6` still runs on public holidays. Say so instead of approximating. An entry without exactly six fields, or one the scheduler itself could never load (an unparsable field such as `MON`, `* * * * * *`, a value out of range, ...), is refused - unless it is already stored exactly as sent, which an unrelated write of the profile must not start refusing. Omitted on create or sent empty, the agent runs every minute. A schedule made as an interval, time table or trigger reads back as an empty list and becomes a 1-minute interval on the next write of the profile.", "items": { "type": "string" } }, "dmz": { "type": "boolean", "default": false, "description": "Not used by POP3 and IMAP: the mail is always fetched directly. Leave it `false`." }, "errorProfile": { "type": "string", "description": "Name of a profile to start when a run of this agent fails, for example because the data cannot be fetched, or because no data is found and `missingIsError` is `true`. It is not started when the run is stopped. Leave it empty to start no profile. `null` keeps the stored value." }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that runs the agent in a load-balanced installation; empty runs it on the active node. Leave it empty on a single-node installation. `null` keeps the stored value." }, "fileFilterClassName": { "type": "string", "description": "Fully qualified name of a Java file filter class that decides which of the fetched files are processed; empty uses none. `null` keeps the stored value." }, "fileFilterConfigName": { "type": "string", "description": "Name of the configuration file of the `fileFilterClassName` class. `null` keeps the stored value." }, "handleUnknownMailData": { "$ref": "#/components/schemas/core.UnknownMailHandling", "default": "STORE_UNRESOLVED", "description": "What happens to a mail body or attachment that no rule in `mailDispatchSettings` accepts: `STORE_UNRESOLVED` stores it in the instance's 'unresolved' folder and sends the unresolved-data notification, `DISCARD` discards it.", "title": "UnknownMailHandling" }, "host": { "type": "string", "description": "Host name of the mail server; overrides the server of `channel` when set. Empty uses the channel's. Placeholders such as `%NAME%` are resolved.", "examples": [ "imap.example.com" ] }, "interval": { "type": "integer", "format": "int32", "description": "Minutes or seconds (`intervalUseSeconds`) between runs; applies only with `scheduleType` `INTERVAL`: absent on a read of another schedule type, and sent with one it is refused, so send both." }, "intervalUseSeconds": { "type": "boolean", "default": false, "description": "`true` makes `interval` seconds instead of minutes; like `interval`, only with `scheduleType` `INTERVAL`." }, "mailDispatchSettings": { "type": "array", "description": "Rules that decide, for the body and for each attachment of a fetched mail, which profile processes it. They are checked in list order and the first matching rule whose profile is usable wins; `scoring` does not reorder them. Sending the member replaces all rules. Data no rule accepts is handled as `handleUnknownMailData` says, so an empty list sends everything there; at least one rule is required.", "items": { "$ref": "#/components/schemas/core.MailDispatchRule", "title": "MailDispatchRule" } }, "mailOnError": { "type": "boolean", "default": false, "description": "`true` sends the error mail when a run of the agent fails. `null` keeps the stored value." }, "maxProcessTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum run time of a job of the agent in minutes, `0` for no limit; see `maxTimeAbsolute`. `null` keeps the stored value." }, "maxTimeAbsolute": { "type": "boolean", "default": true, "description": "`true` reads the agent's maximum run time as an absolute time instead of a limit up to its next run. `null` keeps the stored value." }, "missingIsError": { "type": "boolean", "default": false, "description": "`true` fails the job when the agent finds no data to process. `null` keeps the stored value." }, "multipartBrowserMode": { "$ref": "#/components/schemas/core.HttpMultiPartMode", "default": "RFC6532", "description": "How the parts of a multipart request are encoded: `STRICT` (strict MIME headers), `RFC6532` (UTF-8 in part headers, e.g. non-ASCII file names), `COMPATIBLE` (browser-like, minimal part headers) or `SYSTEM` (the instance's setting). Used by `core.CronHttpAgentSettings` when multipart parts are sent; other agent types store it unused. `null` keeps the stored value.", "title": "HttpMultiPartMode" }, "port": { "type": "integer", "format": "int32", "description": "Port of the mail server; a value above `0` overrides the port of `channel`. Omitted on create it is stored as `21`, which then overrides the channel's port, so send `0` to use the channel's port.", "examples": [ 993 ] }, "profileAfterRun": { "type": "string", "description": "Name of a profile to start after a run of this agent. Leave it empty to start no profile. `null` keeps the stored value." }, "runInBackground": { "type": "boolean", "default": false, "description": "`true` hands every mail body and attachment to a separate background job and continues at once, so several jobs run in parallel and their order is not guaranteed; `false` processes them one after another within the run." }, "scheduleType": { "$ref": "#/components/schemas/core.CronScheduleType", "description": "How the agent decides when to run; decides which of `interval`/`intervalUseSeconds`, `timeTables`, `triggerType`/`trigger*`, `cronSchedule` applies. Absent on write keeps the stored schedule and every member below untouched, whatever it currently is - only a sent `scheduleType` (or a sent `cronSchedule`, which keeps its own legacy write behaviour) changes it. A schedule made in the editor as interval, time table or trigger is fully readable, unlike through `cronSchedule` alone.", "title": "CronScheduleType" }, "skipCorruptMail": { "type": "boolean", "default": false, "description": "`true` skips a mail that cannot be read or parsed and continues with the next one; `false` aborts the run at such a mail." }, "supportSMIME": { "type": "boolean", "description": "Stored but not read: S/MIME handling of the fetched mails is always enabled." }, "timeTables": { "type": "array", "description": "Fixed run times; apply only with `scheduleType` `TIMETABLE`: absent on a read of another schedule type, and entries sent with one are refused. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronTimeTableEntry", "title": "CronTimeTableEntry" } }, "timeZone": { "type": "string", "description": "Time zone the `cronSchedule` entries are read in, e.g. `Europe/Berlin`; empty uses the time zone of the server. `null` keeps the stored value." }, "triggerAuthenticationType": { "$ref": "#/components/schemas/core.HttpAuthenticationType", "default": "SYSTEM", "description": "Only for `triggerType` `HTTP`: authentication scheme required of the caller when `triggerHttpChannelIds` names channels (`OAUTH2` without channels acts as `SYSTEM`).", "title": "HttpAuthenticationType" }, "triggerContext": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message context another profile forwards under to reach this agent." }, "triggerHttpChannelIds": { "type": "array", "description": "Only for `triggerType` `HTTP`: ids of the partner HTTP channels allowed to call the trigger (its `remoteId` as user plus the channel's password). Setting a different, non-empty list turns off a literal user/password credential pair; that pair is not settable through this API. Empty/absent requires no authentication unless such credentials are set. Get channel ids with `GET /platform/api/partners/preview/{partnerId}/channels` (type `HTTP`).", "items": { "type": "integer", "format": "int64" } }, "triggerHttpContentType": { "type": "string", "default": "text/html", "description": "Only for `triggerType` `HTTP`: content type of the trigger's HTTP response." }, "triggerHttpInvisibleForDmz": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` refuses calls reaching the instance through the Lobster DMZ server." }, "triggerHttpParams": { "type": "array", "description": "Only for `triggerType` `HTTP`: constant key/value pairs merged into the started job, like `%name%` constants. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronHttpTriggerParam", "title": "CronHttpTriggerParam" } }, "triggerHttpPathInfo": { "type": "string", "description": "Only for `triggerType` `HTTP`: URL suffix the trigger is reachable under. Required for `HTTP`.", "examples": [ "myTrigger/v1" ] }, "triggerHttpReturnData": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: whether the job's result is sent back as the HTTP response; only takes effect with `triggerSynchron` true." }, "triggerOnAnyServer": { "type": "boolean", "default": false, "description": "Only for `triggerType` `PROFILE`: whether a load-balancing cluster may run the triggered job on any node instead of only the one that received the forward." }, "triggerQueue": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message queue another profile forwards under to reach this agent." }, "triggerSynchron": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` waits for the job and answers the HTTP call with its result (see `triggerHttpReturnData`); `false` answers at once." }, "triggerType": { "$ref": "#/components/schemas/core.CronTriggerType", "description": "What starts the agent; only meaningful with `scheduleType` `TRIGGER` or `CRONTAB_HTTP`.", "title": "CronTriggerType" }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true }, "user": { "type": "string", "description": "Login name at the mail server; overrides the retrieval user of `channel` when set. Empty uses the channel's." } }, "title": "CronPop3AgentSettings" }, "core.MQTTAgentSettings": { "type": "object", "description": "Subscribes to a topic of an MQTT broker, reached through an MQTT connection alias, and starts a job for each received message, or for each batch when `messageBufferSize` is above 1. Needs at least `alias` and `topic`. The job's input file is named `mqtt.data`. With an MQTT 5 connection the message's user properties are available as variables `MSG_CALL_` (plus `MSG_CALL_MQTT_CORRELATIONDATA` and `MSG_CALL_MQTT_CONTENTTYPE`) as long as `messageBufferSize` is 1 or `finalValueFunction` is `LAST`.", "properties": { "class": { "type": "string", "const": "core.MQTTAgentSettings", "description": "The type of this object, always `core.MQTTAgentSettings`. Required where the member it is sent in accepts several types." }, "alias": { "type": "string", "description": "Name of the MQTT connection (broker, credentials, MQTT version) to subscribe with; it must exist on the instance." }, "binaryConverterClassName": { "type": "string", "description": "Java class name of a custom binary converter, meant for `complexDataType` `BINARY`. Stored, but the MQTT agent does not call it." }, "complexDataType": { "$ref": "#/components/schemas/core.ComplexDataType", "description": "Structured payload type. Omit it for plain text or numbers read as `genericDataType`.", "title": "ComplexDataType" }, "delimiter": { "type": "string", "description": "Text put between the messages when `finalValueFunction` is `ALL` and `complexDataType` is not set; `NL` stands for a line break (CRLF). Empty: the messages are concatenated without separator.", "examples": [ "," ] }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that runs this agent in a load-balanced installation; empty runs it on the active node. Leave it empty on a single-node installation." }, "filters": { "type": "array", "description": "Function chain that decides, for each message that arrives while the buffer is not yet full, whether the collected messages (including this one) are handed on early: the chain runs on the message text and the buffer is forwarded when its last result is true. It does not drop messages. Only evaluated with `messageBufferSize` above 1 and only when `mqttConditions` is absent; an empty `mqttConditions` list disables it too.", "items": { "$ref": "#/components/schemas/core.MessageFilter", "title": "MessageFilter" } }, "finalValueFunction": { "$ref": "#/components/schemas/core.FinalValueFunction", "default": "LAST", "description": "What the job receives from the collected messages. Without `complexDataType`, `MIN`, `MAX` and `AVG` need a numeric `genericDataType` (`INTEGER`, `FLOAT`, `BIG_DECIMAL` or `BIG_INTEGER`) and `ALL` works for `STRING`, `INTEGER`, `FLOAT`, `BIG_DECIMAL` and `BIG_INTEGER`; any other combination produces no job. With `complexDataType` `JSON` or `XML`, `ALL` combines the messages (see there) and every other value passes the last message on.", "title": "FinalValueFunction" }, "genericDataType": { "$ref": "#/components/schemas/core.ValueType", "default": "STRING", "description": "Type the whole message payload is read as for `mqttConditions` and `finalValueFunction`. `mqttConditions` support `STRING`, `INTEGER`, `DOUBLE`, `DATE` (`yyyy-MM-dd`), `FLOAT` and `BIG_INTEGER`. A message that does not parse as the type fails the check. Keep `STRING` when `complexDataType` is set.", "title": "ValueType" }, "messageBufferSize": { "type": "integer", "format": "int32", "default": 1, "description": "Number of messages collected before they are handed on together as one job, combined by `finalValueFunction`. `1` starts one job per message; `timeout`, `mqttConditions` and `filters` only have an effect above 1." }, "messageIntervalCheck": { "type": "integer", "format": "int32", "default": 1, "description": "Not evaluated by the MQTT agent: `mqttConditions` and `filters` are checked on every message." }, "mqttConditions": { "type": "array", "description": "Conditions that hand the collected messages on early: when a message that arrives before the buffer is full matches any value of any entry, the buffer including this message is forwarded. The whole message is compared, read as `genericDataType`; entries are OR-linked. They do not drop messages. Only evaluated with `messageBufferSize` above 1; when present (even as an empty list), `filters` are ignored.", "items": { "$ref": "#/components/schemas/core.MqttConditionEntry", "title": "MqttConditionEntry" } }, "qos": { "$ref": "#/components/schemas/core.MqttQualityOfService", "default": "AT_LEAST_ONCE", "description": "MQTT quality of service of the subscription.", "title": "MqttQualityOfService" }, "timeout": { "type": "integer", "format": "int32", "default": 0, "description": "Seconds after which the messages collected so far are handed on as one job even though fewer than `messageBufferSize` have arrived; checked about every 5 seconds. `0` waits until the buffer is full. Only meaningful with `messageBufferSize` above 1." }, "topic": { "type": "string", "description": "Topic filter to subscribe to (MQTT wildcards `+` and `#` are allowed). `%name%` constants are resolved.", "examples": [ "plant1/+/temperature" ] }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "title": "MQTTAgentSettings" }, "core.OFTPAgentSettings": { "type": "object", "description": "Receives files (OFTP virtual files) that partners send to the platform's OFTP server and starts a job for each file. This profile takes a file that arrives on one of its `channels` and matches `fileName`, `origin` and `destination`; when several profiles match, the most specific one wins. Needs at least one entry in `channels`.", "properties": { "class": { "type": "string", "const": "core.OFTPAgentSettings", "description": "The type of this object, always `core.OFTPAgentSettings`. Required where the member it is sent in accepts several types." }, "channels": { "type": "array", "description": "OFTP partner channels allowed to deliver to this profile, each as `{\"id\": }` from `GET /platform/api/partners/preview/{partnerId}/channels` (type `OFTP`). Only the id is read on write and neither its existence nor its type is checked; an entry that does not resolve to an OFTP channel is left out on read. An existing channel's `direction` must be `IN` or `IN_AND_OUT`, which is checked on write. Without a channel the profile never receives anything.", "items": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelOFTP", "title": "IntegrationPartnerChannelOFTP" } }, "destination": { "type": "string", "description": "Destination SFID (Odette id of the recipient) the file must be addressed to, compared case-insensitively; a trailing `*` matches every id starting with the text before it. Empty accepts any.", "examples": [ "O0013000000LOB*" ] }, "fileName": { "type": "string", "default": "*.*", "description": "Pattern the virtual file (dataset) name must match, case-insensitive: wildcards `*` and `?`, several patterns separated by `|`, `regex:` for a regular expression, and date placeholders like ``. `addval:` takes the pattern from the additional value `` of the delivering channel." }, "origin": { "type": "string", "description": "Originator SFID (Odette id of the sender) the file must come from, compared case-insensitively; a trailing `*` matches every id starting with the text before it. Empty accepts any." }, "processOnLogout": { "type": "boolean", "default": false, "description": "When true, received files are collected and processed only when the partner ends the OFTP session; when false, each file is processed as soon as it arrives." }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "title": "OFTPAgentSettings" }, "core.CronImapAgentSettings": { "type": "object", "description": "Fetches mails from an IMAP mailbox on the schedule in `cronSchedule` and routes the body and each attachment of every mail to a profile by the rules in `mailDispatchSettings`. Set `channel` to the partner's Mail channel (or `host`, `port` and `user`), the folder in `dir` and at least one rule. Fetched mails are deleted from the folder, or moved to `imapMoveDir` when that is set.", "properties": { "class": { "type": "string", "const": "core.CronImapAgentSettings", "description": "The type of this object, always `core.CronImapAgentSettings`. Required where the member it is sent in accepts several types." }, "channel": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelMail", "description": "The Mail partner channel whose mailbox is polled, as `{\"id\": }`; list channels with `GET /platform/api/partners/preview/{partnerId}/channels` (type `Mail`). Checked on write and read back resolved. Server, protocol, login and password come from the channel; `host`, `port` and `user` override them when set. The channel must allow POP3 or IMAP retrieval respectively, otherwise every run fails. Without a channel `host` and `user` are required, and the password cannot be set through the API. Its `direction` must be `IN` or `IN_AND_OUT`, which is checked on write. A channel that was deleted reads as no channel; a copy references none.", "title": "IntegrationPartnerChannelMail" }, "cronSchedule": { "type": "array", "description": "When the agent runs: a list of crontab expressions with six space-separated fields `second minute hour day-of-month month day-of-week`. The agent runs whenever any entry matches, in the server's time zone, and only while the profile is `active`. A field takes `*`, a number, a list `0,30`, a range `8-17` (hour ranges may wrap, `22-2`), a stepped range `8-18/2` or a step `*/15` (not `0/15`). Month is `1`-`12`, day-of-week `1` = Sunday to `7` = Saturday, and day-of-month also accepts `L` for the last day; names such as `MON` and `?` are not supported. Examples: `0 0 9 * * 2-6` weekdays at 09:00, `0 */15 * * * *` every 15 minutes, `0 0 0 L * *` at the end of each month. Put `0` in the second field. Not expressible: every second week, the n-th weekday of a month, holidays; `2-6` still runs on public holidays. Say so instead of approximating. An entry without exactly six fields, or one the scheduler itself could never load (an unparsable field such as `MON`, `* * * * * *`, a value out of range, ...), is refused - unless it is already stored exactly as sent, which an unrelated write of the profile must not start refusing. Omitted on create or sent empty, the agent runs every minute. A schedule made as an interval, time table or trigger reads back as an empty list and becomes a 1-minute interval on the next write of the profile.", "items": { "type": "string" } }, "dir": { "type": "string", "description": "IMAP folder to read; when not empty it overrides the folder set on `channel`. Date masks and variables are resolved.", "examples": [ "INBOX" ] }, "dmz": { "type": "boolean", "default": false, "description": "Not used by POP3 and IMAP: the mail is always fetched directly. Leave it `false`." }, "errorProfile": { "type": "string", "description": "Name of a profile to start when a run of this agent fails, for example because the data cannot be fetched, or because no data is found and `missingIsError` is `true`. It is not started when the run is stopped. Leave it empty to start no profile. `null` keeps the stored value." }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that runs the agent in a load-balanced installation; empty runs it on the active node. Leave it empty on a single-node installation. `null` keeps the stored value." }, "fileFilterClassName": { "type": "string", "description": "Fully qualified name of a Java file filter class that decides which of the fetched files are processed; empty uses none. `null` keeps the stored value." }, "fileFilterConfigName": { "type": "string", "description": "Name of the configuration file of the `fileFilterClassName` class. `null` keeps the stored value." }, "handleUnknownMailData": { "$ref": "#/components/schemas/core.UnknownMailHandling", "default": "STORE_UNRESOLVED", "description": "What happens to a mail body or attachment that no rule in `mailDispatchSettings` accepts: `STORE_UNRESOLVED` stores it in the instance's 'unresolved' folder and sends the unresolved-data notification, `DISCARD` discards it.", "title": "UnknownMailHandling" }, "host": { "type": "string", "description": "Host name of the mail server; overrides the server of `channel` when set. Empty uses the channel's. Placeholders such as `%NAME%` are resolved.", "examples": [ "imap.example.com" ] }, "imapMoveDir": { "type": "string", "description": "IMAP folder the fetched mails are moved to instead of being deleted; it must already exist, otherwise the run fails. Empty deletes fetched mails.", "examples": [ "Processed" ] }, "interval": { "type": "integer", "format": "int32", "description": "Minutes or seconds (`intervalUseSeconds`) between runs; applies only with `scheduleType` `INTERVAL`: absent on a read of another schedule type, and sent with one it is refused, so send both." }, "intervalUseSeconds": { "type": "boolean", "default": false, "description": "`true` makes `interval` seconds instead of minutes; like `interval`, only with `scheduleType` `INTERVAL`." }, "mailDispatchSettings": { "type": "array", "description": "Rules that decide, for the body and for each attachment of a fetched mail, which profile processes it. They are checked in list order and the first matching rule whose profile is usable wins; `scoring` does not reorder them. Sending the member replaces all rules. Data no rule accepts is handled as `handleUnknownMailData` says, so an empty list sends everything there; at least one rule is required.", "items": { "$ref": "#/components/schemas/core.MailDispatchRule", "title": "MailDispatchRule" } }, "mailOnError": { "type": "boolean", "default": false, "description": "`true` sends the error mail when a run of the agent fails. `null` keeps the stored value." }, "maxProcessTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum run time of a job of the agent in minutes, `0` for no limit; see `maxTimeAbsolute`. `null` keeps the stored value." }, "maxTimeAbsolute": { "type": "boolean", "default": true, "description": "`true` reads the agent's maximum run time as an absolute time instead of a limit up to its next run. `null` keeps the stored value." }, "missingIsError": { "type": "boolean", "default": false, "description": "`true` fails the job when the agent finds no data to process. `null` keeps the stored value." }, "multipartBrowserMode": { "$ref": "#/components/schemas/core.HttpMultiPartMode", "default": "RFC6532", "description": "How the parts of a multipart request are encoded: `STRICT` (strict MIME headers), `RFC6532` (UTF-8 in part headers, e.g. non-ASCII file names), `COMPATIBLE` (browser-like, minimal part headers) or `SYSTEM` (the instance's setting). Used by `core.CronHttpAgentSettings` when multipart parts are sent; other agent types store it unused. `null` keeps the stored value.", "title": "HttpMultiPartMode" }, "port": { "type": "integer", "format": "int32", "description": "Port of the mail server; a value above `0` overrides the port of `channel`. Omitted on create it is stored as `21`, which then overrides the channel's port, so send `0` to use the channel's port.", "examples": [ 993 ] }, "profileAfterRun": { "type": "string", "description": "Name of a profile to start after a run of this agent. Leave it empty to start no profile. `null` keeps the stored value." }, "runInBackground": { "type": "boolean", "default": false, "description": "`true` hands every mail body and attachment to a separate background job and continues at once, so several jobs run in parallel and their order is not guaranteed; `false` processes them one after another within the run." }, "scheduleType": { "$ref": "#/components/schemas/core.CronScheduleType", "description": "How the agent decides when to run; decides which of `interval`/`intervalUseSeconds`, `timeTables`, `triggerType`/`trigger*`, `cronSchedule` applies. Absent on write keeps the stored schedule and every member below untouched, whatever it currently is - only a sent `scheduleType` (or a sent `cronSchedule`, which keeps its own legacy write behaviour) changes it. A schedule made in the editor as interval, time table or trigger is fully readable, unlike through `cronSchedule` alone.", "title": "CronScheduleType" }, "skipCorruptMail": { "type": "boolean", "default": false, "description": "`true` skips a mail that cannot be read or parsed and continues with the next one; `false` aborts the run at such a mail." }, "supportSMIME": { "type": "boolean", "description": "Stored but not read: S/MIME handling of the fetched mails is always enabled." }, "timeTables": { "type": "array", "description": "Fixed run times; apply only with `scheduleType` `TIMETABLE`: absent on a read of another schedule type, and entries sent with one are refused. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronTimeTableEntry", "title": "CronTimeTableEntry" } }, "timeZone": { "type": "string", "description": "Time zone the `cronSchedule` entries are read in, e.g. `Europe/Berlin`; empty uses the time zone of the server. `null` keeps the stored value." }, "triggerAuthenticationType": { "$ref": "#/components/schemas/core.HttpAuthenticationType", "default": "SYSTEM", "description": "Only for `triggerType` `HTTP`: authentication scheme required of the caller when `triggerHttpChannelIds` names channels (`OAUTH2` without channels acts as `SYSTEM`).", "title": "HttpAuthenticationType" }, "triggerContext": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message context another profile forwards under to reach this agent." }, "triggerHttpChannelIds": { "type": "array", "description": "Only for `triggerType` `HTTP`: ids of the partner HTTP channels allowed to call the trigger (its `remoteId` as user plus the channel's password). Setting a different, non-empty list turns off a literal user/password credential pair; that pair is not settable through this API. Empty/absent requires no authentication unless such credentials are set. Get channel ids with `GET /platform/api/partners/preview/{partnerId}/channels` (type `HTTP`).", "items": { "type": "integer", "format": "int64" } }, "triggerHttpContentType": { "type": "string", "default": "text/html", "description": "Only for `triggerType` `HTTP`: content type of the trigger's HTTP response." }, "triggerHttpInvisibleForDmz": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` refuses calls reaching the instance through the Lobster DMZ server." }, "triggerHttpParams": { "type": "array", "description": "Only for `triggerType` `HTTP`: constant key/value pairs merged into the started job, like `%name%` constants. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronHttpTriggerParam", "title": "CronHttpTriggerParam" } }, "triggerHttpPathInfo": { "type": "string", "description": "Only for `triggerType` `HTTP`: URL suffix the trigger is reachable under. Required for `HTTP`.", "examples": [ "myTrigger/v1" ] }, "triggerHttpReturnData": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: whether the job's result is sent back as the HTTP response; only takes effect with `triggerSynchron` true." }, "triggerOnAnyServer": { "type": "boolean", "default": false, "description": "Only for `triggerType` `PROFILE`: whether a load-balancing cluster may run the triggered job on any node instead of only the one that received the forward." }, "triggerQueue": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message queue another profile forwards under to reach this agent." }, "triggerSynchron": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` waits for the job and answers the HTTP call with its result (see `triggerHttpReturnData`); `false` answers at once." }, "triggerType": { "$ref": "#/components/schemas/core.CronTriggerType", "description": "What starts the agent; only meaningful with `scheduleType` `TRIGGER` or `CRONTAB_HTTP`.", "title": "CronTriggerType" }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true }, "user": { "type": "string", "description": "Login name at the mail server; overrides the retrieval user of `channel` when set. Empty uses the channel's." } }, "title": "CronImapAgentSettings" }, "core.CronMongodbAgentSettings": { "type": "object", "description": "Reads documents from a MongoDB collection on the schedule in `cronSchedule`. Set `alias`, `databaseName`, `collectionName` and `query`; by default every document found is processed as its own job, while `oneDocument` combines them into JSON arrays. The data arrives as JSON, so the profile's input format is JSON.", "properties": { "class": { "type": "string", "const": "core.CronMongodbAgentSettings", "description": "The type of this object, always `core.CronMongodbAgentSettings`. Required where the member it is sent in accepts several types." }, "alias": { "type": "string", "description": "Name of the MongoDB connection to read from; it must already exist on the instance and be allowed for the profile's client. `@name@` variables are resolved." }, "collectionName": { "type": "string", "description": "Name of the collection in `databaseName` to query. `@name@` variables are resolved.", "examples": [ "orders" ] }, "cronSchedule": { "type": "array", "description": "When the agent runs: a list of crontab expressions with six space-separated fields `second minute hour day-of-month month day-of-week`. The agent runs whenever any entry matches, in the server's time zone, and only while the profile is `active`. A field takes `*`, a number, a list `0,30`, a range `8-17` (hour ranges may wrap, `22-2`), a stepped range `8-18/2` or a step `*/15` (not `0/15`). Month is `1`-`12`, day-of-week `1` = Sunday to `7` = Saturday, and day-of-month also accepts `L` for the last day; names such as `MON` and `?` are not supported. Examples: `0 0 9 * * 2-6` weekdays at 09:00, `0 */15 * * * *` every 15 minutes, `0 0 0 L * *` at the end of each month. Put `0` in the second field. Not expressible: every second week, the n-th weekday of a month, holidays; `2-6` still runs on public holidays. Say so instead of approximating. An entry without exactly six fields, or one the scheduler itself could never load (an unparsable field such as `MON`, `* * * * * *`, a value out of range, ...), is refused - unless it is already stored exactly as sent, which an unrelated write of the profile must not start refusing. Omitted on create or sent empty, the agent runs every minute. A schedule made as an interval, time table or trigger reads back as an empty list and becomes a 1-minute interval on the next write of the profile.", "items": { "type": "string" } }, "databaseName": { "type": "string", "description": "Name of the MongoDB database. `@name@` variables are resolved.", "examples": [ "shop" ] }, "errorProfile": { "type": "string", "description": "Name of a profile to start when a run of this agent fails, for example because the data cannot be fetched, or because no data is found and `missingIsError` is `true`. It is not started when the run is stopped. Leave it empty to start no profile. `null` keeps the stored value." }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that runs the agent in a load-balanced installation; empty runs it on the active node. Leave it empty on a single-node installation. `null` keeps the stored value." }, "fileFilterClassName": { "type": "string", "description": "Fully qualified name of a Java file filter class that decides which of the fetched files are processed; empty uses none. `null` keeps the stored value." }, "fileFilterConfigName": { "type": "string", "description": "Name of the configuration file of the `fileFilterClassName` class. `null` keeps the stored value." }, "interval": { "type": "integer", "format": "int32", "description": "Minutes or seconds (`intervalUseSeconds`) between runs; applies only with `scheduleType` `INTERVAL`: absent on a read of another schedule type, and sent with one it is refused, so send both." }, "intervalUseSeconds": { "type": "boolean", "default": false, "description": "`true` makes `interval` seconds instead of minutes; like `interval`, only with `scheduleType` `INTERVAL`." }, "jsonType": { "$ref": "#/components/schemas/core.MongoDbJsonType", "default": "JSON", "description": "How documents are written as JSON.", "title": "MongoDbJsonType" }, "mailOnError": { "type": "boolean", "default": false, "description": "`true` sends the error mail when a run of the agent fails. `null` keeps the stored value." }, "maxBatchSize": { "type": "integer", "format": "int32", "default": 0, "description": "With `oneDocument`: number of documents per array, so each block of that size becomes one job. `0` or `1` puts all documents into one array; ignored when it is not smaller than `maxRows`." }, "maxProcessTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum run time of a job of the agent in minutes, `0` for no limit; see `maxTimeAbsolute`. `null` keeps the stored value." }, "maxRows": { "type": "integer", "format": "int32", "default": 2147483647, "description": "Maximum number of documents a find reads per run. `0` or less means no limit." }, "maxTimeAbsolute": { "type": "boolean", "default": true, "description": "`true` reads the agent's maximum run time as an absolute time instead of a limit up to its next run. `null` keeps the stored value." }, "missingIsError": { "type": "boolean", "default": false, "description": "`true` fails the job when the agent finds no data to process. `null` keeps the stored value." }, "multipartBrowserMode": { "$ref": "#/components/schemas/core.HttpMultiPartMode", "default": "RFC6532", "description": "How the parts of a multipart request are encoded: `STRICT` (strict MIME headers), `RFC6532` (UTF-8 in part headers, e.g. non-ASCII file names), `COMPATIBLE` (browser-like, minimal part headers) or `SYSTEM` (the instance's setting). Used by `core.CronHttpAgentSettings` when multipart parts are sent; other agent types store it unused. `null` keeps the stored value.", "title": "HttpMultiPartMode" }, "oneDocument": { "type": "boolean", "default": false, "description": "`true` combines the documents of a run into one JSON array `[{...}, {...}]` processed as a single job (split by `maxBatchSize`); `false` processes every document as its own job." }, "profileAfterRun": { "type": "string", "description": "Name of a profile to start after a run of this agent. Leave it empty to start no profile. `null` keeps the stored value." }, "projection": { "type": "string", "description": "JSON projection for a find that selects the fields to return. Empty returns whole documents. Not used for an aggregation `query`.", "examples": [ "{\"_id\": 0, \"orderNo\": 1, \"total\": 1}" ] }, "query": { "type": "string", "default": "{}", "description": "A JSON filter document for a find; empty reads every document. A JSON array instead runs an aggregation pipeline, e.g. `[{\"$match\": {\"status\": \"open\"}}]`, and then `projection` and the `maxRows` limit are not applied. `@0:t@` inserts the time of the previous run as `yyyy-MM-dd'T'HH:mm:ss.SSS'Z'`, so a run can read only new documents.", "examples": [ "{\"status\": \"open\"}" ] }, "scheduleType": { "$ref": "#/components/schemas/core.CronScheduleType", "description": "How the agent decides when to run; decides which of `interval`/`intervalUseSeconds`, `timeTables`, `triggerType`/`trigger*`, `cronSchedule` applies. Absent on write keeps the stored schedule and every member below untouched, whatever it currently is - only a sent `scheduleType` (or a sent `cronSchedule`, which keeps its own legacy write behaviour) changes it. A schedule made in the editor as interval, time table or trigger is fully readable, unlike through `cronSchedule` alone.", "title": "CronScheduleType" }, "timeTables": { "type": "array", "description": "Fixed run times; apply only with `scheduleType` `TIMETABLE`: absent on a read of another schedule type, and entries sent with one are refused. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronTimeTableEntry", "title": "CronTimeTableEntry" } }, "timeZone": { "type": "string", "description": "Time zone the `cronSchedule` entries are read in, e.g. `Europe/Berlin`; empty uses the time zone of the server. `null` keeps the stored value." }, "triggerAuthenticationType": { "$ref": "#/components/schemas/core.HttpAuthenticationType", "default": "SYSTEM", "description": "Only for `triggerType` `HTTP`: authentication scheme required of the caller when `triggerHttpChannelIds` names channels (`OAUTH2` without channels acts as `SYSTEM`).", "title": "HttpAuthenticationType" }, "triggerContext": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message context another profile forwards under to reach this agent." }, "triggerHttpChannelIds": { "type": "array", "description": "Only for `triggerType` `HTTP`: ids of the partner HTTP channels allowed to call the trigger (its `remoteId` as user plus the channel's password). Setting a different, non-empty list turns off a literal user/password credential pair; that pair is not settable through this API. Empty/absent requires no authentication unless such credentials are set. Get channel ids with `GET /platform/api/partners/preview/{partnerId}/channels` (type `HTTP`).", "items": { "type": "integer", "format": "int64" } }, "triggerHttpContentType": { "type": "string", "default": "text/html", "description": "Only for `triggerType` `HTTP`: content type of the trigger's HTTP response." }, "triggerHttpInvisibleForDmz": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` refuses calls reaching the instance through the Lobster DMZ server." }, "triggerHttpParams": { "type": "array", "description": "Only for `triggerType` `HTTP`: constant key/value pairs merged into the started job, like `%name%` constants. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronHttpTriggerParam", "title": "CronHttpTriggerParam" } }, "triggerHttpPathInfo": { "type": "string", "description": "Only for `triggerType` `HTTP`: URL suffix the trigger is reachable under. Required for `HTTP`.", "examples": [ "myTrigger/v1" ] }, "triggerHttpReturnData": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: whether the job's result is sent back as the HTTP response; only takes effect with `triggerSynchron` true." }, "triggerOnAnyServer": { "type": "boolean", "default": false, "description": "Only for `triggerType` `PROFILE`: whether a load-balancing cluster may run the triggered job on any node instead of only the one that received the forward." }, "triggerQueue": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message queue another profile forwards under to reach this agent." }, "triggerSynchron": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` waits for the job and answers the HTTP call with its result (see `triggerHttpReturnData`); `false` answers at once." }, "triggerType": { "$ref": "#/components/schemas/core.CronTriggerType", "description": "What starts the agent; only meaningful with `scheduleType` `TRIGGER` or `CRONTAB_HTTP`.", "title": "CronTriggerType" }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "title": "CronMongodbAgentSettings" }, "core.AmqpV2AgentSettings": { "type": "object", "description": "Receives messages from a queue or topic of a message broker (AMQP 1.0, AMQP 0.9.1 or JMS) reached through an AMQP v2 connection alias and starts a job for each message, or for each batch when `accumulation` is enabled. The alias decides the protocol, which changes how the `amqp091*` and `jms*` members behave. Needs at least `alias`, `destinationName` and `destinationType`.", "properties": { "class": { "type": "string", "const": "core.AmqpV2AgentSettings", "description": "The type of this object, always `core.AmqpV2AgentSettings`. Required where the member it is sent in accepts several types." }, "accumulation": { "$ref": "#/components/schemas/core.AccumulationSettings", "description": "Message-buffering configuration for this agent; see `core.AccumulationSettings`. Only `acknowledgmentMode` `IMMEDIATE` can have it enabled.", "title": "AccumulationSettings" }, "acknowledgmentMode": { "$ref": "#/components/schemas/core.AmqpV2AcknowledgmentMode", "default": "IMMEDIATE", "description": "When a delivery is settled relative to the job it starts, and whether a reply is produced. Message buffering (`accumulation`) is only available with `IMMEDIATE`.", "title": "AmqpV2AcknowledgmentMode" }, "alias": { "type": "string", "description": "Name of the AMQP v2 connection to receive through; it must exist on the instance and be allowed for the profile's client, otherwise the agent is not started (only logged, the profile still saves). A write that sets an alias outside a restricted client's allow-list is refused, listing the allowed ones. The alias decides the protocol (AMQP 0.9.1, AMQP 1.0 or JMS).", "minLength": 1 }, "amqp091DeclareDurable": { "type": "boolean", "default": false, "description": "AMQP 0.9.1 only: whether the declared queue/exchange is durable. In `destinationType` `QUEUE` it declares the consumed queue durable, in `TOPIC` it declares both the exchange and `amqp091QueueName` durable (needs a name then)." }, "amqp091ExchangeType": { "$ref": "#/components/schemas/core.Amqp091ExchangeType", "description": "AMQP 0.9.1 only, only relevant while consuming via an exchange (`destinationType` `TOPIC`): the exchange kind bound with `amqp091RoutingKey`.", "title": "Amqp091ExchangeType" }, "amqp091PrefetchCount": { "type": "integer", "format": "int32", "default": 0, "description": "AMQP 0.9.1 only: number of messages the broker may deliver without an acknowledgment. `0` uses the broker default.", "examples": [ 10 ] }, "amqp091QueueName": { "type": "string", "description": "AMQP 0.9.1 only, only for `destinationType` `TOPIC`: name of the queue declared and bound to the exchange; empty means a server-named, auto-delete queue. A durable declaration (`amqp091DeclareDurable`) needs a name, since a server-named queue cannot be durable. `%name%` constants are resolved." }, "amqp091RequeueOnFailure": { "type": "boolean", "default": false, "description": "AMQP 0.9.1 only: whether a nacked message is requeued (true) instead of dead-lettered (false). Only relevant with a synchronous `acknowledgmentMode` (`AFTER_PROCESSING` / `RPC`)." }, "amqp091RoutingKey": { "type": "string", "description": "AMQP 0.9.1 only, only for `destinationType` `TOPIC`: binding key for the exchange named by `destinationName` (wildcards `*` and `#`). `%name%` constants are resolved.", "examples": [ "orders.#" ] }, "clientId": { "type": "string", "description": "The client (AMQP container) id the receiver connections identify themselves with at the broker. Ignored for an AMQP 0.9.1 alias. Pinned on the connection whenever set for AMQP 1.0, only for a durable subscription for JMS (a JMS provider refuses a second connection holding an id already in use). Must be set together with `subscriptionName` for a durable subscription: the broker identifies it by client id plus subscription name. Must be unique per broker. `%name%` constants are resolved." }, "destinationName": { "type": "string", "description": "Name of the queue or topic (see `destinationType`) to consume from. `%name%` constants are resolved.", "examples": [ "orders.in" ], "minLength": 1 }, "destinationType": { "$ref": "#/components/schemas/core.AmqpDestinationType", "default": "QUEUE", "description": "What `destinationName` names.", "title": "AmqpDestinationType" }, "durableSubscription": { "type": "boolean", "default": false, "description": "Whether the subscription is durable, i.e. survives times without a connected receiver. Only meaningful for `destinationType` `TOPIC` on an AMQP 1.0 or JMS alias; ignored for AMQP 0.9.1 and for `destinationType` `QUEUE`. Requires `subscriptionName` and `clientId`." }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that receives in a load-balanced installation; empty runs it on the active node. Leave it empty on a single-node installation." }, "jmsMessageSelector": { "type": "string", "description": "JMS only: SQL-92 selector expression filtering the received messages. Empty receives all. `%name%` constants are resolved.", "examples": [ "NewsType = 'Sports'" ] }, "jmsUnsubscribeOnStop": { "type": "boolean", "default": false, "description": "JMS only, only with `durableSubscription` true: whether the durable subscription is removed from the broker when the agent stops, so messages published meanwhile are not kept for it." }, "qualityOfService": { "$ref": "#/components/schemas/core.AmqpV2QualityOfService", "default": "AT_LEAST_ONCE", "description": "Delivery guarantee the consumer requests from the broker. A synchronous `acknowledgmentMode` (`AFTER_PROCESSING` or `RPC`) requires `AT_LEAST_ONCE`.", "title": "AmqpV2QualityOfService" }, "shutdownTimeoutSeconds": { "type": "integer", "format": "int32", "description": "Seconds a synchronous `acknowledgmentMode` (`AFTER_PROCESSING` / `RPC`) waits for the in-flight job on shutdown/restart before it is cut off. `0` or negative falls back to `30`. Ignored for `acknowledgmentMode` `IMMEDIATE`.", "examples": [ 30 ] }, "subscriptionName": { "type": "string", "description": "Name identifying the durable subscription on the broker, scoped to `clientId`: together they must be unique per broker. Only used when `durableSubscription` is true. `%name%` constants are resolved." }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "required": [ "alias", "destinationName" ], "title": "AmqpV2AgentSettings" }, "core.PortalAgentSettings": { "type": "object", "description": "Receives data a user enters in a DataCockpit form: the form is generated from the profile's source structure, and submitting it runs the profile with the entered values as JSON. Saving the profile creates the form in the DataCockpit; who may open it is set by `allowAnonymousAccess`, or by `roles` and `userIds` when the form is first created.", "properties": { "class": { "type": "string", "const": "core.PortalAgentSettings", "description": "The type of this object, always `core.PortalAgentSettings`. Required where the member it is sent in accepts several types." }, "allowAnonymousAccess": { "type": "boolean", "default": false, "description": "`true` lets anyone open the form without logging in; `roles` and `userIds` must then be empty. Switching it back to `false` later does not remove the public access from an existing form." }, "eventTimeout": { "type": "integer", "format": "int32", "default": 500, "description": "Milliseconds the form in the browser waits after an input before it requests dependent (dynamic) content from the server.", "examples": [ 500 ] }, "form": { "type": "string", "default": "de.lobster.data.portal.forms.BaseForm", "description": "Class name of the form renderer. Stored only: the DataCockpit form is built from the profile's source structure, not from this value. Leave the default." }, "image": { "type": "string", "description": "The form's image, Base64-encoded; empty removes it. `null` keeps the stored value." }, "localizedProfileNames": { "type": "object", "additionalProperties": true, "description": "map" }, "noLogs": { "type": "boolean", "default": false, "description": "`true` hides the job logs from the form's users." }, "readOnly": { "type": "boolean", "default": false, "description": "`true` makes the form a mask without a save option, e.g. a search mask." }, "roles": { "type": "array", "description": "DataCockpit role names whose users may open the form. Copied into the form's access assignments only when the DataCockpit form is first created for the profile; later changes do not alter an existing form. Must be empty while `allowAnonymousAccess` is true.", "items": { "type": "string" } }, "synchronous": { "type": "boolean", "default": true, "description": "`true` runs the profile while the user waits and reports success or the error back to the form; `false` starts it in the background and returns at once, so errors are not shown to the user." }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true }, "upload": { "type": "boolean", "default": false, "description": "`true` turns the form into a pure file upload: the user uploads data instead of filling in fields." }, "userIds": { "type": "array", "description": "DataCockpit users who may open the form, each given by user id or login name. Like `roles`, only applied when the DataCockpit form is first created; must be empty while `allowAnonymousAccess` is true.", "items": { "type": "string" } } }, "title": "PortalAgentSettings" }, "core.CronFileAgentSettings": { "type": "object", "description": "Picks up files from a directory on the Lobster server's file system on the schedule in `cronSchedule`. Set `directory` and `filePattern`; each matching file becomes one job and is deleted after pickup unless `fileHandling` is `NONE`, so the Lobster server process needs read and, for deleting, write access. Files whose name starts with `.` are always skipped, those starting with `~` unless `readTempFiles` is true.", "properties": { "class": { "type": "string", "const": "core.CronFileAgentSettings", "description": "The type of this object, always `core.CronFileAgentSettings`. Required where the member it is sent in accepts several types." }, "acceptEmptyFiles": { "type": "boolean", "default": false, "description": "`true` also processes files of zero bytes; `false` skips them (and deletes them only if `deleteEmptyFiles` is true)." }, "channel": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelSMB", "description": "The SMB partner channel the directory is read through, as `{\"id\": }`; list channels with `GET /platform/api/partners/preview/{partnerId}/channels` (type `SMB`). Checked on write and read back resolved. Leave it out for a local directory; left out on an update, the stored channel stays. A channel that was deleted reads as no channel.", "title": "IntegrationPartnerChannelSMB" }, "cronSchedule": { "type": "array", "description": "When the agent runs: a list of crontab expressions with six space-separated fields `second minute hour day-of-month month day-of-week`. The agent runs whenever any entry matches, in the server's time zone, and only while the profile is `active`. A field takes `*`, a number, a list `0,30`, a range `8-17` (hour ranges may wrap, `22-2`), a stepped range `8-18/2` or a step `*/15` (not `0/15`). Month is `1`-`12`, day-of-week `1` = Sunday to `7` = Saturday, and day-of-month also accepts `L` for the last day; names such as `MON` and `?` are not supported. Examples: `0 0 9 * * 2-6` weekdays at 09:00, `0 */15 * * * *` every 15 minutes, `0 0 0 L * *` at the end of each month. Put `0` in the second field. Not expressible: every second week, the n-th weekday of a month, holidays; `2-6` still runs on public holidays. Say so instead of approximating. An entry without exactly six fields, or one the scheduler itself could never load (an unparsable field such as `MON`, `* * * * * *`, a value out of range, ...), is refused - unless it is already stored exactly as sent, which an unrelated write of the profile must not start refusing. Omitted on create or sent empty, the agent runs every minute. A schedule made as an interval, time table or trigger reads back as an empty list and becomes a 1-minute interval on the next write of the profile.", "items": { "type": "string" } }, "deleteEmptyFiles": { "type": "boolean", "default": false, "description": "`true` deletes files of zero bytes: right away when they are skipped (`acceptEmptyFiles` false), and after pickup when they are processed, even if `fileHandling` is `NONE`." }, "dirIsMounted": { "type": "boolean", "default": false, "description": "`true` treats a directory that does not exist as empty: it is only noted in the trace log and the run does not fail, e.g. for a network share that is not always mounted." }, "directory": { "type": "string", "description": "Directory on the Lobster server to scan; separate several with `;`. Date masks such as ``, `%NAME%` constants and `@MSG_CALL_@` variables are resolved. A missing directory fails the run unless `dirIsMounted` is true; one that cannot be read is logged as an error and skipped. If the instance restricts file access with a path whitelist, the directory must be on it.", "examples": [ "/data/in/orders" ] }, "errorProfile": { "type": "string", "description": "Name of a profile to start when a run of this agent fails, for example because the data cannot be fetched, or because no data is found and `missingIsError` is `true`. It is not started when the run is stopped. Leave it empty to start no profile. `null` keeps the stored value." }, "excludeHour": { "type": "integer", "format": "int32", "default": 0, "description": "Hours part of an age limit that `excludeMinute` and `excludeSecond` complete: files last modified longer ago than this duration are skipped. All three `0` disables the limit. `fileOlderThan` flips it to skip files younger than the duration instead.", "examples": [ 24 ] }, "excludeMinute": { "type": "integer", "format": "int32", "default": 0, "description": "Minutes part of the age limit described at `excludeHour`." }, "excludeSecond": { "type": "integer", "format": "int32", "default": 0, "description": "Seconds part of the age limit described at `excludeHour`." }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that runs the agent in a load-balanced installation; empty runs it on the active node. Leave it empty on a single-node installation. `null` keeps the stored value." }, "fileFilterClassName": { "type": "string", "description": "Fully qualified name of a Java file filter class that decides which of the fetched files are processed; empty uses none. `null` keeps the stored value." }, "fileFilterConfigName": { "type": "string", "description": "Name of the configuration file of the `fileFilterClassName` class. `null` keeps the stored value." }, "fileHandling": { "$ref": "#/components/schemas/core.CronFileHandling", "default": "DELETE", "description": "What happens to a file once it has been picked up. `RENAME` is not supported by these agents and behaves like `NONE`. `DELETE` needs write access to the file and its directory; a file it cannot delete is skipped with an error.", "title": "CronFileHandling" }, "fileOlderThan": { "type": "boolean", "default": true, "description": "Whether the age limit of `excludeHour`, `excludeMinute` and `excludeSecond` skips files modified longer ago (`true`) or files younger than the duration (`false`). `null` resets it." }, "filePattern": { "type": "string", "default": "*", "description": "Pattern the names of the files to pick up must match. `*` and `?` are wildcards and the match ignores case; `|` separates alternatives, an alternative starting with `regex:` is a regular expression, and `regex2:` makes the whole value one regular expression. `` or `@yyyyMMdd@` insert the current date, `%NAME%` a constant, `@MSG_CALL_@` a trigger variable. Names starting with `.` are always ignored; the file agent fails the run if the pattern is empty.", "examples": [ "ORDERS_*.xml|INVOIC_*.xml" ] }, "fileSortAscending": { "type": "boolean", "default": true, "description": "`true` sorts ascending (A to Z, oldest first), `false` descending. Only used when the files are sorted, see `fileSortItem`." }, "fileSortItem": { "$ref": "#/components/schemas/core.CronFileSortOrder", "default": "SYSTEM", "description": "Order in which the files of a run are processed, in the direction of `fileSortAscending`. The cloud storage agent always sorts: by name for `NAME`, by last-modified time otherwise.", "title": "CronFileSortOrder" }, "interval": { "type": "integer", "format": "int32", "description": "Minutes or seconds (`intervalUseSeconds`) between runs; applies only with `scheduleType` `INTERVAL`: absent on a read of another schedule type, and sent with one it is refused, so send both." }, "intervalUseSeconds": { "type": "boolean", "default": false, "description": "`true` makes `interval` seconds instead of minutes; like `interval`, only with `scheduleType` `INTERVAL`." }, "lockFile": { "type": "string", "description": "Full path of a lock file. If it exists when a run starts, the run is skipped with a log entry; otherwise the agent creates it for the duration of the run and deletes it afterwards, so runs and a cooperating writer do not overlap. Date masks and variables are resolved. Empty disables it.", "examples": [ "/data/in/orders/.lock" ] }, "mailOnError": { "type": "boolean", "default": false, "description": "`true` sends the error mail when a run of the agent fails. `null` keeps the stored value." }, "maxProcessTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum run time of a job of the agent in minutes, `0` for no limit; see `maxTimeAbsolute`. `null` keeps the stored value." }, "maxTimeAbsolute": { "type": "boolean", "default": true, "description": "`true` reads the agent's maximum run time as an absolute time instead of a limit up to its next run. `null` keeps the stored value." }, "missingIsError": { "type": "boolean", "default": false, "description": "`true` fails the job when the agent finds no data to process. `null` keeps the stored value." }, "multipartBrowserMode": { "$ref": "#/components/schemas/core.HttpMultiPartMode", "default": "RFC6532", "description": "How the parts of a multipart request are encoded: `STRICT` (strict MIME headers), `RFC6532` (UTF-8 in part headers, e.g. non-ASCII file names), `COMPATIBLE` (browser-like, minimal part headers) or `SYSTEM` (the instance's setting). Used by `core.CronHttpAgentSettings` when multipart parts are sent; other agent types store it unused. `null` keeps the stored value.", "title": "HttpMultiPartMode" }, "profileAfterRun": { "type": "string", "description": "Name of a profile to start after a run of this agent. Leave it empty to start no profile. `null` keeps the stored value." }, "readTempFiles": { "type": "boolean", "default": false, "description": "`true` also picks up files whose name starts with `~`, which the file agent otherwise skips as temporary files. The cloud storage agent does not evaluate it and never skips such files." }, "recursiveDir": { "type": "boolean", "default": false, "description": "`true` also picks up matching files from all sub-directories of the scanned directories, at any depth. Ignored by the file agent when `singleFile` is true." }, "runInBackground": { "type": "boolean", "default": false, "description": "`true` hands every file to a separate background job and continues with the next file at once, so several jobs of this profile run in parallel and their order is not guaranteed; `false` processes the files one after another within the run." }, "scheduleType": { "$ref": "#/components/schemas/core.CronScheduleType", "description": "How the agent decides when to run; decides which of `interval`/`intervalUseSeconds`, `timeTables`, `triggerType`/`trigger*`, `cronSchedule` applies. Absent on write keeps the stored schedule and every member below untouched, whatever it currently is - only a sent `scheduleType` (or a sent `cronSchedule`, which keeps its own legacy write behaviour) changes it. A schedule made in the editor as interval, time table or trigger is fully readable, unlike through `cronSchedule` alone.", "title": "CronScheduleType" }, "singleFile": { "type": "boolean", "default": false, "description": "`true` treats `filePattern` as one exact file name looked up in each directory instead of a pattern, and sub-directories are not scanned." }, "smbDomain": { "type": "string", "description": "Windows domain of the login for an SMB share the directory is on. `null` resets it." }, "timeTables": { "type": "array", "description": "Fixed run times; apply only with `scheduleType` `TIMETABLE`: absent on a read of another schedule type, and entries sent with one are refused. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronTimeTableEntry", "title": "CronTimeTableEntry" } }, "timeZone": { "type": "string", "description": "Time zone the `cronSchedule` entries are read in, e.g. `Europe/Berlin`; empty uses the time zone of the server. `null` keeps the stored value." }, "triggerAuthenticationType": { "$ref": "#/components/schemas/core.HttpAuthenticationType", "default": "SYSTEM", "description": "Only for `triggerType` `HTTP`: authentication scheme required of the caller when `triggerHttpChannelIds` names channels (`OAUTH2` without channels acts as `SYSTEM`).", "title": "HttpAuthenticationType" }, "triggerContext": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message context another profile forwards under to reach this agent." }, "triggerHttpChannelIds": { "type": "array", "description": "Only for `triggerType` `HTTP`: ids of the partner HTTP channels allowed to call the trigger (its `remoteId` as user plus the channel's password). Setting a different, non-empty list turns off a literal user/password credential pair; that pair is not settable through this API. Empty/absent requires no authentication unless such credentials are set. Get channel ids with `GET /platform/api/partners/preview/{partnerId}/channels` (type `HTTP`).", "items": { "type": "integer", "format": "int64" } }, "triggerHttpContentType": { "type": "string", "default": "text/html", "description": "Only for `triggerType` `HTTP`: content type of the trigger's HTTP response." }, "triggerHttpInvisibleForDmz": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` refuses calls reaching the instance through the Lobster DMZ server." }, "triggerHttpParams": { "type": "array", "description": "Only for `triggerType` `HTTP`: constant key/value pairs merged into the started job, like `%name%` constants. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronHttpTriggerParam", "title": "CronHttpTriggerParam" } }, "triggerHttpPathInfo": { "type": "string", "description": "Only for `triggerType` `HTTP`: URL suffix the trigger is reachable under. Required for `HTTP`.", "examples": [ "myTrigger/v1" ] }, "triggerHttpReturnData": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: whether the job's result is sent back as the HTTP response; only takes effect with `triggerSynchron` true." }, "triggerOnAnyServer": { "type": "boolean", "default": false, "description": "Only for `triggerType` `PROFILE`: whether a load-balancing cluster may run the triggered job on any node instead of only the one that received the forward." }, "triggerQueue": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message queue another profile forwards under to reach this agent." }, "triggerSynchron": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` waits for the job and answers the HTTP call with its result (see `triggerHttpReturnData`); `false` answers at once." }, "triggerType": { "$ref": "#/components/schemas/core.CronTriggerType", "description": "What starts the agent; only meaningful with `scheduleType` `TRIGGER` or `CRONTAB_HTTP`.", "title": "CronTriggerType" }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "title": "CronFileAgentSettings" }, "core.CronSqlAgentSettings": { "type": "object", "description": "Runs a SQL statement against a database on the schedule in `cronSchedule` and processes the rows it returns as one job. Set `databaseAccess.source.connection` and `databaseAccess.source.statement`; the rows are handed on as comma-separated CSV, one line per row, and the profile's input format must be `DB` (`core.DBFileMetadata`; left out it becomes `DB`, and any other value is rejected, since the platform forces `DB` on activation). A statement that returns no row starts no job.", "properties": { "class": { "type": "string", "const": "core.CronSqlAgentSettings", "description": "The type of this object, always `core.CronSqlAgentSettings`. Required where the member it is sent in accepts several types." }, "cronSchedule": { "type": "array", "description": "When the agent runs: a list of crontab expressions with six space-separated fields `second minute hour day-of-month month day-of-week`. The agent runs whenever any entry matches, in the server's time zone, and only while the profile is `active`. A field takes `*`, a number, a list `0,30`, a range `8-17` (hour ranges may wrap, `22-2`), a stepped range `8-18/2` or a step `*/15` (not `0/15`). Month is `1`-`12`, day-of-week `1` = Sunday to `7` = Saturday, and day-of-month also accepts `L` for the last day; names such as `MON` and `?` are not supported. Examples: `0 0 9 * * 2-6` weekdays at 09:00, `0 */15 * * * *` every 15 minutes, `0 0 0 L * *` at the end of each month. Put `0` in the second field. Not expressible: every second week, the n-th weekday of a month, holidays; `2-6` still runs on public holidays. Say so instead of approximating. An entry without exactly six fields, or one the scheduler itself could never load (an unparsable field such as `MON`, `* * * * * *`, a value out of range, ...), is refused - unless it is already stored exactly as sent, which an unrelated write of the profile must not start refusing. Omitted on create or sent empty, the agent runs every minute. A schedule made as an interval, time table or trigger reads back as an empty list and becomes a 1-minute interval on the next write of the profile.", "items": { "type": "string" } }, "encodeBlob": { "type": "boolean", "default": false, "description": "`true` Base64-encodes the values of BLOB columns in the result." }, "errorProfile": { "type": "string", "description": "Name of a profile to start when a run of this agent fails, for example because the data cannot be fetched, or because no data is found and `missingIsError` is `true`. It is not started when the run is stopped. Leave it empty to start no profile. `null` keeps the stored value." }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that runs the agent in a load-balanced installation; empty runs it on the active node. Leave it empty on a single-node installation. `null` keeps the stored value." }, "fileFilterClassName": { "type": "string", "description": "Fully qualified name of a Java file filter class that decides which of the fetched files are processed; empty uses none. `null` keeps the stored value." }, "fileFilterConfigName": { "type": "string", "description": "Name of the configuration file of the `fileFilterClassName` class. `null` keeps the stored value." }, "interval": { "type": "integer", "format": "int32", "description": "Minutes or seconds (`intervalUseSeconds`) between runs; applies only with `scheduleType` `INTERVAL`: absent on a read of another schedule type, and sent with one it is refused, so send both." }, "intervalUseSeconds": { "type": "boolean", "default": false, "description": "`true` makes `interval` seconds instead of minutes; like `interval`, only with `scheduleType` `INTERVAL`." }, "mailOnError": { "type": "boolean", "default": false, "description": "`true` sends the error mail when a run of the agent fails. `null` keeps the stored value." }, "maxProcessTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum run time of a job of the agent in minutes, `0` for no limit; see `maxTimeAbsolute`. `null` keeps the stored value." }, "maxTimeAbsolute": { "type": "boolean", "default": true, "description": "`true` reads the agent's maximum run time as an absolute time instead of a limit up to its next run. `null` keeps the stored value." }, "missingIsError": { "type": "boolean", "default": false, "description": "`true` fails the job when the agent finds no data to process. `null` keeps the stored value." }, "multipartBrowserMode": { "$ref": "#/components/schemas/core.HttpMultiPartMode", "default": "RFC6532", "description": "How the parts of a multipart request are encoded: `STRICT` (strict MIME headers), `RFC6532` (UTF-8 in part headers, e.g. non-ASCII file names), `COMPATIBLE` (browser-like, minimal part headers) or `SYSTEM` (the instance's setting). Used by `core.CronHttpAgentSettings` when multipart parts are sent; other agent types store it unused. `null` keeps the stored value.", "title": "HttpMultiPartMode" }, "profileAfterRun": { "type": "string", "description": "Name of a profile to start after a run of this agent. Leave it empty to start no profile. `null` keeps the stored value." }, "scheduleType": { "$ref": "#/components/schemas/core.CronScheduleType", "description": "How the agent decides when to run; decides which of `interval`/`intervalUseSeconds`, `timeTables`, `triggerType`/`trigger*`, `cronSchedule` applies. Absent on write keeps the stored schedule and every member below untouched, whatever it currently is - only a sent `scheduleType` (or a sent `cronSchedule`, which keeps its own legacy write behaviour) changes it. A schedule made in the editor as interval, time table or trigger is fully readable, unlike through `cronSchedule` alone.", "title": "CronScheduleType" }, "sqlTestTimeout": { "type": "integer", "format": "int32", "default": 10, "description": "Seconds the test functions (\"Test SQL\", structure creation, the config assistant) may take; not used by the scheduled runs.", "examples": [ 10 ] }, "sqlTimeout": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum lifetime in seconds of the database session a run executes the statement in; `0` means no limit." }, "timeTables": { "type": "array", "description": "Fixed run times; apply only with `scheduleType` `TIMETABLE`: absent on a read of another schedule type, and entries sent with one are refused. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronTimeTableEntry", "title": "CronTimeTableEntry" } }, "timeZone": { "type": "string", "description": "Time zone the `cronSchedule` entries are read in, e.g. `Europe/Berlin`; empty uses the time zone of the server. `null` keeps the stored value." }, "triggerAuthenticationType": { "$ref": "#/components/schemas/core.HttpAuthenticationType", "default": "SYSTEM", "description": "Only for `triggerType` `HTTP`: authentication scheme required of the caller when `triggerHttpChannelIds` names channels (`OAUTH2` without channels acts as `SYSTEM`).", "title": "HttpAuthenticationType" }, "triggerContext": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message context another profile forwards under to reach this agent." }, "triggerHttpChannelIds": { "type": "array", "description": "Only for `triggerType` `HTTP`: ids of the partner HTTP channels allowed to call the trigger (its `remoteId` as user plus the channel's password). Setting a different, non-empty list turns off a literal user/password credential pair; that pair is not settable through this API. Empty/absent requires no authentication unless such credentials are set. Get channel ids with `GET /platform/api/partners/preview/{partnerId}/channels` (type `HTTP`).", "items": { "type": "integer", "format": "int64" } }, "triggerHttpContentType": { "type": "string", "default": "text/html", "description": "Only for `triggerType` `HTTP`: content type of the trigger's HTTP response." }, "triggerHttpInvisibleForDmz": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` refuses calls reaching the instance through the Lobster DMZ server." }, "triggerHttpParams": { "type": "array", "description": "Only for `triggerType` `HTTP`: constant key/value pairs merged into the started job, like `%name%` constants. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronHttpTriggerParam", "title": "CronHttpTriggerParam" } }, "triggerHttpPathInfo": { "type": "string", "description": "Only for `triggerType` `HTTP`: URL suffix the trigger is reachable under. Required for `HTTP`.", "examples": [ "myTrigger/v1" ] }, "triggerHttpReturnData": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: whether the job's result is sent back as the HTTP response; only takes effect with `triggerSynchron` true." }, "triggerOnAnyServer": { "type": "boolean", "default": false, "description": "Only for `triggerType` `PROFILE`: whether a load-balancing cluster may run the triggered job on any node instead of only the one that received the forward." }, "triggerQueue": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message queue another profile forwards under to reach this agent." }, "triggerSynchron": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` waits for the job and answers the HTTP call with its result (see `triggerHttpReturnData`); `false` answers at once." }, "triggerType": { "$ref": "#/components/schemas/core.CronTriggerType", "description": "What starts the agent; only meaningful with `scheduleType` `TRIGGER` or `CRONTAB_HTTP`.", "title": "CronTriggerType" }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "title": "CronSqlAgentSettings" }, "core.CronSftpAgentSettings": { "type": "object", "description": "Fetches files from a partner's SFTP server on the schedule in `cronSchedule`. Set `channel` to the partner's SFTP channel, which supplies server, login, password or key and the host key, then `dir` and `filePattern`; each downloaded file becomes one job and, by default, is deleted on the server right after the download (`fileHandling`). It shares the options of the FTP agent: `ftpPassive`, `ftpTransferMode` and `useFtpShortList` are ignored, and `ftpSiteCommands` only supports `chmod`. For SCP use `core.CronSshAgentSettings`.", "properties": { "class": { "type": "string", "const": "core.CronSftpAgentSettings", "description": "The type of this object, always `core.CronSftpAgentSettings`. Required where the member it is sent in accepts several types." }, "acceptEmptyFiles": { "type": "boolean", "default": false, "description": "`true` also processes files of zero bytes; `false` skips them (and deletes them only if `deleteEmptyFiles` is true)." }, "as400Member": { "type": "boolean", "default": false, "description": "`true` also deletes or renames the AS/400 main file when a member file is deleted or renamed after download (`a.file/b.mbr` -> `a.file`, `a.b` -> `a`)." }, "channel": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelSFTP", "description": "The SFTP partner channel to fetch from, as `{\"id\": }`; list channels with `GET /platform/api/partners/preview/{partnerId}/channels` (type `SFTP`). Checked on write and read back resolved. The channel must allow SFTP, otherwise every run fails with a subtype mismatch. An agent created through the API keeps the internal default port `21`, which overrides the channel's port (usually `22`), so the connection fails until `port: 0` is sent to use the channel's port. Its `direction` must be `IN` or `IN_AND_OUT`, which is checked on write. A channel that was deleted reads as no channel; a copy references none.", "title": "IntegrationPartnerChannelSFTP" }, "controlSuffix": { "type": "string", "description": "Text that turns a data file name into the name of its control file, see `ftpControlNameType`; compared case-insensitively. Placeholders such as `` are resolved. Required when `useControlFile` is true.", "examples": [ ".ok" ] }, "cronSchedule": { "type": "array", "description": "When the agent runs: a list of crontab expressions with six space-separated fields `second minute hour day-of-month month day-of-week`. The agent runs whenever any entry matches, in the server's time zone, and only while the profile is `active`. A field takes `*`, a number, a list `0,30`, a range `8-17` (hour ranges may wrap, `22-2`), a stepped range `8-18/2` or a step `*/15` (not `0/15`). Month is `1`-`12`, day-of-week `1` = Sunday to `7` = Saturday, and day-of-month also accepts `L` for the last day; names such as `MON` and `?` are not supported. Examples: `0 0 9 * * 2-6` weekdays at 09:00, `0 */15 * * * *` every 15 minutes, `0 0 0 L * *` at the end of each month. Put `0` in the second field. Not expressible: every second week, the n-th weekday of a month, holidays; `2-6` still runs on public holidays. Say so instead of approximating. An entry without exactly six fields, or one the scheduler itself could never load (an unparsable field such as `MON`, `* * * * * *`, a value out of range, ...), is refused - unless it is already stored exactly as sent, which an unrelated write of the profile must not start refusing. Omitted on create or sent empty, the agent runs every minute. A schedule made as an interval, time table or trigger reads back as an empty list and becomes a 1-minute interval on the next write of the profile.", "items": { "type": "string" } }, "deleteEmptyFiles": { "type": "boolean", "default": false, "description": "`true` deletes files of zero bytes from the server: skipped ones right away, and processed ones (with `acceptEmptyFiles`) even if `fileHandling` is `NONE` or `RENAME`." }, "deleteMasterCtrlFile": { "type": "boolean", "default": true, "description": "`true` deletes the master control file once its directory has been processed. Only used with `masterCtrlFile`." }, "dir": { "type": "string", "description": "Directory on the partner's server to fetch from; separate several with `;`, each is read in its own connection. Empty reads the login directory. `%NAME%` constants, `@MSG_CALL_@` trigger variables and date masks such as `` are resolved. A directory that cannot be entered is logged and skipped.", "examples": [ "/out/orders" ] }, "dmz": { "type": "boolean", "default": false, "description": "`true` fetches through the Lobster DMZ server: the DMZ connects to the partner, and the internal server then collects the files from the DMZ. Needs `channel` and a DMZ set up for the instance; file filter classes of the profile are not applied this way." }, "errorProfile": { "type": "string", "description": "Name of a profile to start when a run of this agent fails, for example because the data cannot be fetched, or because no data is found and `missingIsError` is `true`. It is not started when the run is stopped. Leave it empty to start no profile. `null` keeps the stored value." }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that runs the agent in a load-balanced installation; empty runs it on the active node. Leave it empty on a single-node installation. `null` keeps the stored value." }, "fetchControlFile": { "type": "boolean", "default": false, "description": "`true` also downloads each data file's control file and passes its content to the mapping as the variable `VAR_SYS_CTRL_FILE`, decoded with the profile's encoding. Set it only together with `useControlFile`: with a `controlSuffix` but `useControlFile` false the downloads fail." }, "fetchMasterCtrlFile": { "type": "boolean", "default": false, "description": "`true` also processes the master control file itself as data, after the other files of its directory. Only used with `masterCtrlFile`." }, "fileFilterClassName": { "type": "string", "description": "Fully qualified name of a Java file filter class that decides which of the fetched files are processed; empty uses none. `null` keeps the stored value." }, "fileFilterConfigName": { "type": "string", "description": "Name of the configuration file of the `fileFilterClassName` class. `null` keeps the stored value." }, "fileHandling": { "$ref": "#/components/schemas/core.CronFileHandling", "default": "DELETE", "description": "What happens to a file on the partner's server right after its download, before the data is processed: `NONE` leaves it (so it is fetched again next run unless the profile skips already received files), `RENAME` renames or moves it as `fileRename` says.", "title": "CronFileHandling" }, "filePattern": { "type": "string", "default": "*", "description": "Names of the files to fetch. A plain pattern is sent with the server's directory listing, so the server's wildcard rules apply; `|` separates alternatives that are listed one by one, and an alternative starting with `regex:` (or a whole value starting with `regex2:`) is a regular expression the agent applies to the full listing itself. ``, `%NAME%` and `@MSG_CALL_@` are resolved first.", "examples": [ "ORDERS_*|INVOIC_*" ] }, "fileRename": { "type": "string", "description": "New name of a fetched file when `fileHandling` is `RENAME`; a path moves it. `` is the original name, `` the name without its extension, other `<...>` masks insert the current date and time. Empty leaves the file in place.", "examples": [ "done/" ] }, "fileSortAscending": { "type": "boolean", "default": true, "description": "`true` sorts A to Z, `false` Z to A, ignoring case. Only used when `fileSortItem` is `NAME`." }, "fileSortItem": { "$ref": "#/components/schemas/core.CronFileSortOrder", "default": "SYSTEM", "description": "`NAME` processes the fetched files in file-name order (direction `fileSortAscending`); any other value keeps the order in which the server lists them.", "title": "CronFileSortOrder" }, "ftpControlNameType": { "$ref": "#/components/schemas/core.FtpControlFileNaming", "default": "SUFFIX", "description": "How `controlSuffix` forms a control file name: `SUFFIX` appends it to the data file name (`orders.xml` + `.ok` = `orders.xml.ok`), `PREFIX` puts it in front (`ok_` + `orders.xml` = `ok_orders.xml`). Only used with `useControlFile`.", "title": "FtpControlFileNaming" }, "ftpPassive": { "type": "boolean", "default": true, "description": "`true` opens the FTP data connection in passive mode, `false` in active mode. Ignored for SFTP." }, "ftpSiteCommands": { "type": "string", "description": "Extra commands for the server, one per line. A line starting with `before:` is sent right after login, before the listing; the other lines after the directory has been processed, before logout. For FTP each line goes out as `SITE ` (a `rfc:` prefix sends it without `SITE`); SFTP only supports `chmod `. `@...@` variables are resolved." }, "ftpTransferMode": { "type": "boolean", "default": false, "description": "`true` downloads in FTP ASCII mode, where the server may convert line endings; `false` in binary mode, which keeps the bytes unchanged. Ignored for SFTP." }, "host": { "type": "string", "description": "FTP server host; non-empty overrides the channel's. `null` keeps the stored value." }, "interval": { "type": "integer", "format": "int32", "description": "Minutes or seconds (`intervalUseSeconds`) between runs; applies only with `scheduleType` `INTERVAL`: absent on a read of another schedule type, and sent with one it is refused, so send both." }, "intervalUseSeconds": { "type": "boolean", "default": false, "description": "`true` makes `interval` seconds instead of minutes; like `interval`, only with `scheduleType` `INTERVAL`." }, "keepLocalFtpFileIfDeleteWasUnsuccessful": { "type": "boolean", "default": false, "description": "`true`: when deleting or renaming a file on the server fails after its download, the downloaded copy is kept in the server's temporary directory and its path logged, instead of being discarded; the file is not processed in either case. For servers that remove fetched files themselves and refuse client deletes." }, "mailOnError": { "type": "boolean", "default": false, "description": "`true` sends the error mail when a run of the agent fails. `null` keeps the stored value." }, "masterCtrlFile": { "type": "string", "description": "Name of a master control file that must exist before anything is fetched: without it in the first directory of `dir` the run stops (see `masterCtrlFileInSubDir`). No wildcards (a `*` fails the run); date masks and variables are resolved. Empty disables it. Do not combine with `useControlFile`.", "examples": [ "ready.flg" ] }, "masterCtrlFileInSubDir": { "type": "boolean", "default": false, "description": "`false`: only the first directory in `dir` must hold `masterCtrlFile`, and without it the whole run stops. `true`: every directory needs its own master control file, and a directory without one is skipped." }, "maxFilesPerBatch": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum number of files fetched per run, counted over all directories; the rest waits for the next run. `0` means no limit.", "examples": [ 100 ] }, "maxProcessTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum run time of a job of the agent in minutes, `0` for no limit; see `maxTimeAbsolute`. `null` keeps the stored value." }, "maxTimeAbsolute": { "type": "boolean", "default": true, "description": "`true` reads the agent's maximum run time as an absolute time instead of a limit up to its next run. `null` keeps the stored value." }, "missingIsError": { "type": "boolean", "default": false, "description": "`true` fails the job when the agent finds no data to process. `null` keeps the stored value." }, "multipartBrowserMode": { "$ref": "#/components/schemas/core.HttpMultiPartMode", "default": "RFC6532", "description": "How the parts of a multipart request are encoded: `STRICT` (strict MIME headers), `RFC6532` (UTF-8 in part headers, e.g. non-ASCII file names), `COMPATIBLE` (browser-like, minimal part headers) or `SYSTEM` (the instance's setting). Used by `core.CronHttpAgentSettings` when multipart parts are sent; other agent types store it unused. `null` keeps the stored value.", "title": "HttpMultiPartMode" }, "port": { "type": "integer", "format": "int32", "description": "FTP server port; above `0` overrides the channel's. `null` keeps the stored value." }, "profileAfterRun": { "type": "string", "description": "Name of a profile to start after a run of this agent. Leave it empty to start no profile. `null` keeps the stored value." }, "runInBackground": { "type": "boolean", "default": false, "description": "`true` hands every downloaded file to a separate background job and continues with the next file at once, so several jobs of this profile run in parallel and their order is not guaranteed; `false` processes the files one after another within the run." }, "scheduleType": { "$ref": "#/components/schemas/core.CronScheduleType", "description": "How the agent decides when to run; decides which of `interval`/`intervalUseSeconds`, `timeTables`, `triggerType`/`trigger*`, `cronSchedule` applies. Absent on write keeps the stored schedule and every member below untouched, whatever it currently is - only a sent `scheduleType` (or a sent `cronSchedule`, which keeps its own legacy write behaviour) changes it. A schedule made in the editor as interval, time table or trigger is fully readable, unlike through `cronSchedule` alone.", "title": "CronScheduleType" }, "timeTables": { "type": "array", "description": "Fixed run times; apply only with `scheduleType` `TIMETABLE`: absent on a read of another schedule type, and entries sent with one are refused. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronTimeTableEntry", "title": "CronTimeTableEntry" } }, "timeZone": { "type": "string", "description": "Time zone the `cronSchedule` entries are read in, e.g. `Europe/Berlin`; empty uses the time zone of the server. `null` keeps the stored value." }, "triggerAuthenticationType": { "$ref": "#/components/schemas/core.HttpAuthenticationType", "default": "SYSTEM", "description": "Only for `triggerType` `HTTP`: authentication scheme required of the caller when `triggerHttpChannelIds` names channels (`OAUTH2` without channels acts as `SYSTEM`).", "title": "HttpAuthenticationType" }, "triggerContext": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message context another profile forwards under to reach this agent." }, "triggerHttpChannelIds": { "type": "array", "description": "Only for `triggerType` `HTTP`: ids of the partner HTTP channels allowed to call the trigger (its `remoteId` as user plus the channel's password). Setting a different, non-empty list turns off a literal user/password credential pair; that pair is not settable through this API. Empty/absent requires no authentication unless such credentials are set. Get channel ids with `GET /platform/api/partners/preview/{partnerId}/channels` (type `HTTP`).", "items": { "type": "integer", "format": "int64" } }, "triggerHttpContentType": { "type": "string", "default": "text/html", "description": "Only for `triggerType` `HTTP`: content type of the trigger's HTTP response." }, "triggerHttpInvisibleForDmz": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` refuses calls reaching the instance through the Lobster DMZ server." }, "triggerHttpParams": { "type": "array", "description": "Only for `triggerType` `HTTP`: constant key/value pairs merged into the started job, like `%name%` constants. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronHttpTriggerParam", "title": "CronHttpTriggerParam" } }, "triggerHttpPathInfo": { "type": "string", "description": "Only for `triggerType` `HTTP`: URL suffix the trigger is reachable under. Required for `HTTP`.", "examples": [ "myTrigger/v1" ] }, "triggerHttpReturnData": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: whether the job's result is sent back as the HTTP response; only takes effect with `triggerSynchron` true." }, "triggerOnAnyServer": { "type": "boolean", "default": false, "description": "Only for `triggerType` `PROFILE`: whether a load-balancing cluster may run the triggered job on any node instead of only the one that received the forward." }, "triggerQueue": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message queue another profile forwards under to reach this agent." }, "triggerSynchron": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` waits for the job and answers the HTTP call with its result (see `triggerHttpReturnData`); `false` answers at once." }, "triggerType": { "$ref": "#/components/schemas/core.CronTriggerType", "description": "What starts the agent; only meaningful with `scheduleType` `TRIGGER` or `CRONTAB_HTTP`.", "title": "CronTriggerType" }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true }, "useControlFile": { "type": "boolean", "default": false, "description": "`true` fetches a data file only when its control file (see `controlSuffix`) exists next to it. Control files are never processed as data, and they are deleted or renamed together with their data file. A control file left without its data file fails the run with \"Stale control files found\"; with an empty `controlSuffix` every file counts as a control file, so the run always fails. Do not combine with `masterCtrlFile`." }, "useFtpShortList": { "type": "boolean", "default": true, "description": "`true` lists directories with the quick name listing, which does not tell files from sub-directories; `false` requests the full listing and keeps files only. Ignored for SFTP." } }, "title": "CronSftpAgentSettings" }, "core.SolutionAgentSettings": { "type": "object", "description": "Implements one operation of a data product's API as an HTTP endpoint at `/dw/Request/`, served like `core.HttpAgentSettings`. Choosing a data product operation can fill `url`, the methods, `mimeType`, `restUrlPlaceholder` and `params` from its OpenAPI definition; through this API nothing is imported, so set those members yourself. Response texts are not members here: on create they keep their defaults (empty fixed success answer), on update the stored values stay.", "properties": { "class": { "type": "string", "const": "core.SolutionAgentSettings", "description": "The type of this object, always `core.SolutionAgentSettings`. Required where the member it is sent in accepts several types." }, "acceptHttpDelete": { "type": "boolean", "default": false, "description": "`true` lets DELETE calls reach this endpoint (without body; the job gets a placeholder document)." }, "acceptHttpGet": { "type": "boolean", "default": false, "description": "`true` lets GET calls reach this endpoint (no body; the job gets a placeholder document)." }, "acceptHttpHead": { "type": "boolean", "default": false, "description": "`true` lets HEAD calls reach this endpoint (no body; the job gets a placeholder document)." }, "acceptHttpPatch": { "type": "boolean", "default": false, "description": "`true` lets PATCH calls reach this endpoint; the request body is the job's input." }, "acceptHttpPost": { "type": "boolean", "default": true, "description": "`true` lets POST calls reach this endpoint; the request body is the job's input." }, "acceptHttpPut": { "type": "boolean", "default": false, "description": "`true` lets PUT calls reach this endpoint; the request body is the job's input." }, "channelIds": { "type": "array", "description": "Ids of the partners' HTTP channels allowed to call this endpoint; list them with `GET /platform/api/partners/preview/{partnerId}/channels` (type `HTTP`). When set, a caller must authenticate as one of these channels, else it gets 401. Empty requires no authentication; left out, the stored list stays (none on create).", "items": { "type": "integer", "format": "int64" } }, "mimeType": { "type": "string", "default": "text/html", "description": "Content type of the answer to the caller.", "examples": [ "application/json" ] }, "params": { "type": "array", "description": "Elements named to match one of authorization, proxy-authorization, cookie, set-cookie, *password*, *passwd*, *pwd*, *passphrase*, *secret*, *credential*, *token*, *apikey*, *api.key*, *api-key* hold a secret: a read returns those encrypted, and a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else. Every other element is unaffected.", "items": { "$ref": "#/components/schemas/core.HttpAgentParam", "title": "HttpAgentParam" } }, "restUrlPlaceholder": { "type": "string", "description": "Names for path segments after `url`. The endpoint only evaluates them in REST mode, which a data-product agent never switches on: calls must hit `url` exactly and no path variable is set.", "examples": [ "{petId}" ] }, "solutionName": { "type": "string", "description": "Name of the data product this endpoint implements. Not read by the running endpoint." }, "swaggerPath": { "type": "string", "description": "Path of the implemented operation in that OpenAPI definition. Not read by the running endpoint.", "examples": [ "/pets/{petId}" ] }, "swaggerUrl": { "type": "string", "description": "URL of the data product's OpenAPI definition the operation was imported from. Not read by the running endpoint, and setting it here imports nothing." }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true }, "url": { "type": "string", "description": "Path the endpoint listens on, appended to `/dw/Request/`. Leading and trailing `/` do not matter, the rest must match exactly. Keep it unique among active HTTP and data-product profiles.", "examples": [ "pets" ] } }, "title": "SolutionAgentSettings" }, "core.CronX400AgentSettings": { "type": "object", "description": "Fetches X.400 mails through the partner's X.400 channel on the schedule in `cronSchedule` and routes the body and each attachment of every mail to a profile by the rules in `mailDispatchSettings`. `channel` is required; `filterOnlyNewX400`, `filterX400Date` and `filterX400Addresses` limit which mails are fetched, and fetched mails are deleted from the mailbox unless `x400DoNotDelete` is true.", "properties": { "class": { "type": "string", "const": "core.CronX400AgentSettings", "description": "The type of this object, always `core.CronX400AgentSettings`. Required where the member it is sent in accepts several types." }, "channel": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelX400", "description": "The X.400 partner channel whose mailbox is polled, as `{\"id\": }`; list channels with `GET /platform/api/partners/preview/{partnerId}/channels` (type `X400`). Checked on write and read back resolved. Required: without it every run fails with \"X.400 channel not set!\". A fetched mail that carries no partner channel of its own is assigned to this one. Its `direction` must be `IN` or `IN_AND_OUT`, which is checked on write. A channel that was deleted reads as no channel; a copy references none.", "title": "IntegrationPartnerChannelX400" }, "cronSchedule": { "type": "array", "description": "When the agent runs: a list of crontab expressions with six space-separated fields `second minute hour day-of-month month day-of-week`. The agent runs whenever any entry matches, in the server's time zone, and only while the profile is `active`. A field takes `*`, a number, a list `0,30`, a range `8-17` (hour ranges may wrap, `22-2`), a stepped range `8-18/2` or a step `*/15` (not `0/15`). Month is `1`-`12`, day-of-week `1` = Sunday to `7` = Saturday, and day-of-month also accepts `L` for the last day; names such as `MON` and `?` are not supported. Examples: `0 0 9 * * 2-6` weekdays at 09:00, `0 */15 * * * *` every 15 minutes, `0 0 0 L * *` at the end of each month. Put `0` in the second field. Not expressible: every second week, the n-th weekday of a month, holidays; `2-6` still runs on public holidays. Say so instead of approximating. An entry without exactly six fields, or one the scheduler itself could never load (an unparsable field such as `MON`, `* * * * * *`, a value out of range, ...), is refused - unless it is already stored exactly as sent, which an unrelated write of the profile must not start refusing. Omitted on create or sent empty, the agent runs every minute. A schedule made as an interval, time table or trigger reads back as an empty list and becomes a 1-minute interval on the next write of the profile.", "items": { "type": "string" } }, "dmz": { "type": "boolean", "default": false, "description": "`true` fetches the mails through the Lobster DMZ server instead of directly." }, "errorProfile": { "type": "string", "description": "Name of a profile to start when a run of this agent fails, for example because the data cannot be fetched, or because no data is found and `missingIsError` is `true`. It is not started when the run is stopped. Leave it empty to start no profile. `null` keeps the stored value." }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that runs the agent in a load-balanced installation; empty runs it on the active node. Leave it empty on a single-node installation. `null` keeps the stored value." }, "fileFilterClassName": { "type": "string", "description": "Fully qualified name of a Java file filter class that decides which of the fetched files are processed; empty uses none. `null` keeps the stored value." }, "fileFilterConfigName": { "type": "string", "description": "Name of the configuration file of the `fileFilterClassName` class. `null` keeps the stored value." }, "filterOnlyNewX400": { "type": "boolean", "default": false, "description": "`true` fetches only unread mails, `false` all mails in the mailbox." }, "filterX400Addresses": { "type": "boolean", "default": false, "description": "`true` restricts polling to the X.400 addresses of `channel` and of the partners the rules in `mailDispatchSettings` name, by their `sender` or channel." }, "filterX400Date": { "type": "boolean", "default": false, "description": "`true` fetches only mails received after the previous run; that time is updated after every successful fetch." }, "handleUnknownMailData": { "$ref": "#/components/schemas/core.UnknownMailHandling", "default": "STORE_UNRESOLVED", "description": "What happens to a mail body or attachment that no rule in `mailDispatchSettings` accepts.", "title": "UnknownMailHandling" }, "interval": { "type": "integer", "format": "int32", "description": "Minutes or seconds (`intervalUseSeconds`) between runs; applies only with `scheduleType` `INTERVAL`: absent on a read of another schedule type, and sent with one it is refused, so send both." }, "intervalUseSeconds": { "type": "boolean", "default": false, "description": "`true` makes `interval` seconds instead of minutes; like `interval`, only with `scheduleType` `INTERVAL`." }, "mailDispatchSettings": { "type": "array", "description": "Rules that decide, for the body and for each attachment of a fetched mail, which profile processes it. They are checked in list order and the first matching rule whose profile is usable wins; `scoring` does not reorder them. Sending the member replaces all rules; data no rule accepts is handled as `handleUnknownMailData` says. For X.400 a rule's `sender` is compared as an X.400 address, and `to` and `cc` should stay empty: bodies and attachments of X.400 mails are matched without recipients, so a rule that sets them never takes them.", "items": { "$ref": "#/components/schemas/core.MailDispatchRule", "title": "MailDispatchRule" } }, "mailOnError": { "type": "boolean", "default": false, "description": "`true` sends the error mail when a run of the agent fails. `null` keeps the stored value." }, "maxProcessTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum run time of a job of the agent in minutes, `0` for no limit; see `maxTimeAbsolute`. `null` keeps the stored value." }, "maxTimeAbsolute": { "type": "boolean", "default": true, "description": "`true` reads the agent's maximum run time as an absolute time instead of a limit up to its next run. `null` keeps the stored value." }, "missingIsError": { "type": "boolean", "default": false, "description": "`true` fails the job when the agent finds no data to process. `null` keeps the stored value." }, "multipartBrowserMode": { "$ref": "#/components/schemas/core.HttpMultiPartMode", "default": "RFC6532", "description": "How the parts of a multipart request are encoded: `STRICT` (strict MIME headers), `RFC6532` (UTF-8 in part headers, e.g. non-ASCII file names), `COMPATIBLE` (browser-like, minimal part headers) or `SYSTEM` (the instance's setting). Used by `core.CronHttpAgentSettings` when multipart parts are sent; other agent types store it unused. `null` keeps the stored value.", "title": "HttpMultiPartMode" }, "profileAfterRun": { "type": "string", "description": "Name of a profile to start after a run of this agent. Leave it empty to start no profile. `null` keeps the stored value." }, "runInBackground": { "type": "boolean", "default": false, "description": "`true` hands every mail body and attachment to a separate background job and continues at once, so several jobs run in parallel and their order is not guaranteed; `false` processes them one after another within the run." }, "scheduleType": { "$ref": "#/components/schemas/core.CronScheduleType", "description": "How the agent decides when to run; decides which of `interval`/`intervalUseSeconds`, `timeTables`, `triggerType`/`trigger*`, `cronSchedule` applies. Absent on write keeps the stored schedule and every member below untouched, whatever it currently is - only a sent `scheduleType` (or a sent `cronSchedule`, which keeps its own legacy write behaviour) changes it. A schedule made in the editor as interval, time table or trigger is fully readable, unlike through `cronSchedule` alone.", "title": "CronScheduleType" }, "timeTables": { "type": "array", "description": "Fixed run times; apply only with `scheduleType` `TIMETABLE`: absent on a read of another schedule type, and entries sent with one are refused. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronTimeTableEntry", "title": "CronTimeTableEntry" } }, "timeZone": { "type": "string", "description": "Time zone the `cronSchedule` entries are read in, e.g. `Europe/Berlin`; empty uses the time zone of the server. `null` keeps the stored value." }, "triggerAuthenticationType": { "$ref": "#/components/schemas/core.HttpAuthenticationType", "default": "SYSTEM", "description": "Only for `triggerType` `HTTP`: authentication scheme required of the caller when `triggerHttpChannelIds` names channels (`OAUTH2` without channels acts as `SYSTEM`).", "title": "HttpAuthenticationType" }, "triggerContext": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message context another profile forwards under to reach this agent." }, "triggerHttpChannelIds": { "type": "array", "description": "Only for `triggerType` `HTTP`: ids of the partner HTTP channels allowed to call the trigger (its `remoteId` as user plus the channel's password). Setting a different, non-empty list turns off a literal user/password credential pair; that pair is not settable through this API. Empty/absent requires no authentication unless such credentials are set. Get channel ids with `GET /platform/api/partners/preview/{partnerId}/channels` (type `HTTP`).", "items": { "type": "integer", "format": "int64" } }, "triggerHttpContentType": { "type": "string", "default": "text/html", "description": "Only for `triggerType` `HTTP`: content type of the trigger's HTTP response." }, "triggerHttpInvisibleForDmz": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` refuses calls reaching the instance through the Lobster DMZ server." }, "triggerHttpParams": { "type": "array", "description": "Only for `triggerType` `HTTP`: constant key/value pairs merged into the started job, like `%name%` constants. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronHttpTriggerParam", "title": "CronHttpTriggerParam" } }, "triggerHttpPathInfo": { "type": "string", "description": "Only for `triggerType` `HTTP`: URL suffix the trigger is reachable under. Required for `HTTP`.", "examples": [ "myTrigger/v1" ] }, "triggerHttpReturnData": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: whether the job's result is sent back as the HTTP response; only takes effect with `triggerSynchron` true." }, "triggerOnAnyServer": { "type": "boolean", "default": false, "description": "Only for `triggerType` `PROFILE`: whether a load-balancing cluster may run the triggered job on any node instead of only the one that received the forward." }, "triggerQueue": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message queue another profile forwards under to reach this agent." }, "triggerSynchron": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` waits for the job and answers the HTTP call with its result (see `triggerHttpReturnData`); `false` answers at once." }, "triggerType": { "$ref": "#/components/schemas/core.CronTriggerType", "description": "What starts the agent; only meaningful with `scheduleType` `TRIGGER` or `CRONTAB_HTTP`.", "title": "CronTriggerType" }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true }, "x400DoNotDelete": { "type": "boolean", "default": false, "description": "`true` leaves fetched mails in the X.400 mailbox; `false` deletes them once fetched, unless an instance-wide setting keeps them." } }, "title": "CronX400AgentSettings" }, "core.CronFtpAgentSettings": { "type": "object", "description": "Fetches files from a partner's FTP server on the schedule in `cronSchedule`. Set `channel` to the partner's FTP channel, which supplies server, login and password, then `dir` and `filePattern`; each downloaded file becomes one job and, by default, is deleted on the server right after the download (`fileHandling`). Control files, a master control file, the DMZ and a per-run file limit are optional. Set `ftps` for FTPS; for SFTP use `core.CronSftpAgentSettings`.", "properties": { "class": { "type": "string", "const": "core.CronFtpAgentSettings", "description": "The type of this object, always `core.CronFtpAgentSettings`. Required where the member it is sent in accepts several types." }, "acceptEmptyFiles": { "type": "boolean", "default": false, "description": "`true` also processes files of zero bytes; `false` skips them (and deletes them only if `deleteEmptyFiles` is true)." }, "as400Member": { "type": "boolean", "default": false, "description": "`true` also deletes or renames the AS/400 main file when a member file is deleted or renamed after download (`a.file/b.mbr` -> `a.file`, `a.b` -> `a`)." }, "channel": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelFTP", "description": "The FTP partner channel to fetch from; list channels with `GET /platform/api/partners/preview/{partnerId}/channels` (type `FTP`). Checked on write and read back resolved. Host, port, login and password come from the channel's own-identity settings. Pitfall: an agent created through the API keeps the internal default port `21`, which overrides the channel's port; send `port: 0` to use the channel's port. Its `direction` must be `IN` or `IN_AND_OUT`, which is checked on write. A channel that was deleted reads as no channel; a copy references none.", "title": "IntegrationPartnerChannelFTP" }, "controlSuffix": { "type": "string", "description": "Text that turns a data file name into the name of its control file, see `ftpControlNameType`; compared case-insensitively. Placeholders such as `` are resolved. Required when `useControlFile` is true.", "examples": [ ".ok" ] }, "cronSchedule": { "type": "array", "description": "When the agent runs: a list of crontab expressions with six space-separated fields `second minute hour day-of-month month day-of-week`. The agent runs whenever any entry matches, in the server's time zone, and only while the profile is `active`. A field takes `*`, a number, a list `0,30`, a range `8-17` (hour ranges may wrap, `22-2`), a stepped range `8-18/2` or a step `*/15` (not `0/15`). Month is `1`-`12`, day-of-week `1` = Sunday to `7` = Saturday, and day-of-month also accepts `L` for the last day; names such as `MON` and `?` are not supported. Examples: `0 0 9 * * 2-6` weekdays at 09:00, `0 */15 * * * *` every 15 minutes, `0 0 0 L * *` at the end of each month. Put `0` in the second field. Not expressible: every second week, the n-th weekday of a month, holidays; `2-6` still runs on public holidays. Say so instead of approximating. An entry without exactly six fields, or one the scheduler itself could never load (an unparsable field such as `MON`, `* * * * * *`, a value out of range, ...), is refused - unless it is already stored exactly as sent, which an unrelated write of the profile must not start refusing. Omitted on create or sent empty, the agent runs every minute. A schedule made as an interval, time table or trigger reads back as an empty list and becomes a 1-minute interval on the next write of the profile.", "items": { "type": "string" } }, "deleteEmptyFiles": { "type": "boolean", "default": false, "description": "`true` deletes files of zero bytes from the server: skipped ones right away, and processed ones (with `acceptEmptyFiles`) even if `fileHandling` is `NONE` or `RENAME`." }, "deleteMasterCtrlFile": { "type": "boolean", "default": true, "description": "`true` deletes the master control file once its directory has been processed. Only used with `masterCtrlFile`." }, "dir": { "type": "string", "description": "Directory on the partner's server to fetch from; separate several with `;`, each is read in its own connection. Empty reads the login directory. `%NAME%` constants, `@MSG_CALL_@` trigger variables and date masks such as `` are resolved. A directory that cannot be entered is logged and skipped.", "examples": [ "/out/orders" ] }, "dmz": { "type": "boolean", "default": false, "description": "`true` fetches through the Lobster DMZ server: the DMZ connects to the partner, and the internal server then collects the files from the DMZ. Needs `channel` and a DMZ set up for the instance; file filter classes of the profile are not applied this way." }, "errorProfile": { "type": "string", "description": "Name of a profile to start when a run of this agent fails, for example because the data cannot be fetched, or because no data is found and `missingIsError` is `true`. It is not started when the run is stopped. Leave it empty to start no profile. `null` keeps the stored value." }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that runs the agent in a load-balanced installation; empty runs it on the active node. Leave it empty on a single-node installation. `null` keeps the stored value." }, "fetchControlFile": { "type": "boolean", "default": false, "description": "`true` also downloads each data file's control file and passes its content to the mapping as the variable `VAR_SYS_CTRL_FILE`, decoded with the profile's encoding. Set it only together with `useControlFile`: with a `controlSuffix` but `useControlFile` false the downloads fail." }, "fetchMasterCtrlFile": { "type": "boolean", "default": false, "description": "`true` also processes the master control file itself as data, after the other files of its directory. Only used with `masterCtrlFile`." }, "fileFilterClassName": { "type": "string", "description": "Fully qualified name of a Java file filter class that decides which of the fetched files are processed; empty uses none. `null` keeps the stored value." }, "fileFilterConfigName": { "type": "string", "description": "Name of the configuration file of the `fileFilterClassName` class. `null` keeps the stored value." }, "fileHandling": { "$ref": "#/components/schemas/core.CronFileHandling", "default": "DELETE", "description": "What happens to a file on the partner's server right after its download, before the data is processed: `NONE` leaves it (so it is fetched again next run unless the profile skips already received files), `RENAME` renames or moves it as `fileRename` says.", "title": "CronFileHandling" }, "filePattern": { "type": "string", "default": "*", "description": "Names of the files to fetch. A plain pattern is sent with the server's directory listing, so the server's wildcard rules apply; `|` separates alternatives that are listed one by one, and an alternative starting with `regex:` (or a whole value starting with `regex2:`) is a regular expression the agent applies to the full listing itself. ``, `%NAME%` and `@MSG_CALL_@` are resolved first.", "examples": [ "ORDERS_*|INVOIC_*" ] }, "fileRename": { "type": "string", "description": "New name of a fetched file when `fileHandling` is `RENAME`; a path moves it. `` is the original name, `` the name without its extension, other `<...>` masks insert the current date and time. Empty leaves the file in place.", "examples": [ "done/" ] }, "fileSortAscending": { "type": "boolean", "default": true, "description": "`true` sorts A to Z, `false` Z to A, ignoring case. Only used when `fileSortItem` is `NAME`." }, "fileSortItem": { "$ref": "#/components/schemas/core.CronFileSortOrder", "default": "SYSTEM", "description": "`NAME` processes the fetched files in file-name order (direction `fileSortAscending`); any other value keeps the order in which the server lists them.", "title": "CronFileSortOrder" }, "ftpControlNameType": { "$ref": "#/components/schemas/core.FtpControlFileNaming", "default": "SUFFIX", "description": "How `controlSuffix` forms a control file name: `SUFFIX` appends it to the data file name (`orders.xml` + `.ok` = `orders.xml.ok`), `PREFIX` puts it in front (`ok_` + `orders.xml` = `ok_orders.xml`). Only used with `useControlFile`.", "title": "FtpControlFileNaming" }, "ftpPassive": { "type": "boolean", "default": true, "description": "`true` opens the FTP data connection in passive mode, `false` in active mode. Ignored for SFTP." }, "ftpSiteCommands": { "type": "string", "description": "Extra commands for the server, one per line. A line starting with `before:` is sent right after login, before the listing; the other lines after the directory has been processed, before logout. For FTP each line goes out as `SITE ` (a `rfc:` prefix sends it without `SITE`); SFTP only supports `chmod `. `@...@` variables are resolved." }, "ftpTransferMode": { "type": "boolean", "default": false, "description": "`true` downloads in FTP ASCII mode, where the server may convert line endings; `false` in binary mode, which keeps the bytes unchanged. Ignored for SFTP." }, "ftps": { "type": "boolean", "default": false, "description": "`true` fetches over FTPS (FTP over TLS) instead of plain FTP. `null` keeps the stored value (plain FTP on create)." }, "host": { "type": "string", "description": "FTP server host; non-empty overrides the channel's. `null` keeps the stored value." }, "interval": { "type": "integer", "format": "int32", "description": "Minutes or seconds (`intervalUseSeconds`) between runs; applies only with `scheduleType` `INTERVAL`: absent on a read of another schedule type, and sent with one it is refused, so send both." }, "intervalUseSeconds": { "type": "boolean", "default": false, "description": "`true` makes `interval` seconds instead of minutes; like `interval`, only with `scheduleType` `INTERVAL`." }, "keepLocalFtpFileIfDeleteWasUnsuccessful": { "type": "boolean", "default": false, "description": "`true`: when deleting or renaming a file on the server fails after its download, the downloaded copy is kept in the server's temporary directory and its path logged, instead of being discarded; the file is not processed in either case. For servers that remove fetched files themselves and refuse client deletes." }, "mailOnError": { "type": "boolean", "default": false, "description": "`true` sends the error mail when a run of the agent fails. `null` keeps the stored value." }, "masterCtrlFile": { "type": "string", "description": "Name of a master control file that must exist before anything is fetched: without it in the first directory of `dir` the run stops (see `masterCtrlFileInSubDir`). No wildcards (a `*` fails the run); date masks and variables are resolved. Empty disables it. Do not combine with `useControlFile`.", "examples": [ "ready.flg" ] }, "masterCtrlFileInSubDir": { "type": "boolean", "default": false, "description": "`false`: only the first directory in `dir` must hold `masterCtrlFile`, and without it the whole run stops. `true`: every directory needs its own master control file, and a directory without one is skipped." }, "maxFilesPerBatch": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum number of files fetched per run, counted over all directories; the rest waits for the next run. `0` means no limit.", "examples": [ 100 ] }, "maxProcessTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum run time of a job of the agent in minutes, `0` for no limit; see `maxTimeAbsolute`. `null` keeps the stored value." }, "maxTimeAbsolute": { "type": "boolean", "default": true, "description": "`true` reads the agent's maximum run time as an absolute time instead of a limit up to its next run. `null` keeps the stored value." }, "missingIsError": { "type": "boolean", "default": false, "description": "`true` fails the job when the agent finds no data to process. `null` keeps the stored value." }, "multipartBrowserMode": { "$ref": "#/components/schemas/core.HttpMultiPartMode", "default": "RFC6532", "description": "How the parts of a multipart request are encoded: `STRICT` (strict MIME headers), `RFC6532` (UTF-8 in part headers, e.g. non-ASCII file names), `COMPATIBLE` (browser-like, minimal part headers) or `SYSTEM` (the instance's setting). Used by `core.CronHttpAgentSettings` when multipart parts are sent; other agent types store it unused. `null` keeps the stored value.", "title": "HttpMultiPartMode" }, "port": { "type": "integer", "format": "int32", "description": "FTP server port; above `0` overrides the channel's. `null` keeps the stored value." }, "profileAfterRun": { "type": "string", "description": "Name of a profile to start after a run of this agent. Leave it empty to start no profile. `null` keeps the stored value." }, "runInBackground": { "type": "boolean", "default": false, "description": "`true` hands every downloaded file to a separate background job and continues with the next file at once, so several jobs of this profile run in parallel and their order is not guaranteed; `false` processes the files one after another within the run." }, "scheduleType": { "$ref": "#/components/schemas/core.CronScheduleType", "description": "How the agent decides when to run; decides which of `interval`/`intervalUseSeconds`, `timeTables`, `triggerType`/`trigger*`, `cronSchedule` applies. Absent on write keeps the stored schedule and every member below untouched, whatever it currently is - only a sent `scheduleType` (or a sent `cronSchedule`, which keeps its own legacy write behaviour) changes it. A schedule made in the editor as interval, time table or trigger is fully readable, unlike through `cronSchedule` alone.", "title": "CronScheduleType" }, "timeTables": { "type": "array", "description": "Fixed run times; apply only with `scheduleType` `TIMETABLE`: absent on a read of another schedule type, and entries sent with one are refused. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronTimeTableEntry", "title": "CronTimeTableEntry" } }, "timeZone": { "type": "string", "description": "Time zone the `cronSchedule` entries are read in, e.g. `Europe/Berlin`; empty uses the time zone of the server. `null` keeps the stored value." }, "triggerAuthenticationType": { "$ref": "#/components/schemas/core.HttpAuthenticationType", "default": "SYSTEM", "description": "Only for `triggerType` `HTTP`: authentication scheme required of the caller when `triggerHttpChannelIds` names channels (`OAUTH2` without channels acts as `SYSTEM`).", "title": "HttpAuthenticationType" }, "triggerContext": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message context another profile forwards under to reach this agent." }, "triggerHttpChannelIds": { "type": "array", "description": "Only for `triggerType` `HTTP`: ids of the partner HTTP channels allowed to call the trigger (its `remoteId` as user plus the channel's password). Setting a different, non-empty list turns off a literal user/password credential pair; that pair is not settable through this API. Empty/absent requires no authentication unless such credentials are set. Get channel ids with `GET /platform/api/partners/preview/{partnerId}/channels` (type `HTTP`).", "items": { "type": "integer", "format": "int64" } }, "triggerHttpContentType": { "type": "string", "default": "text/html", "description": "Only for `triggerType` `HTTP`: content type of the trigger's HTTP response." }, "triggerHttpInvisibleForDmz": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` refuses calls reaching the instance through the Lobster DMZ server." }, "triggerHttpParams": { "type": "array", "description": "Only for `triggerType` `HTTP`: constant key/value pairs merged into the started job, like `%name%` constants. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronHttpTriggerParam", "title": "CronHttpTriggerParam" } }, "triggerHttpPathInfo": { "type": "string", "description": "Only for `triggerType` `HTTP`: URL suffix the trigger is reachable under. Required for `HTTP`.", "examples": [ "myTrigger/v1" ] }, "triggerHttpReturnData": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: whether the job's result is sent back as the HTTP response; only takes effect with `triggerSynchron` true." }, "triggerOnAnyServer": { "type": "boolean", "default": false, "description": "Only for `triggerType` `PROFILE`: whether a load-balancing cluster may run the triggered job on any node instead of only the one that received the forward." }, "triggerQueue": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message queue another profile forwards under to reach this agent." }, "triggerSynchron": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` waits for the job and answers the HTTP call with its result (see `triggerHttpReturnData`); `false` answers at once." }, "triggerType": { "$ref": "#/components/schemas/core.CronTriggerType", "description": "What starts the agent; only meaningful with `scheduleType` `TRIGGER` or `CRONTAB_HTTP`.", "title": "CronTriggerType" }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true }, "useControlFile": { "type": "boolean", "default": false, "description": "`true` fetches a data file only when its control file (see `controlSuffix`) exists next to it. Control files are never processed as data, and they are deleted or renamed together with their data file. A control file left without its data file fails the run with \"Stale control files found\"; with an empty `controlSuffix` every file counts as a control file, so the run always fails. Do not combine with `masterCtrlFile`." }, "useFtpShortList": { "type": "boolean", "default": true, "description": "`true` lists directories with the quick name listing, which does not tell files from sub-directories; `false` requests the full listing and keeps files only. Ignored for SFTP." } }, "title": "CronFtpAgentSettings" }, "core.KafkaAgentSettings": { "type": "object", "description": "Consumes records from a Kafka topic through a Kafka connection alias and starts a job for each record, or for each batch when `messageBufferSize` is above 1. Needs at least `alias` and `topicName`; `keyType` and `dataType` must match how the producer serialized the records. By default the consumer group id is `Lobster Platform::`. The job's input file is named `kafka.data`; the record key is available as variable `MSG_CALL_KAFKA_KEY` and every record header as `MSG_CALL_
`. Tombstones (records without value) never start a job.", "properties": { "class": { "type": "string", "const": "core.KafkaAgentSettings", "description": "The type of this object, always `core.KafkaAgentSettings`. Required where the member it is sent in accepts several types." }, "alias": { "type": "string", "description": "Name of the Kafka connection (bootstrap servers, security settings) to consume through; it must exist on the instance and be allowed for the profile's client, otherwise the agent is not started." }, "assigned": { "type": "boolean", "default": false, "description": "When true, the agent reads the partitions listed in `assignmentList` of `topicName` directly instead of joining the consumer group (no rebalancing). The list must not be empty, otherwise the agent stops; a `regex:` topic is not supported. After a polling error the agent reconnects with a normal group subscription." }, "assignmentList": { "type": "array", "description": "Partition numbers of `topicName` the agent reads when `assigned` is true. Ignored otherwise. Empty by default.", "items": { "type": "integer", "format": "int32" } }, "binaryConverterClassName": { "type": "string", "description": "Java class name of a custom binary converter, meant for `complexDataType` `BINARY`. Stored, but the Kafka agent does not call it." }, "clientId": { "type": "string", "description": "Kafka `client.id` of the consumer; `%name%` constants are resolved. Empty: an id generated from the server id, the profile name and `topicName`." }, "commitEach": { "type": "boolean", "default": true, "description": "When true, the offset of each record is committed right after the record was handed on; when false, offsets are committed every `commitInterval` records. Either way the commit does not wait for the job's result; all pending offsets are committed when the agent stops." }, "commitInterval": { "type": "integer", "format": "int32", "default": 10, "description": "With `commitEach` false, the consumed offsets are committed to the broker every this many records (and when the agent stops). Must be at least 1; `0` makes every commit fail.", "examples": [ 10 ] }, "complexDataType": { "$ref": "#/components/schemas/core.ComplexDataType", "description": "Structured payload type. Omit it for plain text or numbers read as `genericDataType`.", "title": "ComplexDataType" }, "consumerProperties": { "type": "object", "additionalProperties": true, "description": "map Entries whose key matches one of authorization, proxy-authorization, cookie, set-cookie, *password*, *passwd*, *pwd*, *passphrase*, *secret*, *credential*, *token*, *apikey*, *api.key*, *api-key*, sasl.jaas.config, basic.auth.user.info, ssl.keystore.key hold a secret: a read returns those encrypted, and a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else. Every other entry is unaffected." }, "dataType": { "$ref": "#/components/schemas/core.KafkaDataType", "default": "STRING", "description": "Deserializer for the record value, i.e. the data the job receives. `STRING`, and the numeric and `UUID` types, are handed on as text in the profile's encoding, `BYTES` as the raw bytes; `AVRO` (Confluent) and `AVRO_APICURIO` (Apicurio) are decoded with the schema registry from `schemaRegistryUrl` or `registryChannelId` and handed on as JSON text. Records that do not match pause the agent for 120 seconds each time and have to be removed from the topic.", "title": "KafkaDataType" }, "delimiter": { "type": "string", "description": "Text put between the records when `finalValueFunction` is `ALL` and `complexDataType` is not set; `NL` stands for a line break (CRLF). Empty: the records are concatenated without separator.", "examples": [ "," ] }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that runs this agent in a load-balanced installation; empty runs it on the active node. Leave it empty on a single-node installation." }, "filters": { "type": "array", "description": "Function chain that decides, for each record that arrives while the buffer is not yet full, whether the collected records (including this one) are handed on early: the chain runs on the record text and the buffer is forwarded when its last result is true. It does not drop records. Only evaluated with `messageBufferSize` above 1, only on the records `messageIntervalCheck` selects and only when `mqttConditions` is absent; an empty `mqttConditions` list disables it too.", "items": { "$ref": "#/components/schemas/core.MessageFilter", "title": "MessageFilter" } }, "finalValueFunction": { "$ref": "#/components/schemas/core.FinalValueFunction", "default": "LAST", "description": "What the job receives from the collected records. Without `complexDataType`, `MIN`, `MAX` and `AVG` need a numeric `genericDataType` (`INTEGER`, `FLOAT`, `BIG_DECIMAL` or `BIG_INTEGER`) and `ALL` works for `STRING`, `INTEGER`, `FLOAT`, `BIG_DECIMAL` and `BIG_INTEGER`; any other combination produces no job. With `complexDataType` `JSON` or `XML`, `ALL` combines the records (see there) and every other value passes the last record on.", "title": "FinalValueFunction" }, "genericDataType": { "$ref": "#/components/schemas/core.ValueType", "default": "STRING", "description": "Type the whole record value is read as for `mqttConditions` and `finalValueFunction`. `mqttConditions` support `STRING`, `INTEGER`, `DOUBLE`, `DATE` (`yyyy-MM-dd`), `FLOAT` and `BIG_INTEGER`. A value that does not parse as the type fails the check. Keep `STRING` when `complexDataType` is set.", "title": "ValueType" }, "keyType": { "$ref": "#/components/schemas/core.KafkaDataType", "default": "STRING", "description": "Deserializer for the record key; `BYTES` keys are decoded as text in the profile's encoding. The key reaches the mapping as variable `MSG_CALL_KAFKA_KEY`. A type that does not match the records makes them fail to deserialize, and the agent then pauses for 120 seconds each time.", "title": "KafkaDataType" }, "messageBufferSize": { "type": "integer", "format": "int32", "default": 1, "description": "Number of records collected before they are handed on together as one job, combined by `finalValueFunction`. `1` starts one job per record; `timeout`, `mqttConditions` and `filters` only have an effect above 1. Records still buffered when the agent stops are processed." }, "messageIntervalCheck": { "type": "integer", "format": "int32", "default": 1, "description": "`mqttConditions` and `filters` are only evaluated when the number of buffered records is a multiple of this value; `1` checks every record. Must be at least 1: `0` makes the processing of every record fail." }, "mqttConditions": { "type": "array", "description": "Conditions that hand the collected records on early: when a record that arrives before the buffer is full matches any value of any entry, the buffer including this record is forwarded. The whole value is compared, read as `genericDataType`; entries are OR-linked. They do not drop records. Only evaluated with `messageBufferSize` above 1 and on the records `messageIntervalCheck` selects; when present (even as an empty list), `filters` are ignored.", "items": { "$ref": "#/components/schemas/core.MqttConditionEntry", "title": "MqttConditionEntry" } }, "nullInstance": { "type": "boolean", "default": false, "description": "When true, a tombstone record (a key without value) is committed and a notification mail about it is sent to the instance's notification recipient. Tombstones never start a job, whatever this is set to." }, "registryChannelId": { "type": "integer", "format": "int64", "default": 0, "description": "Id of an HTTP partner channel whose URL, login and OAuth2 client credentials are used to reach the schema registry for `AVRO` and `AVRO_APICURIO` values; `0` uses none. Get it from `GET /platform/api/partners/preview/{partnerId}/channels` (type `HTTP`). Not validated: a wrong id is stored as is. Ignored for other `dataType` values." }, "resetTimestamp": { "type": "string", "description": "UTC timestamp in ISO-8601 instant form, e.g. `2023-11-14T22:13:20Z`, the agent rewinds its partitions to on its next start; empty or `null` does not rewind. One-off: it is not stored with the profile and reads empty afterwards." }, "schemaRegistryUrl": { "type": "string", "description": "URL of the schema registry used to decode `AVRO` and `AVRO_APICURIO` values; overrides the URL of `registryChannelId`. `%name%` constants are resolved. Ignored for other `dataType` values.", "examples": [ "https://registry.example.com:8081" ] }, "timeout": { "type": "integer", "format": "int32", "default": 0, "description": "Seconds after which the records collected so far are handed on as one job even though fewer than `messageBufferSize` have arrived; checked about every 5 seconds. `0` waits until the buffer is full. Only meaningful with `messageBufferSize` above 1." }, "topicName": { "type": "string", "description": "Topic to consume; `%name%` constants are resolved. The prefix `regex:` subscribes to every topic matching the Java regular expression that follows, e.g. `regex:orders-.*` (not usable with `assigned`). Also part of the default consumer group id and `clientId`.", "examples": [ "orders" ] }, "triggerOnAnyServer": { "type": "boolean", "default": false, "description": "Only matters in a load-balancing cluster: when true, the agent starts regardless of the node restriction and the jobs of received records may run on any node instead of the one that received them." }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "title": "KafkaAgentSettings" }, "core.AS2AgentSettings": { "type": "object", "description": "Receives AS2 messages that partners send to the platform's AS2 server and starts a job with the payload. This profile takes a message that arrives on one of its `channels` and matches `filePattern`, `subject` and `mimeType`; when several profiles match, the most specific one wins. Needs at least one entry in `channels`.", "properties": { "class": { "type": "string", "const": "core.AS2AgentSettings", "description": "The type of this object, always `core.AS2AgentSettings`. Required where the member it is sent in accepts several types." }, "channels": { "type": "array", "description": "AS2 partner channels allowed to deliver to this profile, each as `{\"id\": }` from `GET /platform/api/partners/preview/{partnerId}/channels` (type `AS2`). Only the id is read on write and neither its existence nor its type is checked; an entry that does not resolve to an AS2 channel is left out on read. An existing channel's `direction` must be `IN` or `IN_AND_OUT`, which is checked on write. Without a channel the profile never receives anything.", "items": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelAS2", "title": "IntegrationPartnerChannelAS2" } }, "filePattern": { "type": "string", "default": "*.*", "description": "Pattern the file name of the received payload must match, case-insensitive: wildcards `*` and `?`, several patterns separated by `|`, `regex:` for a regular expression, and date placeholders like `` for today's date.", "examples": [ "*.xml" ] }, "mimeType": { "type": "string", "description": "Content type the payload must have, compared case-insensitively; empty accepts any.", "examples": [ "application/edifact" ] }, "subject": { "type": "string", "description": "Text the subject of the AS2 message must contain, case-insensitive; empty accepts any subject. A longer subject makes this profile win over other matching profiles." }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "title": "AS2AgentSettings" }, "core.CronCloudStorageAgentSettings": { "type": "object", "description": "Fetches files from a cloud storage (such as Amazon S3, Azure, Google Cloud Storage, Dropbox, Google Drive or Microsoft 365) on the schedule in `cronSchedule`. Set `comChannelId` to a CloudStorage partner channel, `bucket` where the provider needs one, the folders in `dir` and the file names in `filePattern`. Each matching file becomes one job and, by default, is deleted in the storage after pickup (`fileHandling`). The storage account, keys and OAuth consent live on the channel.", "properties": { "class": { "type": "string", "const": "core.CronCloudStorageAgentSettings", "description": "The type of this object, always `core.CronCloudStorageAgentSettings`. Required where the member it is sent in accepts several types." }, "acceptEmptyFiles": { "type": "boolean", "default": false, "description": "`true` also processes files of zero bytes; `false` skips them (and deletes them only if `deleteEmptyFiles` is true)." }, "bucket": { "type": "string", "description": "Where in the storage account to read: the bucket (S3, Google Cloud Storage), container (Azure Blob), share (Azure Files) or drive/site id (Microsoft 365, where `@Name:` names a SharePoint site). Not used for Dropbox and Google Drive. Placeholders such as `%NAME%` are resolved." }, "comChannelId": { "type": "integer", "format": "int64", "description": "Id of the CloudStorage partner channel that holds the storage account; list channels with `GET /platform/api/partners/preview/{partnerId}/channels` (type `CloudStorage`). Stored as sent without any check, so a wrong id only fails when the agent runs. A trigger variable `VAR_SYS_TRIGGER_CHANNEL_ID` replaces it for that run.", "examples": [ 4711 ] }, "cronSchedule": { "type": "array", "description": "When the agent runs: a list of crontab expressions with six space-separated fields `second minute hour day-of-month month day-of-week`. The agent runs whenever any entry matches, in the server's time zone, and only while the profile is `active`. A field takes `*`, a number, a list `0,30`, a range `8-17` (hour ranges may wrap, `22-2`), a stepped range `8-18/2` or a step `*/15` (not `0/15`). Month is `1`-`12`, day-of-week `1` = Sunday to `7` = Saturday, and day-of-month also accepts `L` for the last day; names such as `MON` and `?` are not supported. Examples: `0 0 9 * * 2-6` weekdays at 09:00, `0 */15 * * * *` every 15 minutes, `0 0 0 L * *` at the end of each month. Put `0` in the second field. Not expressible: every second week, the n-th weekday of a month, holidays; `2-6` still runs on public holidays. Say so instead of approximating. An entry without exactly six fields, or one the scheduler itself could never load (an unparsable field such as `MON`, `* * * * * *`, a value out of range, ...), is refused - unless it is already stored exactly as sent, which an unrelated write of the profile must not start refusing. Omitted on create or sent empty, the agent runs every minute. A schedule made as an interval, time table or trigger reads back as an empty list and becomes a 1-minute interval on the next write of the profile.", "items": { "type": "string" } }, "deleteEmptyFiles": { "type": "boolean", "default": false, "description": "`true` deletes files of zero bytes: right away when they are skipped (`acceptEmptyFiles` false), and after pickup when they are processed, even if `fileHandling` is `NONE`." }, "dir": { "type": "string", "description": "Folder in the storage to scan; separate several with `;`. Date masks, `%NAME%` constants and `@MSG_CALL_@` variables are resolved.", "examples": [ "inbound/orders" ] }, "dmz": { "type": "boolean", "default": false, "description": "`true` accesses the storage through the Lobster DMZ server instead of directly." }, "documentLibrary": { "type": "string", "description": "Microsoft 365 only: name of the SharePoint document library to read from; takes effect only when `bucket` names the site as `@Name:`." }, "errorProfile": { "type": "string", "description": "Name of a profile to start when a run of this agent fails, for example because the data cannot be fetched, or because no data is found and `missingIsError` is `true`. It is not started when the run is stopped. Leave it empty to start no profile. `null` keeps the stored value." }, "excludeHour": { "type": "integer", "format": "int32", "default": 0, "description": "Hours part of an age limit that `excludeMinute` and `excludeSecond` complete: files last modified longer ago than this duration are skipped. All three `0` disables the limit. `fileOlderThan` flips it to skip files younger than the duration instead.", "examples": [ 24 ] }, "excludeMinute": { "type": "integer", "format": "int32", "default": 0, "description": "Minutes part of the age limit described at `excludeHour`." }, "excludeSecond": { "type": "integer", "format": "int32", "default": 0, "description": "Seconds part of the age limit described at `excludeHour`." }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that runs the agent in a load-balanced installation; empty runs it on the active node. Leave it empty on a single-node installation. `null` keeps the stored value." }, "fileFilterClassName": { "type": "string", "description": "Fully qualified name of a Java file filter class that decides which of the fetched files are processed; empty uses none. `null` keeps the stored value." }, "fileFilterConfigName": { "type": "string", "description": "Name of the configuration file of the `fileFilterClassName` class. `null` keeps the stored value." }, "fileHandling": { "$ref": "#/components/schemas/core.CronFileHandling", "default": "DELETE", "description": "What happens to a file once it has been picked up. `RENAME` is not supported by these agents and behaves like `NONE`. `DELETE` needs write access to the file and its directory; a file it cannot delete is skipped with an error.", "title": "CronFileHandling" }, "fileOlderThan": { "type": "boolean", "default": true, "description": "Whether the age limit of `excludeHour`, `excludeMinute` and `excludeSecond` skips files modified longer ago (`true`) or files younger than the duration (`false`). `null` resets it." }, "filePattern": { "type": "string", "default": "*", "description": "Pattern the names of the files to pick up must match. `*` and `?` are wildcards and the match ignores case; `|` separates alternatives, an alternative starting with `regex:` is a regular expression, and `regex2:` makes the whole value one regular expression. `` or `@yyyyMMdd@` insert the current date, `%NAME%` a constant, `@MSG_CALL_@` a trigger variable. Names starting with `.` are always ignored; the file agent fails the run if the pattern is empty.", "examples": [ "ORDERS_*.xml|INVOIC_*.xml" ] }, "fileSortAscending": { "type": "boolean", "default": true, "description": "`true` sorts ascending (A to Z, oldest first), `false` descending. Only used when the files are sorted, see `fileSortItem`." }, "fileSortItem": { "$ref": "#/components/schemas/core.CronFileSortOrder", "default": "SYSTEM", "description": "Order in which the files of a run are processed, in the direction of `fileSortAscending`. The cloud storage agent always sorts: by name for `NAME`, by last-modified time otherwise.", "title": "CronFileSortOrder" }, "interval": { "type": "integer", "format": "int32", "description": "Minutes or seconds (`intervalUseSeconds`) between runs; applies only with `scheduleType` `INTERVAL`: absent on a read of another schedule type, and sent with one it is refused, so send both." }, "intervalUseSeconds": { "type": "boolean", "default": false, "description": "`true` makes `interval` seconds instead of minutes; like `interval`, only with `scheduleType` `INTERVAL`." }, "mailOnError": { "type": "boolean", "default": false, "description": "`true` sends the error mail when a run of the agent fails. `null` keeps the stored value." }, "maxProcessTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum run time of a job of the agent in minutes, `0` for no limit; see `maxTimeAbsolute`. `null` keeps the stored value." }, "maxTimeAbsolute": { "type": "boolean", "default": true, "description": "`true` reads the agent's maximum run time as an absolute time instead of a limit up to its next run. `null` keeps the stored value." }, "missingIsError": { "type": "boolean", "default": false, "description": "`true` fails the job when the agent finds no data to process. `null` keeps the stored value." }, "multipartBrowserMode": { "$ref": "#/components/schemas/core.HttpMultiPartMode", "default": "RFC6532", "description": "How the parts of a multipart request are encoded: `STRICT` (strict MIME headers), `RFC6532` (UTF-8 in part headers, e.g. non-ASCII file names), `COMPATIBLE` (browser-like, minimal part headers) or `SYSTEM` (the instance's setting). Used by `core.CronHttpAgentSettings` when multipart parts are sent; other agent types store it unused. `null` keeps the stored value.", "title": "HttpMultiPartMode" }, "profileAfterRun": { "type": "string", "description": "Name of a profile to start after a run of this agent. Leave it empty to start no profile. `null` keeps the stored value." }, "readTempFiles": { "type": "boolean", "default": false, "description": "`true` also picks up files whose name starts with `~`, which the file agent otherwise skips as temporary files. The cloud storage agent does not evaluate it and never skips such files." }, "recursiveDir": { "type": "boolean", "default": false, "description": "`true` also picks up matching files from all sub-directories of the scanned directories, at any depth. Ignored by the file agent when `singleFile` is true." }, "runInBackground": { "type": "boolean", "default": false, "description": "`true` hands every file to a separate background job and continues with the next file at once, so several jobs of this profile run in parallel and their order is not guaranteed; `false` processes the files one after another within the run." }, "scheduleType": { "$ref": "#/components/schemas/core.CronScheduleType", "description": "How the agent decides when to run; decides which of `interval`/`intervalUseSeconds`, `timeTables`, `triggerType`/`trigger*`, `cronSchedule` applies. Absent on write keeps the stored schedule and every member below untouched, whatever it currently is - only a sent `scheduleType` (or a sent `cronSchedule`, which keeps its own legacy write behaviour) changes it. A schedule made in the editor as interval, time table or trigger is fully readable, unlike through `cronSchedule` alone.", "title": "CronScheduleType" }, "timeTables": { "type": "array", "description": "Fixed run times; apply only with `scheduleType` `TIMETABLE`: absent on a read of another schedule type, and entries sent with one are refused. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronTimeTableEntry", "title": "CronTimeTableEntry" } }, "timeZone": { "type": "string", "description": "Time zone the `cronSchedule` entries are read in, e.g. `Europe/Berlin`; empty uses the time zone of the server. `null` keeps the stored value." }, "triggerAuthenticationType": { "$ref": "#/components/schemas/core.HttpAuthenticationType", "default": "SYSTEM", "description": "Only for `triggerType` `HTTP`: authentication scheme required of the caller when `triggerHttpChannelIds` names channels (`OAUTH2` without channels acts as `SYSTEM`).", "title": "HttpAuthenticationType" }, "triggerContext": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message context another profile forwards under to reach this agent." }, "triggerHttpChannelIds": { "type": "array", "description": "Only for `triggerType` `HTTP`: ids of the partner HTTP channels allowed to call the trigger (its `remoteId` as user plus the channel's password). Setting a different, non-empty list turns off a literal user/password credential pair; that pair is not settable through this API. Empty/absent requires no authentication unless such credentials are set. Get channel ids with `GET /platform/api/partners/preview/{partnerId}/channels` (type `HTTP`).", "items": { "type": "integer", "format": "int64" } }, "triggerHttpContentType": { "type": "string", "default": "text/html", "description": "Only for `triggerType` `HTTP`: content type of the trigger's HTTP response." }, "triggerHttpInvisibleForDmz": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` refuses calls reaching the instance through the Lobster DMZ server." }, "triggerHttpParams": { "type": "array", "description": "Only for `triggerType` `HTTP`: constant key/value pairs merged into the started job, like `%name%` constants. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronHttpTriggerParam", "title": "CronHttpTriggerParam" } }, "triggerHttpPathInfo": { "type": "string", "description": "Only for `triggerType` `HTTP`: URL suffix the trigger is reachable under. Required for `HTTP`.", "examples": [ "myTrigger/v1" ] }, "triggerHttpReturnData": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: whether the job's result is sent back as the HTTP response; only takes effect with `triggerSynchron` true." }, "triggerOnAnyServer": { "type": "boolean", "default": false, "description": "Only for `triggerType` `PROFILE`: whether a load-balancing cluster may run the triggered job on any node instead of only the one that received the forward." }, "triggerQueue": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message queue another profile forwards under to reach this agent." }, "triggerSynchron": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` waits for the job and answers the HTTP call with its result (see `triggerHttpReturnData`); `false` answers at once." }, "triggerType": { "$ref": "#/components/schemas/core.CronTriggerType", "description": "What starts the agent; only meaningful with `scheduleType` `TRIGGER` or `CRONTAB_HTTP`.", "title": "CronTriggerType" }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "title": "CronCloudStorageAgentSettings" }, "core.CronLdapAgentSettings": { "type": "object", "description": "Searches an LDAP directory on the schedule in `cronSchedule` and processes all entries found as one JSON document `{\"_LDAPRecord\": [{...}, ...]}` with one object per entry, so the profile's input format is JSON. Set `alias`, `baseDN`, `search` and `searchScope`; `attributes`, `resultLimit` and `timeLimit` narrow the result. A search without hits starts no job.", "properties": { "class": { "type": "string", "const": "core.CronLdapAgentSettings", "description": "The type of this object, always `core.CronLdapAgentSettings`. Required where the member it is sent in accepts several types." }, "alias": { "type": "string", "description": "Name of the LDAP connection (server and credentials) to search; it must already exist on the instance and be allowed for the profile's client. Variables and `%NAME%` constants are resolved." }, "attributes": { "type": "string", "description": "Comma-separated names of the attributes to return. Empty returns all attributes.", "examples": [ "cn,sn,mail" ] }, "baseDN": { "type": "string", "description": "Distinguished name the search starts at.", "examples": [ "ou=people,dc=example,dc=com" ] }, "cronSchedule": { "type": "array", "description": "When the agent runs: a list of crontab expressions with six space-separated fields `second minute hour day-of-month month day-of-week`. The agent runs whenever any entry matches, in the server's time zone, and only while the profile is `active`. A field takes `*`, a number, a list `0,30`, a range `8-17` (hour ranges may wrap, `22-2`), a stepped range `8-18/2` or a step `*/15` (not `0/15`). Month is `1`-`12`, day-of-week `1` = Sunday to `7` = Saturday, and day-of-month also accepts `L` for the last day; names such as `MON` and `?` are not supported. Examples: `0 0 9 * * 2-6` weekdays at 09:00, `0 */15 * * * *` every 15 minutes, `0 0 0 L * *` at the end of each month. Put `0` in the second field. Not expressible: every second week, the n-th weekday of a month, holidays; `2-6` still runs on public holidays. Say so instead of approximating. An entry without exactly six fields, or one the scheduler itself could never load (an unparsable field such as `MON`, `* * * * * *`, a value out of range, ...), is refused - unless it is already stored exactly as sent, which an unrelated write of the profile must not start refusing. Omitted on create or sent empty, the agent runs every minute. A schedule made as an interval, time table or trigger reads back as an empty list and becomes a 1-minute interval on the next write of the profile.", "items": { "type": "string" } }, "errorProfile": { "type": "string", "description": "Name of a profile to start when a run of this agent fails, for example because the data cannot be fetched, or because no data is found and `missingIsError` is `true`. It is not started when the run is stopped. Leave it empty to start no profile. `null` keeps the stored value." }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that runs the agent in a load-balanced installation; empty runs it on the active node. Leave it empty on a single-node installation. `null` keeps the stored value." }, "fileFilterClassName": { "type": "string", "description": "Fully qualified name of a Java file filter class that decides which of the fetched files are processed; empty uses none. `null` keeps the stored value." }, "fileFilterConfigName": { "type": "string", "description": "Name of the configuration file of the `fileFilterClassName` class. `null` keeps the stored value." }, "interval": { "type": "integer", "format": "int32", "description": "Minutes or seconds (`intervalUseSeconds`) between runs; applies only with `scheduleType` `INTERVAL`: absent on a read of another schedule type, and sent with one it is refused, so send both." }, "intervalUseSeconds": { "type": "boolean", "default": false, "description": "`true` makes `interval` seconds instead of minutes; like `interval`, only with `scheduleType` `INTERVAL`." }, "mailOnError": { "type": "boolean", "default": false, "description": "`true` sends the error mail when a run of the agent fails. `null` keeps the stored value." }, "maxProcessTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum run time of a job of the agent in minutes, `0` for no limit; see `maxTimeAbsolute`. `null` keeps the stored value." }, "maxTimeAbsolute": { "type": "boolean", "default": true, "description": "`true` reads the agent's maximum run time as an absolute time instead of a limit up to its next run. `null` keeps the stored value." }, "missingIsError": { "type": "boolean", "default": false, "description": "`true` fails the job when the agent finds no data to process. `null` keeps the stored value." }, "multipartBrowserMode": { "$ref": "#/components/schemas/core.HttpMultiPartMode", "default": "RFC6532", "description": "How the parts of a multipart request are encoded: `STRICT` (strict MIME headers), `RFC6532` (UTF-8 in part headers, e.g. non-ASCII file names), `COMPATIBLE` (browser-like, minimal part headers) or `SYSTEM` (the instance's setting). Used by `core.CronHttpAgentSettings` when multipart parts are sent; other agent types store it unused. `null` keeps the stored value.", "title": "HttpMultiPartMode" }, "profileAfterRun": { "type": "string", "description": "Name of a profile to start after a run of this agent. Leave it empty to start no profile. `null` keeps the stored value." }, "resultLimit": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum number of entries to read; when it is reached, the entries read so far are processed. `0` means no limit." }, "scheduleType": { "$ref": "#/components/schemas/core.CronScheduleType", "description": "How the agent decides when to run; decides which of `interval`/`intervalUseSeconds`, `timeTables`, `triggerType`/`trigger*`, `cronSchedule` applies. Absent on write keeps the stored schedule and every member below untouched, whatever it currently is - only a sent `scheduleType` (or a sent `cronSchedule`, which keeps its own legacy write behaviour) changes it. A schedule made in the editor as interval, time table or trigger is fully readable, unlike through `cronSchedule` alone.", "title": "CronScheduleType" }, "search": { "type": "string", "description": "LDAP search filter. `@0:s#@` inserts the time of the previous run in a date mask, e.g. `(modifyTimestamp>=@0:s#yyyyMMddHHmmss@Z)`, so a run reads only changed entries. `@...@` is a placeholder, so a literal `@` in the filter can be misread. Variables and `%NAME%` constants are resolved.", "examples": [ "(&(objectClass=person)(sn=Smith))" ] }, "searchScope": { "$ref": "#/components/schemas/core.LdapSearchScope", "default": "OBJECT", "description": "How deep to search below `baseDN`.", "title": "LdapSearchScope" }, "timeLimit": { "type": "integer", "format": "int32", "default": 30, "description": "Maximum time in seconds the search may take; `0` means no limit.", "examples": [ 30 ] }, "timeTables": { "type": "array", "description": "Fixed run times; apply only with `scheduleType` `TIMETABLE`: absent on a read of another schedule type, and entries sent with one are refused. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronTimeTableEntry", "title": "CronTimeTableEntry" } }, "timeZone": { "type": "string", "description": "Time zone the `cronSchedule` entries are read in, e.g. `Europe/Berlin`; empty uses the time zone of the server. `null` keeps the stored value." }, "triggerAuthenticationType": { "$ref": "#/components/schemas/core.HttpAuthenticationType", "default": "SYSTEM", "description": "Only for `triggerType` `HTTP`: authentication scheme required of the caller when `triggerHttpChannelIds` names channels (`OAUTH2` without channels acts as `SYSTEM`).", "title": "HttpAuthenticationType" }, "triggerContext": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message context another profile forwards under to reach this agent." }, "triggerHttpChannelIds": { "type": "array", "description": "Only for `triggerType` `HTTP`: ids of the partner HTTP channels allowed to call the trigger (its `remoteId` as user plus the channel's password). Setting a different, non-empty list turns off a literal user/password credential pair; that pair is not settable through this API. Empty/absent requires no authentication unless such credentials are set. Get channel ids with `GET /platform/api/partners/preview/{partnerId}/channels` (type `HTTP`).", "items": { "type": "integer", "format": "int64" } }, "triggerHttpContentType": { "type": "string", "default": "text/html", "description": "Only for `triggerType` `HTTP`: content type of the trigger's HTTP response." }, "triggerHttpInvisibleForDmz": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` refuses calls reaching the instance through the Lobster DMZ server." }, "triggerHttpParams": { "type": "array", "description": "Only for `triggerType` `HTTP`: constant key/value pairs merged into the started job, like `%name%` constants. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronHttpTriggerParam", "title": "CronHttpTriggerParam" } }, "triggerHttpPathInfo": { "type": "string", "description": "Only for `triggerType` `HTTP`: URL suffix the trigger is reachable under. Required for `HTTP`.", "examples": [ "myTrigger/v1" ] }, "triggerHttpReturnData": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: whether the job's result is sent back as the HTTP response; only takes effect with `triggerSynchron` true." }, "triggerOnAnyServer": { "type": "boolean", "default": false, "description": "Only for `triggerType` `PROFILE`: whether a load-balancing cluster may run the triggered job on any node instead of only the one that received the forward." }, "triggerQueue": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message queue another profile forwards under to reach this agent." }, "triggerSynchron": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` waits for the job and answers the HTTP call with its result (see `triggerHttpReturnData`); `false` answers at once." }, "triggerType": { "$ref": "#/components/schemas/core.CronTriggerType", "description": "What starts the agent; only meaningful with `scheduleType` `TRIGGER` or `CRONTAB_HTTP`.", "title": "CronTriggerType" }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true }, "wrapFields": { "type": "boolean", "default": false, "description": "`true` writes every attribute as a JSON array of its values, so the structure is the same for single- and multi-valued attributes; `false` writes a single value as a plain string and only several values as an array. Binary values are Base64-encoded." } }, "title": "CronLdapAgentSettings" }, "core.SmsAgentSettings": { "type": "object", "description": "Phase 1 of a profile, how its data arrives: `inputAgentSettings`. Event-driven agents (HTTP, FTP/SFTP/AS2/OFTP servers, mail, queues, messaging) start a job when data comes in; the `Cron*` agents fetch it on a schedule. Start with `core.HttpAgentSettings`, which a caller reaches on `/dw/Request/`.", "properties": { "class": { "type": "string", "const": "core.SmsAgentSettings", "description": "The type of this object, always `core.SmsAgentSettings`. Required where the member it is sent in accepts several types." }, "param": { "type": "string", "description": "Phone number(s) this SMS profile receives messages for; separate multiple numbers with `;`.", "minLength": 1 }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "required": [ "param" ], "title": "SmsAgentSettings" }, "core.AS4AgentSettings": { "type": "object", "description": "Receives AS4 messages that partners send to the platform's AS4 server and starts a job with the payload. This profile takes a message that arrives on one of its `channels` and matches `filePattern` and `mimeType`; when several profiles match, the most specific one wins. Needs at least one entry in `channels`.", "properties": { "class": { "type": "string", "const": "core.AS4AgentSettings", "description": "The type of this object, always `core.AS4AgentSettings`. Required where the member it is sent in accepts several types." }, "channels": { "type": "array", "description": "AS4 partner channels allowed to deliver to this profile, each as `{\"id\": }` from `GET /platform/api/partners/preview/{partnerId}/channels` (type `AS4`). Only the id is read on write and neither its existence nor its type is checked; an entry that does not resolve to an AS4 channel is left out on read. An existing channel's `direction` must be `IN` or `IN_AND_OUT`, which is checked on write. Without a channel the profile never receives anything.", "items": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelAS4", "title": "IntegrationPartnerChannelAS4" } }, "filePattern": { "type": "string", "default": "*.*", "description": "Pattern the file name of the received payload must match, case-insensitive: wildcards `*` and `?`, several patterns separated by `|`, `regex:` for a regular expression, and date placeholders like `` for today's date.", "examples": [ "*.xml" ] }, "mimeType": { "type": "string", "description": "Content type the payload must have, compared case-insensitively; empty accepts any.", "examples": [ "application/xml" ] }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "title": "AS4AgentSettings" }, "core.FaxAgentSettings": { "type": "object", "description": "Receives incoming faxes that arrive on a partner's fax channel. Either name the fax channels in `channelIds`, or set `acceptAll` to take faxes from any partner of the profile's client. A profile that lists the receiving channel is chosen first; an `acceptAll` profile only gets faxes no such profile claims.", "properties": { "class": { "type": "string", "const": "core.FaxAgentSettings", "description": "The type of this object, always `core.FaxAgentSettings`. Required where the member it is sent in accepts several types." }, "acceptAll": { "type": "boolean", "default": false, "description": "`true` accepts faxes from every partner of the profile's client, whatever channel they arrive on, and ignores `channelIds`; such a profile only receives a fax no channel-specific fax profile takes." }, "channelIds": { "type": "array", "description": "Ids of the fax channels whose incoming faxes this profile processes; list them with `GET /platform/api/partners/preview/{partnerId}/channels` (type `Fax`). The ids are stored as sent, without checking that they exist, so a wrong id only shows as faxes not arriving. Not evaluated while `acceptAll` is true.", "items": { "type": "integer", "format": "int64" } }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "title": "FaxAgentSettings" }, "core.ManualUploadAgentSettings": { "type": "object", "description": "Receives data only when it is handed to the profile by hand, e.g. an uploaded file. The agent has no listener, no schedule and no members besides `class`; choose it for a profile that is run manually.", "properties": { "class": { "type": "string", "const": "core.ManualUploadAgentSettings", "description": "The type of this object, always `core.ManualUploadAgentSettings`. Required where the member it is sent in accepts several types." }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "title": "ManualUploadAgentSettings" }, "core.SFTPAgentSettings": { "type": "object", "description": "Receives files that partners upload to the platform's built-in SSH server by SFTP or SCP and starts a job for each file. A partner logs in with the credentials of an SFTP channel; this profile takes the file when that channel is one of its `channels`, the upload used the protocol `transferType` and the file matches `fileName` (and `dir`, if set); when several profiles match, the most specific one wins. Needs at least one entry in `channels`.", "properties": { "class": { "type": "string", "const": "core.SFTPAgentSettings", "description": "The type of this object, always `core.SFTPAgentSettings`. Required where the member it is sent in accepts several types." }, "acceptEmptyFiles": { "type": "boolean", "default": false, "description": "`true` also processes uploaded files of zero bytes; `false` skips them with a log entry." }, "channels": { "type": "array", "description": "SFTP partner channels whose logins may deliver to this profile, each as `{\"id\": }` from `GET /platform/api/partners/preview/{partnerId}/channels` (type `SFTP`). Only the id is read on write and neither its existence nor its type is checked; an entry that does not resolve to an SFTP channel is left out on read. An existing channel's `direction` must be `IN` or `IN_AND_OUT`, which is checked on write. Without a channel the profile never receives anything.", "items": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelSFTP", "title": "IntegrationPartnerChannelSFTP" } }, "dir": { "type": "string", "description": "Sub-directory, relative to the partner's home directory on the Lobster FTP/SFTP server, that an upload must land in for this profile; separate several with `;`. `$USER$` is replaced by the uploading partner's login name. Empty accepts uploads in any directory.", "examples": [ "in/orders" ] }, "fileName": { "type": "string", "description": "File-name pattern a file the partner uploads must match for this profile to take it. `*` and `?` are wildcards and the match ignores case; `|` separates alternatives, an alternative starting with `regex:` is a regular expression, and `` is replaced by the current date. If several profiles accept an upload, the one with the longest matching `dir` and the most specific pattern wins.", "examples": [ "ORDERS_*.csv|INVOIC_*.csv" ] }, "processOnLogout": { "type": "boolean", "default": false, "description": "`true` collects the files a partner uploads during one session and processes them only when the partner logs out; `false` processes each file as soon as its upload is complete." }, "transferType": { "$ref": "#/components/schemas/core.SshTransferType", "default": "SFTP", "description": "Upload protocol this profile accepts; a file uploaded the other way is not taken by this profile.", "title": "SshTransferType" }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "title": "SFTPAgentSettings" }, "core.TcpAgentSettings": { "type": "object", "description": "Receives data on a TCP server socket the instance opens for the profile. Port, host, TLS and the message delimiters are not set here but in the TCP server connection named by `alias`, which must already exist on the instance. The listener starts while the profile is active; only one profile per alias can listen.", "properties": { "class": { "type": "string", "const": "core.TcpAgentSettings", "description": "The type of this object, always `core.TcpAgentSettings`. Required where the member it is sent in accepts several types." }, "alias": { "type": "string", "description": "Name of the TCP server connection (server type) to listen on, as defined on the instance in `etc/tcp.xml`; the profile's client must be allowed to use it. An unknown or disallowed alias keeps the listener from starting." }, "binaryConverterClassName": { "type": "string", "description": "Class name of a binary converter. Stored only: the TCP listener does not read it. Leave it empty." }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that runs the listener; `%NAME%` constants are resolved. Empty runs it on the instance itself, but not on a load-balancing member; a value naming another node keeps it from starting here. Only relevant with load balancing." }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "title": "TcpAgentSettings" }, "core.CronCustomAgentSettings": { "type": "object", "description": "Runs a custom Java class on the schedule in `cronSchedule` and processes the data it returns. `customClass` names the class and `configFile` (or `proProperties`) configures it; every non-empty data block the class returns becomes one job. Use it for sources no built-in agent covers; the class must already be installed on the Lobster server.", "properties": { "class": { "type": "string", "const": "core.CronCustomAgentSettings", "description": "The type of this object, always `core.CronCustomAgentSettings`. Required where the member it is sent in accepts several types." }, "configFile": { "type": "string", "description": "Configuration value handed to `customClass` on every run, usually the path of its configuration file relative to the Lobster installation; what it must contain depends on the class. `%NAME%` constants and `@MSG_CALL_@` trigger variables in it are resolved first. For classes that take properties, a non-empty `proProperties` is passed instead of this value.", "examples": [ "./conf/my_task.properties" ] }, "cronSchedule": { "type": "array", "description": "When the agent runs: a list of crontab expressions with six space-separated fields `second minute hour day-of-month month day-of-week`. The agent runs whenever any entry matches, in the server's time zone, and only while the profile is `active`. A field takes `*`, a number, a list `0,30`, a range `8-17` (hour ranges may wrap, `22-2`), a stepped range `8-18/2` or a step `*/15` (not `0/15`). Month is `1`-`12`, day-of-week `1` = Sunday to `7` = Saturday, and day-of-month also accepts `L` for the last day; names such as `MON` and `?` are not supported. Examples: `0 0 9 * * 2-6` weekdays at 09:00, `0 */15 * * * *` every 15 minutes, `0 0 0 L * *` at the end of each month. Put `0` in the second field. Not expressible: every second week, the n-th weekday of a month, holidays; `2-6` still runs on public holidays. Say so instead of approximating. An entry without exactly six fields, or one the scheduler itself could never load (an unparsable field such as `MON`, `* * * * * *`, a value out of range, ...), is refused - unless it is already stored exactly as sent, which an unrelated write of the profile must not start refusing. Omitted on create or sent empty, the agent runs every minute. A schedule made as an interval, time table or trigger reads back as an empty list and becomes a 1-minute interval on the next write of the profile.", "items": { "type": "string" } }, "customClass": { "type": "string", "description": "Fully qualified name of the Java class that produces the data. It must be a cron class installed on the Lobster server (registered in `./etc/admin/datawizard/custom_classes.properties` or `custom_own_classes.properties`, or supplied by a platform module), or, for the orchestration agent, an orchestration class of a platform module. It is instantiated on every run, so a wrong name fails each run rather than being rejected on save. Every non-empty data block the class returns is processed as its own job. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=CUSTOM_CLASS`; the orchestration agent takes only the orchestration classes of platform modules from that list.", "examples": [ "com.example.MyCronTask" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=CUSTOM_CLASS" }, "errorProfile": { "type": "string", "description": "Name of a profile to start when a run of this agent fails, for example because the data cannot be fetched, or because no data is found and `missingIsError` is `true`. It is not started when the run is stopped. Leave it empty to start no profile. `null` keeps the stored value." }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that runs the agent in a load-balanced installation; empty runs it on the active node. Leave it empty on a single-node installation. `null` keeps the stored value." }, "fileFilterClassName": { "type": "string", "description": "Fully qualified name of a Java file filter class that decides which of the fetched files are processed; empty uses none. `null` keeps the stored value." }, "fileFilterConfigName": { "type": "string", "description": "Name of the configuration file of the `fileFilterClassName` class. `null` keeps the stored value." }, "interval": { "type": "integer", "format": "int32", "description": "Minutes or seconds (`intervalUseSeconds`) between runs; applies only with `scheduleType` `INTERVAL`: absent on a read of another schedule type, and sent with one it is refused, so send both." }, "intervalUseSeconds": { "type": "boolean", "default": false, "description": "`true` makes `interval` seconds instead of minutes; like `interval`, only with `scheduleType` `INTERVAL`." }, "mailOnError": { "type": "boolean", "default": false, "description": "`true` sends the error mail when a run of the agent fails. `null` keeps the stored value." }, "maxProcessTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum run time of a job of the agent in minutes, `0` for no limit; see `maxTimeAbsolute`. `null` keeps the stored value." }, "maxTimeAbsolute": { "type": "boolean", "default": true, "description": "`true` reads the agent's maximum run time as an absolute time instead of a limit up to its next run. `null` keeps the stored value." }, "missingIsError": { "type": "boolean", "default": false, "description": "`true` fails the job when the agent finds no data to process. `null` keeps the stored value." }, "multipartBrowserMode": { "$ref": "#/components/schemas/core.HttpMultiPartMode", "default": "RFC6532", "description": "How the parts of a multipart request are encoded: `STRICT` (strict MIME headers), `RFC6532` (UTF-8 in part headers, e.g. non-ASCII file names), `COMPATIBLE` (browser-like, minimal part headers) or `SYSTEM` (the instance's setting). Used by `core.CronHttpAgentSettings` when multipart parts are sent; other agent types store it unused. `null` keeps the stored value.", "title": "HttpMultiPartMode" }, "proProperties": { "type": "object", "additionalProperties": true, "description": "map Entries whose key matches one of authorization, proxy-authorization, cookie, set-cookie, *password*, *passwd*, *pwd*, *passphrase*, *secret*, *credential*, *token*, *apikey*, *api.key*, *api-key* hold a secret: a read returns those encrypted, and a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else. Every other entry is unaffected." }, "profileAfterRun": { "type": "string", "description": "Name of a profile to start after a run of this agent. Leave it empty to start no profile. `null` keeps the stored value." }, "runInBackground": { "type": "boolean", "default": false, "description": "`true` hands every data block the class returns to a separate background job and continues at once, so several jobs of this profile run in parallel and their order is not guaranteed; `false` processes them one after another within the run." }, "scheduleType": { "$ref": "#/components/schemas/core.CronScheduleType", "description": "How the agent decides when to run; decides which of `interval`/`intervalUseSeconds`, `timeTables`, `triggerType`/`trigger*`, `cronSchedule` applies. Absent on write keeps the stored schedule and every member below untouched, whatever it currently is - only a sent `scheduleType` (or a sent `cronSchedule`, which keeps its own legacy write behaviour) changes it. A schedule made in the editor as interval, time table or trigger is fully readable, unlike through `cronSchedule` alone.", "title": "CronScheduleType" }, "timeTables": { "type": "array", "description": "Fixed run times; apply only with `scheduleType` `TIMETABLE`: absent on a read of another schedule type, and entries sent with one are refused. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronTimeTableEntry", "title": "CronTimeTableEntry" } }, "timeZone": { "type": "string", "description": "Time zone the `cronSchedule` entries are read in, e.g. `Europe/Berlin`; empty uses the time zone of the server. `null` keeps the stored value." }, "triggerAuthenticationType": { "$ref": "#/components/schemas/core.HttpAuthenticationType", "default": "SYSTEM", "description": "Only for `triggerType` `HTTP`: authentication scheme required of the caller when `triggerHttpChannelIds` names channels (`OAUTH2` without channels acts as `SYSTEM`).", "title": "HttpAuthenticationType" }, "triggerContext": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message context another profile forwards under to reach this agent." }, "triggerHttpChannelIds": { "type": "array", "description": "Only for `triggerType` `HTTP`: ids of the partner HTTP channels allowed to call the trigger (its `remoteId` as user plus the channel's password). Setting a different, non-empty list turns off a literal user/password credential pair; that pair is not settable through this API. Empty/absent requires no authentication unless such credentials are set. Get channel ids with `GET /platform/api/partners/preview/{partnerId}/channels` (type `HTTP`).", "items": { "type": "integer", "format": "int64" } }, "triggerHttpContentType": { "type": "string", "default": "text/html", "description": "Only for `triggerType` `HTTP`: content type of the trigger's HTTP response." }, "triggerHttpInvisibleForDmz": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` refuses calls reaching the instance through the Lobster DMZ server." }, "triggerHttpParams": { "type": "array", "description": "Only for `triggerType` `HTTP`: constant key/value pairs merged into the started job, like `%name%` constants. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronHttpTriggerParam", "title": "CronHttpTriggerParam" } }, "triggerHttpPathInfo": { "type": "string", "description": "Only for `triggerType` `HTTP`: URL suffix the trigger is reachable under. Required for `HTTP`.", "examples": [ "myTrigger/v1" ] }, "triggerHttpReturnData": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: whether the job's result is sent back as the HTTP response; only takes effect with `triggerSynchron` true." }, "triggerOnAnyServer": { "type": "boolean", "default": false, "description": "Only for `triggerType` `PROFILE`: whether a load-balancing cluster may run the triggered job on any node instead of only the one that received the forward." }, "triggerQueue": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message queue another profile forwards under to reach this agent." }, "triggerSynchron": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` waits for the job and answers the HTTP call with its result (see `triggerHttpReturnData`); `false` answers at once." }, "triggerType": { "$ref": "#/components/schemas/core.CronTriggerType", "description": "What starts the agent; only meaningful with `scheduleType` `TRIGGER` or `CRONTAB_HTTP`.", "title": "CronTriggerType" }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "title": "CronCustomAgentSettings" }, "core.MessageAgentSettings": { "type": "object", "description": "Starts a job when a message for this profile arrives in the platform's internal message service under `context` and `queue`, e.g. one sent by another profile's `core.MessageProfileResponseUnit` with the same `context` and `queue`. The sender either names this profile in `targetProfile` or leaves that empty, and then a profile whose `context` and `queue` match is taken. No external connection is involved.", "properties": { "class": { "type": "string", "const": "core.MessageAgentSettings", "description": "The type of this object, always `core.MessageAgentSettings`. Required where the member it is sent in accepts several types." }, "comChannelId": { "type": "integer", "format": "int64", "default": 0, "description": "Not evaluated for this agent type; leave it `0`." }, "context": { "type": "string", "default": "DataWizard", "description": "Message context the agent listens on; together with `queue` it must match what the sender uses. Context `System` with queue `DWForwardReceiver` is reserved for internal forwarding and gets no listener of its own." }, "param": { "type": "string", "description": "Not evaluated for this agent type; leave it empty." }, "queue": { "type": "string", "description": "Message queue within `context` the agent listens on. Empty by default.", "examples": [ "orders" ] }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "title": "MessageAgentSettings" }, "core.GooglePubSubAgentSettings": { "type": "object", "description": "Configuration of a Google Pub/Sub input agent: pulls messages from a Google Cloud Pub/Sub subscription and starts the profile for each one. Pub/Sub always acknowledges a message on receipt, so buffering (`accumulation`) is always available.", "properties": { "class": { "type": "string", "const": "core.GooglePubSubAgentSettings", "description": "The type of this object, always `core.GooglePubSubAgentSettings`. Required where the member it is sent in accepts several types." }, "accumulation": { "$ref": "#/components/schemas/core.AccumulationSettings", "description": "Message-buffering configuration for this agent; see `core.AccumulationSettings`.", "title": "AccumulationSettings" }, "alias": { "type": "string", "description": "Name of the Google Pub/Sub connection to receive through; it must exist on the instance and be allowed for the profile's client. Its credentials also name the Google Cloud project `topicId`/`subscriptionId` are resolved in.", "minLength": 1 }, "subscriptionId": { "type": "string", "description": "Id of the Google Cloud Pub/Sub subscription the agent pulls messages from, within the project named by `alias`'s credentials. Created automatically if the connection is configured to auto-create subscriptions, otherwise it must already exist.", "minLength": 1 }, "topicId": { "type": "string", "description": "Id of the Google Cloud Pub/Sub topic `subscriptionId` is bound to, within the project named by `alias`'s credentials. Created automatically if the connection is configured to auto-create topics, otherwise it must already exist.", "minLength": 1 }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "required": [ "alias", "subscriptionId", "topicId" ], "title": "GooglePubSubAgentSettings" }, "core.CronOrchestrationAgentSettings": { "type": "object", "description": "Runs an orchestration class of a platform module on the schedule in `cronSchedule` and processes the data it returns. It works like the custom agent, but `customClass` must be one of the orchestration classes the modules installed on the instance provide; `configFile` or `proProperties` configure it, and every non-empty data block it returns becomes one job.", "properties": { "class": { "type": "string", "const": "core.CronOrchestrationAgentSettings", "description": "The type of this object, always `core.CronOrchestrationAgentSettings`. Required where the member it is sent in accepts several types." }, "configFile": { "type": "string", "description": "Configuration value handed to `customClass` on every run, usually the path of its configuration file relative to the Lobster installation; what it must contain depends on the class. `%NAME%` constants and `@MSG_CALL_@` trigger variables in it are resolved first. For classes that take properties, a non-empty `proProperties` is passed instead of this value.", "examples": [ "./conf/my_task.properties" ] }, "cronSchedule": { "type": "array", "description": "When the agent runs: a list of crontab expressions with six space-separated fields `second minute hour day-of-month month day-of-week`. The agent runs whenever any entry matches, in the server's time zone, and only while the profile is `active`. A field takes `*`, a number, a list `0,30`, a range `8-17` (hour ranges may wrap, `22-2`), a stepped range `8-18/2` or a step `*/15` (not `0/15`). Month is `1`-`12`, day-of-week `1` = Sunday to `7` = Saturday, and day-of-month also accepts `L` for the last day; names such as `MON` and `?` are not supported. Examples: `0 0 9 * * 2-6` weekdays at 09:00, `0 */15 * * * *` every 15 minutes, `0 0 0 L * *` at the end of each month. Put `0` in the second field. Not expressible: every second week, the n-th weekday of a month, holidays; `2-6` still runs on public holidays. Say so instead of approximating. An entry without exactly six fields, or one the scheduler itself could never load (an unparsable field such as `MON`, `* * * * * *`, a value out of range, ...), is refused - unless it is already stored exactly as sent, which an unrelated write of the profile must not start refusing. Omitted on create or sent empty, the agent runs every minute. A schedule made as an interval, time table or trigger reads back as an empty list and becomes a 1-minute interval on the next write of the profile.", "items": { "type": "string" } }, "customClass": { "type": "string", "description": "Fully qualified name of the Java class that produces the data. It must be a cron class installed on the Lobster server (registered in `./etc/admin/datawizard/custom_classes.properties` or `custom_own_classes.properties`, or supplied by a platform module), or, for the orchestration agent, an orchestration class of a platform module. It is instantiated on every run, so a wrong name fails each run rather than being rejected on save. Every non-empty data block the class returns is processed as its own job. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=CUSTOM_CLASS`; the orchestration agent takes only the orchestration classes of platform modules from that list.", "examples": [ "com.example.MyCronTask" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=CUSTOM_CLASS" }, "errorProfile": { "type": "string", "description": "Name of a profile to start when a run of this agent fails, for example because the data cannot be fetched, or because no data is found and `missingIsError` is `true`. It is not started when the run is stopped. Leave it empty to start no profile. `null` keeps the stored value." }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that runs the agent in a load-balanced installation; empty runs it on the active node. Leave it empty on a single-node installation. `null` keeps the stored value." }, "fileFilterClassName": { "type": "string", "description": "Fully qualified name of a Java file filter class that decides which of the fetched files are processed; empty uses none. `null` keeps the stored value." }, "fileFilterConfigName": { "type": "string", "description": "Name of the configuration file of the `fileFilterClassName` class. `null` keeps the stored value." }, "interval": { "type": "integer", "format": "int32", "description": "Minutes or seconds (`intervalUseSeconds`) between runs; applies only with `scheduleType` `INTERVAL`: absent on a read of another schedule type, and sent with one it is refused, so send both." }, "intervalUseSeconds": { "type": "boolean", "default": false, "description": "`true` makes `interval` seconds instead of minutes; like `interval`, only with `scheduleType` `INTERVAL`." }, "mailOnError": { "type": "boolean", "default": false, "description": "`true` sends the error mail when a run of the agent fails. `null` keeps the stored value." }, "maxProcessTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum run time of a job of the agent in minutes, `0` for no limit; see `maxTimeAbsolute`. `null` keeps the stored value." }, "maxTimeAbsolute": { "type": "boolean", "default": true, "description": "`true` reads the agent's maximum run time as an absolute time instead of a limit up to its next run. `null` keeps the stored value." }, "missingIsError": { "type": "boolean", "default": false, "description": "`true` fails the job when the agent finds no data to process. `null` keeps the stored value." }, "multipartBrowserMode": { "$ref": "#/components/schemas/core.HttpMultiPartMode", "default": "RFC6532", "description": "How the parts of a multipart request are encoded: `STRICT` (strict MIME headers), `RFC6532` (UTF-8 in part headers, e.g. non-ASCII file names), `COMPATIBLE` (browser-like, minimal part headers) or `SYSTEM` (the instance's setting). Used by `core.CronHttpAgentSettings` when multipart parts are sent; other agent types store it unused. `null` keeps the stored value.", "title": "HttpMultiPartMode" }, "proProperties": { "type": "object", "additionalProperties": true, "description": "map Entries whose key matches one of authorization, proxy-authorization, cookie, set-cookie, *password*, *passwd*, *pwd*, *passphrase*, *secret*, *credential*, *token*, *apikey*, *api.key*, *api-key* hold a secret: a read returns those encrypted, and a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else. Every other entry is unaffected." }, "profileAfterRun": { "type": "string", "description": "Name of a profile to start after a run of this agent. Leave it empty to start no profile. `null` keeps the stored value." }, "runInBackground": { "type": "boolean", "default": false, "description": "`true` hands every data block the class returns to a separate background job and continues at once, so several jobs of this profile run in parallel and their order is not guaranteed; `false` processes them one after another within the run." }, "scheduleType": { "$ref": "#/components/schemas/core.CronScheduleType", "description": "How the agent decides when to run; decides which of `interval`/`intervalUseSeconds`, `timeTables`, `triggerType`/`trigger*`, `cronSchedule` applies. Absent on write keeps the stored schedule and every member below untouched, whatever it currently is - only a sent `scheduleType` (or a sent `cronSchedule`, which keeps its own legacy write behaviour) changes it. A schedule made in the editor as interval, time table or trigger is fully readable, unlike through `cronSchedule` alone.", "title": "CronScheduleType" }, "timeTables": { "type": "array", "description": "Fixed run times; apply only with `scheduleType` `TIMETABLE`: absent on a read of another schedule type, and entries sent with one are refused. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronTimeTableEntry", "title": "CronTimeTableEntry" } }, "timeZone": { "type": "string", "description": "Time zone the `cronSchedule` entries are read in, e.g. `Europe/Berlin`; empty uses the time zone of the server. `null` keeps the stored value." }, "triggerAuthenticationType": { "$ref": "#/components/schemas/core.HttpAuthenticationType", "default": "SYSTEM", "description": "Only for `triggerType` `HTTP`: authentication scheme required of the caller when `triggerHttpChannelIds` names channels (`OAUTH2` without channels acts as `SYSTEM`).", "title": "HttpAuthenticationType" }, "triggerContext": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message context another profile forwards under to reach this agent." }, "triggerHttpChannelIds": { "type": "array", "description": "Only for `triggerType` `HTTP`: ids of the partner HTTP channels allowed to call the trigger (its `remoteId` as user plus the channel's password). Setting a different, non-empty list turns off a literal user/password credential pair; that pair is not settable through this API. Empty/absent requires no authentication unless such credentials are set. Get channel ids with `GET /platform/api/partners/preview/{partnerId}/channels` (type `HTTP`).", "items": { "type": "integer", "format": "int64" } }, "triggerHttpContentType": { "type": "string", "default": "text/html", "description": "Only for `triggerType` `HTTP`: content type of the trigger's HTTP response." }, "triggerHttpInvisibleForDmz": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` refuses calls reaching the instance through the Lobster DMZ server." }, "triggerHttpParams": { "type": "array", "description": "Only for `triggerType` `HTTP`: constant key/value pairs merged into the started job, like `%name%` constants. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronHttpTriggerParam", "title": "CronHttpTriggerParam" } }, "triggerHttpPathInfo": { "type": "string", "description": "Only for `triggerType` `HTTP`: URL suffix the trigger is reachable under. Required for `HTTP`.", "examples": [ "myTrigger/v1" ] }, "triggerHttpReturnData": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: whether the job's result is sent back as the HTTP response; only takes effect with `triggerSynchron` true." }, "triggerOnAnyServer": { "type": "boolean", "default": false, "description": "Only for `triggerType` `PROFILE`: whether a load-balancing cluster may run the triggered job on any node instead of only the one that received the forward." }, "triggerQueue": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message queue another profile forwards under to reach this agent." }, "triggerSynchron": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` waits for the job and answers the HTTP call with its result (see `triggerHttpReturnData`); `false` answers at once." }, "triggerType": { "$ref": "#/components/schemas/core.CronTriggerType", "description": "What starts the agent; only meaningful with `scheduleType` `TRIGGER` or `CRONTAB_HTTP`.", "title": "CronTriggerType" }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "title": "CronOrchestrationAgentSettings" }, "core.AMQPAgentSettings": { "type": "object", "description": "Receives messages from a queue or topic of a message broker reached through an AMQP (Legacy) connection alias and starts a job for each message, or for each batch when `messageBufferSize` is above 1. The alias decides the protocol (AMQP 0.9.1, AMQP 1.0 or JMS), which changes how several members behave. Needs at least `alias`, `queueName` and `queueType`; with `queueType` `RPC` the profile's response is sent back to the caller. The job's input file is named `amqp.data` unless `propertyKeyForFileName` says otherwise.", "properties": { "class": { "type": "string", "const": "core.AMQPAgentSettings", "description": "The type of this object, always `core.AMQPAgentSettings`. Required where the member it is sent in accepts several types." }, "alias": { "type": "string", "description": "Name of the AMQP (Legacy) connection to receive through; it must exist on the instance and be allowed for the profile's client, otherwise the agent is not started (only logged, the profile still saves). The alias decides the protocol (AMQP 0.9.1, AMQP 1.0 or JMS)." }, "confirmMessageAtEnd": { "type": "boolean", "default": false, "description": "When true, a message is acknowledged to the broker only after its job finished successfully; a failed job rejects it (see `requeue091`). When false, the message is acknowledged as soon as its job is queued. Not used for `queueType` `RPC`." }, "delimiter": { "type": "string", "description": "Text put between the messages when `finalValueFunction` is `ALL`; `NL` stands for a line break (CRLF). Empty concatenates without a separator.", "examples": [ "," ] }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that runs this agent in a load-balanced installation; empty runs it on the active node. Leave it empty on a single-node installation." }, "filters": { "type": "array", "description": "Function chain that decides, for each message that arrives while the buffer is not yet full, whether the collected messages (including this one) are handed on early: the chain runs on the message text and the buffer is forwarded when its last result is true. It does not drop messages. Only evaluated with `messageBufferSize` above 1 and only when `mqttConditions` is absent; an empty `mqttConditions` list disables it too.", "items": { "$ref": "#/components/schemas/core.MessageFilter", "title": "MessageFilter" } }, "finalValueFunction": { "$ref": "#/components/schemas/core.FinalValueFunction", "default": "LAST", "description": "What the job receives from the collected messages: `LAST` the most recent one, `ALL` all of them joined with `delimiter`, `MIN`/`MAX` the one with the smallest/largest numeric value, `AVG` their average. `MIN`, `MAX` and `AVG` need a numeric `genericDataType` (`INTEGER`, `FLOAT`, `BIG_DECIMAL` or `BIG_INTEGER`), `ALL` works for `STRING`, `INTEGER`, `FLOAT`, `BIG_DECIMAL` and `BIG_INTEGER`; any other combination produces no job, also with `messageBufferSize` 1.", "title": "FinalValueFunction" }, "genericDataType": { "$ref": "#/components/schemas/core.ValueType", "default": "STRING", "description": "Type the whole message payload is read as for `mqttConditions` and `finalValueFunction`: `STRING` text, `INTEGER`, `DOUBLE`, `DATE` (`yyyy-MM-dd`), `FLOAT`, `BIG_DECIMAL` or `BIG_INTEGER`. `mqttConditions` support `STRING`, `INTEGER`, `DOUBLE`, `DATE`, `FLOAT` and `BIG_INTEGER`. A message that does not parse as the type fails the check (logged).", "title": "ValueType" }, "jmsClientId": { "type": "string", "description": "JMS client id set on the connection, which brokers need for durable topic subscriptions. Empty sets none. Only for JMS aliases; two profiles on the same alias must not use the same client id. `%name%` constants are resolved." }, "jmsMessageSelector": { "type": "string", "description": "JMS message selector (SQL-92 syntax on message headers and properties) that limits which messages the agent receives. Empty receives all. Only for JMS aliases. `%name%` constants are resolved.", "examples": [ "NewsType = 'Sports' OR NewsType = 'Opinion'" ] }, "jmsUnsubscribeTopic": { "type": "boolean", "default": false, "description": "When true, the durable JMS subscription `subscriberName` is removed when the agent closes its topic session (profile stopped, connection restarted), so messages published meanwhile are not kept for it. Only for JMS aliases with `queueType` `TOPIC`." }, "messageBufferSize": { "type": "integer", "format": "int32", "default": 1, "description": "Number of messages collected before they are handed on together as one job, combined by `finalValueFunction`. `1` starts one job per message; `timeout`, `mqttConditions` and `filters` only have an effect above 1.", "examples": [ 10 ] }, "messageIntervalCheck": { "type": "integer", "format": "int32", "default": 1, "description": "Stored but not evaluated by the AMQP agent: `mqttConditions` and `filters` are checked on every message." }, "mqttConditions": { "type": "array", "description": "Conditions that hand the collected messages on early: when a message that arrives before the buffer is full matches any value of any entry, the buffer including this message is forwarded. The whole message is compared, read as `genericDataType`; entries are OR-linked. They do not drop messages. Only evaluated with `messageBufferSize` above 1; when present (even as an empty list), `filters` are ignored.", "items": { "$ref": "#/components/schemas/core.MqttConditionEntry", "title": "MqttConditionEntry" } }, "persistent": { "type": "boolean", "default": false, "description": "Durability: with AMQP 0.9.1 a queue or exchange the agent declares itself is declared durable; with JMS and `queueType` `TOPIC` the agent creates a durable subscription named `subscriberName`. Not used for `queueType` `RPC` and not for AMQP 1.0." }, "prefetchCount": { "type": "integer", "format": "int32", "default": 0, "description": "AMQP 0.9.1 prefetch count: the maximum number of unacknowledged messages the broker delivers to this agent at once. `0` means no limit; `queueType` `RPC` always uses 1. Ignored for AMQP 1.0 and JMS." }, "prefetchSize": { "type": "integer", "format": "int32", "default": 0, "description": "AMQP 0.9.1 prefetch window in bytes (`basic.qos` prefetch size): the broker sends at most this many unacknowledged bytes. `0` means no limit; RabbitMQ accepts only `0`. Ignored for `queueType` `RPC`, AMQP 1.0 and JMS." }, "propertyKeyForFileName": { "type": "string", "description": "Message attribute that becomes the job's file name: `CorrelationId` or `MessageId` (the name is then `CID ` or `MID `), for AMQP 1.0 also `Subject`, or the name of any other message property/header, whose value is used as is. Empty or a missing value gives `amqp.data`; `/` is replaced by `.`." }, "qualityOfService": { "$ref": "#/components/schemas/core.AmqpQualityOfService", "default": "EXACTLY_ONCE", "description": "Delivery guarantee the consumer requests from an AMQP 1.0 broker. Only used for AMQP 1.0 aliases with `queueType` `PUBLISH` or `RPC` (topic and routing consumers always use `AT_LEAST_ONCE`); AMQP 0.9.1 and JMS ignore it.", "title": "AmqpQualityOfService" }, "queueName": { "type": "string", "description": "Queue to consume from; for AMQP 0.9.1 with `queueType` `TOPIC` or `ROUTING` it is the name of the exchange, and for JMS the name of the queue or topic destination. `%name%` constants are resolved. With AMQP 0.9.1 a queue or exchange that does not exist is declared by the agent (durable when `persistent` is true) unless the connection requires it to exist.", "examples": [ "orders.in" ] }, "queueType": { "$ref": "#/components/schemas/core.AmqpQueueType", "default": "PUBLISH", "description": "How the agent consumes: `PUBLISH` Subscriber (reads the queue `queueName`), `TOPIC` (AMQP 0.9.1: binds to the topic exchange `queueName` with `routingKey`; JMS: subscribes to the topic `queueName`), `ROUTING` (AMQP 0.9.1 direct exchange with `routingKey`; not supported by JMS), `RPC` (reads requests from `queueName` and sends the profile's response back to the requester; add a response unit that returns data).", "title": "AmqpQueueType" }, "requeue091": { "type": "boolean", "default": false, "description": "What happens to a message whose job failed: true puts it back into the queue at its position (it then blocks the queue until a job succeeds), false lets the broker discard it or move it to a dead-letter queue. Only for AMQP 0.9.1 aliases and only with `confirmMessageAtEnd` true." }, "routingKey": { "type": "string", "description": "Routing key the agent binds its own temporary queue with to the exchange `queueName`. Only used for AMQP 0.9.1 with `queueType` `TOPIC` (topic exchange, wildcards `*` and `#`) or `ROUTING` (direct exchange); ignored otherwise. `%name%` constants are resolved.", "examples": [ "orders.#" ] }, "subscriberName": { "type": "string", "description": "Name of the durable JMS topic subscription; the broker keeps unread messages under this name, so keep it stable. Only used for JMS aliases with `queueType` `TOPIC` and `persistent` true. `%name%` constants are resolved. When not set, a name `SUB` is generated." }, "timeout": { "type": "integer", "format": "int32", "default": 0, "description": "Seconds after which the messages collected so far are handed on as one job even though fewer than `messageBufferSize` have arrived; checked about every 5 seconds. `0` waits until the buffer is full. Only meaningful with `messageBufferSize` above 1.", "examples": [ 30 ] }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "title": "AMQPAgentSettings" }, "core.CronSapAgentSettings": { "type": "object", "description": "Calls an SAP function module (RFC) on a schedule and processes its result as the profile's input. Each run connects through the SAP connection `alias`, fills the import parameters from `fields`, `structures` and `tables`, calls `rfcName` and hands the result, rendered as `format`, to the profile. Needs `cronSchedule`, `alias` and `rfcName`; it runs as soon as the profile is active.", "properties": { "class": { "type": "string", "const": "core.CronSapAgentSettings", "description": "The type of this object, always `core.CronSapAgentSettings`. Required where the member it is sent in accepts several types." }, "alias": { "type": "string", "description": "Name of the SAP connection to call through; the profile's client must be allowed to use it. `%NAME%` constants are resolved. An unknown or disallowed alias fails each run." }, "cronSchedule": { "type": "array", "description": "When the agent runs: a list of crontab expressions with six space-separated fields `second minute hour day-of-month month day-of-week`. The agent runs whenever any entry matches, in the server's time zone, and only while the profile is `active`. A field takes `*`, a number, a list `0,30`, a range `8-17` (hour ranges may wrap, `22-2`), a stepped range `8-18/2` or a step `*/15` (not `0/15`). Month is `1`-`12`, day-of-week `1` = Sunday to `7` = Saturday, and day-of-month also accepts `L` for the last day; names such as `MON` and `?` are not supported. Examples: `0 0 9 * * 2-6` weekdays at 09:00, `0 */15 * * * *` every 15 minutes, `0 0 0 L * *` at the end of each month. Put `0` in the second field. Not expressible: every second week, the n-th weekday of a month, holidays; `2-6` still runs on public holidays. Say so instead of approximating. An entry without exactly six fields, or one the scheduler itself could never load (an unparsable field such as `MON`, `* * * * * *`, a value out of range, ...), is refused - unless it is already stored exactly as sent, which an unrelated write of the profile must not start refusing. Omitted on create or sent empty, the agent runs every minute. A schedule made as an interval, time table or trigger reads back as an empty list and becomes a 1-minute interval on the next write of the profile.", "items": { "type": "string" } }, "errorProfile": { "type": "string", "description": "Name of a profile to start when a run of this agent fails, for example because the data cannot be fetched, or because no data is found and `missingIsError` is `true`. It is not started when the run is stopped. Leave it empty to start no profile. `null` keeps the stored value." }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that runs the agent in a load-balanced installation; empty runs it on the active node. Leave it empty on a single-node installation. `null` keeps the stored value." }, "fields": { "type": "array", "description": "Scalar import parameters of the function module, one entry per parameter. Values may contain placeholders that are resolved on each run, e.g. `@yyyyMMdd@` for the current date, `%NAME%` for a constant or `@MSG_CALL_@` for a variable a trigger handed over.", "items": { "$ref": "#/components/schemas/core.SapField", "title": "SapField" } }, "fileFilterClassName": { "type": "string", "description": "Fully qualified name of a Java file filter class that decides which of the fetched files are processed; empty uses none. `null` keeps the stored value." }, "fileFilterConfigName": { "type": "string", "description": "Name of the configuration file of the `fileFilterClassName` class. `null` keeps the stored value." }, "format": { "$ref": "#/components/schemas/core.SapFormat", "default": "CSV", "description": "Format the function's result is converted to before the profile parses it. Choose the profile's input format to match.", "title": "SapFormat" }, "interval": { "type": "integer", "format": "int32", "description": "Minutes or seconds (`intervalUseSeconds`) between runs; applies only with `scheduleType` `INTERVAL`: absent on a read of another schedule type, and sent with one it is refused, so send both." }, "intervalUseSeconds": { "type": "boolean", "default": false, "description": "`true` makes `interval` seconds instead of minutes; like `interval`, only with `scheduleType` `INTERVAL`." }, "mailOnError": { "type": "boolean", "default": false, "description": "`true` sends the error mail when a run of the agent fails. `null` keeps the stored value." }, "maxProcessTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum run time of a job of the agent in minutes, `0` for no limit; see `maxTimeAbsolute`. `null` keeps the stored value." }, "maxTimeAbsolute": { "type": "boolean", "default": true, "description": "`true` reads the agent's maximum run time as an absolute time instead of a limit up to its next run. `null` keeps the stored value." }, "missingIsError": { "type": "boolean", "default": false, "description": "`true` fails the job when the agent finds no data to process. `null` keeps the stored value." }, "multipartBrowserMode": { "$ref": "#/components/schemas/core.HttpMultiPartMode", "default": "RFC6532", "description": "How the parts of a multipart request are encoded: `STRICT` (strict MIME headers), `RFC6532` (UTF-8 in part headers, e.g. non-ASCII file names), `COMPATIBLE` (browser-like, minimal part headers) or `SYSTEM` (the instance's setting). Used by `core.CronHttpAgentSettings` when multipart parts are sent; other agent types store it unused. `null` keeps the stored value.", "title": "HttpMultiPartMode" }, "profileAfterRun": { "type": "string", "description": "Name of a profile to start after a run of this agent. Leave it empty to start no profile. `null` keeps the stored value." }, "rfcName": { "type": "string", "description": "Name of the remote-enabled SAP function module to call. A name the SAP system does not know fails the run.", "examples": [ "BAPI_MATERIAL_GETLIST" ] }, "scheduleType": { "$ref": "#/components/schemas/core.CronScheduleType", "description": "How the agent decides when to run; decides which of `interval`/`intervalUseSeconds`, `timeTables`, `triggerType`/`trigger*`, `cronSchedule` applies. Absent on write keeps the stored schedule and every member below untouched, whatever it currently is - only a sent `scheduleType` (or a sent `cronSchedule`, which keeps its own legacy write behaviour) changes it. A schedule made in the editor as interval, time table or trigger is fully readable, unlike through `cronSchedule` alone.", "title": "CronScheduleType" }, "structures": { "type": "array", "description": "Structure-typed import parameters of the function module, one entry per structure with its field names in `header` and a single row of values. An entry without rows is skipped; a name the function does not have fails the run.", "items": { "$ref": "#/components/schemas/core.SapStructureEntry", "title": "SapStructureEntry" } }, "tables": { "type": "array", "description": "Table parameters of the function module to fill before the call, one entry per table with its column names in `header` and one row per table line; the table is cleared first. A name that is neither a table nor a table-typed import parameter of the function fails the run.", "items": { "$ref": "#/components/schemas/core.SapStructureEntry", "title": "SapStructureEntry" } }, "timeTables": { "type": "array", "description": "Fixed run times; apply only with `scheduleType` `TIMETABLE`: absent on a read of another schedule type, and entries sent with one are refused. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronTimeTableEntry", "title": "CronTimeTableEntry" } }, "timeZone": { "type": "string", "description": "Time zone the `cronSchedule` entries are read in, e.g. `Europe/Berlin`; empty uses the time zone of the server. `null` keeps the stored value." }, "triggerAuthenticationType": { "$ref": "#/components/schemas/core.HttpAuthenticationType", "default": "SYSTEM", "description": "Only for `triggerType` `HTTP`: authentication scheme required of the caller when `triggerHttpChannelIds` names channels (`OAUTH2` without channels acts as `SYSTEM`).", "title": "HttpAuthenticationType" }, "triggerContext": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message context another profile forwards under to reach this agent." }, "triggerHttpChannelIds": { "type": "array", "description": "Only for `triggerType` `HTTP`: ids of the partner HTTP channels allowed to call the trigger (its `remoteId` as user plus the channel's password). Setting a different, non-empty list turns off a literal user/password credential pair; that pair is not settable through this API. Empty/absent requires no authentication unless such credentials are set. Get channel ids with `GET /platform/api/partners/preview/{partnerId}/channels` (type `HTTP`).", "items": { "type": "integer", "format": "int64" } }, "triggerHttpContentType": { "type": "string", "default": "text/html", "description": "Only for `triggerType` `HTTP`: content type of the trigger's HTTP response." }, "triggerHttpInvisibleForDmz": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` refuses calls reaching the instance through the Lobster DMZ server." }, "triggerHttpParams": { "type": "array", "description": "Only for `triggerType` `HTTP`: constant key/value pairs merged into the started job, like `%name%` constants. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronHttpTriggerParam", "title": "CronHttpTriggerParam" } }, "triggerHttpPathInfo": { "type": "string", "description": "Only for `triggerType` `HTTP`: URL suffix the trigger is reachable under. Required for `HTTP`.", "examples": [ "myTrigger/v1" ] }, "triggerHttpReturnData": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: whether the job's result is sent back as the HTTP response; only takes effect with `triggerSynchron` true." }, "triggerOnAnyServer": { "type": "boolean", "default": false, "description": "Only for `triggerType` `PROFILE`: whether a load-balancing cluster may run the triggered job on any node instead of only the one that received the forward." }, "triggerQueue": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message queue another profile forwards under to reach this agent." }, "triggerSynchron": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` waits for the job and answers the HTTP call with its result (see `triggerHttpReturnData`); `false` answers at once." }, "triggerType": { "$ref": "#/components/schemas/core.CronTriggerType", "description": "What starts the agent; only meaningful with `scheduleType` `TRIGGER` or `CRONTAB_HTTP`.", "title": "CronTriggerType" }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true }, "waitTime": { "type": "integer", "format": "int32", "default": 180, "description": "Seconds to wait for the SAP call before the run fails; `0` waits without limit, and a negative value is stored as `0`.", "examples": [ 180 ] } }, "title": "CronSapAgentSettings" }, "core.SMTPAgentSettings": { "type": "object", "description": "Phase 1 of a profile, how its data arrives: `inputAgentSettings`. Event-driven agents (HTTP, FTP/SFTP/AS2/OFTP servers, mail, queues, messaging) start a job when data comes in; the `Cron*` agents fetch it on a schedule. Start with `core.HttpAgentSettings`, which a caller reaches on `/dw/Request/`.", "properties": { "class": { "type": "string", "const": "core.SMTPAgentSettings", "description": "The type of this object, always `core.SMTPAgentSettings`. Required where the member it is sent in accepts several types." }, "channel": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelMail", "description": "The partner mail channel mails must come from, given as `{\"id\": ...}`; list channels with `GET /platform/api/partners/preview/{partnerId}/channels` (type `MAIL`). Checked on write and read back resolved. `null` for none.", "title": "IntegrationPartnerChannelMail" }, "filePattern": { "type": "string", "description": "Attachment file name pattern; required unless the mail body is used." }, "ignoreChannelOfMail": { "type": "boolean", "default": false, "description": "Whether the channel of the mail is ignored." }, "mimeType": { "type": "string", "default": "text/plain", "description": "Content type of the mail body; used when the mail body is taken." }, "receiverAddress": { "type": "string", "description": "Recipient address mails must be sent to; may contain defined constants." }, "senderAddress": { "type": "string", "description": "Sender address mails must come from; may contain defined constants." }, "siblingIsSameLocalId": { "type": "boolean", "default": false, "description": "Whether a mail from a channel of the same local id is accepted." }, "subject": { "type": "string", "description": "Subject text a mail must match." }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true }, "useBody": { "type": "boolean", "default": false, "description": "Whether the mail body is taken instead of the attachment." }, "useRPCTo": { "type": "boolean", "default": false, "description": "Whether the RPC recipient address is used." } }, "title": "SMTPAgentSettings" }, "core.CronSshAgentSettings": { "type": "object", "description": "Fetches files from a partner's server over SCP on the schedule in `cronSchedule`: it runs `scp` for `dir` plus `filePattern` and processes each received file as one job. Set `channel` to the partner's SFTP channel with SCP allowed; login, password or key and the host key come from it. For SFTP transfers use `core.CronSftpAgentSettings`, which has more options.", "properties": { "class": { "type": "string", "const": "core.CronSshAgentSettings", "description": "The type of this object, always `core.CronSshAgentSettings`. Required where the member it is sent in accepts several types." }, "channel": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelSFTP", "description": "The SFTP partner channel to fetch from over SCP, as `{\"id\": }`; list channels with `GET /platform/api/partners/preview/{partnerId}/channels` (type `SFTP`). Checked on write and read back resolved. The channel must allow SCP, otherwise every run fails with \"channel does not match subtype\". Its `direction` must be `IN` or `IN_AND_OUT`, which is checked on write. A channel that was deleted reads as no channel; a copy references none.", "title": "IntegrationPartnerChannelSFTP" }, "cronSchedule": { "type": "array", "description": "When the agent runs: a list of crontab expressions with six space-separated fields `second minute hour day-of-month month day-of-week`. The agent runs whenever any entry matches, in the server's time zone, and only while the profile is `active`. A field takes `*`, a number, a list `0,30`, a range `8-17` (hour ranges may wrap, `22-2`), a stepped range `8-18/2` or a step `*/15` (not `0/15`). Month is `1`-`12`, day-of-week `1` = Sunday to `7` = Saturday, and day-of-month also accepts `L` for the last day; names such as `MON` and `?` are not supported. Examples: `0 0 9 * * 2-6` weekdays at 09:00, `0 */15 * * * *` every 15 minutes, `0 0 0 L * *` at the end of each month. Put `0` in the second field. Not expressible: every second week, the n-th weekday of a month, holidays; `2-6` still runs on public holidays. Say so instead of approximating. An entry without exactly six fields, or one the scheduler itself could never load (an unparsable field such as `MON`, `* * * * * *`, a value out of range, ...), is refused - unless it is already stored exactly as sent, which an unrelated write of the profile must not start refusing. Omitted on create or sent empty, the agent runs every minute. A schedule made as an interval, time table or trigger reads back as an empty list and becomes a 1-minute interval on the next write of the profile.", "items": { "type": "string" } }, "dir": { "type": "string", "description": "Directory to read from on the partner's server. SCP agent: the remote path the files are copied from; WebDAV agent: the path appended to `url` (a missing `/` between them is added). Date masks such as ``, `%NAME%` constants and `@MSG_CALL_@` variables are resolved.", "examples": [ "inbox/orders" ] }, "errorProfile": { "type": "string", "description": "Name of a profile to start when a run of this agent fails, for example because the data cannot be fetched, or because no data is found and `missingIsError` is `true`. It is not started when the run is stopped. Leave it empty to start no profile. `null` keeps the stored value." }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that runs the agent in a load-balanced installation; empty runs it on the active node. Leave it empty on a single-node installation. `null` keeps the stored value." }, "fileFilterClassName": { "type": "string", "description": "Fully qualified name of a Java file filter class that decides which of the fetched files are processed; empty uses none. `null` keeps the stored value." }, "fileFilterConfigName": { "type": "string", "description": "Name of the configuration file of the `fileFilterClassName` class. `null` keeps the stored value." }, "fileHandling": { "$ref": "#/components/schemas/core.CronFileHandling", "default": "DELETE", "description": "What happens to a fetched file on the server: `NONE` leaves it (so it is read again on the next run), `RENAME` renames or moves it as `fileRename` says. The WebDAV agent does this right after the download, before processing; the SCP agent after processing.", "title": "CronFileHandling" }, "filePattern": { "type": "string", "default": "*", "description": "Names of the files to fetch. SCP agent: sent as part of the `scp` source path, so the remote shell's wildcards apply; a received file that then does not match the pattern (`*`, `?`, `|`, `regex:`, ignoring case) is stored in 'unresolved' and skipped. WebDAV agent: the directory listing is filtered with that syntax, and files the server reports as zero bytes are skipped.", "examples": [ "*.xml" ] }, "fileRename": { "type": "string", "description": "New name of a fetched file when `fileHandling` is `RENAME`: `` is the original name, `` the name without its extension, other `<...>` masks insert the current date and time. SCP agent: the file is moved with `mv`, so a relative name is relative to the login directory, not to `dir`. WebDAV agent: a value starting with `/` is appended to `url`, any other to `url` plus `dir`, and `` is inserted URL-encoded. Empty leaves the file in place.", "examples": [ "done/" ] }, "host": { "type": "string", "description": "Host name of the server; non-empty overrides the channel's. `null` resets it." }, "interval": { "type": "integer", "format": "int32", "description": "Minutes or seconds (`intervalUseSeconds`) between runs; applies only with `scheduleType` `INTERVAL`: absent on a read of another schedule type, and sent with one it is refused, so send both." }, "intervalUseSeconds": { "type": "boolean", "default": false, "description": "`true` makes `interval` seconds instead of minutes; like `interval`, only with `scheduleType` `INTERVAL`." }, "mailOnError": { "type": "boolean", "default": false, "description": "`true` sends the error mail when a run of the agent fails. `null` keeps the stored value." }, "maxProcessTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum run time of a job of the agent in minutes, `0` for no limit; see `maxTimeAbsolute`. `null` keeps the stored value." }, "maxTimeAbsolute": { "type": "boolean", "default": true, "description": "`true` reads the agent's maximum run time as an absolute time instead of a limit up to its next run. `null` keeps the stored value." }, "missingIsError": { "type": "boolean", "default": false, "description": "`true` fails the job when the agent finds no data to process. `null` keeps the stored value." }, "multipartBrowserMode": { "$ref": "#/components/schemas/core.HttpMultiPartMode", "default": "RFC6532", "description": "How the parts of a multipart request are encoded: `STRICT` (strict MIME headers), `RFC6532` (UTF-8 in part headers, e.g. non-ASCII file names), `COMPATIBLE` (browser-like, minimal part headers) or `SYSTEM` (the instance's setting). Used by `core.CronHttpAgentSettings` when multipart parts are sent; other agent types store it unused. `null` keeps the stored value.", "title": "HttpMultiPartMode" }, "port": { "type": "integer", "format": "int32", "description": "Port of the server; above `0` overrides the channel's. `null` resets it." }, "profileAfterRun": { "type": "string", "description": "Name of a profile to start after a run of this agent. Leave it empty to start no profile. `null` keeps the stored value." }, "runInBackground": { "type": "boolean", "default": false, "description": "`true` hands every fetched file to a separate background job and continues with the next file at once, so several jobs of this profile run in parallel and their order is not guaranteed; `false` processes the files one after another within the run." }, "scheduleType": { "$ref": "#/components/schemas/core.CronScheduleType", "description": "How the agent decides when to run; decides which of `interval`/`intervalUseSeconds`, `timeTables`, `triggerType`/`trigger*`, `cronSchedule` applies. Absent on write keeps the stored schedule and every member below untouched, whatever it currently is - only a sent `scheduleType` (or a sent `cronSchedule`, which keeps its own legacy write behaviour) changes it. A schedule made in the editor as interval, time table or trigger is fully readable, unlike through `cronSchedule` alone.", "title": "CronScheduleType" }, "timeTables": { "type": "array", "description": "Fixed run times; apply only with `scheduleType` `TIMETABLE`: absent on a read of another schedule type, and entries sent with one are refused. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronTimeTableEntry", "title": "CronTimeTableEntry" } }, "timeZone": { "type": "string", "description": "Time zone the `cronSchedule` entries are read in, e.g. `Europe/Berlin`; empty uses the time zone of the server. `null` keeps the stored value." }, "triggerAuthenticationType": { "$ref": "#/components/schemas/core.HttpAuthenticationType", "default": "SYSTEM", "description": "Only for `triggerType` `HTTP`: authentication scheme required of the caller when `triggerHttpChannelIds` names channels (`OAUTH2` without channels acts as `SYSTEM`).", "title": "HttpAuthenticationType" }, "triggerContext": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message context another profile forwards under to reach this agent." }, "triggerHttpChannelIds": { "type": "array", "description": "Only for `triggerType` `HTTP`: ids of the partner HTTP channels allowed to call the trigger (its `remoteId` as user plus the channel's password). Setting a different, non-empty list turns off a literal user/password credential pair; that pair is not settable through this API. Empty/absent requires no authentication unless such credentials are set. Get channel ids with `GET /platform/api/partners/preview/{partnerId}/channels` (type `HTTP`).", "items": { "type": "integer", "format": "int64" } }, "triggerHttpContentType": { "type": "string", "default": "text/html", "description": "Only for `triggerType` `HTTP`: content type of the trigger's HTTP response." }, "triggerHttpInvisibleForDmz": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` refuses calls reaching the instance through the Lobster DMZ server." }, "triggerHttpParams": { "type": "array", "description": "Only for `triggerType` `HTTP`: constant key/value pairs merged into the started job, like `%name%` constants. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronHttpTriggerParam", "title": "CronHttpTriggerParam" } }, "triggerHttpPathInfo": { "type": "string", "description": "Only for `triggerType` `HTTP`: URL suffix the trigger is reachable under. Required for `HTTP`.", "examples": [ "myTrigger/v1" ] }, "triggerHttpReturnData": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: whether the job's result is sent back as the HTTP response; only takes effect with `triggerSynchron` true." }, "triggerOnAnyServer": { "type": "boolean", "default": false, "description": "Only for `triggerType` `PROFILE`: whether a load-balancing cluster may run the triggered job on any node instead of only the one that received the forward." }, "triggerQueue": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message queue another profile forwards under to reach this agent." }, "triggerSynchron": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` waits for the job and answers the HTTP call with its result (see `triggerHttpReturnData`); `false` answers at once." }, "triggerType": { "$ref": "#/components/schemas/core.CronTriggerType", "description": "What starts the agent; only meaningful with `scheduleType` `TRIGGER` or `CRONTAB_HTTP`.", "title": "CronTriggerType" }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "title": "CronSshAgentSettings" }, "core.CommLogAgentSettings": { "type": "object", "description": "Phase 1 of a profile, how its data arrives: `inputAgentSettings`. Event-driven agents (HTTP, FTP/SFTP/AS2/OFTP servers, mail, queues, messaging) start a job when data comes in; the `Cron*` agents fetch it on a schedule. Start with `core.HttpAgentSettings`, which a caller reaches on `/dw/Request/`.", "properties": { "class": { "type": "string", "const": "core.CommLogAgentSettings", "description": "The type of this object, always `core.CommLogAgentSettings`. Required where the member it is sent in accepts several types." }, "allPartners": { "type": "boolean", "default": true, "description": "Whether the agent logs entries for every partner instead of only `partnerList`. A write that switches to a selection with `partnerList` empty is refused: a selection with nothing selected would never match." }, "allProtocolTypes": { "type": "boolean", "default": true, "description": "Whether the agent logs entries for every communication protocol instead of only `protocolTypes`. Subject to the same all-or-selection rule as `allPartners`." }, "commType": { "$ref": "#/components/schemas/core.CommLogEventType", "default": "ALL", "description": "Communication-log event type this agent filters on; see `core.CommLogEventType`.", "title": "CommLogEventType" }, "direction": { "$ref": "#/components/schemas/core.CommLogDirection", "default": "ALL", "description": "Communication direction this agent filters on; see `core.CommLogDirection`.", "title": "CommLogDirection" }, "partnerList": { "type": "array", "description": "Ids of the partners this agent's log entries are limited to; get them with `GET /platform/api/partners/preview`. Only with `allPartners` `false`; sent while it is `true` it is refused, since the platform clears it.", "items": { "type": "integer", "format": "int64" } }, "protocolTypes": { "type": "array", "description": "Communication channel protocols this agent's log entries are limited to; see `core.CommLogProtocolType`. Only with `allProtocolTypes` `false`; sent while it is `true` it is refused.", "items": { "$ref": "#/components/schemas/core.CommLogProtocolType", "title": "CommLogProtocolType" } }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "title": "CommLogAgentSettings" }, "core.SapAleAgentSettings": { "type": "object", "description": "Phase 1 of a profile, how its data arrives: `inputAgentSettings`. Event-driven agents (HTTP, FTP/SFTP/AS2/OFTP servers, mail, queues, messaging) start a job when data comes in; the `Cron*` agents fetch it on a schedule. Start with `core.HttpAgentSettings`, which a caller reaches on `/dw/Request/`.", "properties": { "class": { "type": "string", "const": "core.SapAleAgentSettings", "description": "The type of this object, always `core.SapAleAgentSettings`. Required where the member it is sent in accepts several types." }, "combineMessages": { "type": "integer", "format": "int32", "default": 1, "description": "Number of IDOCs of the same kind grouped into one job before it is handed to the target profile. `1` means no grouping." }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that runs this ALE listener in a load-balanced installation; empty runs it on the active node. Only relevant with load balancing - it is always stored empty otherwise." }, "maxDocs": { "type": "integer", "format": "int32", "default": 1000, "description": "Maximum number of IDOCs the platform accepts in one ALE transmission from SAP; a transmission with more is refused entirely and no job runs.", "examples": [ 1000 ] }, "relations": { "type": "array", "description": "Ordered IDOC-to-profile routing table; see `core.SapAleRelation`. Must name at least one rule - the editor refuses to save an empty table.", "items": { "$ref": "#/components/schemas/core.SapAleRelation", "title": "SapAleRelation" } }, "sapAlias": { "type": "string", "description": "Name of the SAP connection to receive ALE IDOCs from; the profile's client must be allowed to use it.", "minLength": 1 }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true }, "useAndOperation": { "type": "boolean", "default": false, "description": "Whether a `profileName` used by more than one row of `relations` is only chosen once every one of its rows also finds a distinct match in the same IDOC, instead of the single best matching row deciding alone." }, "usePersistentMessage": { "type": "boolean", "default": false, "description": "Whether the message handed to the matching `profileName` is persistent (kept up to 96 hours, delivered once a consumer is available) instead of synchronous (waits up to 12 hours for the profile's answer)." } }, "required": [ "relations", "sapAlias" ], "title": "SapAleAgentSettings" }, "core.CronWebdavAgentSettings": { "type": "object", "description": "Fetches files from a WebDAV server on the schedule in `cronSchedule`. Set `url`, or `comChannelId` to an HTTP partner channel that supplies address and login, then the folder in `dir` and the names in `filePattern`; each file becomes one job and, by default, is deleted on the server right after the download (`fileHandling`). Password: not settable through this API; it comes from the channel.", "properties": { "class": { "type": "string", "const": "core.CronWebdavAgentSettings", "description": "The type of this object, always `core.CronWebdavAgentSettings`. Required where the member it is sent in accepts several types." }, "certId": { "type": "integer", "format": "int64", "default": 0, "description": "Id of the local certificate the HTTPS connection authenticates with; it must already exist on the instance. `0` uses the local certificate of the `comChannelId` channel, if it has one." }, "comChannelId": { "type": "integer", "format": "int64", "default": 0, "description": "Id of an HTTP partner channel that supplies the password and whatever `url`, `user` and `certId` leave empty; list channels with `GET /platform/api/partners/preview/{partnerId}/channels` (type `HTTP`). Stored as sent without any check, so a wrong id only fails when the agent runs. `0` uses no channel. A trigger variable `VAR_SYS_TRIGGER_CHANNEL_ID` replaces it for that run.", "examples": [ 4711 ] }, "cronSchedule": { "type": "array", "description": "When the agent runs: a list of crontab expressions with six space-separated fields `second minute hour day-of-month month day-of-week`. The agent runs whenever any entry matches, in the server's time zone, and only while the profile is `active`. A field takes `*`, a number, a list `0,30`, a range `8-17` (hour ranges may wrap, `22-2`), a stepped range `8-18/2` or a step `*/15` (not `0/15`). Month is `1`-`12`, day-of-week `1` = Sunday to `7` = Saturday, and day-of-month also accepts `L` for the last day; names such as `MON` and `?` are not supported. Examples: `0 0 9 * * 2-6` weekdays at 09:00, `0 */15 * * * *` every 15 minutes, `0 0 0 L * *` at the end of each month. Put `0` in the second field. Not expressible: every second week, the n-th weekday of a month, holidays; `2-6` still runs on public holidays. Say so instead of approximating. An entry without exactly six fields, or one the scheduler itself could never load (an unparsable field such as `MON`, `* * * * * *`, a value out of range, ...), is refused - unless it is already stored exactly as sent, which an unrelated write of the profile must not start refusing. Omitted on create or sent empty, the agent runs every minute. A schedule made as an interval, time table or trigger reads back as an empty list and becomes a 1-minute interval on the next write of the profile.", "items": { "type": "string" } }, "dir": { "type": "string", "description": "Directory to read from on the partner's server. SCP agent: the remote path the files are copied from; WebDAV agent: the path appended to `url` (a missing `/` between them is added). Date masks such as ``, `%NAME%` constants and `@MSG_CALL_@` variables are resolved.", "examples": [ "inbox/orders" ] }, "errorProfile": { "type": "string", "description": "Name of a profile to start when a run of this agent fails, for example because the data cannot be fetched, or because no data is found and `missingIsError` is `true`. It is not started when the run is stopped. Leave it empty to start no profile. `null` keeps the stored value." }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that runs the agent in a load-balanced installation; empty runs it on the active node. Leave it empty on a single-node installation. `null` keeps the stored value." }, "fileFilterClassName": { "type": "string", "description": "Fully qualified name of a Java file filter class that decides which of the fetched files are processed; empty uses none. `null` keeps the stored value." }, "fileFilterConfigName": { "type": "string", "description": "Name of the configuration file of the `fileFilterClassName` class. `null` keeps the stored value." }, "fileHandling": { "$ref": "#/components/schemas/core.CronFileHandling", "default": "DELETE", "description": "What happens to a fetched file on the server: `NONE` leaves it (so it is read again on the next run), `RENAME` renames or moves it as `fileRename` says. The WebDAV agent does this right after the download, before processing; the SCP agent after processing.", "title": "CronFileHandling" }, "filePattern": { "type": "string", "default": "*", "description": "Names of the files to fetch. SCP agent: sent as part of the `scp` source path, so the remote shell's wildcards apply; a received file that then does not match the pattern (`*`, `?`, `|`, `regex:`, ignoring case) is stored in 'unresolved' and skipped. WebDAV agent: the directory listing is filtered with that syntax, and files the server reports as zero bytes are skipped.", "examples": [ "*.xml" ] }, "fileRename": { "type": "string", "description": "New name of a fetched file when `fileHandling` is `RENAME`: `` is the original name, `` the name without its extension, other `<...>` masks insert the current date and time. SCP agent: the file is moved with `mv`, so a relative name is relative to the login directory, not to `dir`. WebDAV agent: a value starting with `/` is appended to `url`, any other to `url` plus `dir`, and `` is inserted URL-encoded. Empty leaves the file in place.", "examples": [ "done/" ] }, "httpHeader": { "type": "object", "additionalProperties": true, "description": "map Entries whose key matches one of authorization, proxy-authorization, cookie, set-cookie, *password*, *passwd*, *pwd*, *passphrase*, *secret*, *credential*, *token*, *apikey*, *api.key*, *api-key* hold a secret: a read returns those encrypted, and a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else. Every other entry is unaffected." }, "interval": { "type": "integer", "format": "int32", "description": "Minutes or seconds (`intervalUseSeconds`) between runs; applies only with `scheduleType` `INTERVAL`: absent on a read of another schedule type, and sent with one it is refused, so send both." }, "intervalUseSeconds": { "type": "boolean", "default": false, "description": "`true` makes `interval` seconds instead of minutes; like `interval`, only with `scheduleType` `INTERVAL`." }, "mailOnError": { "type": "boolean", "default": false, "description": "`true` sends the error mail when a run of the agent fails. `null` keeps the stored value." }, "maxProcessTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum run time of a job of the agent in minutes, `0` for no limit; see `maxTimeAbsolute`. `null` keeps the stored value." }, "maxTimeAbsolute": { "type": "boolean", "default": true, "description": "`true` reads the agent's maximum run time as an absolute time instead of a limit up to its next run. `null` keeps the stored value." }, "missingIsError": { "type": "boolean", "default": false, "description": "`true` fails the job when the agent finds no data to process. `null` keeps the stored value." }, "multipartBrowserMode": { "$ref": "#/components/schemas/core.HttpMultiPartMode", "default": "RFC6532", "description": "How the parts of a multipart request are encoded: `STRICT` (strict MIME headers), `RFC6532` (UTF-8 in part headers, e.g. non-ASCII file names), `COMPATIBLE` (browser-like, minimal part headers) or `SYSTEM` (the instance's setting). Used by `core.CronHttpAgentSettings` when multipart parts are sent; other agent types store it unused. `null` keeps the stored value.", "title": "HttpMultiPartMode" }, "profileAfterRun": { "type": "string", "description": "Name of a profile to start after a run of this agent. Leave it empty to start no profile. `null` keeps the stored value." }, "runInBackground": { "type": "boolean", "default": false, "description": "`true` hands every fetched file to a separate background job and continues with the next file at once, so several jobs of this profile run in parallel and their order is not guaranteed; `false` processes the files one after another within the run." }, "scheduleType": { "$ref": "#/components/schemas/core.CronScheduleType", "description": "How the agent decides when to run; decides which of `interval`/`intervalUseSeconds`, `timeTables`, `triggerType`/`trigger*`, `cronSchedule` applies. Absent on write keeps the stored schedule and every member below untouched, whatever it currently is - only a sent `scheduleType` (or a sent `cronSchedule`, which keeps its own legacy write behaviour) changes it. A schedule made in the editor as interval, time table or trigger is fully readable, unlike through `cronSchedule` alone.", "title": "CronScheduleType" }, "timeTables": { "type": "array", "description": "Fixed run times; apply only with `scheduleType` `TIMETABLE`: absent on a read of another schedule type, and entries sent with one are refused. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronTimeTableEntry", "title": "CronTimeTableEntry" } }, "timeZone": { "type": "string", "description": "Time zone the `cronSchedule` entries are read in, e.g. `Europe/Berlin`; empty uses the time zone of the server. `null` keeps the stored value." }, "triggerAuthenticationType": { "$ref": "#/components/schemas/core.HttpAuthenticationType", "default": "SYSTEM", "description": "Only for `triggerType` `HTTP`: authentication scheme required of the caller when `triggerHttpChannelIds` names channels (`OAUTH2` without channels acts as `SYSTEM`).", "title": "HttpAuthenticationType" }, "triggerContext": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message context another profile forwards under to reach this agent." }, "triggerHttpChannelIds": { "type": "array", "description": "Only for `triggerType` `HTTP`: ids of the partner HTTP channels allowed to call the trigger (its `remoteId` as user plus the channel's password). Setting a different, non-empty list turns off a literal user/password credential pair; that pair is not settable through this API. Empty/absent requires no authentication unless such credentials are set. Get channel ids with `GET /platform/api/partners/preview/{partnerId}/channels` (type `HTTP`).", "items": { "type": "integer", "format": "int64" } }, "triggerHttpContentType": { "type": "string", "default": "text/html", "description": "Only for `triggerType` `HTTP`: content type of the trigger's HTTP response." }, "triggerHttpInvisibleForDmz": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` refuses calls reaching the instance through the Lobster DMZ server." }, "triggerHttpParams": { "type": "array", "description": "Only for `triggerType` `HTTP`: constant key/value pairs merged into the started job, like `%name%` constants. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronHttpTriggerParam", "title": "CronHttpTriggerParam" } }, "triggerHttpPathInfo": { "type": "string", "description": "Only for `triggerType` `HTTP`: URL suffix the trigger is reachable under. Required for `HTTP`.", "examples": [ "myTrigger/v1" ] }, "triggerHttpReturnData": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: whether the job's result is sent back as the HTTP response; only takes effect with `triggerSynchron` true." }, "triggerOnAnyServer": { "type": "boolean", "default": false, "description": "Only for `triggerType` `PROFILE`: whether a load-balancing cluster may run the triggered job on any node instead of only the one that received the forward." }, "triggerQueue": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message queue another profile forwards under to reach this agent." }, "triggerSynchron": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` waits for the job and answers the HTTP call with its result (see `triggerHttpReturnData`); `false` answers at once." }, "triggerType": { "$ref": "#/components/schemas/core.CronTriggerType", "description": "What starts the agent; only meaningful with `scheduleType` `TRIGGER` or `CRONTAB_HTTP`.", "title": "CronTriggerType" }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true }, "url": { "type": "string", "description": "Base URL of the WebDAV server; `dir` is appended to it. Empty uses the address of the `comChannelId` channel. Date masks, `%NAME%` constants and variables are resolved.", "examples": [ "https://dav.example.com/remote.php/dav/files/acme" ] }, "user": { "type": "string", "description": "Login name at the WebDAV server. Empty uses the login of the `comChannelId` channel." } }, "title": "CronWebdavAgentSettings" }, "core.RuleAgentSettings": { "type": "object", "description": "Phase 1 of a profile, how its data arrives: `inputAgentSettings`. Event-driven agents (HTTP, FTP/SFTP/AS2/OFTP servers, mail, queues, messaging) start a job when data comes in; the `Cron*` agents fetch it on a schedule. Start with `core.HttpAgentSettings`, which a caller reaches on `/dw/Request/`.", "properties": { "class": { "type": "string", "const": "core.RuleAgentSettings", "description": "The type of this object, always `core.RuleAgentSettings`. Required where the member it is sent in accepts several types." }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "title": "RuleAgentSettings" }, "core.CronHttpAgentSettings": { "type": "object", "description": "Fetches data by HTTP from a URL on a schedule: on each `cronSchedule` time it sends one request (`httpSettings`) and runs the profile with a non-empty 2xx answer as input; with paging (`selfTrigger`) it can follow further pages (paging needs `runInBackground` false, which switching paging on sets unless that write asks for background processing, and a profile that maps - else it is refused). Needs `cronSchedule` and `httpSettings` (`host`, `uri`, `httpMethod`, `sslEnabled`). It runs as soon as the profile is active.", "properties": { "class": { "type": "string", "const": "core.CronHttpAgentSettings", "description": "The type of this object, always `core.CronHttpAgentSettings`. Required where the member it is sent in accepts several types." }, "certId": { "type": "integer", "format": "int64", "default": 0, "description": "Id of a client certificate for TLS client authentication at an https target; the certificate must already exist on the instance. A wrong id fails each run (\"Defined certificate can not be found!\"). `0` uses none, except a key store file `etc/certs/` on the server if one exists.", "examples": [ 42 ] }, "channel": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelHTTP", "description": "The HTTP partner channel the request goes through, as `{\"id\": }`; list channels with `GET /platform/api/partners/preview/{partnerId}/channels` (type `HTTP`). Checked on write and read back resolved. A channel that was deleted reads as no channel; a copy references none.", "title": "IntegrationPartnerChannelHTTP" }, "continueHttpCronWithSameUrl": { "type": "boolean", "default": false, "description": "`true` keeps paging when the next page's URL equals the previous one; `false` stops paging at a repeated URL. Only used with `selfTrigger`." }, "cronSchedule": { "type": "array", "description": "When the agent runs: a list of crontab expressions with six space-separated fields `second minute hour day-of-month month day-of-week`. The agent runs whenever any entry matches, in the server's time zone, and only while the profile is `active`. A field takes `*`, a number, a list `0,30`, a range `8-17` (hour ranges may wrap, `22-2`), a stepped range `8-18/2` or a step `*/15` (not `0/15`). Month is `1`-`12`, day-of-week `1` = Sunday to `7` = Saturday, and day-of-month also accepts `L` for the last day; names such as `MON` and `?` are not supported. Examples: `0 0 9 * * 2-6` weekdays at 09:00, `0 */15 * * * *` every 15 minutes, `0 0 0 L * *` at the end of each month. Put `0` in the second field. Not expressible: every second week, the n-th weekday of a month, holidays; `2-6` still runs on public holidays. Say so instead of approximating. An entry without exactly six fields, or one the scheduler itself could never load (an unparsable field such as `MON`, `* * * * * *`, a value out of range, ...), is refused - unless it is already stored exactly as sent, which an unrelated write of the profile must not start refusing. Omitted on create or sent empty, the agent runs every minute. A schedule made as an interval, time table or trigger reads back as an empty list and becomes a 1-minute interval on the next write of the profile.", "items": { "type": "string" } }, "dmz": { "type": "boolean", "default": false, "description": "`true` sends the request through the Lobster DMZ server, for targets only reachable from there." }, "encodeUrl": { "type": "boolean", "default": false, "description": "`true` percent-encodes the resolved URL, e.g. spaces in the path or query, before sending. The URL from `VAR_SYS_HTTP_PAGING_URL` is not encoded." }, "errorProfile": { "type": "string", "description": "Name of a profile to start when a run of this agent fails, for example because the data cannot be fetched, or because no data is found and `missingIsError` is `true`. It is not started when the run is stopped. Leave it empty to start no profile. `null` keeps the stored value." }, "factoryName": { "type": "string", "description": "Id (factory name) of the cluster node that runs the agent in a load-balanced installation; empty runs it on the active node. Leave it empty on a single-node installation. `null` keeps the stored value." }, "fileFilterClassName": { "type": "string", "description": "Fully qualified name of a Java file filter class that decides which of the fetched files are processed; empty uses none. `null` keeps the stored value." }, "fileFilterConfigName": { "type": "string", "description": "Name of the configuration file of the `fileFilterClassName` class. `null` keeps the stored value." }, "graphQlQuery": { "type": "string", "description": "The GraphQL query sent when `graphQlRequest` is true; `%NAME%` constants, date masks such as `@yyyyMMdd@` and `@NAME@` variables are resolved on each run before the query is wrapped in the JSON body.", "examples": [ "{ orders(first: 10) { id status } }" ] }, "graphQlRequest": { "type": "boolean", "default": false, "description": "`true` sends a GraphQL request: `graphQlQuery` is posted as a JSON body with method POST, multipart parts are dropped, and `soapData` is ignored. Takes precedence over `webServiceRequest`." }, "httpContentType": { "type": "string", "default": "text/xml", "description": "Content type of the request body `soapData`. The profile's encoding is added as `charset` unless the value contains `;raw`, which is removed before sending.", "examples": [ "application/json" ] }, "httpSettings": { "$ref": "#/components/schemas/core.HttpClientSettings", "description": "The request to send: `sslEnabled` (https), `host`, `port`, `uri` and `query` are joined into one URL, `httpMethod` is the method (`GETWITHCONTENT` and `DELETEWITHCONTENT` send a body with GET and DELETE), `headers` are sent as request headers (a header named `method` overrides the method). In the URL, `%NAME%` constants, date masks such as `@yyyyMMdd@` and `@NAME@` variables are resolved on each run. Default method `GET`.", "title": "HttpClientSettings" }, "httpTimeOut": { "type": "integer", "format": "int32", "default": 90, "description": "Seconds to wait for the target's answer before the request fails; a value below `1` also means 90. Seconds, not milliseconds: `30000` waits more than 8 hours.", "examples": [ 30 ] }, "httpUser": { "type": "string", "description": "User name for HTTP authentication at the target (Basic or Digest; a name with a backslash uses NTLM). The password is not settable through this API. Placeholders are resolved like in the URL. Empty: no user, unless a partner channel supplies one.", "examples": [ "DOMAIN\\user" ] }, "ignoreHttpError": { "type": "boolean", "default": false, "description": "`true` processes a non-empty answer even when its status is not 2xx, e.g. to map an error document. `false` logs such an answer as an error and runs no job." }, "interval": { "type": "integer", "format": "int32", "description": "Minutes or seconds (`intervalUseSeconds`) between runs; applies only with `scheduleType` `INTERVAL`: absent on a read of another schedule type, and sent with one it is refused, so send both." }, "intervalUseSeconds": { "type": "boolean", "default": false, "description": "`true` makes `interval` seconds instead of minutes; like `interval`, only with `scheduleType` `INTERVAL`." }, "mailOnError": { "type": "boolean", "default": false, "description": "`true` sends the error mail when a run of the agent fails. `null` keeps the stored value." }, "maxPaging": { "type": "integer", "format": "int32", "default": 1000, "description": "Maximum number of requests per scheduled run, the first one included. Limits paging. `0` or less sends no request at all.", "examples": [ 100 ] }, "maxProcessTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum run time of a job of the agent in minutes, `0` for no limit; see `maxTimeAbsolute`. `null` keeps the stored value." }, "maxTimeAbsolute": { "type": "boolean", "default": true, "description": "`true` reads the agent's maximum run time as an absolute time instead of a limit up to its next run. `null` keeps the stored value." }, "missingIsError": { "type": "boolean", "default": false, "description": "`true` fails the job when the agent finds no data to process. `null` keeps the stored value." }, "multiParts": { "type": "array", "description": "Elements named to match one of authorization, proxy-authorization, cookie, set-cookie, *password*, *passwd*, *pwd*, *passphrase*, *secret*, *credential*, *token*, *apikey*, *api.key*, *api-key* hold a secret: a read returns those encrypted, and a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else. Every other element is unaffected.", "items": { "$ref": "#/components/schemas/core.CronHttpMultiPart", "title": "CronHttpMultiPart" } }, "multipartBrowserMode": { "$ref": "#/components/schemas/core.HttpMultiPartMode", "default": "RFC6532", "description": "How the parts of a multipart request are encoded: `STRICT` (strict MIME headers), `RFC6532` (UTF-8 in part headers, e.g. non-ASCII file names), `COMPATIBLE` (browser-like, minimal part headers) or `SYSTEM` (the instance's setting). Used by `core.CronHttpAgentSettings` when multipart parts are sent; other agent types store it unused. `null` keeps the stored value.", "title": "HttpMultiPartMode" }, "profileAfterRun": { "type": "string", "description": "Name of a profile to start after a run of this agent. Leave it empty to start no profile. `null` keeps the stored value." }, "runInBackground": { "type": "boolean", "default": false, "description": "`true` hands each fetched answer to a separate background job, so the schedule does not wait for processing. Paging (`selfTrigger`) needs it `false`: the paging variable is only read from a job that ran in the foreground. A write that switches paging on and leaves this member as stored sets it to `false`; one that switches it on together with paging is refused." }, "scheduleType": { "$ref": "#/components/schemas/core.CronScheduleType", "description": "How the agent decides when to run; decides which of `interval`/`intervalUseSeconds`, `timeTables`, `triggerType`/`trigger*`, `cronSchedule` applies. Absent on write keeps the stored schedule and every member below untouched, whatever it currently is - only a sent `scheduleType` (or a sent `cronSchedule`, which keeps its own legacy write behaviour) changes it. A schedule made in the editor as interval, time table or trigger is fully readable, unlike through `cronSchedule` alone.", "title": "CronScheduleType" }, "selfTrigger": { "type": "boolean", "default": false, "description": "`true` enables paging: after a job, if the mapping set the variable `VAR_SYS_HTTP_PAGING_URL` to a non-empty URL, the agent requests that URL next and runs the profile again, until the variable stays empty, the URL repeats (see `continueHttpCronWithSameUrl`) or `maxPaging` requests were made." }, "soapData": { "type": "string", "description": "Request body sent with POST, PUT, PATCH, `GETWITHCONTENT` and `DELETEWITHCONTENT` (unless multipart parts are set), e.g. a JSON query or a SOAP envelope. `%NAME%` constants, date masks such as `@yyyyMMdd@` and `@NAME@` variables are resolved on each run." }, "timeTables": { "type": "array", "description": "Fixed run times; apply only with `scheduleType` `TIMETABLE`: absent on a read of another schedule type, and entries sent with one are refused. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronTimeTableEntry", "title": "CronTimeTableEntry" } }, "timeZone": { "type": "string", "description": "Time zone the `cronSchedule` entries are read in, e.g. `Europe/Berlin`; empty uses the time zone of the server. `null` keeps the stored value." }, "triggerAuthenticationType": { "$ref": "#/components/schemas/core.HttpAuthenticationType", "default": "SYSTEM", "description": "Only for `triggerType` `HTTP`: authentication scheme required of the caller when `triggerHttpChannelIds` names channels (`OAUTH2` without channels acts as `SYSTEM`).", "title": "HttpAuthenticationType" }, "triggerContext": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message context another profile forwards under to reach this agent." }, "triggerHttpChannelIds": { "type": "array", "description": "Only for `triggerType` `HTTP`: ids of the partner HTTP channels allowed to call the trigger (its `remoteId` as user plus the channel's password). Setting a different, non-empty list turns off a literal user/password credential pair; that pair is not settable through this API. Empty/absent requires no authentication unless such credentials are set. Get channel ids with `GET /platform/api/partners/preview/{partnerId}/channels` (type `HTTP`).", "items": { "type": "integer", "format": "int64" } }, "triggerHttpContentType": { "type": "string", "default": "text/html", "description": "Only for `triggerType` `HTTP`: content type of the trigger's HTTP response." }, "triggerHttpInvisibleForDmz": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` refuses calls reaching the instance through the Lobster DMZ server." }, "triggerHttpParams": { "type": "array", "description": "Only for `triggerType` `HTTP`: constant key/value pairs merged into the started job, like `%name%` constants. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.CronHttpTriggerParam", "title": "CronHttpTriggerParam" } }, "triggerHttpPathInfo": { "type": "string", "description": "Only for `triggerType` `HTTP`: URL suffix the trigger is reachable under. Required for `HTTP`.", "examples": [ "myTrigger/v1" ] }, "triggerHttpReturnData": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: whether the job's result is sent back as the HTTP response; only takes effect with `triggerSynchron` true." }, "triggerOnAnyServer": { "type": "boolean", "default": false, "description": "Only for `triggerType` `PROFILE`: whether a load-balancing cluster may run the triggered job on any node instead of only the one that received the forward." }, "triggerQueue": { "type": "string", "description": "Only for `triggerType` `PROFILE`: the message queue another profile forwards under to reach this agent." }, "triggerSynchron": { "type": "boolean", "default": false, "description": "Only for `triggerType` `HTTP`: `true` waits for the job and answers the HTTP call with its result (see `triggerHttpReturnData`); `false` answers at once." }, "triggerType": { "$ref": "#/components/schemas/core.CronTriggerType", "description": "What starts the agent; only meaningful with `scheduleType` `TRIGGER` or `CRONTAB_HTTP`.", "title": "CronTriggerType" }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true }, "validCertificateChain": { "type": "boolean", "default": false, "description": "`true` checks the target's TLS certificate chain against the trusted certificates and fails the request on an untrusted one; `false` accepts any server certificate." }, "webServiceRequest": { "type": "boolean", "default": false, "description": "`true` sends a SOAP request: `soapData` is posted (the method becomes POST unless PUT or PATCH is chosen), the `SOAPAction` header is derived from the envelope, multipart parts are dropped, and a non-2xx answer is checked for a SOAP fault." } }, "title": "CronHttpAgentSettings" }, "core.IoTAgentSettings": { "type": "object", "description": "Connects the profile to OPC UA, in one of two ways chosen by `agentType`. `OPC_Function` publishes the profile as a callable method on the platform's built-in OPC UA server. `Data_Subscriber` makes the platform subscribe, as client of the OPC UA connection `subscriptionAlias`, to nodes of an external OPC UA server and start a job on every notification, with the values as an XML document (root element `SubscriptionResult`, file name `iotopc.csv`). Which members apply depends on `agentType`.", "properties": { "class": { "type": "string", "const": "core.IoTAgentSettings", "description": "The type of this object, always `core.IoTAgentSettings`. Required where the member it is sent in accepts several types." }, "agentType": { "$ref": "#/components/schemas/core.IoTAgentType", "default": "OPC_Function", "description": "Which of the two ways the agent connects to OPC UA.", "title": "IoTAgentType" }, "channelIds": { "type": "array", "description": "Server model (`agentType` `OPC_Function`): IoT partner channels assigned to the profile, as numeric channel ids from `GET /platform/api/partners/preview/{partnerId}/channels` (type `IoT`). Not validated: a wrong id is stored as is.", "items": { "type": "integer", "format": "int64" } }, "ignoreErrorStatus": { "type": "boolean", "default": true, "description": "Subscription model: when true, values read for `subscriptionReadValueEntries` go into the job even if the server reports a status other than Good; when false such a value makes the notification fail and no job starts." }, "notifyInitial": { "type": "boolean", "default": true, "description": "Subscription model: when true, the first notification right after the subscription starts (OPC UA servers send the current values then) also starts a job; when false it is skipped." }, "sendGenericOKResponse": { "type": "boolean", "default": true, "description": "Server model: when true, the OPC UA method has no output arguments and the caller only gets a generic success; when false it returns the fields of the target node `IOT_Result` as output arguments, so the target structure must have that node." }, "subscriptionAlias": { "type": "string", "description": "Subscription model: alias of the OPC UA client connection to the external server; it must exist on the instance." }, "subscriptionIDs": { "type": "array", "description": "Subscription model: OPC UA node ids to subscribe to; with `subscriptionType` `DataChange` a change of any of them starts a job. Must not be empty for either `subscriptionType`: without ids no subscription is created at all.", "items": { "type": "string" } }, "subscriptionInterval": { "type": "integer", "format": "int64", "default": 1000, "description": "Subscription model: publishing and sampling interval of the subscription in milliseconds; values below 1 are raised to 1. With `subscriptionType` `Direct` it is the interval at which jobs start.", "examples": [ 1000 ] }, "subscriptionReadValueEntries": { "type": "array", "description": "Subscription model: nodes read on every notification and written into the job's XML as a tree, each entry as an element named by its `outputIdentifier` holding the node's value, its `children` as child elements. Required for `subscriptionType` `Direct`.", "items": { "$ref": "#/components/schemas/core.IoTReadValueEntry", "title": "IoTReadValueEntry" } }, "subscriptionType": { "$ref": "#/components/schemas/core.IoTSubscriptionType", "default": "Direct", "description": "Subscription model: how the subscription reports values.", "title": "IoTSubscriptionType" }, "typeName": { "type": "string", "description": "Name of the input agent type, derived from `class` and assigned by the server, e.g. `WEBSERVICE` for `core.HttpAgentSettings`, `CRON_HTTP` for `core.CronHttpAgentSettings`, `UPLOAD` for `core.ManualUploadAgentSettings`. A value sent on write is ignored; choose the type with `class`.", "readOnly": true } }, "title": "IoTAgentSettings" }, "core.InputArchiveSettings": { "type": "object", "description": "The input arrives as an archive. `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.InputArchiveSettings", "description": "The type of this object, always `core.InputArchiveSettings`. Required where the member it is sent in accepts several types." }, "compressed": { "type": "boolean", "default": false, "description": "Whether the input data arrives already compressed as an archive of the given `format`." }, "encryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` archive. The archive password itself is not settable through this API; a write keeps it. A stored password counts as configured whatever `encryption` says; see `passwordConfigured`.", "title": "ZipEncryptionType" }, "format": { "$ref": "#/components/schemas/core.CompressionType", "default": "ZIP", "description": "Archive format of the input, used only while `compressed` is `true`.", "title": "CompressionType" }, "passwordConfigured": { "type": "boolean", "description": "Whether an archive password is stored. The password itself is never read or written through this API; a write keeps it.", "readOnly": true } }, "title": "InputArchiveSettings" }, "core.EdifactValidationSettings": { "type": "object", "description": "Checks applied to EDIFACT input. `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.EdifactValidationSettings", "description": "The type of this object, always `core.EdifactValidationSettings`. Required where the member it is sent in accepts several types." }, "checkDeclaredCharset": { "type": "boolean", "default": false, "description": "Whether the character set the interchange declares is checked." }, "checkEnvelope": { "type": "boolean", "default": false, "description": "Whether the interchange envelope (UNB/UNZ) is checked." }, "validateUnoaUnob": { "type": "boolean", "default": false, "description": "Whether the data is validated against the UNOA/UNOB character set." } }, "title": "EdifactValidationSettings" }, "core.ProfileIU": { "type": "object", "description": "Phase 5 of a profile: the integration unit that serialises the target tree into the output document, held in `integrationSettings.unit`. A response unit sends that output when its `contentType` is `core.ResponseContentType_IU`; leave the unit out when no response unit does.\n\nSend one of these types, named in `class`:\n- `core.GenericIntegrationUnit`: An integration unit installed on the instance that this API has no dedicated type for (anything other than `core.JsonCreationIU`, `core.XMLCreationIU` or `core.EdifactCreationIU`), held in `integrationSettings.unit`.\n- `core.EdifactCreationIU`: Serialises the target structure as an EDIFACT interchange (phase 5, `integrationSettings.unit`).\n- `core.XMLCreationIU`: Serialises the target structure as an XML document (phase 5, `integrationSettings.unit`).\n- `core.JsonCreationIU`: Serialises the target structure as JSON (phase 5, `integrationSettings.unit`).", "discriminator": { "propertyName": "class" }, "oneOf": [ { "$ref": "#/components/schemas/core.GenericIntegrationUnit", "title": "GenericIntegrationUnit" }, { "$ref": "#/components/schemas/core.EdifactCreationIU", "title": "EdifactCreationIU" }, { "$ref": "#/components/schemas/core.XMLCreationIU", "title": "XMLCreationIU" }, { "$ref": "#/components/schemas/core.JsonCreationIU", "title": "JsonCreationIU" } ], "title": "ProfileIU" }, "core.JobExecutionLimits": { "type": "object", "description": "Limits on the input a run accepts. `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.JobExecutionLimits", "description": "The type of this object, always `core.JobExecutionLimits`. Required where the member it is sent in accepts several types." }, "maxInputSizeKb": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum size in KB the input may have; `0` is unlimited. Must be at least `0`.", "minimum": 0 }, "maxRecords": { "type": "integer", "format": "int32", "default": 2147483647, "description": "Maximum number of records a run processes. Must be at least `1`; `2147483647` is unlimited.", "minimum": 1 } }, "title": "JobExecutionLimits" }, "core.ProfilePriority": { "type": "string", "description": "The thread-pool priority a profile's jobs run at: `jobExecution.priority`. Ignored while `jobExecution.singleInstance` is `true`, which forces `NORMAL`.\n\n- `VERY_LOW`: Very low.\n- `LOW`: Low.\n- `NORMAL`: Normal.\n- `HIGH`: High.\n- `HIGHEST`: Highest.", "enum": [ "VERY_LOW", "LOW", "NORMAL", "HIGH", "HIGHEST" ], "title": "ProfilePriority" }, "core.EmptyValueSettings": { "type": "object", "description": "How empty values are mapped. `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.EmptyValueSettings", "description": "The type of this object, always `core.EmptyValueSettings`. Required where the member it is sent in accepts several types." }, "emptyIsNull": { "type": "boolean", "default": true, "description": "Treats an empty field value as \"not existing\" rather than as an empty string." }, "skipEmptyFields": { "type": "boolean", "default": true, "description": "Skips an empty field to save memory instead of mapping it as empty." }, "skipUnreferencedSourceFields": { "type": "boolean", "default": true, "description": "Ignores an empty source field to save memory." } }, "title": "EmptyValueSettings" }, "core.FixRecordOutputSettings": { "type": "object", "description": "FixRecord output. `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.FixRecordOutputSettings", "description": "The type of this object, always `core.FixRecordOutputSettings`. Required where the member it is sent in accepts several types." }, "fillNumericWithZero": { "type": "boolean", "default": false, "description": "Fills a numeric FixRecord output field with `0` instead of blanks." } }, "title": "FixRecordOutputSettings" }, "core.MapperType": { "type": "string", "description": "The data mapper the mapping runs with. `SIMPLE` has no master/detail relation between records; a `V4` XML parser forces `EXTENDED`.\n\n- `SIMPLE`: Simple data mapper: no master/detail relation exists in the data.\n- `EXTENDED`: Normal data mapper.", "enum": [ "SIMPLE", "EXTENDED" ], "title": "MapperType" }, "core.MappingMemorySettings": { "type": "object", "description": "How the mapping holds its data. `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.MappingMemorySettings", "description": "The type of this object, always `core.MappingMemorySettings`. Required where the member it is sent in accepts several types." }, "swapAtPercent": { "type": "integer", "format": "int32", "default": 70, "description": "Memory-use percentage at which `swapToDisk` kicks in, `0` to `95`.", "maximum": 95, "minimum": 0 }, "swapToDisk": { "type": "boolean", "default": true, "description": "Writes mapped data to disk temporarily instead of holding it all in memory." } }, "title": "MappingMemorySettings" }, "core.ConstantDefinition": { "type": "object", "description": "One entry of `mappingSettings.constants`: a fixed name/value pair a mapping function or filter can read like a variable, but which a profile can never change while it runs (unlike a variable).", "properties": { "class": { "type": "string", "const": "core.ConstantDefinition", "description": "The type of this object, always `core.ConstantDefinition`. Required where the member it is sent in accepts several types." }, "name": { "type": "string", "description": "The constant's name, unique within the list; a second entry with the same name overwrites the first one when the list is parsed back. Must not contain a tab or a newline.", "minLength": 1 }, "value": { "type": "string", "description": "The constant's value, read as plain text wherever a mapping names the constant. Must not contain a tab or a newline." } }, "required": [ "name" ], "title": "ConstantDefinition" }, "core.MappingLink": { "type": "object", "description": "A field link, one element of `mappingSettings.mappings`: the target field named in `destination` takes the value of the source field named in `source`, e.g. `{\"class\": \"core.MappingLink\", \"source\": \"qty\", \"destination\": \"quantity\"}`. The value is read from the source node instance the enclosing target node currently iterates (see `path` on `core.DestinationNode`), and a link may cross levels, e.g. a field of a nested source node into a field of the parent target node. A function chain on the target field sees the linked value as its `LINK` parameters, so a field whose chain reads `LINK` needs a link too.", "properties": { "class": { "type": "string", "const": "core.MappingLink", "description": "The type of this object, always `core.MappingLink`. Required where the member it is sent in accepts several types." }, "destination": { "type": "string", "description": "Name of the target field that receives the value, exactly as in `mappingSettings.targetStructure` (case-sensitive). Must reference an existing target field. If the field also has `functions`, the last function's result becomes its value; a `fixValue` overrides both.", "examples": [ "quantity" ] }, "source": { "type": "string", "description": "Name of the source field whose value the link copies, exactly as in `mappingSettings.sourceStructure` (case-sensitive). Must reference an existing source field.", "examples": [ "qty" ] }, "xpath": { "type": "string", "description": "The path the platform computes from the two trees on every write, relative to the source node being iterated, e.g. `qty` or `supplier/name`; read-only, a sent value is ignored.", "readOnly": true } }, "title": "MappingLink" }, "core.SourceDataStructure": { "type": "object", "description": "The source structure, `mappingSettings.sourceStructure`: the tree the parser fills from the input, made only of `core.SourceNode` and `core.SourceField` items. It must describe the input as it arrives: for JSON input put one top-level node that stands for the top-level JSON object, with a field per key, a nested node (`maximum 1`) per nested object and a repeating node (`maximum 99999`) per array of objects; for CSV one repeating node with the columns as fields, in column order. Keys and names are compared case-sensitively.", "properties": { "class": { "type": "string", "const": "core.SourceDataStructure", "description": "The type of this object, always `core.SourceDataStructure`. Required where the member it is sent in accepts several types." }, "namespaces": { "type": "array", "description": "XML namespaces declared for this side of the tree: `prefix` is usable in `core.DestinationNode.xmlNameSpace` and matches an XML input's namespaced element names. A PATCH that sends this list replaces the whole set.", "items": { "$ref": "#/components/schemas/core.NamespaceDefinition", "title": "NamespaceDefinition" } }, "nodes": { "type": "array", "description": "The top-level items of the tree, in order; each nests its own items in `children`. Use one top-level node (`minimum 1`, `maximum 1`); a node named `root`, which the platform reserves, is stored as `Root`; a node name must be unique within the tree, after names are corrected (unless it is already stored that way and this write leaves names alone). A PATCH that sends this list replaces the whole tree.", "items": { "$ref": "#/components/schemas/core.DataStructureItem", "title": "DataStructureItem" } }, "template": { "type": "string", "description": "The name of a bundled template to replace this side's tree with (e.g. `ORDERS_D96A`, `850_004060`, `IDOC_IN_DELVRY03`), as listed by `GET /platform/api/profiles/preview/templates`. On the source side the template's format must match the profile's `parsing.documentType`; on the target side its format selects the output format. Replaces `nodes`, `treeName` and `namespaces`; must not be sent together with a non-empty `nodes`.", "examples": [ "ORDERS_D96A" ], "writeOnly": true }, "treeName": { "type": "string", "description": "Free-text name of the message template this tree was built from (an EDI message type, or blank). Purely informational: nothing reads it back to steer parsing or mapping.", "examples": [ "ORDERS05" ] } }, "title": "SourceDataStructure" }, "core.DestinationDataStructure": { "type": "object", "description": "The target structure, `mappingSettings.targetStructure`: the tree the mapping builds and the integration unit serialises, made only of `core.DestinationNode` and `core.DestinationField` items. The mapper walks it depth-first in declared order; each node repeats over the source node its `path` names, and each field takes its value from its link, its function chain or its `fixValue`. Put one top-level node in `nodes`; with the JSON unit its name wraps the output (`{\"Invoice\": {...}}`) unless it is `TRANSPARENT`.", "properties": { "class": { "type": "string", "const": "core.DestinationDataStructure", "description": "The type of this object, always `core.DestinationDataStructure`. Required where the member it is sent in accepts several types." }, "namespaces": { "type": "array", "description": "XML namespaces declared for this side of the tree: `prefix` is usable in `core.DestinationNode.xmlNameSpace` and matches an XML input's namespaced element names. A PATCH that sends this list replaces the whole set.", "items": { "$ref": "#/components/schemas/core.NamespaceDefinition", "title": "NamespaceDefinition" } }, "nodes": { "type": "array", "description": "The top-level items of the tree, in order; each nests its own items in `children`. Use one top-level node (`minimum 1`, `maximum 1`); a node named `root`, which the platform reserves, is stored as `Root`; a node name must be unique within the tree, after names are corrected (unless it is already stored that way and this write leaves names alone). A PATCH that sends this list replaces the whole tree.", "items": { "$ref": "#/components/schemas/core.DataStructureItem", "title": "DataStructureItem" } }, "template": { "type": "string", "description": "The name of a bundled template to replace this side's tree with (e.g. `ORDERS_D96A`, `850_004060`, `IDOC_IN_DELVRY03`), as listed by `GET /platform/api/profiles/preview/templates`. On the source side the template's format must match the profile's `parsing.documentType`; on the target side its format selects the output format. Replaces `nodes`, `treeName` and `namespaces`; must not be sent together with a non-empty `nodes`.", "examples": [ "ORDERS_D96A" ], "writeOnly": true }, "treeName": { "type": "string", "description": "Free-text name of the message template this tree was built from (an EDI message type, or blank). Purely informational: nothing reads it back to steer parsing or mapping.", "examples": [ "ORDERS05" ] } }, "title": "DestinationDataStructure" }, "core.Variable": { "type": "object", "description": "One entry of `mappingSettings.variables`: a value a mapping function (`VARIABLE` parameter, e.g. `data: \"VAR_JOBNR\"`), a filter or the running job itself can read and write while the profile runs - unlike a `core.ConstantDefinition`, which never changes. The list holds both the profile's own declared variables and the platform's built-in `VAR_*` ones (`VAR_FILENAME`, `VAR_JOBNR`, `VAR_TIMESTAMP`, ...); a write that leaves a built-in one out keeps it, since the platform fills a built-in one only while the profile declares it.", "properties": { "class": { "type": "string", "const": "core.Variable", "description": "The type of this object, always `core.Variable`. Required where the member it is sent in accepts several types." }, "description": { "type": "string", "description": "Free-text note on the variable." }, "initialValue": { "type": "string", "description": "The value the variable starts a job with, as text (converted to `type` the same way a field's value is - silently, so a non-numeric text in an `INTEGER` variable becomes `0`)." }, "name": { "type": "string", "description": "The variable's name, referenced as `data` on a `VARIABLE` function parameter and unique within the list. A name outside the pattern is corrected (`my var!` is stored as `my_var_`), a name equal to another variable's ignoring case, a repeated name included, gets `_` appended, and `VARIABLE` parameters in the same write follow the correction; on a repeated name they stay on the first entry. A name the profile already stores, and the built-in `VAR_*` names, are kept as they are.", "examples": [ "VAR_JOBNR" ], "minLength": 1, "pattern": "^[_a-zA-Z][a-zA-Z0-9\\-_.]*$" }, "resetOnNewRecord": { "type": "boolean", "default": false, "description": "Resets the variable to `initialValue` at the start of every new record, instead of carrying over the value the previous record left it with." }, "type": { "$ref": "#/components/schemas/core.ValueType", "default": "STRING", "description": "The variable's data type, which decides how a mapping function reads and writes it.", "title": "ValueType" } }, "required": [ "name" ], "title": "Variable" }, "core.IntegrationDataFormat": { "type": "string", "description": "The document type of a profile's input, `parsing.documentType`: which parser turns the incoming data into the source structure. The parser settings of each type are sent in `parsing.formatSettings`, one class per type (`core.CSVFileMetadata`, `core.XMLFileMetadata`, `core.FIXFileMetadata`, ...).\n\n- `CSV`: Delimited text, one record per line. Set the column separator in `parsing.formatSettings` (`core.CSVFileMetadata`) and model the columns as the fields of one repeating source node, in column order.\n- `XML`: An XML document; `core.XMLFileMetadata` names the element that starts a record (`recordTag`, required) and the parser version.\n- `EXCEL`: An Excel workbook (`.xls`, `.xlsx`); `core.ExcelFileMetadata` selects the sheets and rows.\n- `FIX`: Fixed-length records: every source field needs its `length`.\n- `DB`: Rows read from a database; they are parsed like CSV records.\n- `EDI`: An EDIFACT (or, with `tradacoms` on `core.EDIFileMetadata`, a TRADACOMS) message; its source structure is the message's segment tree (segment and element codes as names) in `mappingSettings.sourceStructure`.\n- `SAP_ALE`: An SAP IDoc, parsed as fixed-length records.\n- `X12`: An ANSI X12 message.\n- `BWA`: A BWA message.\n- `API`: No parsing and no mapping: the raw input goes straight to a custom Java class. The class itself is installed on the instance and is not settable through this API.\n- `JSON`: A JSON document: object keys match source nodes and fields by name, an array of objects is a repeating node.\n- `CARGO`: A Cargo-IMP message. Requires a Cargo-IMP licence.\n- `PARQUET`: A Parquet file, read via DuckDB straight into the source tree.\n- `SCHEMA`: A DTD or XML schema file to generate a structure from; not an input document type.\n- `SWAGGER`: A Swagger definition to generate a structure from; not an input document type.\n- `RAML`: A RAML definition to generate a structure from; not an input document type.\n- `YAML`: A YAML file to generate a structure from; not an input document type.\n- `JSON_SCHEMA`: A JSON schema to generate a structure from; not an input document type.\n- `MESSAGE_PACK`: MessagePack data as a source for a structure; not an input document type.", "enum": [ "CSV", "XML", "EXCEL", "FIX", "DB", "EDI", "SAP_ALE", "X12", "BWA", "API", "JSON", "CARGO", "PARQUET", "SCHEMA", "SWAGGER", "RAML", "YAML", "JSON_SCHEMA", "MESSAGE_PACK" ], "title": "IntegrationDataFormat" }, "core.AbstractFileFormatMetadata": { "type": "object", "description": "Parser settings, held in `parsing.formatSettings` and matching its `parsing.documentType` (e.g. `core.CSVFileMetadata` for `CSV`). A read always publishes the class matching the stored `parsing.documentType`; a write's class must match the profile's `parsing.documentType`. `API` has no settings model, so the member must be absent for it.\n\nSend one of these types, named in `class`:\n- `core.JSONFileMetadata`: How a JSON input is read, sent as `parsing.formatSettings` together with `parsing.documentType: JSON`.\n- `core.CSVFileMetadata`: How a CSV input is read, sent as `parsing.formatSettings` together with `parsing.documentType: CSV`, e.g.\n- `core.ParquetFileMetadata`: Sent as `parsing.formatSettings` together with `parsing.documentType: PARQUET`.\n- `core.XMLFileMetadata`: How an XML input is read, sent as `parsing.formatSettings` together with `parsing.documentType: XML`.\n- `core.CargoFileMetadata`: Sent as `parsing.formatSettings` together with `parsing.documentType: CARGO`; the job fails unless the instance is licensed for Cargo-IMP.\n- `core.EDIFileMetadata`: How an EDIFACT message is read, sent as `parsing.formatSettings` together with `parsing.documentType: EDI`; the source structure is the message's segment tree in `mappingSettings.sourceStructure`.\n- `core.X12FileMetadata`: How an ANSI X12 message is read, sent as `parsing.formatSettings` together with `parsing.documentType: X12`.\n- `core.ExcelFileMetadata`: How an Excel workbook (`.xls`/`.xlsx`) is read, sent as `parsing.formatSettings` together with `parsing.documentType: EXCEL`.\n- `core.BWAFileMetadata`: How a BWA message is read, sent as `parsing.formatSettings` together with `parsing.documentType: BWA`.\n- `core.SAPFileMetadata`: How an SAP IDoc is read, sent as `parsing.formatSettings` together with `parsing.documentType: SAP_ALE`.\n- `core.FIXFileMetadata`: How a fixed-length input is read, sent as `parsing.formatSettings` together with `parsing.documentType: FIX`.\n- `core.DBFileMetadata`: How rows read from a database are parsed, sent as `parsing.formatSettings` together with `parsing.documentType: DB`.", "discriminator": { "propertyName": "class" }, "oneOf": [ { "$ref": "#/components/schemas/core.JSONFileMetadata", "title": "JSONFileMetadata" }, { "$ref": "#/components/schemas/core.CSVFileMetadata", "title": "CSVFileMetadata" }, { "$ref": "#/components/schemas/core.ParquetFileMetadata", "title": "ParquetFileMetadata" }, { "$ref": "#/components/schemas/core.XMLFileMetadata", "title": "XMLFileMetadata" }, { "$ref": "#/components/schemas/core.CargoFileMetadata", "title": "CargoFileMetadata" }, { "$ref": "#/components/schemas/core.EDIFileMetadata", "title": "EDIFileMetadata" }, { "$ref": "#/components/schemas/core.X12FileMetadata", "title": "X12FileMetadata" }, { "$ref": "#/components/schemas/core.ExcelFileMetadata", "title": "ExcelFileMetadata" }, { "$ref": "#/components/schemas/core.BWAFileMetadata", "title": "BWAFileMetadata" }, { "$ref": "#/components/schemas/core.SAPFileMetadata", "title": "SAPFileMetadata" }, { "$ref": "#/components/schemas/core.FIXFileMetadata", "title": "FIXFileMetadata" }, { "$ref": "#/components/schemas/core.DBFileMetadata", "title": "DBFileMetadata" } ], "title": "AbstractFileFormatMetadata" }, "core.ProfileResponseUnit": { "type": "object", "description": "One step of phase 6, where the profile's result goes: an element of `responseSettings.units`. Units run in list order; `contentType` chooses what the unit sends and `active: false` skips it.\n\nSend one of these types, named in `class`:\n- `core.MessageProfileResponseUnit`: Hands the result to another profile through the internal Lobster message service: the message is put on `context`/`queue` and processed by the profile named in `targetProfile`, which must have a Message input agent (`core.MessageAgentSettings`).\n- `core.FaxProfileResponseUnit`: Sends the result as a fax through a fax partner channel.\n- `core.As4ProfileResponseUnit`: Sends the result as an AS4 message through an AS4 partner channel, which holds the partner agreement, endpoint and certificates.\n- `core.AmqpV2ProfileResponseUnit`: Publishes the result as a message to an AMQP 1.0 or AMQP 0.9.1 broker (e.g.\n- `core.X400ProfileResponseUnit`: Sends the result as an X.400 message through an X.400 partner channel, by default as an attachment named `attachmentName` next to the text in `body`.\n- `core.AmqpProfileResponseUnit`: Publishes the result as a message to a message broker through the connection configured under `alias`.\n- `core.As400ProfileResponseUnit`: Calls a program on an IBM AS/400 (IBM i) system.\n- `core.CloudStorageProfileResponseUnit`: Uploads the result as a file to a cloud storage (Amazon S3, Google Cloud Storage, Azure, Microsoft 365 OneDrive or SharePoint, Google Drive, Dropbox, Box) through a cloud storage partner channel, which holds the provider and its credentials.\n- `core.PassBackBinaryDataProfileResponseUnit`: Passes the integration unit's output back as the result of a cron call that started this profile as a sub-profile (`BasicCallSubProfile`); it does not send anywhere on its own.\n- `core.FileProfileResponseUnit`: Writes the result as a file to the Lobster server's file system, or with `targetBackup` into the job's backup.\n- `core.OftpProfileResponseUnit`: Sends the result as an OFTP virtual file to a partner through an OFTP partner channel.\n- `core.MailProfileResponseUnit`: Sends the result by e-mail.\n- `core.OpaqueProfileResponseUnit`: Stand-in for a response unit of a type this API does not model.\n- `core.HttpProfileResponseUnit`: Calls an external HTTP(S) endpoint with the result: the request goes to `httpSettings` (method, host, port, path, query, headers) and its body is chosen by `contentType`.\n- `core.SapProfileResponseUnit`: Calls a function module (RFC) in an SAP system with parameters filled from the target tree.\n- `core.WebDAVProfileResponseUnit`: Uploads the result as a file to a WebDAV server (HTTP PUT) reached through an HTTP partner channel.\n- `core.GooglePubSubProfileResponseUnit`: Publishes the result as one message to a Google Cloud Pub/Sub topic (`topicName`) through the connection configured under `alias`, which holds the credentials.\n- `core.SmsProfileResponseUnit`: Sends a text message (SMS) built from the `body` template through an SMS provider configured on the instance.\n- `core.AS2ProfileResponseUnit`: Sends the result as an AS2 message to a trading partner through an AS2 partner channel.\n- `core.ProProfileResponseUnit`: Hands the unit's output to a pro response class installed on the instance, named by `customClass`, with its settings in `proProperties`.\n- `core.SSHProfileResponseUnit`: Copies the result as a file by SCP to a server reached through an SSH partner channel.\n- `core.KafkaProfileResponseUnit`: Publishes the result as one record to a Kafka topic (`topicName`) through the broker connection configured under `alias`; `producerProperties` adds Kafka producer settings.\n- `core.TcpProfileResponseUnit`: Sends the result as text over a TCP connection named by `alias`; not settable through this API, it must already exist on the instance.\n- `core.FtpProfileResponseUnit`: Uploads the result as a file to the partner's FTP server through an FTP partner channel: host, port and login come from the channel unless `host` or `port` override them.\n- `core.CustomProfileResponseUnit`: Hands the unit's output to a custom response class installed on the instance, named by `customClass`.\n- `core.MqttProfileResponseUnit`: Publishes the result as one message to an MQTT broker.\n- `core.SapAleProfileResponseUnit`: Sends the result to an SAP system as IDocs (ALE), by calling `IDOC_INBOUND_ASYNCHRONOUS`.", "discriminator": { "propertyName": "class" }, "oneOf": [ { "$ref": "#/components/schemas/core.MessageProfileResponseUnit", "title": "MessageProfileResponseUnit" }, { "$ref": "#/components/schemas/core.FaxProfileResponseUnit", "title": "FaxProfileResponseUnit" }, { "$ref": "#/components/schemas/core.As4ProfileResponseUnit", "title": "As4ProfileResponseUnit" }, { "$ref": "#/components/schemas/core.AmqpV2ProfileResponseUnit", "title": "AmqpV2ProfileResponseUnit" }, { "$ref": "#/components/schemas/core.X400ProfileResponseUnit", "title": "X400ProfileResponseUnit" }, { "$ref": "#/components/schemas/core.AmqpProfileResponseUnit", "title": "AmqpProfileResponseUnit" }, { "$ref": "#/components/schemas/core.As400ProfileResponseUnit", "title": "As400ProfileResponseUnit" }, { "$ref": "#/components/schemas/core.CloudStorageProfileResponseUnit", "title": "CloudStorageProfileResponseUnit" }, { "$ref": "#/components/schemas/core.PassBackBinaryDataProfileResponseUnit", "title": "PassBackBinaryDataProfileResponseUnit" }, { "$ref": "#/components/schemas/core.FileProfileResponseUnit", "title": "FileProfileResponseUnit" }, { "$ref": "#/components/schemas/core.OftpProfileResponseUnit", "title": "OftpProfileResponseUnit" }, { "$ref": "#/components/schemas/core.MailProfileResponseUnit", "title": "MailProfileResponseUnit" }, { "$ref": "#/components/schemas/core.OpaqueProfileResponseUnit", "title": "OpaqueProfileResponseUnit" }, { "$ref": "#/components/schemas/core.HttpProfileResponseUnit", "title": "HttpProfileResponseUnit" }, { "$ref": "#/components/schemas/core.SapProfileResponseUnit", "title": "SapProfileResponseUnit" }, { "$ref": "#/components/schemas/core.WebDAVProfileResponseUnit", "title": "WebDAVProfileResponseUnit" }, { "$ref": "#/components/schemas/core.GooglePubSubProfileResponseUnit", "title": "GooglePubSubProfileResponseUnit" }, { "$ref": "#/components/schemas/core.SmsProfileResponseUnit", "title": "SmsProfileResponseUnit" }, { "$ref": "#/components/schemas/core.AS2ProfileResponseUnit", "title": "AS2ProfileResponseUnit" }, { "$ref": "#/components/schemas/core.ProProfileResponseUnit", "title": "ProProfileResponseUnit" }, { "$ref": "#/components/schemas/core.SSHProfileResponseUnit", "title": "SSHProfileResponseUnit" }, { "$ref": "#/components/schemas/core.KafkaProfileResponseUnit", "title": "KafkaProfileResponseUnit" }, { "$ref": "#/components/schemas/core.TcpProfileResponseUnit", "title": "TcpProfileResponseUnit" }, { "$ref": "#/components/schemas/core.FtpProfileResponseUnit", "title": "FtpProfileResponseUnit" }, { "$ref": "#/components/schemas/core.CustomProfileResponseUnit", "title": "CustomProfileResponseUnit" }, { "$ref": "#/components/schemas/core.MqttProfileResponseUnit", "title": "MqttProfileResponseUnit" }, { "$ref": "#/components/schemas/core.SapAleProfileResponseUnit", "title": "SapAleProfileResponseUnit" } ], "title": "ProfileResponseUnit" }, "core.CheckpointMailSettings": { "type": "object", "description": "The mail sent when a checkpoint window passes without the profile having run. Its SMTP user and password are not settable through this API; every member here keeps its stored value on `null`.", "properties": { "class": { "type": "string", "const": "core.CheckpointMailSettings", "description": "The type of this object, always `core.CheckpointMailSettings`. Required where the member it is sent in accepts several types." }, "asHtml": { "type": "boolean", "default": false, "description": "Whether `mailText` is rendered as HTML." }, "mailHost": { "type": "string", "description": "Mail server saved with the checkpoint mail. It is not used for sending: the checkpoint mail always goes out through the system's mail channel. `null` keeps the stored value.", "examples": [ "mail.acme.example" ] }, "mailPort": { "type": "integer", "format": "int32", "default": 25, "description": "Port saved with `mailHost`. Like `mailHost`, it is not used for sending. `null` keeps the stored value." }, "mailSender": { "type": "string", "description": "Sender address of the checkpoint mail. `null` keeps the stored value.", "examples": [ "alerts@acme.example" ] }, "mailSubject": { "type": "string", "description": "Subject of the checkpoint mail. `null` keeps the stored value.", "examples": [ "Checkpoint missed" ] }, "mailText": { "type": "string", "description": "Body of the checkpoint mail, plain text or HTML depending on `asHtml`. `null` keeps the stored value." }, "recipients": { "type": "array", "description": "Recipients of the checkpoint mail. `null` keeps the stored list; send `[]` to clear it.", "items": { "type": "string" } } }, "title": "CheckpointMailSettings" }, "core.ProfileCheckpoint": { "type": "object", "description": "A checkpoint of `runtimeSettings.checkpoints`: a window, starting at `hour`:`minute` on `day` and lasting `duration` minutes, in which the profile is expected to have run at least once. A miss sends the checkpoint mail.", "properties": { "class": { "type": "string", "const": "core.ProfileCheckpoint", "description": "The type of this object, always `core.ProfileCheckpoint`. Required where the member it is sent in accepts several types." }, "day": { "$ref": "#/components/schemas/core.CheckpointDay", "description": "The day, or weekday range, the checkpoint applies to. Required.", "title": "CheckpointDay" }, "duration": { "type": "integer", "format": "int32", "description": "Length of the window in minutes, at least `1`.", "minimum": 1 }, "hour": { "type": "integer", "format": "int32", "description": "Hour of the day the window starts, `0` to `23`, server time.", "maximum": 23, "minimum": 0 }, "minute": { "type": "integer", "format": "int32", "description": "Minute of the hour the window starts, `0` to `59`.", "maximum": 59, "minimum": 0 } }, "required": [ "day" ], "title": "ProfileCheckpoint" }, "core.ThrottleType": { "type": "string", "description": "Whether the profile's jobs are throttled.\n\n- `SYSTEM`: Follows the instance-wide throttle setting.\n- `ON`: Always throttled.\n- `OFF`: Never throttled.", "enum": [ "SYSTEM", "ON", "OFF" ], "title": "ThrottleType" }, "core.SplittingInputSettings": { "type": "object", "description": "Splitting the input into several jobs or chunks. `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.SplittingInputSettings", "description": "The type of this object, always `core.SplittingInputSettings`. Required where the member it is sent in accepts several types." }, "json": { "$ref": "#/components/schemas/core.JsonSplitSettings", "description": "Splitting a JSON input. `null` keeps every stored value.", "title": "JsonSplitSettings" }, "perInterchange": { "type": "boolean", "default": false, "description": "Whether an EDIFACT or X12 message is split into several jobs, one per interchange. Applies only while `parsing.documentType` is `EDI` or `X12`, otherwise a changed value is rejected." }, "xml": { "$ref": "#/components/schemas/core.XmlSplitSettings", "description": "Splitting an XML input into chunks. `null` keeps every stored value.", "title": "XmlSplitSettings" } }, "title": "SplittingInputSettings" }, "core.SplitOutputSettings": { "type": "object", "description": "Splitting the output per record (phases 3/6). `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.SplitOutputSettings", "description": "The type of this object, always `core.SplitOutputSettings`. Required where the member it is sent in accepts several types." }, "includeIntegrationUnit": { "type": "boolean", "default": false, "description": "Includes the integration unit's own output in the per-record channel split; only meaningful while `perRecord` is `true`." }, "perRecord": { "type": "boolean", "default": false, "description": "Sends each record to its own output channel selection instead of one for the whole job." } }, "title": "SplitOutputSettings" }, "Error": { "type": "object", "description": "The error that made the request fail.", "properties": { "code": { "type": "string", "description": "Stable machine-readable `UPPER_SNAKE` error code for programmatic handling, e.g. `PARTNER_NOT_FOUND`, `VALIDATION_FAILED` or `FORBIDDEN`. New codes may be added over time; treat an unknown code according to the HTTP status class. The HTTP status itself is carried by the status line only, never duplicated here." }, "message": { "type": "string", "description": "Human-readable, non-localized explanation. Branch on `code`, never on this text." }, "details": { "type": "array", "description": "Individual failures within the request, e.g. one entry per violated field.", "items": { "$ref": "#/components/schemas/ErrorDetail" } } }, "required": [ "code", "message" ] }, "core.SqlDeleteMode": { "type": "string", "description": "Whether, and how, a Cron-SQL input deletes the rows it read: `databaseAccess.source.deleteAfterRead`.\n\n- `NONE`: The rows read are not deleted.\n- `MATCH_ROW`: Each row read is deleted by matching the row.\n- `WHERE_CLAUSE`: The rows read are deleted using the statement's `WHERE` clause.", "enum": [ "NONE", "MATCH_ROW", "WHERE_CLAUSE" ], "title": "SqlDeleteMode" }, "core.SourceEmptyResultSettings": { "type": "object", "description": "What the input does when its statement returns no row. `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.SourceEmptyResultSettings", "description": "The type of this object, always `core.SourceEmptyResultSettings`. Required where the member it is sent in accepts several types." }, "replacementData": { "type": "string", "description": "The input used while `useReplacement` is `true`, in the same CSV shape a real result row would have. Empty by default." }, "useReplacement": { "type": "boolean", "default": false, "description": "Starts one job with `replacementData` as its input instead of starting none." } }, "title": "SourceEmptyResultSettings" }, "core.SqlCronParameter": { "type": "object", "description": "One SQL statement parameter of a `core.CronSqlAgentSettings` agent, bound positionally. `name` is a display label, e.g. the parameter's position, not a bind variable name.", "properties": { "class": { "type": "string", "const": "core.SqlCronParameter", "description": "The type of this object, always `core.SqlCronParameter`. Required where the member it is sent in accepts several types." }, "name": { "type": "string", "description": "Display label of the parameter, e.g. its position.", "examples": [ "1" ] }, "value": { "type": "string", "description": "Value bound for the parameter. `%NAME%` constants and profile variables are resolved." } }, "title": "SqlCronParameter" }, "core.DataQueueSkipExecution": { "type": "object", "description": "A weekly time window in which a data queue agent does not read its queue: it starts on `day` at `hour`:`minute` (server time) and lasts `duration` minutes. One element of `skipExecution`.", "properties": { "class": { "type": "string", "const": "core.DataQueueSkipExecution", "description": "The type of this object, always `core.DataQueueSkipExecution`. Required where the member it is sent in accepts several types." }, "day": { "$ref": "#/components/schemas/core.Weekday", "default": "SUNDAY", "description": "Day of the week the window starts.", "title": "Weekday" }, "duration": { "type": "integer", "format": "int32", "description": "Length of the window in minutes.", "examples": [ 120 ] }, "hour": { "type": "integer", "format": "int32", "description": "Hour of the day the window starts, `0` to `23`." }, "minute": { "type": "integer", "format": "int32", "description": "Minute of the hour the window starts, `0` to `59`." } }, "title": "DataQueueSkipExecution" }, "core.HttpAgentTestFile": { "type": "object", "description": "An example file shown in the OpenAPI document an HTTP input agent generates for its profile; one element of `apiTestFiles` (request examples) or `apiResponseTestFiles` (response examples). The file itself is not transferred through this API: it must already be stored with the profile. The `for*` flags choose for which HTTP operations of the document it is the example.", "properties": { "class": { "type": "string", "const": "core.HttpAgentTestFile", "description": "The type of this object, always `core.HttpAgentTestFile`. Required where the member it is sent in accepts several types." }, "forDelete": { "type": "boolean", "default": false, "description": "`true` uses the file as example for the DELETE operation." }, "forGet": { "type": "boolean", "default": false, "description": "`true` uses the file as example for the GET operation." }, "forHead": { "type": "boolean", "default": false, "description": "`true` uses the file as example for the HEAD operation." }, "forPatch": { "type": "boolean", "default": false, "description": "`true` uses the file as example for the PATCH operation." }, "forPost": { "type": "boolean", "default": false, "description": "`true` uses the file as example for the POST operation." }, "forPut": { "type": "boolean", "default": false, "description": "`true` uses the file as example for the PUT operation." }, "path": { "type": "string", "description": "File name of the example, relative to the profile's folder for such files: its test-mapping samples for request examples, its sample responses for response examples. A request example that does not exist there is left out of the document.", "examples": [ "order.json" ] } }, "title": "HttpAgentTestFile" }, "core.HttpAuthenticationType": { "type": "string", "description": "HTTP authentication scheme an HTTP agent requires from its callers: `authenticationType` of the agent.\n\n- `BASIC`: HTTP Basic authentication.\n- `DIGEST`: HTTP Digest authentication.\n- `SYSTEM`: The instance's configured default: Basic, or Digest where the instance is set up for it.\n- `OAUTH2`: Bearer token authentication; only takes effect together with `channelIds`, otherwise it acts as `SYSTEM`.", "enum": [ "BASIC", "DIGEST", "SYSTEM", "OAUTH2" ], "title": "HttpAuthenticationType" }, "core.HttpAgentErrorCode": { "type": "object", "description": "Error body for one further HTTP status of an HTTP input agent; one element of `errorCodeSettings`. When a failed job answers with `statusCode` (other than the agent's `errorCode`), e.g. through the mapping function `480 throw http exception` with an empty message, the caller receives `responseMsg` instead of `responseOnError`. Also listed as an error response in the profile's generated OpenAPI document.", "properties": { "class": { "type": "string", "const": "core.HttpAgentErrorCode", "description": "The type of this object, always `core.HttpAgentErrorCode`. Required where the member it is sent in accepts several types." }, "responseMsg": { "type": "string", "description": "Body sent with that status. The placeholders of `responseOnError` work here too: `{--Exception--}`, `{--ExceptionBase64--}`, `{--FullStackTraceException--}`, `@VAR_JOBNR@`." }, "statusCode": { "type": "integer", "format": "int32", "description": "HTTP status code this body is for, `100` to `599`.", "examples": [ 404 ] } }, "title": "HttpAgentErrorCode" }, "core.HttpAgentParam": { "type": "object", "description": "A request parameter a call must carry for this profile to be chosen; one element of `params` of an HTTP or data-product input agent. A call without it, or with a value not listed, does not reach this profile. Not needed just to read a parameter: every query parameter of a call is available as the variable `MSG_CALL_`.", "properties": { "class": { "type": "string", "const": "core.HttpAgentParam", "description": "The type of this object, always `core.HttpAgentParam`. Required where the member it is sent in accepts several types." }, "name": { "type": "string", "description": "Name of the query or form parameter; compared case-insensitively. `%NAME%` constants are resolved.", "examples": [ "mode" ], "minLength": 1 }, "values": { "type": "array", "description": "Accepted values; the call's value must equal one of them exactly (case-sensitive), e.g. `[\"fast\", \"full\"]`. `*` accepts any value, `regex:` a value the whole pattern matches, e.g. `regex:[0-9]+`; `%NAME%` constants are resolved. An empty list never matches, so the profile becomes unreachable; use `[\"*\"]` to require only the parameter's presence.", "items": { "type": "string" } } }, "required": [ "name" ], "title": "HttpAgentParam" }, "core.SwaggerTransformerVersion": { "type": "string", "description": "The generator an HTTP agent's `?api` OpenAPI document is built with: `swaggerTransformerVersion` of the agent. Has no effect on calls.\n\n- `Legacy`: The older OpenAPI generator.\n- `Jackson`: The newer OpenAPI 3.0 generator, preselected by the editor for new profiles.", "enum": [ "Legacy", "Jackson" ], "title": "SwaggerTransformerVersion" }, "core.IntegrationPartnerChannelOFTP": { "type": "object", "description": "An OFTP connection with the partner: both sides' OFTP identifiers, the partner's OFTP server and the certificates. Needs `localSsid`; `remoteSfid` and `endpointUrl` are filled from defaults when absent. Referenced by `core.CronOftpAgentSettings.channel` (fetch), `core.OftpProfileResponseUnit.channel` (send) and `core.OFTPAgentSettings.channels` (partners allowed to deliver). The session passwords and additional SFIDs are not settable through this API; channel list filter `type=OFTP`.", "properties": { "class": { "type": "string", "const": "core.IntegrationPartnerChannelOFTP", "description": "The type of this object, always `core.IntegrationPartnerChannelOFTP`. Required where the member it is sent in accepts several types." }, "aceEnabled": { "type": "boolean", "default": false, "description": "Whether the certificates are exchanged with this partner automatically. Leaving it out keeps the stored value, `null` resets it to `false`." }, "active": { "type": "boolean", "default": false, "description": "Whether the channel is in use. Only active channels take part at runtime: logins on the platform's servers and the matching of incoming data to a partner skip inactive ones. A partner whose `status` is `INACTIVE` makes all its channels read as `false` in the channel list." }, "allowedProtocols": { "type": "array", "description": "Transports the partner may use. The editor exposes TCPIP and TCPIP_TLS; ISDN is also represented for existing channels. `null`, an empty list or omission keeps the stored allowance.", "examples": [ "[\"TCPIP\", \"TCPIP_TLS\"]" ], "items": { "$ref": "#/components/schemas/core.OftpProtocol", "title": "OftpProtocol" } }, "communicationLogEnabled": { "type": "boolean", "description": "Whether the transfers over this channel are written to the communication log. `null` or left out keeps the stored value; a channel that never stored the setting reads as `true`." }, "communicationLogRetainDays": { "type": "integer", "format": "int32", "default": -1, "description": "Number of days the communication log keeps this channel's entries; `0` and up are stored, `-1` removes the setting so the communication log service's global retention applies. Only used while `communicationLogEnabled` is on. `null` or left out keeps the stored value; a channel that never stored one reads `-1`.", "minimum": -1 }, "contact": { "$ref": "#/components/schemas/core.IntegrationPartnerContact", "description": "The channel's contact person, the one the channel editor's contact section shows. Every channel created here gets exactly one: left out, an empty one. Only one channel contact is exposed; a channel that stores more than one shows the first, and a write leaves the others as they are. `null` or left out keeps the stored contact. On create its `id` is ignored; on update an `id` must be the channel's own contact id.", "title": "IntegrationPartnerContact" }, "creditCount": { "type": "integer", "format": "int32", "default": 0, "description": "The credit count of the OFTP session. `0` removes the setting; leaving it out keeps the stored value, `null` removes it too.", "minimum": 0 }, "direction": { "$ref": "#/components/schemas/core.ChannelDirection", "description": "The way data flows over the channel: `IN` (the partner sends to the platform), `OUT` (the platform sends to the partner) or `IN_AND_OUT`. Left out or `null` on create it defaults to `IN`; it cannot be set to `null` afterwards. JMS, AMQP 0-9-1, AMQP 1.0, Google Pub/Sub, cloud storage and SMB channels are always `IN_AND_OUT`: that is their default, any other value is refused, and a patch sending `null` there changes nothing. A legacy channel of these types stored with neither flag set reads `IN_AND_OUT` and has both flags set by its next write. Any other channel stored before this member existed, with no direction, reads back without it until one is written.", "title": "ChannelDirection" }, "doubleCdSendingAllowed": { "type": "boolean", "default": false, "description": "Whether the platform may send the change-direction command twice in a row. Leaving it out keeps the stored value, `null` resets it to `false`." }, "eerpSigningRequired": { "type": "boolean", "default": false, "description": "Whether the partner's end-to-end responses must be signed. Leaving it out keeps the stored value, `null` resets it to `false`." }, "encryptionAlgorithm": { "type": "string", "default": "AES256", "description": "The encryption algorithm for OFTP messages. Leaving it out keeps the stored value, `null` resets it to `AES256`.", "pattern": "^(AES256|DESede|RSA-OAEP)$" }, "endpointUrl": { "type": "string", "description": "The partner's OFTP server the platform connects to; `oftps://` uses TLS (commonly port 6619).", "examples": [ "oftp://oftp.acme.example:3305" ], "pattern": "^oftps?://.+" }, "exchangeBufferSize": { "type": "integer", "format": "int32", "default": 0, "description": "The size of the exchange buffer in bytes. `0` removes the setting; leaving it out keeps the stored value, `null` removes it too.", "minimum": 0 }, "id": { "type": "integer", "format": "int64", "description": "Numeric id of the channel, assigned by the server on create; on the channel resource a value sent in the body is ignored. Profiles reference a channel by this id, looked up with `GET /platform/api/partners/preview/{partnerId}/channels`.", "examples": [ 1042 ] }, "internalUsageOnly": { "type": "boolean", "default": false, "description": "Whether the channel stays on the platform's own server and is not synchronized to a DMZ server (the editor's \"Invisible to DMZ\" switch). `null` or left out keeps the stored value; a new channel is visible to the DMZ, except a new SMB channel, which is stored invisible unless it sends `false`. A new JMS, AMQP 0-9-1, AMQP 1.0, Google Pub/Sub and cloud storage channel is stored invisible to the DMZ, as the editor does; there the member reads absent, a value sent is ignored and a stored channel keeps its flag." }, "localCertificateId": { "type": "string", "description": "Id of one of the platform's own certificates (with private key) that this channel uses. Must reference an existing certificate.", "examples": [ "42" ], "pattern": "^\\d+$" }, "localSsid": { "type": "string", "description": "The platform's own OFTP identifier (SSID) toward this partner. Required on create; a write may not blank it.", "examples": [ "O0013000000LOBSTER" ], "minLength": 1 }, "maximumProtocolReleaseLevel": { "$ref": "#/components/schemas/core.OftpReleaseLevel", "default": "V2_0", "description": "The highest OFTP protocol release the platform offers. Leaving it out keeps the stored value, `null` restores the default.", "title": "OftpReleaseLevel" }, "name": { "type": "string", "description": "Display name of the channel. Must be unique among the partner's channels of the same type.", "maxLength": 100, "minLength": 1 }, "oftp2TslName": { "type": "string", "default": "OFTP2", "description": "The name of the trusted service list the partner's certificate is checked against. An empty string restores the default; leaving it out keeps the stored value, `null` restores it too." }, "partner": { "$ref": "#/components/schemas/core.IntegrationPartner", "description": "The partner that owns the channel, embedded on read. Set by the server from the `{partnerId}` in the request path; a value sent here is ignored, and a channel cannot move to another partner.", "readOnly": true, "title": "IntegrationPartner" }, "pendingLocalCertificateId": { "type": "string", "description": "Id of the platform's own certificate (with private key) that takes over as `localCertificateId` once it is activated, for a certificate exchange in preparation. Must reference an existing certificate. Leaving it out keeps the stored value, `null` or an empty string removes it.", "examples": [ "44" ], "pattern": "^\\d*$" }, "pendingRemoteCertificateId": { "type": "string", "description": "Id of the partner's certificate (public key) that takes over as `remoteCertificateId` once it is activated, for a certificate exchange in preparation. Must reference an existing certificate. Leaving it out keeps the stored value, `null` or an empty string removes it.", "examples": [ "45" ], "pattern": "^\\d*$" }, "receivingEncrypted": { "type": "boolean", "default": false, "description": "Whether the messages the partner sends over this channel must be encrypted. Leaving it out keeps the stored value, `null` resets it to `false`; a new channel accepts unencrypted messages." }, "receivingSigned": { "type": "boolean", "default": false, "description": "Whether the messages the partner sends over this channel must be signed. Leaving it out keeps the stored value, `null` resets it to `false`; a new channel accepts unsigned messages." }, "remoteCertSubject": { "type": "string", "description": "The subject of the partner's certificate the platform looks for when `remoteCertificateId` names none. Leaving it out keeps the stored value, `null` or an empty string removes it.", "examples": [ "CN=oftp.acme.example" ] }, "remoteCertificateId": { "type": "string", "description": "Id of the partner's certificate (public key) in the certificate store that this channel uses, the counterpart of `localCertificateId`. Must reference an existing certificate.", "examples": [ "43" ], "pattern": "^\\d+$" }, "remoteSfid": { "type": "string", "description": "The partner's OFTP identifier - the SSID it presents when it connects, which assigns the session to this channel. Must be unique among OFTP channels. Left out, the server fills an `AUTO_CREATE_...` placeholder that no partner presents.", "examples": [ "O0013000000ACME" ] }, "secureAuthenticationMandatory": { "type": "boolean", "default": false, "description": "Whether the partner must authenticate securely. Leaving it out keeps the stored value, `null` resets it to `false`." }, "sendRestartDisabled": { "type": "boolean", "default": false, "description": "Whether an interrupted send is never resumed, but started again from the beginning. Leaving it out keeps the stored value, `null` resets it to `false`." }, "sendingCompressed": { "type": "boolean", "default": false, "description": "Whether the messages the platform sends over this channel are compressed. Leaving it out keeps the stored value, `null` resets it to `false`; a new channel does not compress." }, "sendingEncrypted": { "type": "boolean", "default": false, "description": "Whether the messages the platform sends over this channel are encrypted. Leaving it out keeps the stored value, `null` resets it to `false`; a new channel does not encrypt." }, "sendingSigned": { "type": "boolean", "default": false, "description": "Whether the messages the platform sends over this channel are signed. Leaving it out keeps the stored value, `null` resets it to `false`; a new channel does not sign." }, "signatureAlgorithm": { "type": "string", "default": "SHA1", "description": "The signature algorithm for OFTP messages. Leaving it out keeps the stored value, `null` resets it to `SHA1`.", "pattern": "^(SHA1|SHA256|SHA512|SHA3_512)$" }, "strictSfidChecking": { "type": "boolean", "default": false, "description": "Whether the SFID of every incoming file must match one the partner is allowed to send. Leaving it out keeps the stored value, `null` resets it to `false`." }, "tlsCipherName": { "type": "string", "description": "The TLS cipher suite to use. An empty string removes the preference; leaving it out keeps the stored value, `null` resets it to the default.", "examples": [ "TLS_AES_256_GCM_SHA384" ] }, "userIncomingDirectory": { "type": "string", "description": "The directory on the platform incoming files of this partner go to. An empty string removes it; leaving it out keeps the stored value, `null` removes it too.", "examples": [ "/data/oftp/acme/in" ] }, "userOutgoingDirectory": { "type": "string", "description": "The directory on the platform outgoing files for this partner are taken from. An empty string removes it; leaving it out keeps the stored value, `null` removes it too.", "examples": [ "/data/oftp/acme/out" ] }, "x25WindowSize": { "type": "integer", "format": "int32", "default": 0, "description": "The X.25 window size. `0` removes the setting; leaving it out keeps the stored value, `null` removes it too.", "minimum": 0 } }, "required": [ "localSsid", "name" ], "title": "IntegrationPartnerChannelOFTP" }, "core.HttpMultiPartMode": { "type": "string", "description": "How the parts of a multipart HTTP request are encoded: `multipartBrowserMode` of the cron HTTP agent and of the HTTP response unit.\n\n- `STRICT`: Strict MIME part headers.\n- `RFC6532`: UTF-8 in the part headers, e.g. for non-ASCII file names.\n- `COMPATIBLE`: Browser-compatible encoding with minimal part headers.\n- `SYSTEM`: The instance's configured setting.", "enum": [ "STRICT", "RFC6532", "COMPATIBLE", "SYSTEM" ], "title": "HttpMultiPartMode" }, "core.OftpDmzOption": { "type": "string", "description": "Whether an OFTP cron agent's call goes through the Lobster DMZ: `oftpDmzOption` of the agent.\n\n- `NO_DMZ`: Connects directly, not through the DMZ.\n- `DMZ`: Connects through the DMZ.\n- `DMZ_BY_SYSTEM`: Connects through the DMZ only if the instance is set to use the DMZ's OFTP user.", "enum": [ "NO_DMZ", "DMZ", "DMZ_BY_SYSTEM" ], "title": "OftpDmzOption" }, "core.CronScheduleType": { "type": "string", "description": "How a cron agent decides when to run. `INTERVAL` (`interval`/`intervalUseSeconds`), `TIMETABLE` (`timeTables`), `TRIGGER` (`triggerType` and the matching `trigger*` members) and `CRONTAB`/`CRONTAB_HTTP` (`cronSchedule`; `CRONTAB_HTTP` also carries `trigger*` HTTP trigger members).\n\n- `INTERVAL`: Runs every `interval` minutes or seconds (`intervalUseSeconds`).\n- `TIMETABLE`: Runs at the fixed times listed in `timeTables`.\n- `TRIGGER`: Runs when triggered: by another profile, or an HTTP call (`triggerType`).\n- `CRONTAB`: Runs on the crontab expressions in `cronSchedule`.\n- `CRONTAB_HTTP`: Like `CRONTAB`, but also reachable by the HTTP trigger named in the `trigger*` members.", "enum": [ "INTERVAL", "TIMETABLE", "TRIGGER", "CRONTAB", "CRONTAB_HTTP" ], "title": "CronScheduleType" }, "core.CronTimeTableEntry": { "type": "object", "description": "A fixed run time of a `TIMETABLE` cron agent. Omitting `year` (or sending it as `0` or less) makes it a weekly entry keyed on `day` as the day of week; sending a positive `year` makes it a one-off entry on that calendar date, `day` then the day of month.", "properties": { "class": { "type": "string", "const": "core.CronTimeTableEntry", "description": "The type of this object, always `core.CronTimeTableEntry`. Required where the member it is sent in accepts several types." }, "day": { "type": "integer", "format": "int32", "description": "Day the agent runs on: with no positive `year`, the day of week (`1` Sunday to `7` Saturday); with a positive `year`, the day of month (`1`-`31`). Required." }, "hour": { "type": "integer", "format": "int32", "description": "Hour of day (`0`-`23`) the agent runs at. Required." }, "minute": { "type": "integer", "format": "int32", "description": "Minute of the hour (`0`-`59`) the agent runs at. Required." }, "month": { "type": "integer", "format": "int32", "description": "Calendar month (`1`-`12`) of a one-off entry. Only used together with a positive `year`; defaults to `1` when a one-off entry omits it." }, "year": { "type": "integer", "format": "int32", "description": "Calendar year of a one-off entry. Absent, `0` or negative (default) makes this a weekly entry instead, run every week on `day` as the day of week." } }, "title": "CronTimeTableEntry" }, "core.CronHttpTriggerParam": { "type": "object", "description": "A key/value pair merged into every job a `TRIGGER`/`CRONTAB_HTTP` cron agent's HTTP call starts, resolvable in the mapping like a `%name%` constant. `key` is required.", "properties": { "class": { "type": "string", "const": "core.CronHttpTriggerParam", "description": "The type of this object, always `core.CronHttpTriggerParam`. Required where the member it is sent in accepts several types." }, "key": { "type": "string", "description": "The constant's name.", "minLength": 1 }, "value": { "type": "string", "description": "The constant's value." } }, "required": [ "key" ], "title": "CronHttpTriggerParam" }, "core.CronTriggerType": { "type": "string", "description": "What starts a `TRIGGER`/`CRONTAB_HTTP` cron agent: `PROFILE` (another profile forwards to it), `HTTP` (an HTTP call, see the `triggerHttp*` members) or `FS` (a file-system event; only settable through the editor's file-events option on a `File` cron agent, carries no members of its own here).\n\n- `PROFILE`: Another profile forwards to this one; see `triggerContext`, `triggerQueue` and `triggerOnAnyServer`.\n- `HTTP`: An HTTP call starts this agent; see the `triggerHttp*` members.\n- `FS`: A file-system event starts this agent (`File` cron agents only). Not settable through this API: the editor's file-events option carries no member of its own here.", "enum": [ "PROFILE", "HTTP", "FS" ], "title": "CronTriggerType" }, "core.IntegrationPartnerChannelFTP": { "type": "object", "description": "An FTP connection with the partner, in either direction: the partner logs in to the platform's FTP server as `remoteId` and lands in `remotePath`, and the platform connects to the partner's server at `host` and `port`. Referenced by `core.CronFtpAgentSettings.channel` (fetch), `core.FtpProfileResponseUnit.channel` (send) and `core.FTPAgentSettings.channels` (partners allowed to upload). The partner's login password is `remotePassword`; the password the platform uses at the partner's server is not settable through this API, give it in the cron job or response unit instead. Channel list filter `type=FTP`.", "properties": { "class": { "type": "string", "const": "core.IntegrationPartnerChannelFTP", "description": "The type of this object, always `core.IntegrationPartnerChannelFTP`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": false, "description": "Whether the channel is in use. Only active channels take part at runtime: logins on the platform's servers and the matching of incoming data to a partner skip inactive ones. A partner whose `status` is `INACTIVE` makes all its channels read as `false` in the channel list." }, "allowedProtocols": { "type": "array", "description": "FTP flavours the partner may log in to the platform's FTP server with: any of `FTP`, `FTPS_EXPLICIT`, `FTPS_IMPLICIT`. At least one must stay allowed; `null`, an empty list or left out keeps the stored allowance, which on a new channel permits all three.", "examples": [ "[\"FTPS_EXPLICIT\", \"FTPS_IMPLICIT\"]" ], "items": { "$ref": "#/components/schemas/core.FtpProtocol", "title": "FtpProtocol" } }, "blackListAddresses": { "type": "array", "description": "Addresses the partner may not log in to the platform's FTP server from: IP addresses, host names or `address/netmask` ranges, e.g. `203.0.113.0/255.255.255.0`. Leaving it out keeps the stored list, `null` or an empty list removes it.", "examples": [ "[\"203.0.113.7\"]" ], "items": { "type": "string" } }, "communicationLogEnabled": { "type": "boolean", "description": "Whether the transfers over this channel are written to the communication log. `null` or left out keeps the stored value; a channel that never stored the setting reads as `true`." }, "communicationLogRetainDays": { "type": "integer", "format": "int32", "default": -1, "description": "Number of days the communication log keeps this channel's entries; `0` and up are stored, `-1` removes the setting so the communication log service's global retention applies. Only used while `communicationLogEnabled` is on. `null` or left out keeps the stored value; a channel that never stored one reads `-1`.", "minimum": -1 }, "contact": { "$ref": "#/components/schemas/core.IntegrationPartnerContact", "description": "The channel's contact person, the one the channel editor's contact section shows. Every channel created here gets exactly one: left out, an empty one. Only one channel contact is exposed; a channel that stores more than one shows the first, and a write leaves the others as they are. `null` or left out keeps the stored contact. On create its `id` is ignored; on update an `id` must be the channel's own contact id.", "title": "IntegrationPartnerContact" }, "direction": { "$ref": "#/components/schemas/core.ChannelDirection", "description": "The way data flows over the channel: `IN` (the partner sends to the platform), `OUT` (the platform sends to the partner) or `IN_AND_OUT`. Left out or `null` on create it defaults to `IN`; it cannot be set to `null` afterwards. JMS, AMQP 0-9-1, AMQP 1.0, Google Pub/Sub, cloud storage and SMB channels are always `IN_AND_OUT`: that is their default, any other value is refused, and a patch sending `null` there changes nothing. A legacy channel of these types stored with neither flag set reads `IN_AND_OUT` and has both flags set by its next write. Any other channel stored before this member existed, with no direction, reads back without it until one is written.", "title": "ChannelDirection" }, "host": { "type": "string", "description": "Host name or IP address of the partner's FTP server - no scheme, port or path. Used when the platform connects to the partner; a host set in the cron job or response unit overrides it. `{\"host\": null, \"port\": null}` clears the address.", "examples": [ "ftp.acme.example" ], "pattern": "^(\\[[0-9A-Fa-f:.]+\\]|[^\\s/\\\\?#@:\\[\\]]+)$" }, "id": { "type": "integer", "format": "int64", "description": "Numeric id of the channel, assigned by the server on create; on the channel resource a value sent in the body is ignored. Profiles reference a channel by this id, looked up with `GET /platform/api/partners/preview/{partnerId}/channels`.", "examples": [ 1042 ] }, "internalUsageOnly": { "type": "boolean", "default": false, "description": "Whether the channel stays on the platform's own server and is not synchronized to a DMZ server (the editor's \"Invisible to DMZ\" switch). `null` or left out keeps the stored value; a new channel is visible to the DMZ, except a new SMB channel, which is stored invisible unless it sends `false`. A new JMS, AMQP 0-9-1, AMQP 1.0, Google Pub/Sub and cloud storage channel is stored invisible to the DMZ, as the editor does; there the member reads absent, a value sent is ignored and a stored channel keeps its flag." }, "localCertificateId": { "type": "string", "description": "Id of one of the platform's own certificates (with private key) that this channel uses. Must reference an existing certificate.", "examples": [ "42" ], "pattern": "^\\d+$" }, "localId": { "type": "string", "description": "User name the platform logs in with at the partner's FTP server; its password is not settable through this API. `null` or left out keeps the stored value.", "examples": [ "lobster-edi" ] }, "name": { "type": "string", "description": "Display name of the channel. Must be unique among the partner's channels of the same type.", "maxLength": 100, "minLength": 1 }, "onlyHome": { "type": "boolean", "description": "Whether the partner, logged in on the platform's FTP server as `remoteId`, is confined to its home directory (`remotePath`) and cannot change to a directory above it. `null` or left out keeps the stored value; a new channel is not confined." }, "partner": { "$ref": "#/components/schemas/core.IntegrationPartner", "description": "The partner that owns the channel, embedded on read. Set by the server from the `{partnerId}` in the request path; a value sent here is ignored, and a channel cannot move to another partner.", "readOnly": true, "title": "IntegrationPartner" }, "port": { "type": "integer", "format": "int32", "description": "TCP port of the partner's FTP server; left out, the address carries no port. Requires `host`. A port set in the cron job or response unit overrides it.", "examples": [ 21 ], "maximum": 65535, "minimum": 1 }, "remoteCertificateId": { "type": "string", "description": "Id of the partner's certificate (public key) in the certificate store that this channel uses, the counterpart of `localCertificateId`. Must reference an existing certificate.", "examples": [ "43" ], "pattern": "^\\d+$" }, "remoteId": { "type": "string", "description": "User name the partner logs in with on the platform's FTP server; its password is `remotePassword`. Must be unique among all FTP channels. Left out, the server fills an `AUTO_CREATE_...` placeholder that nobody can log in with.", "examples": [ "acme" ] }, "remotePassword": { "type": "string", "format": "password", "description": "The password the partner logs in with on the platform's server as `remoteId`. A secret: a read returns it encrypted, a write accepts that encrypted value unchanged or the cleartext as `\"PLAIN:\"`. Required on create. A channel that has one cannot be changed to an empty one; a channel stored without one stays writable without. `null` or left out keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else.", "examples": [ "PLAIN:s3cret-for-acme" ], "minLength": 1 }, "remotePath": { "type": "string", "description": "Directory on the Lobster server that becomes the partner's home when it logs in to the platform's FTP server as `remoteId` (relative paths resolve against the server's working directory). Not a path on the partner's server. The FTP server refuses every login to a channel without one. Left out or blank on create, the server picks `ftp/` like the channel editor and creates that directory, on the DMZ too where one is configured; a directory given here is not created. A stored directory cannot be changed to a blank one (422), which an overwrite patch that leaves the member out would do.", "examples": [ "./ftp/acme" ] }, "reuseSslSession": { "type": "boolean", "default": true, "description": "Whether the control connection's TLS session is reused for the data connections of an FTPS transfer when the platform connects to the partner; some servers refuse a data connection without it. Leaving it out keeps the stored value, `null` resets it to `true`; a new channel reuses the session." }, "virtualRoot": { "type": "boolean", "default": false, "description": "Whether the partner, logged in on the platform's FTP server, sees a virtual file system with its home directory as the root (`/`) instead of the real path of the home directory. Leaving it out keeps the stored value, `null` resets it to `false`; a new channel shows the real path." }, "whiteListAddresses": { "type": "array", "description": "Addresses the partner may log in to the platform's FTP server from: IP addresses, host names or `address/netmask` ranges, e.g. `198.51.100.0/255.255.255.0`. Leaving it out keeps the stored list, `null` or an empty list removes it; with a list set, a login from any other address is refused.", "examples": [ "[\"198.51.100.0/255.255.255.0\"]" ], "items": { "type": "string" } } }, "required": [ "name", "remotePassword" ], "title": "IntegrationPartnerChannelFTP" }, "core.IntegrationPartnerChannelMail": { "type": "object", "description": "A mail connection with the partner: its address, the SMTP server mails are sent through, and the login settings for fetching mail by POP3/IMAP; `localCertificateId`/`remoteCertificateId` hold the S/MIME certificates. Referenced by `core.CronPop3AgentSettings.channel` and `core.CronImapAgentSettings.channel` (fetch), `core.SMTPAgentSettings.channel` and `core.MailDispatchRule.channel`. The SMTP and retrieval user names and all passwords are not settable through this API; channel list filter `type=Mail`.", "properties": { "class": { "type": "string", "const": "core.IntegrationPartnerChannelMail", "description": "The type of this object, always `core.IntegrationPartnerChannelMail`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": false, "description": "Whether the channel is in use. Only active channels take part at runtime: logins on the platform's servers and the matching of incoming data to a partner skip inactive ones. A partner whose `status` is `INACTIVE` makes all its channels read as `false` in the channel list." }, "allowedProtocols": { "type": "array", "description": "What the channel may be used for: any of `SMTP` and `ASMTP` (sending mail, without and with a login) and `POP3` and `IMAP` (fetching mail). At least one must stay allowed (an empty list leaves the stored allowance unchanged), and `POP3` and `IMAP` are mutually exclusive (the editor keeps one); `null` or left out keeps the stored allowance, which on a new channel permits all four.", "examples": [ "[\"SMTP\", \"IMAP\"]" ], "items": { "$ref": "#/components/schemas/core.MailChannelProtocol", "title": "MailChannelProtocol" } }, "communicationLogEnabled": { "type": "boolean", "description": "Whether the transfers over this channel are written to the communication log. `null` or left out keeps the stored value; a channel that never stored the setting reads as `true`." }, "communicationLogRetainDays": { "type": "integer", "format": "int32", "default": -1, "description": "Number of days the communication log keeps this channel's entries; `0` and up are stored, `-1` removes the setting so the communication log service's global retention applies. Only used while `communicationLogEnabled` is on. `null` or left out keeps the stored value; a channel that never stored one reads `-1`.", "minimum": -1 }, "contact": { "$ref": "#/components/schemas/core.IntegrationPartnerContact", "description": "The channel's contact person, the one the channel editor's contact section shows. Every channel created here gets exactly one: left out, an empty one. Only one channel contact is exposed; a channel that stores more than one shows the first, and a write leaves the others as they are. `null` or left out keeps the stored contact. On create its `id` is ignored; on update an `id` must be the channel's own contact id.", "title": "IntegrationPartnerContact" }, "direction": { "$ref": "#/components/schemas/core.ChannelDirection", "description": "The way data flows over the channel: `IN` (the partner sends to the platform), `OUT` (the platform sends to the partner) or `IN_AND_OUT`. Left out or `null` on create it defaults to `IN`; it cannot be set to `null` afterwards. JMS, AMQP 0-9-1, AMQP 1.0, Google Pub/Sub, cloud storage and SMB channels are always `IN_AND_OUT`: that is their default, any other value is refused, and a patch sending `null` there changes nothing. A legacy channel of these types stored with neither flag set reads `IN_AND_OUT` and has both flags set by its next write. Any other channel stored before this member existed, with no direction, reads back without it until one is written.", "title": "ChannelDirection" }, "encryptionAlgorithm": { "type": "string", "default": "AES", "description": "Cipher for encrypting outgoing mails; used only when the channel sends encrypted. Not validated on save. `null` or left out keeps the stored value.", "examples": [ "AES" ] }, "id": { "type": "integer", "format": "int64", "description": "Numeric id of the channel, assigned by the server on create; on the channel resource a value sent in the body is ignored. Profiles reference a channel by this id, looked up with `GET /platform/api/partners/preview/{partnerId}/channels`.", "examples": [ 1042 ] }, "imapFolder": { "type": "string", "default": "INBOX", "description": "IMAP folder mail is fetched from; a directory set in the IMAP cron job overrides it.", "examples": [ "INBOX/orders" ] }, "incomingMaxSize": { "type": "integer", "format": "int64", "description": "Largest incoming mail accepted on this channel, in bytes. Must be at most 1073741824 (1024 MB). `null` (or leaving it out on create) means no limit, and an unlimited channel reads back `null`.", "examples": [ 10485760 ], "minimum": 1 }, "internalUsageOnly": { "type": "boolean", "default": false, "description": "Whether the channel stays on the platform's own server and is not synchronized to a DMZ server (the editor's \"Invisible to DMZ\" switch). `null` or left out keeps the stored value; a new channel is visible to the DMZ, except a new SMB channel, which is stored invisible unless it sends `false`. A new JMS, AMQP 0-9-1, AMQP 1.0, Google Pub/Sub and cloud storage channel is stored invisible to the DMZ, as the editor does; there the member reads absent, a value sent is ignored and a stored channel keeps its flag." }, "localCertificateId": { "type": "string", "description": "Id of one of the platform's own certificates (with private key) that this channel uses. Must reference an existing certificate.", "examples": [ "42" ], "pattern": "^\\d+$" }, "localId": { "type": "string", "description": "The platform's own mail address on this channel; matched case-insensitively, so an incoming mail is assigned to the channel whatever case it is addressed in, while the address is stored and read back as given. Unless the channel stores its own SMTP or retrieval user name, the platform logs in with this address, so changing it changes that login too. `null` or left out keeps the stored value.", "examples": [ "edi@lobster.example" ] }, "localTlsAuthCertificateId": { "type": "string", "description": "Id of the platform's own certificate (with private key) it presents as TLS client certificate when it connects to the partner. Must reference an existing certificate. Leaving it out keeps the stored value, `null` or an empty string removes it.", "examples": [ "42" ], "pattern": "^\\d*$" }, "name": { "type": "string", "description": "Display name of the channel. Must be unique among the partner's channels of the same type.", "maxLength": 100, "minLength": 1 }, "partner": { "$ref": "#/components/schemas/core.IntegrationPartner", "description": "The partner that owns the channel, embedded on read. Set by the server from the `{partnerId}` in the request path; a value sent here is ignored, and a channel cannot move to another partner.", "readOnly": true, "title": "IntegrationPartner" }, "receivingEncrypted": { "type": "boolean", "default": false, "description": "Whether the messages the partner sends over this channel must be encrypted. Leaving it out keeps the stored value, `null` resets it to `false`; a new channel accepts unencrypted messages." }, "receivingSigned": { "type": "boolean", "default": false, "description": "Whether the messages the partner sends over this channel must be signed. Leaving it out keeps the stored value, `null` resets it to `false`; a new channel accepts unsigned messages." }, "remoteCertificateId": { "type": "string", "description": "Id of the partner's certificate (public key) in the certificate store that this channel uses, the counterpart of `localCertificateId`. Must reference an existing certificate.", "examples": [ "43" ], "pattern": "^\\d+$" }, "remoteId": { "type": "string", "description": "The partner's mail address, stored in lower case; an SMTP response unit sends to it unless the unit names its own receiver. A channel that receives mail should hold exactly one address; this API does not check. Left out, the server fills a placeholder address (`mail...@mail.org`).", "examples": [ "edi@acme.example" ] }, "remoteTlsAuthCertificateId": { "type": "string", "description": "Id of the partner's certificate (public key) it must present as TLS client certificate when it connects to the platform. Must reference an existing certificate. Leaving it out keeps the stored value, `null` or an empty string removes it.", "examples": [ "43" ], "pattern": "^\\d*$" }, "retrievalAuthMechanism": { "type": "string", "description": "SASL mechanism for the POP3/IMAP login when mail is fetched through this channel; left out, the mail library negotiates one.", "examples": [ "XOAUTH2" ] }, "retrievalServerUrl": { "type": "string", "description": "POP3/IMAP server the platform fetches mail from through this channel (`pop3://`, `pop3s://`, `pop3es://`, `imap://`, `imaps://` or `imapes://`; the `s` variants are TLS, the `es` variants STARTTLS). Another scheme is accepted as given and fails when mail is retrieved. `null` or left out keeps the stored value.", "examples": [ "imaps://mail.acme.example:993" ] }, "sendingCompressed": { "type": "boolean", "default": false, "description": "Whether the messages the platform sends over this channel are compressed. Leaving it out keeps the stored value, `null` resets it to `false`; a new channel does not compress." }, "sendingEncrypted": { "type": "boolean", "default": false, "description": "Whether the messages the platform sends over this channel are encrypted. Leaving it out keeps the stored value, `null` resets it to `false`; a new channel does not encrypt." }, "sendingSigned": { "type": "boolean", "default": false, "description": "Whether the messages the platform sends over this channel are signed. Leaving it out keeps the stored value, `null` resets it to `false`; a new channel does not sign." }, "signingAlgorithm": { "type": "string", "default": "SHA256", "description": "Hash algorithm for signing outgoing mails; used only when the channel sends signed. Not validated on save. `null` or left out keeps the stored value.", "examples": [ "SHA256" ] }, "smtpAuthMechanism": { "type": "string", "description": "SASL mechanism for the SMTP login, case-insensitive; OAuth2 tokens are not settable through this API. Left out, the mail library negotiates one.", "examples": [ "PLAIN" ] }, "smtpServerUrl": { "type": "string", "description": "SMTP server that mails to this partner are sent through (`smtp://` default port 25, `smtps://` 465, `smtpes://` for STARTTLS). A host or port set in the SMTP response unit overrides it.", "examples": [ "smtps://mail.acme.example:465" ], "pattern": "^(smtp|smtps|smtpes)://.+" } }, "required": [ "name" ], "title": "IntegrationPartnerChannelMail" }, "core.UnknownMailHandling": { "type": "string", "description": "What a mail cron agent does with a mail body or attachment no rule in `mailDispatchSettings` accepts: `handleUnknownMailData` of the agent.\n\n- `STORE_UNRESOLVED`: Stores it in the instance's 'unresolved' folder and sends the unresolved-data notification.\n- `DISCARD`: Discards it.", "enum": [ "STORE_UNRESOLVED", "DISCARD" ], "title": "UnknownMailHandling" }, "core.MailDispatchRule": { "type": "object", "description": "One routing rule of a mail agent, an element of `mailDispatchSettings` of a POP3, IMAP or X.400 agent. The agent checks the rules in list order against the body and against each attachment of a fetched mail, and hands the data to the profile of the first active rule whose criteria all match (`contentType`, `filePattern`, `channel`, `sender`, `to`, `cc`, `subject`, `mimeType`) and whose profile is usable. An empty criterion does not filter. Send `sender`, `subject` and `filePattern` explicitly, `\"\"` meaning no filter: an omitted one is stored without a value, which the matching does not handle.", "properties": { "class": { "type": "string", "const": "core.MailDispatchRule", "description": "The type of this object, always `core.MailDispatchRule`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "`false` switches the rule off, so it is skipped." }, "cc": { "type": "string", "description": "One mail address that must be among the mail's CC recipients; compared ignoring case, spaces are removed. Empty does not filter. Bodies and attachments of X.400 mails are matched without recipients.", "examples": [ "edi@example.com" ] }, "channel": { "type": "integer", "format": "int64", "default": 0, "description": "Id of a partner channel the mail must belong to, checked as `matchChannel` says; the platform assigns incoming mails to partner channels, and an X.400 mail without one gets the agent's channel. List channels with `GET /platform/api/partners/preview/{partnerId}/channels`. Stored as sent without any check. `0` does not filter by channel.", "examples": [ 4711 ] }, "contentType": { "$ref": "#/components/schemas/core.MailContentPart", "default": "ATTACHMENT", "description": "Which part of a mail the rule applies to.", "title": "MailContentPart" }, "exactMatchSubject": { "type": "boolean", "default": false, "description": "`true` requires the subject to equal `subject`, ignoring case; `false` only requires it to contain `subject`. Not used when `subject` is a `regex:` expression." }, "filePattern": { "type": "string", "description": "Pattern the attachment's file name must match (`*` and `?` wildcards ignoring case, `|` alternatives, `regex:` regular expressions); `*` or `\"\"` accepts every attachment. Only checked for attachments.", "examples": [ "ORDERS_*.edi|INVOIC_*.edi" ] }, "mailType": { "$ref": "#/components/schemas/core.MailProtocol", "default": "POP3", "description": "Kind of agent the rule belongs to. Left out on an existing rule, the stored kind is kept.", "title": "MailProtocol" }, "matchChannel": { "$ref": "#/components/schemas/core.MailChannelMatch", "default": "IGNORE", "description": "How `channel` is checked. Only evaluated when `channel` is not `0`.", "title": "MailChannelMatch" }, "mimeType": { "type": "string", "description": "Content type the mail body must have for a body rule, compared case-insensitively with the content types of the body. Only checked for the body (`contentType` `BODY` or `BODY_AND_ATTACHMENT`) and ignored for X.400; without a value no body matches.", "examples": [ "text/plain" ] }, "profileName": { "type": "string", "description": "Name of the profile that processes the matching data; a profile's id is its name, see `GET /platform/api/profiles/preview`. Empty means the agent's own profile. The target must belong to the same client, be active, not be a master template and be within its validity period; otherwise the rule is skipped and the next one is tried." }, "scoring": { "type": "integer", "format": "int64", "description": "Ranking used to sort a rule list by how specific a rule is. The agent ignores it and checks the rules in list order; stored as sent, `0` is fine." }, "sender": { "type": "string", "description": "Text the sender's address must contain, ignoring case; with `mailType` `X400` an X.400 address the sender must match. `\"\"` does not filter.", "examples": [ "@partner.example" ] }, "subject": { "type": "string", "description": "Text the subject must contain, ignoring case, or equal with `exactMatchSubject`; a value starting with `regex:` is a regular expression the whole subject must match. `\"\"` does not filter." }, "to": { "type": "string", "description": "One mail address that must be among the mail's To recipients; compared ignoring case, spaces are removed. Empty does not filter. Bodies and attachments of X.400 mails are matched without recipients.", "examples": [ "edi@example.com" ] } }, "title": "MailDispatchRule" }, "core.ComplexDataType": { "type": "string", "description": "The structured payload format of a complex MQTT, AMQP or Kafka message: `complexDataType` of the agent settings.\n\n- `XML`: The payload is XML; `finalValueFunction` `ALL` puts the collected messages' root elements under one `concat-root` element.\n- `JSON`: The payload is JSON; `finalValueFunction` `ALL` combines the collected messages into a JSON array.\n- `BINARY`: The payload is binary, meant for a custom converter (`binaryConverterClassName`); the agent then produces no job.", "enum": [ "XML", "JSON", "BINARY" ], "title": "ComplexDataType" }, "core.MessageFilter": { "type": "object", "description": "One function of the chain in `filters` of an MQTT, Kafka or AMQP (Legacy) agent: the mapping function `filterId` with its parameters `settings`. The entries of `filters` run in order, like a function chain on a target field whose value is the received message text; the last function's result, read as a boolean, decides whether the buffered messages are handed on early.", "properties": { "class": { "type": "string", "const": "core.MessageFilter", "description": "The type of this object, always `core.MessageFilter`. Required where the member it is sent in accepts several types." }, "filterId": { "type": "integer", "format": "int32", "default": 0, "description": "Id of the mapping function to run, from `GET /platform/api/functions/preview?search=`. An unknown id is stored and only makes the check fail at runtime." }, "settings": { "type": "array", "description": "Parameters of the function, by position: the first entry is parameter `a`, the second `b`, and so on. Send one entry per parameter the function declares, unused ones as type `constant` with an empty `value`: many functions read their parameters by position and fail on a missing one.", "items": { "$ref": "#/components/schemas/core.MessageFilterSetting", "title": "MessageFilterSetting" } } }, "title": "MessageFilter" }, "core.FinalValueFunction": { "type": "string", "description": "What an MQTT, AMQP or Kafka agent's job receives from its collected messages: `finalValueFunction` of the agent settings.\n\n- `MIN`: The collected message with the smallest numeric value. Needs a numeric `genericDataType`.\n- `MAX`: The collected message with the largest numeric value. Needs a numeric `genericDataType`.\n- `AVG`: The average of the collected messages' numeric values. Needs a numeric `genericDataType`.\n- `ALL`: All collected messages joined with `delimiter`, or, with a `complexDataType` set, combined into one JSON array or one XML document.\n- `LAST`: The most recently collected message, unchanged.", "enum": [ "MIN", "MAX", "AVG", "ALL", "LAST" ], "title": "FinalValueFunction" }, "core.ValueType": { "type": "string", "description": "A value's data type in the mapping: the `dataType` of a source or target field, and the type a mapping function returns or expects. A value is converted to the field's type silently, so a text that is not a number becomes `0` in an `INTEGER` field. The JSON integration unit writes number types as JSON numbers and `STRING` as JSON strings.\n\n- `STRING`: Text. The default for a field.\n- `INTEGER`: A 32-bit whole number.\n- `DOUBLE`: A floating-point number; written without trailing zeros (`7.5`, a whole number as `13.0`), so for a fixed number of decimals use a `STRING` field and format the value.\n- `DATE`: A date; the field's `template`, a Java date pattern such as `dd.MM.yyyy`, sets how a text is parsed (and, with `useTemplate` on a target field, how it is written).\n- `BOOLEAN`: `true` or `false`.\n- `FLOAT`: A single-precision floating-point number.\n- `BIG_DECIMAL`: A decimal number of arbitrary precision, e.g. for amounts.\n- `BIG_INTEGER`: A whole number of arbitrary size.\n- `TIMESTAMP`: A date with time; `template` works as for `DATE`, e.g. `yyyy-MM-dd HH:mm:ss`.\n- `BLOB`: Binary or large content.", "enum": [ "STRING", "INTEGER", "DOUBLE", "DATE", "BOOLEAN", "FLOAT", "BIG_DECIMAL", "BIG_INTEGER", "TIMESTAMP", "BLOB" ], "title": "ValueType" }, "core.MqttConditionEntry": { "type": "object", "description": "One entry of `mqttConditions` of an MQTT, Kafka or AMQP (Legacy) agent: a comparison (`condition`) and the values the whole received message is compared with, read as the agent's `genericDataType`. The entry matches when the message matches any of its `values`; the entries of the list are OR-linked. A match hands the buffered messages on early, it does not filter messages out.", "properties": { "class": { "type": "string", "const": "core.MqttConditionEntry", "description": "The type of this object, always `core.MqttConditionEntry`. Required where the member it is sent in accepts several types." }, "condition": { "$ref": "#/components/schemas/core.MqttCondition", "description": "Comparison to apply. Text (`genericDataType` `STRING`) supports `REGEX`, `CONTAINS`, `EQUALS` and `NOT`; numbers support `EQUALS`, `NOT` and the four comparisons; dates only `SMALLER`, `GREATER` and `EQUALS`; any other combination never matches. Required; a missing or unknown name is rejected. A later entry with the same condition replaces an earlier one.", "title": "MqttCondition" }, "values": { "type": "array", "description": "Values the message is compared with, written in the agent's `genericDataType`, e.g. dates as `2024-12-31` or a regular expression for `REGEX`. Every value must parse as that type, otherwise the check fails.", "items": { "type": "string" } } }, "title": "MqttConditionEntry" }, "core.MqttQualityOfService": { "type": "string", "description": "MQTT quality of service: `qos` of an MQTT agent's subscription or of an MQTT response unit's publish.\n\n- `AT_MOST_ONCE`: The message may be delivered zero or more times; no redelivery is attempted.\n- `AT_LEAST_ONCE`: The message is redelivered until acknowledged, so it may arrive more than once.\n- `EXACTLY_ONCE`: The broker guarantees the message is delivered exactly once.", "enum": [ "AT_MOST_ONCE", "AT_LEAST_ONCE", "EXACTLY_ONCE" ], "title": "MqttQualityOfService" }, "core.MongoDbJsonType": { "type": "string", "description": "How a MongoDB cron agent writes its fetched documents as JSON: `jsonType` of the agent.\n\n- `JSON`: Relaxed JSON: dates as `yyyy-MM-dd'T'HH:mm:ss.SSS'Z'` strings, object ids as plain strings.\n- `BSON`: MongoDB Extended JSON, e.g. `{\"$oid\": ...}` and `{\"$date\": ...}`.", "enum": [ "JSON", "BSON" ], "title": "MongoDbJsonType" }, "core.AccumulationSettings": { "type": "object", "description": "Buffers the messages a Google Pub/Sub agent (`accumulation`) receives and hands them to the profile as one job instead of one job per message. `enabled` turns it on; `maxCount`, `maxAgeSeconds`, `maxTotalBytes`, `comparators` and `filters` are independent triggers that each flush the buffer, whichever fires first. `aggregation` decides how the buffered payloads become the job's data, `metadataStrategy` how the job's file name, sender and variables are chosen.", "properties": { "class": { "type": "string", "const": "core.AccumulationSettings", "description": "The type of this object, always `core.AccumulationSettings`. Required where the member it is sent in accepts several types." }, "aggregation": { "$ref": "#/components/schemas/core.AccumulationAggregation", "default": "CONCAT", "description": "How the buffered payloads are combined into the job's data when the buffer flushes.", "title": "AccumulationAggregation" }, "comparators": { "type": "array", "description": "Payload comparisons that flush the buffer early: each entry is checked against the newest message's payload, read as `payloadDataType`, and entries are OR-composed with each other and with `filters`, `maxCount`, `maxAgeSeconds` and `maxTotalBytes` - any one of them flushes. Sending the member replaces the whole list.", "items": { "$ref": "#/components/schemas/core.AccumulationComparator", "title": "AccumulationComparator" } }, "enabled": { "type": "boolean", "default": false, "description": "`true` buffers messages instead of starting a job for each. While `false` no other member is validated. At least one of `maxCount`, `maxAgeSeconds` or `maxTotalBytes` must then be above `0`, else the profile is rejected." }, "filters": { "type": "array", "description": "Function chain conditions that flush the buffer early, evaluated on the newest message like `comparators` (see `core.MessageFilter`), but through a mapping function chain instead of a fixed operator. OR-composed with `comparators`, `maxCount`, `maxAgeSeconds` and `maxTotalBytes`.", "items": { "$ref": "#/components/schemas/core.MessageFilter", "title": "MessageFilter" } }, "finalValueFunction": { "$ref": "#/components/schemas/core.AccumulationFinalValueFunction", "default": "LAST", "description": "Which buffered payload is kept when `aggregation` is `FINAL_VALUE`; ignored otherwise. `MIN`, `MAX` and `AVG` need `payloadDataType` `BIG_INTEGER` or `BIG_DECIMAL`; `LAST` works with every `payloadDataType`.", "title": "AccumulationFinalValueFunction" }, "maxAgeSeconds": { "type": "integer", "format": "int32", "default": 0, "description": "Seconds since the oldest buffered message that flushes the batch. `0` disables this trigger; see `enabled`.", "examples": [ 60 ] }, "maxCount": { "type": "integer", "format": "int32", "default": 0, "description": "Number of buffered messages that flushes the batch. `0` disables this trigger; see `enabled`.", "examples": [ 100 ] }, "maxTotalBytes": { "type": "integer", "format": "int64", "default": 0, "description": "Total buffered payload size in bytes that flushes the batch. `0` disables this trigger; see `enabled`.", "examples": [ 1048576 ] }, "metadataStrategy": { "$ref": "#/components/schemas/core.AccumulationMetadataStrategy", "default": "FIRST", "description": "Which buffered message's file name, sender and variables the flushed job carries: `FIRST` or `LAST` message's, `COLLECT_INDEXED` all of them with an index suffix, `COMMON_ONLY` only the values every buffered message agrees on.", "title": "AccumulationMetadataStrategy" }, "payloadDataType": { "$ref": "#/components/schemas/core.ValueType", "default": "STRING", "description": "Type each buffered message's payload is read as for `comparators` and, with `aggregation` `FINAL_VALUE`, for `finalValueFunction`. `comparators` only work with `STRING`, `BIG_INTEGER`, `BIG_DECIMAL` or `DATE`; a `finalValueFunction` other than `LAST` needs `BIG_INTEGER` or `BIG_DECIMAL`.", "title": "ValueType" }, "separator": { "type": "string", "default": ",", "description": "Text put between the buffered payloads when `aggregation` is `CONCAT_SEPARATOR`; ignored otherwise." }, "xmlWrapRootName": { "type": "string", "default": "concat-root", "description": "Name of the root element the buffered payloads are wrapped in when `aggregation` is `XML_WRAP`; ignored otherwise. Must not be blank." } }, "title": "AccumulationSettings" }, "core.AmqpV2AcknowledgmentMode": { "type": "string", "description": "When a delivery is settled relative to the job it starts, for an AMQP v2 input agent's `acknowledgmentMode`.\n\n- `IMMEDIATE`: The delivery is accepted as soon as the message is handed to the worker pool, before the job completes (fire-and-forget). Compatible with `qualityOfService` `AT_MOST_ONCE`. The only mode that message buffering (`accumulation`) can be enabled with.\n- `AFTER_PROCESSING`: The job runs synchronously on a dedicated per-profile receiver; the delivery is accepted on success and settled as failed on error, redelivering on a processing error. Requires `qualityOfService` `AT_LEAST_ONCE`.\n- `RPC`: Like `AFTER_PROCESSING`, but the profile's output is published back to the request's reply address before the delivery is accepted (receiver-side request/reply). Requires `qualityOfService` `AT_LEAST_ONCE`.", "enum": [ "IMMEDIATE", "AFTER_PROCESSING", "RPC" ], "title": "AmqpV2AcknowledgmentMode" }, "core.Amqp091ExchangeType": { "type": "string", "description": "AMQP 0.9.1 exchange kind, used while consuming via an exchange (`destinationType` `TOPIC`).\n\n- `TOPIC`: A topic exchange, bound with `amqp091RoutingKey` (wildcards `*` and `#`).\n- `DIRECT`: A direct exchange, bound with `amqp091RoutingKey`.", "enum": [ "TOPIC", "DIRECT" ], "title": "Amqp091ExchangeType" }, "core.AmqpDestinationType": { "type": "string", "description": "What `destinationName` of an AMQP v2 response unit names.\n\n- `QUEUE`: `destinationName` is a queue.\n- `TOPIC`: `destinationName` is a topic. With AMQP 0.9.1 it is the exchange the message is published to, with `amqp091RoutingKey`.", "enum": [ "QUEUE", "TOPIC" ], "title": "AmqpDestinationType" }, "core.AmqpV2QualityOfService": { "type": "string", "description": "Delivery guarantee for an AMQP v2 input agent's `qualityOfService`.\n\n- `AT_LEAST_ONCE`: A delivery stays unsettled until handed over for processing, accepted afterwards and released back to the broker on failure, so it may be redelivered (and processed more than once).\n- `AT_MOST_ONCE`: A delivery is accepted and settled as soon as it is received; a failure during processing does not bring the message back.", "enum": [ "AT_LEAST_ONCE", "AT_MOST_ONCE" ], "title": "AmqpV2QualityOfService" }, "core.IntegrationPartnerChannelSMB": { "type": "object", "description": "Access to a Windows (SMB) file share: the server, domain, user and password a file cron job or file response unit uses for `smb://` paths. Needs `host`, `smbDomain` and `smbUser`; a profile's file path names the server as ``, which is replaced by `host`, and the unit's own user, password and domain win over the channel's. A file cron agent links one through its `channel` member. The SMB password is not settable through this API; channel list filter `type=SMB`.", "properties": { "class": { "type": "string", "const": "core.IntegrationPartnerChannelSMB", "description": "The type of this object, always `core.IntegrationPartnerChannelSMB`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": false, "description": "Whether the channel is in use. Only active channels take part at runtime: logins on the platform's servers and the matching of incoming data to a partner skip inactive ones. A partner whose `status` is `INACTIVE` makes all its channels read as `false` in the channel list." }, "communicationLogEnabled": { "type": "boolean", "description": "Whether the transfers over this channel are written to the communication log. `null` or left out keeps the stored value; a channel that never stored the setting reads as `true`." }, "communicationLogRetainDays": { "type": "integer", "format": "int32", "default": -1, "description": "Number of days the communication log keeps this channel's entries; `0` and up are stored, `-1` removes the setting so the communication log service's global retention applies. Only used while `communicationLogEnabled` is on. `null` or left out keeps the stored value; a channel that never stored one reads `-1`.", "minimum": -1 }, "contact": { "$ref": "#/components/schemas/core.IntegrationPartnerContact", "description": "The channel's contact person, the one the channel editor's contact section shows. Every channel created here gets exactly one: left out, an empty one. Only one channel contact is exposed; a channel that stores more than one shows the first, and a write leaves the others as they are. `null` or left out keeps the stored contact. On create its `id` is ignored; on update an `id` must be the channel's own contact id.", "title": "IntegrationPartnerContact" }, "direction": { "$ref": "#/components/schemas/core.ChannelDirection", "description": "The way data flows over the channel: `IN` (the partner sends to the platform), `OUT` (the platform sends to the partner) or `IN_AND_OUT`. Left out or `null` on create it defaults to `IN`; it cannot be set to `null` afterwards. JMS, AMQP 0-9-1, AMQP 1.0, Google Pub/Sub, cloud storage and SMB channels are always `IN_AND_OUT`: that is their default, any other value is refused, and a patch sending `null` there changes nothing. A legacy channel of these types stored with neither flag set reads `IN_AND_OUT` and has both flags set by its next write. Any other channel stored before this member existed, with no direction, reads back without it until one is written.", "title": "ChannelDirection" }, "host": { "type": "string", "description": "Host name or IP address of the SMB file server - no scheme, port or path. Replaces `` in the file path of a cron job or response unit that uses this channel. Required on create; a write may not blank it.", "examples": [ "fileserver.acme.example" ], "minLength": 1, "pattern": "^(\\[[0-9A-Fa-f:.]+\\]|[^\\s/\\\\?#@:\\[\\]]+)$" }, "id": { "type": "integer", "format": "int64", "description": "Numeric id of the channel, assigned by the server on create; on the channel resource a value sent in the body is ignored. Profiles reference a channel by this id, looked up with `GET /platform/api/partners/preview/{partnerId}/channels`.", "examples": [ 1042 ] }, "internalUsageOnly": { "type": "boolean", "default": false, "description": "Whether the channel stays on the platform's own server and is not synchronized to a DMZ server (the editor's \"Invisible to DMZ\" switch). `null` or left out keeps the stored value; a new channel is visible to the DMZ, except a new SMB channel, which is stored invisible unless it sends `false`. A new JMS, AMQP 0-9-1, AMQP 1.0, Google Pub/Sub and cloud storage channel is stored invisible to the DMZ, as the editor does; there the member reads absent, a value sent is ignored and a stored channel keeps its flag." }, "localId": { "type": "string", "description": "Identity of the channel, composed by the server as `///@` in lower case; it follows `host`, `smbUser` and `smbDomain` and cannot be written. It is the channel's uniqueness key, so a channel without `smbUser` reads `///null@` (without a domain, no `@` part) and collides with every other such channel on the same host.", "examples": [ "//fileserver/svc-edi@acme" ], "readOnly": true }, "name": { "type": "string", "description": "Display name of the channel. Must be unique among the partner's channels of the same type.", "maxLength": 100, "minLength": 1 }, "partner": { "$ref": "#/components/schemas/core.IntegrationPartner", "description": "The partner that owns the channel, embedded on read. Set by the server from the `{partnerId}` in the request path; a value sent here is ignored, and a channel cannot move to another partner.", "readOnly": true, "title": "IntegrationPartner" }, "remoteId": { "type": "string", "description": "Internal identity of the channel, generated by the server (an `AUTO_CREATE_...` value); it has no meaning for the SMB connection and cannot be written.", "readOnly": true }, "share": { "type": "string", "description": "Share name, stored as the path of the channel's `smb://` address (a leading `/` is added). Needs `host`. The file cron job and response unit take only the host from the channel, so name the share in their file path as well.", "examples": [ "edi" ] }, "smbDomain": { "type": "string", "description": "Windows domain the SMB login authenticates in; a domain set in the cron job or response unit wins. Required on create; a write may not blank it.", "examples": [ "ACME" ], "minLength": 1 }, "smbUser": { "type": "string", "description": "Account used during SMB authentication, next to `smbDomain`. Required on create; a write may not blank it. `null` or left out keeps the stored value.", "examples": [ "svc-edi" ], "minLength": 1 } }, "required": [ "host", "name", "smbDomain", "smbUser" ], "title": "IntegrationPartnerChannelSMB" }, "core.CronFileHandling": { "type": "string", "description": "What a cron agent does with a file once it has read it: `fileHandling` of the file, FTP and remote-file cron agents.\n\n- `DELETE`: Deletes the file once it has been read.\n- `NONE`: Leaves the file in place, so it is read again on the next run.\n- `RENAME`: Renames or moves the file as `fileRename` says.", "enum": [ "DELETE", "NONE", "RENAME" ], "title": "CronFileHandling" }, "core.CronFileSortOrder": { "type": "string", "description": "The order a cron agent processes the files it finds in: `fileSortItem` of the file and FTP cron agents.\n\n- `SYSTEM`: Keeps the order the storage or server lists the files in.\n- `NAME`: Sorts the files by file name, in the direction of `fileSortAscending`.\n- `TIME`: Sorts the files by last-modified time, in the direction of `fileSortAscending`.\n- `META`: Sorts the files by the creation time of their metadata, in the direction of `fileSortAscending`.", "enum": [ "SYSTEM", "NAME", "TIME", "META" ], "title": "CronFileSortOrder" }, "core.IntegrationPartnerChannelSFTP": { "type": "object", "description": "An SFTP/SSH connection with the partner, in either direction: the partner logs in to the platform's SFTP server as `remoteId` and lands in `remotePath`, and the platform connects to the partner's server at `host` and `port`, checking its host key against `keyType`/`keyFingerprint` and authenticating with `privateKeyId` or a password. Referenced by `core.CronSftpAgentSettings.channel` and `core.CronSshAgentSettings.channel` (fetch), `core.SSHProfileResponseUnit.channel` (send) and `core.SFTPAgentSettings.channels` (partners allowed to upload). The partner's login password is `remotePassword`; the platform's own password at the partner's server is not settable through this API. Channel list filter `type=SFTP`.", "properties": { "class": { "type": "string", "const": "core.IntegrationPartnerChannelSFTP", "description": "The type of this object, always `core.IntegrationPartnerChannelSFTP`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": false, "description": "Whether the channel is in use. Only active channels take part at runtime: logins on the platform's servers and the matching of incoming data to a partner skip inactive ones. A partner whose `status` is `INACTIVE` makes all its channels read as `false` in the channel list." }, "allowedProtocols": { "type": "array", "description": "Protocols the partner may log in to the platform's SSH server with: any of `SCP`, `SFTP`, `SSH` (remote command execution). At least one must stay allowed; `null`, an empty list or left out keeps the stored allowance, which on a new channel permits `SCP` and `SFTP` but not `SSH`.", "examples": [ "[\"SFTP\"]" ], "items": { "$ref": "#/components/schemas/core.SshProtocol", "title": "SshProtocol" } }, "blackListAddresses": { "type": "array", "description": "Addresses the partner may not log in to the platform's SFTP server from: IP addresses, host names or `address/netmask` ranges, e.g. `203.0.113.0/255.255.255.0`. Leaving it out keeps the stored list, `null` or an empty list removes it.", "examples": [ "[\"203.0.113.7\"]" ], "items": { "type": "string" } }, "communicationLogEnabled": { "type": "boolean", "description": "Whether the transfers over this channel are written to the communication log. `null` or left out keeps the stored value; a channel that never stored the setting reads as `true`." }, "communicationLogRetainDays": { "type": "integer", "format": "int32", "default": -1, "description": "Number of days the communication log keeps this channel's entries; `0` and up are stored, `-1` removes the setting so the communication log service's global retention applies. Only used while `communicationLogEnabled` is on. `null` or left out keeps the stored value; a channel that never stored one reads `-1`.", "minimum": -1 }, "contact": { "$ref": "#/components/schemas/core.IntegrationPartnerContact", "description": "The channel's contact person, the one the channel editor's contact section shows. Every channel created here gets exactly one: left out, an empty one. Only one channel contact is exposed; a channel that stores more than one shows the first, and a write leaves the others as they are. `null` or left out keeps the stored contact. On create its `id` is ignored; on update an `id` must be the channel's own contact id.", "title": "IntegrationPartnerContact" }, "direction": { "$ref": "#/components/schemas/core.ChannelDirection", "description": "The way data flows over the channel: `IN` (the partner sends to the platform), `OUT` (the platform sends to the partner) or `IN_AND_OUT`. Left out or `null` on create it defaults to `IN`; it cannot be set to `null` afterwards. JMS, AMQP 0-9-1, AMQP 1.0, Google Pub/Sub, cloud storage and SMB channels are always `IN_AND_OUT`: that is their default, any other value is refused, and a patch sending `null` there changes nothing. A legacy channel of these types stored with neither flag set reads `IN_AND_OUT` and has both flags set by its next write. Any other channel stored before this member existed, with no direction, reads back without it until one is written.", "title": "ChannelDirection" }, "host": { "type": "string", "description": "Host name or IP address of the partner's SFTP server - no scheme, port or path. Used when the platform connects to the partner; a host set in the cron job or response unit overrides it. `{\"host\": null, \"port\": null}` clears the address.", "examples": [ "sftp.acme.example" ], "pattern": "^(\\[[0-9A-Fa-f:.]+\\]|[^\\s/\\\\?#@:\\[\\]]+)$" }, "id": { "type": "integer", "format": "int64", "description": "Numeric id of the channel, assigned by the server on create; on the channel resource a value sent in the body is ignored. Profiles reference a channel by this id, looked up with `GET /platform/api/partners/preview/{partnerId}/channels`.", "examples": [ 1042 ] }, "internalUsageOnly": { "type": "boolean", "default": false, "description": "Whether the channel stays on the platform's own server and is not synchronized to a DMZ server (the editor's \"Invisible to DMZ\" switch). `null` or left out keeps the stored value; a new channel is visible to the DMZ, except a new SMB channel, which is stored invisible unless it sends `false`. A new JMS, AMQP 0-9-1, AMQP 1.0, Google Pub/Sub and cloud storage channel is stored invisible to the DMZ, as the editor does; there the member reads absent, a value sent is ignored and a stored channel keeps its flag." }, "keyFingerprint": { "type": "string", "description": "Fingerprint of the host key the partner's SFTP server must present when the platform connects; compared case-insensitively together with `keyType`, and the connection fails on a mismatch. Left blank, any host key is accepted.", "examples": [ "SHA256:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU" ] }, "keyType": { "type": "string", "description": "Type of the host key the partner's SFTP server must present, as the SSH library reports it; checked together with `keyFingerprint`.", "examples": [ "ssh-ed25519" ] }, "localId": { "type": "string", "description": "User name the platform logs in with at the partner's SFTP server (SSH login); its password is not settable through this API. `null` or left out keeps the stored value.", "examples": [ "lobster-edi" ] }, "name": { "type": "string", "description": "Display name of the channel. Must be unique among the partner's channels of the same type.", "maxLength": 100, "minLength": 1 }, "partner": { "$ref": "#/components/schemas/core.IntegrationPartner", "description": "The partner that owns the channel, embedded on read. Set by the server from the `{partnerId}` in the request path; a value sent here is ignored, and a channel cannot move to another partner.", "readOnly": true, "title": "IntegrationPartner" }, "port": { "type": "integer", "format": "int32", "default": 22, "description": "TCP port of the partner's SFTP server. Requires `host`. A port set in the cron job or response unit overrides it.", "examples": [ 22 ], "maximum": 65535, "minimum": 1 }, "privateKeyId": { "type": "string", "description": "Id of the local certificate holding the key pair the platform authenticates with (public-key authentication) when it connects to the partner's SFTP server. Must reference an existing certificate with an SSH common name.", "examples": [ "42" ], "pattern": "^\\d+$" }, "remoteCertificateIds": { "type": "array", "description": "Ids of the partner's certificates (public keys) in the certificate store, one of which the partner may authenticate with when it logs in to the platform's SFTP server by public key. Each must reference an existing certificate. Leaving it out keeps the stored list, `null` or an empty list removes it.", "examples": [ "[\"43\"]" ], "items": { "type": "string" } }, "remoteId": { "type": "string", "description": "User name the partner logs in with on the platform's SFTP server; its password is `remotePassword`, its public keys are `remoteCertificateIds`. Must be unique among all SFTP channels. Left out, the server fills an `AUTO_CREATE_...` placeholder that nobody can log in with.", "examples": [ "acme" ] }, "remotePassword": { "type": "string", "format": "password", "description": "The password the partner logs in with on the platform's server as `remoteId`. A secret: a read returns it encrypted, a write accepts that encrypted value unchanged or the cleartext as `\"PLAIN:\"`. Required on create. A channel that has one cannot be changed to an empty one; a channel stored without one stays writable without. `null` or left out keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else.", "examples": [ "PLAIN:s3cret-for-acme" ], "minLength": 1 }, "remotePath": { "type": "string", "description": "Directory on the Lobster server that becomes the partner's home when it logs in to the platform's SFTP server as `remoteId` (relative paths resolve against the server's working directory). Not a path on the partner's server. Without one the partner's file paths resolve against the server's working directory. Left out or blank on create, the server picks `ssh/` like the channel editor and creates that directory, on the DMZ too where one is configured; a directory given here is not created. A stored directory cannot be changed to a blank one (422), which an overwrite patch that leaves the member out would do.", "examples": [ "./ssh/acme" ] }, "virtualRoot": { "type": "boolean", "description": "Whether the partner, logged in on the platform's SFTP server, sees a virtual file system with its home directory as the root (`/`) instead of the real path of the home directory. `null` or left out keeps the stored value; a new channel shows the real path." }, "whiteListAddresses": { "type": "array", "description": "Addresses the partner may log in to the platform's SFTP server from: IP addresses, host names or `address/netmask` ranges, e.g. `198.51.100.0/255.255.255.0`. Leaving it out keeps the stored list, `null` or an empty list removes it; with a list set, a login from any other address is refused.", "examples": [ "[\"198.51.100.0/255.255.255.0\"]" ], "items": { "type": "string" } }, "wireCharset": { "type": "string", "description": "Character set the SFTP/SCP server and client use for file names on the wire, e.g. `ISO-8859-1`. Not validated on save. Leaving it out keeps the stored value, `null` or an empty string removes it so the SSH library's default applies.", "examples": [ "ISO-8859-1" ] } }, "required": [ "name", "remotePassword" ], "title": "IntegrationPartnerChannelSFTP" }, "core.FtpControlFileNaming": { "type": "string", "description": "How `controlSuffix` forms the control file name of an FTP cron agent using `useControlFile`: `ftpControlNameType` of the agent.\n\n- `SUFFIX`: Appends `controlSuffix` to the data file name, e.g. `orders.xml` + `.ok` = `orders.xml.ok`.\n- `PREFIX`: Puts `controlSuffix` in front of the data file name, e.g. `ok_` + `orders.xml` = `ok_orders.xml`.", "enum": [ "SUFFIX", "PREFIX" ], "title": "FtpControlFileNaming" }, "core.IntegrationPartnerChannelX400": { "type": "object", "description": "An X.400 connection with the partner: both sides' O/R addresses and the OSI selectors the platform's X.400 client uses toward the X.400 server. Referenced by `core.CronX400AgentSettings.channel` (fetch) and `core.X400ProfileResponseUnit.channel` (send). The X.400 server address (`x400://`), the password and the other client settings are not settable through this API; channel list filter `type=X400`.", "properties": { "class": { "type": "string", "const": "core.IntegrationPartnerChannelX400", "description": "The type of this object, always `core.IntegrationPartnerChannelX400`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": false, "description": "Whether the channel is in use. Only active channels take part at runtime: logins on the platform's servers and the matching of incoming data to a partner skip inactive ones. A partner whose `status` is `INACTIVE` makes all its channels read as `false` in the channel list." }, "communicationLogEnabled": { "type": "boolean", "description": "Whether the transfers over this channel are written to the communication log. `null` or left out keeps the stored value; a channel that never stored the setting reads as `true`." }, "communicationLogRetainDays": { "type": "integer", "format": "int32", "default": -1, "description": "Number of days the communication log keeps this channel's entries; `0` and up are stored, `-1` removes the setting so the communication log service's global retention applies. Only used while `communicationLogEnabled` is on. `null` or left out keeps the stored value; a channel that never stored one reads `-1`.", "minimum": -1 }, "contact": { "$ref": "#/components/schemas/core.IntegrationPartnerContact", "description": "The channel's contact person, the one the channel editor's contact section shows. Every channel created here gets exactly one: left out, an empty one. Only one channel contact is exposed; a channel that stores more than one shows the first, and a write leaves the others as they are. `null` or left out keeps the stored contact. On create its `id` is ignored; on update an `id` must be the channel's own contact id.", "title": "IntegrationPartnerContact" }, "direction": { "$ref": "#/components/schemas/core.ChannelDirection", "description": "The way data flows over the channel: `IN` (the partner sends to the platform), `OUT` (the platform sends to the partner) or `IN_AND_OUT`. Left out or `null` on create it defaults to `IN`; it cannot be set to `null` afterwards. JMS, AMQP 0-9-1, AMQP 1.0, Google Pub/Sub, cloud storage and SMB channels are always `IN_AND_OUT`: that is their default, any other value is refused, and a patch sending `null` there changes nothing. A legacy channel of these types stored with neither flag set reads `IN_AND_OUT` and has both flags set by its next write. Any other channel stored before this member existed, with no direction, reads back without it until one is written.", "title": "ChannelDirection" }, "id": { "type": "integer", "format": "int64", "description": "Numeric id of the channel, assigned by the server on create; on the channel resource a value sent in the body is ignored. Profiles reference a channel by this id, looked up with `GET /platform/api/partners/preview/{partnerId}/channels`.", "examples": [ 1042 ] }, "internalUsageOnly": { "type": "boolean", "default": false, "description": "Whether the channel stays on the platform's own server and is not synchronized to a DMZ server (the editor's \"Invisible to DMZ\" switch). `null` or left out keeps the stored value; a new channel is visible to the DMZ, except a new SMB channel, which is stored invisible unless it sends `false`. A new JMS, AMQP 0-9-1, AMQP 1.0, Google Pub/Sub and cloud storage channel is stored invisible to the DMZ, as the editor does; there the member reads absent, a value sent is ignored and a stored channel keeps its flag." }, "localId": { "type": "string", "description": "The platform's own O/R address toward this partner: the sender of messages sent through this channel (unless the response unit names one), and incoming messages must be addressed to it.", "examples": [ "C=DE;A=VIAT;O=LOBSTER;S=EDI" ] }, "maximumTpduSize": { "type": "integer", "format": "int32", "default": 1024, "description": "The largest TPDU (transport data unit) in bytes the X.400 client uses. `0` restores the default; leaving it out keeps the stored value, `null` restores it too.", "minimum": 0 }, "name": { "type": "string", "description": "Display name of the channel. Must be unique among the partner's channels of the same type.", "maxLength": 100, "minLength": 1 }, "partner": { "$ref": "#/components/schemas/core.IntegrationPartner", "description": "The partner that owns the channel, embedded on read. Set by the server from the `{partnerId}` in the request path; a value sent here is ignored, and a channel cannot move to another partner.", "readOnly": true, "title": "IntegrationPartner" }, "presentationSelector": { "type": "string", "description": "Presentation selector the X.400 client addresses on the X.400 server. Left out, the client's default applies; `[empty]` sends an explicitly empty value." }, "remoteId": { "type": "string", "description": "The partner's O/R address: the receiver of messages sent through this channel (unless the response unit names one), and an incoming message is assigned to this channel by its sender address (compared in upper case). Left out, the server fills a placeholder address (`S=dummy;A=VIAT;C=DE;O=...`).", "examples": [ "C=DE;A=VIAT;O=ACME;S=EDI" ] }, "serverAddressFiltering": { "type": "boolean", "default": false, "description": "Whether the X.400 mailbox can filter the messages it hands out by address. Leaving it out keeps the stored value, `null` resets it to `false`." }, "sessionSelector": { "type": "string", "description": "Session selector the X.400 client addresses on the X.400 server. Left out, the client's default applies; `[empty]` sends an explicitly empty value." }, "transportAccessPoint": { "type": "string", "description": "Transport access point (TSAP) the X.400 client sends when connecting to the X.400 server. Left out, the client's default applies; `[empty]` sends an explicitly empty value." }, "uafiConfigDirectory": { "type": "string", "description": "Configuration directory of the legacy UAFI X.400 interface. Stored only: the editor does not show it and the built-in X.400 client does not use it." }, "uafiInDirectory": { "type": "string", "description": "Incoming directory of the legacy UAFI X.400 interface. Stored only: the editor does not show it and the built-in X.400 client does not use it." }, "uafiOutDirectory": { "type": "string", "description": "Outgoing directory of the legacy UAFI X.400 interface. Stored only: the editor does not show it and the built-in X.400 client does not use it." } }, "required": [ "name" ], "title": "IntegrationPartnerChannelX400" }, "core.KafkaDataType": { "type": "string", "description": "The (de)serializer a Kafka agent or response unit uses for a record's key or value: `keyType`/`dataType` of the agent, `keySerializer`/`dataSerializer` of the response unit.\n\n- `INTEGER`: A 32-bit whole number.\n- `LONG`: A 64-bit whole number.\n- `FLOAT`: A single-precision floating-point number.\n- `DOUBLE`: A double-precision floating-point number.\n- `BYTES`: The raw bytes, unchanged.\n- `STRING`: Text in the profile's encoding.\n- `UUID`: A UUID.\n- `AVRO`: Avro, (de)serialized with the Confluent schema registry.\n- `AVRO_APICURIO`: Avro, (de)serialized with the Apicurio schema registry.", "enum": [ "INTEGER", "LONG", "FLOAT", "DOUBLE", "BYTES", "STRING", "UUID", "AVRO", "AVRO_APICURIO" ], "title": "KafkaDataType" }, "core.IntegrationPartnerChannelAS2": { "type": "object", "description": "An AS2 connection to the partner: the AS2 ids both sides use, the partner's AS2 URL and the signing/encryption settings for outgoing messages. Needs `stationId` (`partnerAs2Id` is filled when absent); set `as2Url` and the certificates via `localCertificateId`/`remoteCertificateId`; referenced by `core.AS2ProfileResponseUnit.channel` (send) and `core.AS2AgentSettings.channels` (partners allowed to deliver). The bridge is not settable through this API; channel list filter `type=AS2`.", "properties": { "class": { "type": "string", "const": "core.IntegrationPartnerChannelAS2", "description": "The type of this object, always `core.IntegrationPartnerChannelAS2`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": false, "description": "Whether the channel is in use. Only active channels take part at runtime: logins on the platform's servers and the matching of incoming data to a partner skip inactive ones. A partner whose `status` is `INACTIVE` makes all its channels read as `false` in the channel list." }, "as2Url": { "type": "string", "description": "The partner's AS2 endpoint that outgoing messages are posted to; an AS2 response unit without its own URL uses it.", "examples": [ "https://as2.acme.example/as2" ], "pattern": "^(https?|as2)://.+" }, "communicationLogEnabled": { "type": "boolean", "description": "Whether the transfers over this channel are written to the communication log. `null` or left out keeps the stored value; a channel that never stored the setting reads as `true`." }, "communicationLogRetainDays": { "type": "integer", "format": "int32", "default": -1, "description": "Number of days the communication log keeps this channel's entries; `0` and up are stored, `-1` removes the setting so the communication log service's global retention applies. Only used while `communicationLogEnabled` is on. `null` or left out keeps the stored value; a channel that never stored one reads `-1`.", "minimum": -1 }, "contact": { "$ref": "#/components/schemas/core.IntegrationPartnerContact", "description": "The channel's contact person, the one the channel editor's contact section shows. Every channel created here gets exactly one: left out, an empty one. Only one channel contact is exposed; a channel that stores more than one shows the first, and a write leaves the others as they are. `null` or left out keeps the stored contact. On create its `id` is ignored; on update an `id` must be the channel's own contact id.", "title": "IntegrationPartnerContact" }, "direction": { "$ref": "#/components/schemas/core.ChannelDirection", "description": "The way data flows over the channel: `IN` (the partner sends to the platform), `OUT` (the platform sends to the partner) or `IN_AND_OUT`. Left out or `null` on create it defaults to `IN`; it cannot be set to `null` afterwards. JMS, AMQP 0-9-1, AMQP 1.0, Google Pub/Sub, cloud storage and SMB channels are always `IN_AND_OUT`: that is their default, any other value is refused, and a patch sending `null` there changes nothing. A legacy channel of these types stored with neither flag set reads `IN_AND_OUT` and has both flags set by its next write. Any other channel stored before this member existed, with no direction, reads back without it until one is written.", "title": "ChannelDirection" }, "encryptionAlgorithm": { "type": "string", "default": "AES256", "description": "Cipher for encrypting outgoing messages; used only when the channel sends encrypted. Not validated on save.", "examples": [ "AES256" ] }, "id": { "type": "integer", "format": "int64", "description": "Numeric id of the channel, assigned by the server on create; on the channel resource a value sent in the body is ignored. Profiles reference a channel by this id, looked up with `GET /platform/api/partners/preview/{partnerId}/channels`.", "examples": [ 1042 ] }, "internalUsageOnly": { "type": "boolean", "default": false, "description": "Whether the channel stays on the platform's own server and is not synchronized to a DMZ server (the editor's \"Invisible to DMZ\" switch). `null` or left out keeps the stored value; a new channel is visible to the DMZ, except a new SMB channel, which is stored invisible unless it sends `false`. A new JMS, AMQP 0-9-1, AMQP 1.0, Google Pub/Sub and cloud storage channel is stored invisible to the DMZ, as the editor does; there the member reads absent, a value sent is ignored and a stored channel keeps its flag." }, "localCertificateId": { "type": "string", "description": "Id of one of the platform's own certificates (with private key) that this channel uses. Must reference an existing certificate.", "examples": [ "42" ], "pattern": "^\\d+$" }, "localSignCertificateId": { "type": "string", "description": "Id of the platform's own certificate (with private key) that signs the messages it sends over this channel. Must reference an existing certificate. Reads as absent while the channel signs with `localCertificateId`, which is what applies when it is unset. Leaving it out keeps the stored value, `null` or an empty string removes it.", "examples": [ "42" ], "pattern": "^\\d*$" }, "localTlsAuthCertificateId": { "type": "string", "description": "Id of the platform's own certificate (with private key) it presents as TLS client certificate when it connects to the partner. Must reference an existing certificate. Reads as absent while the channel uses `localCertificateId`, which applies when it is unset. Leaving it out keeps the stored value, `null` or an empty string removes it.", "examples": [ "42" ], "pattern": "^\\d*$" }, "mdnHashAlgorithm": { "type": "string", "default": "SHA256", "description": "Hash algorithm the MDN (receipt) is signed with, e.g. `SHA256`. Not validated on save. Leaving it out keeps the stored value, `null` or an empty string removes it.", "examples": [ "SHA256" ] }, "mdnMode": { "$ref": "#/components/schemas/core.As2MdnMode", "default": "DEFAULT", "description": "Which MDN (receipt) the platform requests for outgoing messages: `DEFAULT` = the AS2 service's system setting, `SYNCHRON` = returned in the HTTP response, `ASYNCHRON` = sent later to the MDN URL. A channel stored with another code reads back without `mdnMode`, and a write that leaves it out keeps that code.", "title": "As2MdnMode" }, "name": { "type": "string", "description": "Display name of the channel. Must be unique among the partner's channels of the same type.", "maxLength": 100, "minLength": 1 }, "partner": { "$ref": "#/components/schemas/core.IntegrationPartner", "description": "The partner that owns the channel, embedded on read. Set by the server from the `{partnerId}` in the request path; a value sent here is ignored, and a channel cannot move to another partner.", "readOnly": true, "title": "IntegrationPartner" }, "partnerAs2Id": { "type": "string", "description": "The partner's AS2 id: sent as `AS2-To` on outgoing messages, and an incoming message is assigned to this channel by its `AS2-From`. Left out, the server fills an `AUTO_CREATE_...` placeholder that no partner sends.", "examples": [ "ACME_AS2" ] }, "receivingEncrypted": { "type": "boolean", "default": false, "description": "Whether the messages the partner sends over this channel must be encrypted. Leaving it out keeps the stored value, `null` resets it to `false`; a new channel accepts unencrypted messages." }, "receivingSigned": { "type": "boolean", "default": false, "description": "Whether the messages the partner sends over this channel must be signed. Leaving it out keeps the stored value, `null` resets it to `false`; a new channel accepts unsigned messages." }, "remoteCertificateId": { "type": "string", "description": "Id of the partner's certificate (public key) in the certificate store that this channel uses, the counterpart of `localCertificateId`. Must reference an existing certificate.", "examples": [ "43" ], "pattern": "^\\d+$" }, "remoteSignCertificateId": { "type": "string", "description": "Id of the partner's certificate (public key) that the signature of the messages it sends over this channel is checked against. Must reference an existing certificate. Reads as absent while the channel checks against `remoteCertificateId`, which is what applies when it is unset. Leaving it out keeps the stored value, `null` or an empty string removes it.", "examples": [ "43" ], "pattern": "^\\d*$" }, "remoteTlsAuthCertificateId": { "type": "string", "description": "Id of the partner's certificate (public key) it must present as TLS client certificate when it connects to the platform. Must reference an existing certificate. Reads as absent while the channel expects `remoteCertificateId`, which applies when it is unset. Leaving it out keeps the stored value, `null` or an empty string removes it.", "examples": [ "43" ], "pattern": "^\\d*$" }, "removeSignatureSecurityFeatures": { "type": "boolean", "default": false, "description": "Whether the security settings of the message signature are removed (the editor's \"Remove security settings of signature\" switch). Leaving it out keeps the stored value, `null` resets it to `false`; a new channel keeps them." }, "sendingChunked": { "type": "boolean", "default": false, "description": "Whether outgoing messages are sent with chunked transfer encoding, split into blocks, instead of with a content length. Leaving it out keeps the stored value, `null` resets it to `false`; a new channel does not chunk." }, "sendingCompressed": { "type": "boolean", "default": false, "description": "Whether the messages the platform sends over this channel are compressed. Leaving it out keeps the stored value, `null` resets it to `false`; a new channel does not compress." }, "sendingEncrypted": { "type": "boolean", "default": false, "description": "Whether the messages the platform sends over this channel are encrypted. Leaving it out keeps the stored value, `null` resets it to `false`; a new channel does not encrypt." }, "sendingMdnUrl": { "type": "string", "description": "URL the partner sends the asynchronous MDN (receipt) to; only used with `mdnMode` `ASYNCHRON`. Must be an HTTP or HTTPS URL. Leaving it out keeps the stored value, `null` or an empty string removes it.", "examples": [ "https://lobster.example/as2/mdn" ], "pattern": "^(https?://.+)?$" }, "sendingSigned": { "type": "boolean", "default": false, "description": "Whether the messages the platform sends over this channel are signed. Leaving it out keeps the stored value, `null` resets it to `false`; a new channel does not sign." }, "signingAlgorithm": { "type": "string", "default": "SHA1", "description": "Hash algorithm for signing outgoing messages; used only when the channel sends signed. Not validated on save.", "examples": [ "SHA256" ] }, "stationId": { "type": "string", "description": "The platform's own AS2 id toward this partner: sent as `AS2-From` on outgoing messages and expected as `AS2-To` on incoming ones. Required on create; a write may not blank it. Together with `partnerAs2Id` it must be unique among AS2 channels.", "examples": [ "LOBSTER_AS2" ], "minLength": 1 } }, "required": [ "name", "stationId" ], "title": "IntegrationPartnerChannelAS2" }, "core.LdapSearchScope": { "type": "string", "description": "How deep an LDAP cron agent searches below its base: `searchScope` of the agent.\n\n- `OBJECT`: Searches only the entry at `baseDN` itself.\n- `ONE_LEVEL`: Searches `baseDN` and its direct children.\n- `SUBTREE`: Searches the whole subtree below `baseDN`.", "enum": [ "OBJECT", "ONE_LEVEL", "SUBTREE" ], "title": "LdapSearchScope" }, "core.IntegrationPartnerChannelAS4": { "type": "object", "description": "An AS4 connection to the partner: the partner's AS4 id, its message service endpoint and the certificates. Referenced by `core.As4ProfileResponseUnit.channel` (send) and `core.AS4AgentSettings.channels` (partners allowed to deliver). The platform's own AS4 id, which outgoing messages are sent from, is not settable through this API; channel list filter `type=AS4`.", "properties": { "class": { "type": "string", "const": "core.IntegrationPartnerChannelAS4", "description": "The type of this object, always `core.IntegrationPartnerChannelAS4`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": false, "description": "Whether the channel is in use. Only active channels take part at runtime: logins on the platform's servers and the matching of incoming data to a partner skip inactive ones. A partner whose `status` is `INACTIVE` makes all its channels read as `false` in the channel list." }, "communicationLogEnabled": { "type": "boolean", "description": "Whether the transfers over this channel are written to the communication log. `null` or left out keeps the stored value; a channel that never stored the setting reads as `true`." }, "communicationLogRetainDays": { "type": "integer", "format": "int32", "default": -1, "description": "Number of days the communication log keeps this channel's entries; `0` and up are stored, `-1` removes the setting so the communication log service's global retention applies. Only used while `communicationLogEnabled` is on. `null` or left out keeps the stored value; a channel that never stored one reads `-1`.", "minimum": -1 }, "contact": { "$ref": "#/components/schemas/core.IntegrationPartnerContact", "description": "The channel's contact person, the one the channel editor's contact section shows. Every channel created here gets exactly one: left out, an empty one. Only one channel contact is exposed; a channel that stores more than one shows the first, and a write leaves the others as they are. `null` or left out keeps the stored contact. On create its `id` is ignored; on update an `id` must be the channel's own contact id.", "title": "IntegrationPartnerContact" }, "direction": { "$ref": "#/components/schemas/core.ChannelDirection", "description": "The way data flows over the channel: `IN` (the partner sends to the platform), `OUT` (the platform sends to the partner) or `IN_AND_OUT`. Left out or `null` on create it defaults to `IN`; it cannot be set to `null` afterwards. JMS, AMQP 0-9-1, AMQP 1.0, Google Pub/Sub, cloud storage and SMB channels are always `IN_AND_OUT`: that is their default, any other value is refused, and a patch sending `null` there changes nothing. A legacy channel of these types stored with neither flag set reads `IN_AND_OUT` and has both flags set by its next write. Any other channel stored before this member existed, with no direction, reads back without it until one is written.", "title": "ChannelDirection" }, "encryptionAlgorithm": { "type": "string", "description": "Cipher for encrypting outgoing messages; used only when the channel sends encrypted. Not validated on save. Leaving it out keeps the stored value, `null` resets it to the default, an empty string removes it.", "examples": [ "AES256" ] }, "endpointUrl": { "type": "string", "description": "The partner's AS4 message service endpoint that outgoing messages are pushed to.", "examples": [ "https://as4.acme.example/msh" ], "pattern": "^https?://.+" }, "id": { "type": "integer", "format": "int64", "description": "Numeric id of the channel, assigned by the server on create; on the channel resource a value sent in the body is ignored. Profiles reference a channel by this id, looked up with `GET /platform/api/partners/preview/{partnerId}/channels`.", "examples": [ 1042 ] }, "internalUsageOnly": { "type": "boolean", "default": false, "description": "Whether the channel stays on the platform's own server and is not synchronized to a DMZ server (the editor's \"Invisible to DMZ\" switch). `null` or left out keeps the stored value; a new channel is visible to the DMZ, except a new SMB channel, which is stored invisible unless it sends `false`. A new JMS, AMQP 0-9-1, AMQP 1.0, Google Pub/Sub and cloud storage channel is stored invisible to the DMZ, as the editor does; there the member reads absent, a value sent is ignored and a stored channel keeps its flag." }, "localCertificateId": { "type": "string", "description": "Id of one of the platform's own certificates (with private key) that this channel uses. Must reference an existing certificate.", "examples": [ "42" ], "pattern": "^\\d+$" }, "localSignCertificateId": { "type": "string", "description": "Id of the platform's own certificate (with private key) that signs the messages it sends over this channel. Must reference an existing certificate. Reads as absent while the channel signs with `localCertificateId`, which is what applies when it is unset. Leaving it out keeps the stored value, `null` or an empty string removes it.", "examples": [ "42" ], "pattern": "^\\d*$" }, "localTlsAuthCertificateId": { "type": "string", "description": "Id of the platform's own certificate (with private key) it presents as TLS client certificate when it connects to the partner. Must reference an existing certificate. Reads as absent while the channel uses `localCertificateId`, which applies when it is unset. Leaving it out keeps the stored value, `null` or an empty string removes it.", "examples": [ "42" ], "pattern": "^\\d*$" }, "mdnMode": { "$ref": "#/components/schemas/core.As2MdnMode", "default": "DEFAULT", "description": "Which MDN (receipt) the platform requests for outgoing messages: `DEFAULT` = the AS4 service's system setting, `SYNCHRON` = returned in the HTTP response, `ASYNCHRON` = sent later to `sendingMdnUrl`. A channel stored with another code reads back without `mdnMode`, and a write that leaves it out or sends `null` keeps that code. Otherwise leaving it out keeps the stored value and `null` resets it to `DEFAULT`.", "title": "As2MdnMode" }, "name": { "type": "string", "description": "Display name of the channel. Must be unique among the partner's channels of the same type.", "maxLength": 100, "minLength": 1 }, "partner": { "$ref": "#/components/schemas/core.IntegrationPartner", "description": "The partner that owns the channel, embedded on read. Set by the server from the `{partnerId}` in the request path; a value sent here is ignored, and a channel cannot move to another partner.", "readOnly": true, "title": "IntegrationPartner" }, "receivingEncrypted": { "type": "boolean", "default": false, "description": "Whether the messages the partner sends over this channel must be encrypted. Leaving it out keeps the stored value, `null` resets it to `false`; a new channel accepts unencrypted messages." }, "receivingSigned": { "type": "boolean", "default": false, "description": "Whether the messages the partner sends over this channel must be signed. Leaving it out keeps the stored value, `null` resets it to `false`; a new channel accepts unsigned messages." }, "remoteCertificateId": { "type": "string", "description": "Id of the partner's certificate (public key) in the certificate store that this channel uses, the counterpart of `localCertificateId`. Must reference an existing certificate.", "examples": [ "43" ], "pattern": "^\\d+$" }, "remoteId": { "type": "string", "description": "The partner's AS4 id, the receiver of messages sent through this channel. Left out, the server fills an `AUTO_CREATE_...` placeholder." }, "remoteSignCertificateId": { "type": "string", "description": "Id of the partner's certificate (public key) that the signature of the messages it sends over this channel is checked against. Must reference an existing certificate. Reads as absent while the channel checks against `remoteCertificateId`, which is what applies when it is unset. Leaving it out keeps the stored value, `null` or an empty string removes it.", "examples": [ "43" ], "pattern": "^\\d*$" }, "remoteTlsAuthCertificateId": { "type": "string", "description": "Id of the partner's certificate (public key) it must present as TLS client certificate when it connects to the platform. Must reference an existing certificate. Reads as absent while the channel expects `remoteCertificateId`, which applies when it is unset. Leaving it out keeps the stored value, `null` or an empty string removes it.", "examples": [ "43" ], "pattern": "^\\d*$" }, "sendingCompressed": { "type": "boolean", "default": false, "description": "Whether the messages the platform sends over this channel are compressed. Leaving it out keeps the stored value, `null` resets it to `false`; a new channel does not compress." }, "sendingEncrypted": { "type": "boolean", "default": false, "description": "Whether the messages the platform sends over this channel are encrypted. Leaving it out keeps the stored value, `null` resets it to `false`; a new channel does not encrypt." }, "sendingMdnUrl": { "type": "string", "description": "URL the partner sends the asynchronous MDN (receipt) to; only used with `mdnMode` `ASYNCHRON`. Must be an HTTP or HTTPS URL. Leaving it out keeps the stored value, `null` or an empty string removes it.", "examples": [ "https://lobster.example/as4/mdn" ], "pattern": "^(https?://.+)?$" }, "sendingSigned": { "type": "boolean", "default": false, "description": "Whether the messages the platform sends over this channel are signed. Leaving it out keeps the stored value, `null` resets it to `false`; a new channel does not sign." }, "signingAlgorithm": { "type": "string", "description": "Hash algorithm for signing outgoing messages; used only when the channel sends signed. Not validated on save. Leaving it out keeps the stored value, `null` resets it to the default, an empty string removes it.", "examples": [ "SHA256" ] } }, "required": [ "name" ], "title": "IntegrationPartnerChannelAS4" }, "core.SshTransferType": { "type": "string", "description": "The upload protocol an SSH profile accepts files over: `transferType` of the agent. A file uploaded the other way is not taken by this profile.\n\n- `SFTP`: SFTP.\n- `SCP`: SCP.", "enum": [ "SFTP", "SCP" ], "title": "SshTransferType" }, "core.AmqpQualityOfService": { "type": "string", "description": "Delivery guarantee for an AMQP agent's `qualityOfService` or a response unit's.\n\n- `AT_MOST_ONCE`: The message may be delivered zero or more times; no redelivery is attempted.\n- `AT_LEAST_ONCE`: The message is redelivered until acknowledged, so it may arrive more than once.\n- `EXACTLY_ONCE`: The broker guarantees the message is delivered exactly once; only supported by AMQP 1.0 consumers.", "enum": [ "AT_MOST_ONCE", "AT_LEAST_ONCE", "EXACTLY_ONCE" ], "title": "AmqpQualityOfService" }, "core.AmqpQueueType": { "type": "string", "description": "What `queueName` of an AMQP agent or response unit names: `queueType` of the agent, `queueType` of the AMQP 0.9.1/JMS response unit.\n\n- `PUBLISH`: `queueName` is a queue the agent reads, or the unit publishes to directly.\n- `TOPIC`: `queueName` is a topic exchange (AMQP 0.9.1) or a topic (JMS) the agent binds/subscribes to, or the unit publishes to.\n- `ROUTING`: `queueName` is a direct exchange the agent binds with `routingKey`; not supported by JMS.\n- `RPC`: `queueName` is an RPC queue: the agent reads requests from it and sends the profile's response back to the requester, or the response unit waits for the reply and hands it to `forwardProfile`.", "enum": [ "PUBLISH", "TOPIC", "ROUTING", "RPC" ], "title": "AmqpQueueType" }, "core.SapField": { "type": "object", "description": "One scalar import parameter of the SAP function module an SAP cron agent calls; one element of `fields`. Sets the parameter `key` to `value` before each call.", "properties": { "class": { "type": "string", "const": "core.SapField", "description": "The type of this object, always `core.SapField`. Required where the member it is sent in accepts several types." }, "key": { "type": "string", "description": "Name of the import parameter as the function module defines it.", "examples": [ "MAXROWS" ] }, "value": { "type": "string", "description": "Value passed for the parameter; date masks, `%NAME%` constants and `@NAME@` variables are resolved on each run. Always send it: an entry without a value fails the run.", "examples": [ "100" ] } }, "title": "SapField" }, "core.SapFormat": { "type": "string", "description": "The format a SAP cron agent converts the RFC function's result to before the profile parses it: `format` of the agent. Choose the profile's input format to match.\n\n- `CSV`: CSV.\n- `FIX`: Fixed-length records.\n- `XML`: XML.\n- `SAP_XML`: SAP's own XML rendering of the function.", "enum": [ "CSV", "FIX", "XML", "SAP_XML" ], "title": "SapFormat" }, "core.SapStructureEntry": { "type": "object", "description": "Values for one structure or table parameter of the SAP function module an SAP cron agent calls; one element of `structures` or `tables`. `header` names the columns, each element of `rows` gives the values for those columns in the same order.", "properties": { "class": { "type": "string", "const": "core.SapStructureEntry", "description": "The type of this object, always `core.SapStructureEntry`. Required where the member it is sent in accepts several types." }, "header": { "type": "array", "description": "Field names of the structure or table, in the order the values of each row follow. A row must not have more values than `header` has names.", "items": { "type": "string" } }, "name": { "type": "string", "description": "Name of the structure or table parameter as the function module defines it. Must be unique within its list; a later entry with the same name replaces an earlier one.", "examples": [ "IMPORTSTRUCT" ] }, "rows": { "type": "array", "description": "The values to set: for a structure one row (further rows overwrite its values); for a table one row per table line to append. With no rows the parameter is left untouched.", "items": { "$ref": "#/components/schemas/core.SapStructureRow", "title": "SapStructureRow" } } }, "title": "SapStructureEntry" }, "core.CommLogEventType": { "type": "string", "description": "Communication-log event type a communication-log input agent filters on: `commType` of the agent.\n\n- `ALL`: Both message disposition notifications (MDNs) and non-delivery notifications (NDNs). The default.\n- `MDN`: Message disposition notifications (MDNs) only.\n- `NDN`: Non-delivery notifications (NDNs) only.", "enum": [ "ALL", "MDN", "NDN" ], "title": "CommLogEventType" }, "core.CommLogDirection": { "type": "string", "description": "Communication direction a communication-log input agent filters on: `direction` of the agent.\n\n- `ALL`: Both inbound and outbound communication. The default.\n- `IN`: Inbound communication only.\n- `OUT`: Outbound communication only.", "enum": [ "ALL", "IN", "OUT" ], "title": "CommLogDirection" }, "core.CommLogProtocolType": { "type": "string", "description": "Communication channel protocol a communication-log input agent filters on: `protocolTypes` of the agent.\n\n- `AS2`: AS2.\n- `FAX`: Fax.\n- `HTTP`: HTTP(S).\n- `MAIL`: Mail.\n- `OFTP`: OFTP.\n- `X400`: X.400.", "enum": [ "AS2", "FAX", "HTTP", "MAIL", "OFTP", "X400" ], "title": "CommLogProtocolType" }, "core.SapAleRelation": { "type": "object", "description": "One rule of a SAP ALE input agent's IDOC-to-profile routing table: one entry of `relations`. An incoming IDOC is matched against every rule's `idoc`, `cim` and `field`/`fieldValue`; the most specific match (or, with `useAndOperation`, the profile matching the most rules) decides which `profileName` runs.", "properties": { "class": { "type": "string", "const": "core.SapAleRelation", "description": "The type of this object, always `core.SapAleRelation`. Required where the member it is sent in accepts several types." }, "cim": { "type": "string", "description": "IDOC extension (CIM) type this rule additionally matches; left blank, any CIM for the given `idoc` matches." }, "field": { "type": "string", "default": "TABNAM", "description": "Name of the IDOC segment field checked against `fieldValue`; only evaluated when `fieldValue` is set." }, "fieldValue": { "type": "string", "description": "Value `field` must equal for this rule to match; left blank the rule matches on `idoc`/`cim` alone." }, "idoc": { "type": "string", "description": "IDOC type this rule matches; `*` matches any IDOC not matched more specifically by another rule.", "examples": [ "ORDERS01" ], "minLength": 1 }, "profileName": { "type": "string", "description": "Name of the profile started for a matching IDOC; must already exist.", "minLength": 1 } }, "required": [ "idoc", "profileName" ], "title": "SapAleRelation" }, "core.IntegrationPartnerChannelHTTP": { "type": "object", "description": "An HTTP connection with the partner, in either direction: the partner logs in to the platform's HTTP server as `remoteId` (password, OAuth and token settings are not settable through this API), and the platform calls the partner's server at `url`. Referenced by `core.HttpProfileResponseUnit.channel` and `core.WebDAVProfileResponseUnit.channel` (send), `core.HttpAgentSettings.channelIds` (partners allowed to call the HTTP input agent) and `core.CronWebdavAgentSettings.comChannelId`. Channel list filter: `type=HTTP`.", "properties": { "class": { "type": "string", "const": "core.IntegrationPartnerChannelHTTP", "description": "The type of this object, always `core.IntegrationPartnerChannelHTTP`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": false, "description": "Whether the channel is in use. Only active channels take part at runtime: logins on the platform's servers and the matching of incoming data to a partner skip inactive ones. A partner whose `status` is `INACTIVE` makes all its channels read as `false` in the channel list." }, "communicationLogEnabled": { "type": "boolean", "description": "Whether the transfers over this channel are written to the communication log. `null` or left out keeps the stored value; a channel that never stored the setting reads as `true`." }, "communicationLogRetainDays": { "type": "integer", "format": "int32", "default": -1, "description": "Number of days the communication log keeps this channel's entries; `0` and up are stored, `-1` removes the setting so the communication log service's global retention applies. Only used while `communicationLogEnabled` is on. `null` or left out keeps the stored value; a channel that never stored one reads `-1`.", "minimum": -1 }, "contact": { "$ref": "#/components/schemas/core.IntegrationPartnerContact", "description": "The channel's contact person, the one the channel editor's contact section shows. Every channel created here gets exactly one: left out, an empty one. Only one channel contact is exposed; a channel that stores more than one shows the first, and a write leaves the others as they are. `null` or left out keeps the stored contact. On create its `id` is ignored; on update an `id` must be the channel's own contact id.", "title": "IntegrationPartnerContact" }, "direction": { "$ref": "#/components/schemas/core.ChannelDirection", "description": "The way data flows over the channel: `IN` (the partner sends to the platform), `OUT` (the platform sends to the partner) or `IN_AND_OUT`. Left out or `null` on create it defaults to `IN`; it cannot be set to `null` afterwards. JMS, AMQP 0-9-1, AMQP 1.0, Google Pub/Sub, cloud storage and SMB channels are always `IN_AND_OUT`: that is their default, any other value is refused, and a patch sending `null` there changes nothing. A legacy channel of these types stored with neither flag set reads `IN_AND_OUT` and has both flags set by its next write. Any other channel stored before this member existed, with no direction, reads back without it until one is written.", "title": "ChannelDirection" }, "groupName": { "type": "string", "default": "DEFAULT", "description": "Authentication realm of the partner's login: a login on the platform's HTTP server only finds this channel when the realm of the protected area being called matches." }, "id": { "type": "integer", "format": "int64", "description": "Numeric id of the channel, assigned by the server on create; on the channel resource a value sent in the body is ignored. Profiles reference a channel by this id, looked up with `GET /platform/api/partners/preview/{partnerId}/channels`.", "examples": [ 1042 ] }, "internalUsageOnly": { "type": "boolean", "default": false, "description": "Whether the channel stays on the platform's own server and is not synchronized to a DMZ server (the editor's \"Invisible to DMZ\" switch). `null` or left out keeps the stored value; a new channel is visible to the DMZ, except a new SMB channel, which is stored invisible unless it sends `false`. A new JMS, AMQP 0-9-1, AMQP 1.0, Google Pub/Sub and cloud storage channel is stored invisible to the DMZ, as the editor does; there the member reads absent, a value sent is ignored and a stored channel keeps its flag." }, "localCertificateId": { "type": "string", "description": "Id of one of the platform's own certificates (with private key) that this channel uses. Must reference an existing certificate.", "examples": [ "42" ], "pattern": "^\\d+$" }, "localId": { "type": "string", "description": "User name the platform authenticates with at the partner's HTTP server; its password is not settable through this API. `null` or left out keeps the stored value.", "examples": [ "lobster-edi" ] }, "name": { "type": "string", "description": "Display name of the channel. Must be unique among the partner's channels of the same type.", "maxLength": 100, "minLength": 1 }, "openIdSettings": { "$ref": "#/components/schemas/core.OpenIdSettings", "description": "How the platform validates a bearer-token (JWT) login of the partner on its HTTP server: issuer, audience and the certificate or key endpoint the signature is checked against. Read back only when the stored settings are readable on this installation; otherwise `null`, and a write of `null` keeps them. `null` or left out keeps the stored settings; `{}` (every member empty) removes them. Writing settings drops the channel's OAuth2 tokens, as the editor does (the two are exclusive). While the channel issues JWT tokens itself, the settings hold its signing certificate: a change must keep a stored `certificateId` with a private key, must not set `certificateDynamicFetch`, and cannot remove the settings.", "title": "OpenIdSettings" }, "partner": { "$ref": "#/components/schemas/core.IntegrationPartner", "description": "The partner that owns the channel, embedded on read. Set by the server from the `{partnerId}` in the request path; a value sent here is ignored, and a channel cannot move to another partner.", "readOnly": true, "title": "IntegrationPartner" }, "policy": { "type": "string", "description": "Name of the rate-limit policy applied to requests the partner sends through this HTTP channel. `Global` is built in. `null` or left out keeps the stored value; a blank string clears it.", "examples": [ "Global" ] }, "remoteCertificateId": { "type": "string", "description": "Id of the partner's certificate (public key) in the certificate store that this channel uses, the counterpart of `localCertificateId`. Must reference an existing certificate.", "examples": [ "43" ], "pattern": "^\\d+$" }, "remoteId": { "type": "string", "description": "User name the partner logs in with on the platform's HTTP server (HTTP authentication); its password is not settable through this API. Must be unique among all HTTP channels. Left out, the server fills an `AUTO_CREATE_...` placeholder that nobody can log in with.", "examples": [ "acme-http-user" ] }, "url": { "type": "string", "description": "Base URL of the partner's server. An HTTP response unit that names this channel takes the host (and the port, if the unit sets none) from it when its own host is empty or ``, and replaces `` in its URL with this URL's path; an HTTP cron job replaces `` with the whole URL.", "examples": [ "https://api.acme.example/orders" ], "pattern": "^https?://.+" }, "userRoles": { "type": "array", "description": "Role names the partner holds after logging in with this channel; which role a protected HTTP area requires is part of the platform's HTTP server configuration, not of the channel. Stored as given.", "items": { "type": "string" } } }, "required": [ "name" ], "title": "IntegrationPartnerChannelHTTP" }, "core.HttpClientSettings": { "type": "object", "description": "Address, method and headers of an outgoing HTTP(S) request. Used as `httpSettings` of a `core.HttpProfileResponseUnit` (phase 6, sends the result out) and of a `core.CronHttpAgentSettings` (phase 1, pulls data on a schedule). Set at least `httpMethod`, `host` and `uri`, with the query string in `query`, never in `uri`; a time-driven agent stores the members as one URL (`https://host:port/uri?query`) and splits it again on read.", "properties": { "class": { "type": "string", "const": "core.HttpClientSettings", "description": "The type of this object, always `core.HttpClientSettings`. Required where the member it is sent in accepts several types." }, "headers": { "type": "object", "additionalProperties": true, "description": "map Entries whose key matches one of authorization, proxy-authorization, cookie, set-cookie, *password*, *passwd*, *pwd*, *passphrase*, *secret*, *credential*, *token*, *apikey*, *api.key*, *api-key* hold a secret: a read returns those encrypted, and a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else. Every other entry is unaffected." }, "host": { "type": "string", "description": "Host name or IP address of the server, without scheme, port or path. In a response unit `@name@` placeholders (a target field or variable) are resolved at run time, and an empty host (or ``) is taken from the unit's `channel`.", "examples": [ "api.example.com" ] }, "httpMethod": { "$ref": "#/components/schemas/core.HttpMethod", "description": "HTTP method of the request. Left out, a response unit uses `POST` and a time-driven agent `GET`. A header named `method` in `headers` overrides it at run time. SOAP and multipart requests need a method with a body (`POST`, `PUT`, `PATCH`, `GETWITHCONTENT`, `DELETEWITHCONTENT`): a response unit fails with any other, a time-driven agent switches to `POST`.", "title": "HttpMethod" }, "port": { "type": "string", "description": "Port as text, so it can hold a placeholder such as `@VAR_PORT@`. Empty uses 443 with `sslEnabled`, else 80; a response unit with a `channel` takes the channel's port first. In a response unit a value that does not resolve to a number fails the unit at run time.", "examples": [ "8443" ] }, "query": { "type": "string", "description": "Query string without the leading `?`. In a response unit it is the URL query of a `GET`, `HEAD` or `DELETE`. With a body method it becomes the request body when the unit sends no content (`contentType` `core.ResponseContentType_NONE`) or when it contains `` (replaced by the URL-encoded output data); otherwise it is the URL query and the content is the body. `@name@` placeholders are URL-encoded unless `noUrlEncoding` or `multiPart` is set. A time-driven agent appends it to the URL after `?`.", "examples": [ "id=@orderId@&lang=en" ] }, "sslEnabled": { "type": "boolean", "description": "`true` (default) sends the request over HTTPS, `false` over plain HTTP. Also decides the port used when `port` is empty: 443 or 80." }, "uri": { "type": "string", "description": "Path of the request; a missing leading `/` is added. In a response unit anything after `?` is dropped (use `query`), `@name@` placeholders are URL-encoded unless `noUrlEncoding` is set, `` is replaced by the URL-encoded output data, and `` by the path of the `channel`'s address.", "examples": [ "/v1/orders/@orderId@" ] } }, "title": "HttpClientSettings" }, "core.CronHttpMultiPart": { "type": "object", "description": "One part of the `multipart/form-data` body a cron HTTP agent sends; one element of `multiParts`. As soon as one part is set, the request is sent as multipart (as POST unless PUT or PATCH is chosen) instead of `soapData`; parts are dropped for a SOAP request (`webServiceRequest`). A text part needs `key`, `data` and `mimeType`; a file part (`file: true`) also `fileName`.", "properties": { "class": { "type": "string", "const": "core.CronHttpMultiPart", "description": "The type of this object, always `core.CronHttpMultiPart`. Required where the member it is sent in accepts several types." }, "data": { "type": "string", "description": "Content of the part. For a text part the value itself; for a file part either `file:` plus the path of a file on the Lobster server whose content is sent (the profile's client must be allowed to read it), or the literal file content. Placeholders are resolved on each run; empty after resolving fails the run.", "examples": [ "file:/data/out/report.pdf" ] }, "encoding": { "type": "string", "description": "Character encoding of a text part or of literal file content; empty means `UTF-8`.", "examples": [ "UTF-8" ] }, "file": { "type": "boolean", "default": false, "description": "`true` sends the part as a file (with `fileName`), `false` as a plain form field." }, "fileName": { "type": "string", "description": "File name sent for a file part; placeholders are resolved. For a `file:` part an empty name takes the file's own name. Not used for text parts. Send it for every file part: a missing one fails the run.", "examples": [ "report.pdf" ] }, "key": { "type": "string", "description": "Form field name of the part. Placeholders (`%NAME%`, `@NAME@`, date masks) are resolved on each run; a name that resolves to empty fails the run.", "examples": [ "file" ] }, "mimeType": { "type": "string", "description": "Content type of the part; for a `file:` part an empty value means `application/octet-stream`. Send it for every part: a missing one fails the run.", "examples": [ "application/pdf" ] } }, "title": "CronHttpMultiPart" }, "core.IoTAgentType": { "type": "string", "description": "What an IoT agent does: call an OPC function or subscribe to data: `agentType` of the agent.\n\n- `OPC_Function`: The profile becomes a callable method (server model) on the platform's OPC UA server; uses `channelIds` and `sendGenericOKResponse`.\n- `Data_Subscriber`: The platform subscribes (subscription model) to an external OPC UA server; uses `subscriptionAlias`, `subscriptionType`, `subscriptionInterval`, `subscriptionIDs`, `subscriptionReadValueEntries`, `notifyInitial` and `ignoreErrorStatus`.", "enum": [ "OPC_Function", "Data_Subscriber" ], "title": "IoTAgentType" }, "core.IoTReadValueEntry": { "type": "object", "description": "One node of the tree in `subscriptionReadValueEntries` of an IoT subscription agent: an OPC UA node read on every notification and the XML element its value is written to in the job's input, with nested `children` as child elements.", "properties": { "class": { "type": "string", "const": "core.IoTReadValueEntry", "description": "The type of this object, always `core.IoTReadValueEntry`. Required where the member it is sent in accepts several types." }, "children": { "type": "array", "description": "Nested entries, written as child elements of this entry's element.", "items": { "$ref": "#/components/schemas/core.IoTReadValueEntry" } }, "name": { "type": "string", "description": "Display name of the node; not written into the job's data." }, "nodeId": { "type": "string", "description": "OPC UA node id to read. Without it the entry only produces a grouping element for its `children`.", "examples": [ "ns=2;s=Machine1.Speed" ] }, "outputIdentifier": { "type": "string", "default": "ReadValue", "description": "Name of the XML element the node's value is written to; the element also carries the attributes `nodeid`, `valdate`, `statuscode` and `statustext`.", "examples": [ "Speed" ] } }, "title": "IoTReadValueEntry" }, "core.IoTSubscriptionType": { "type": "string", "description": "How an IoT agent's data subscription reports values: `subscriptionType` of the agent.\n\n- `Direct`: Starts a job every `subscriptionInterval`, carrying only the `subscriptionReadValueEntries`, which must not be empty.\n- `DataChange`: Starts a job whenever a value of `subscriptionIDs` changes; the job then also carries the changed values under `NotificationValues`, plus the `subscriptionReadValueEntries`.", "enum": [ "Direct", "DataChange" ], "title": "IoTSubscriptionType" }, "core.ZipEncryptionType": { "type": "string", "description": "The password protection of a `ZIP`/`SEVEN_ZIP` archive.\n\n- `NONE`: No password.\n- `PASSWORD`: Password-protected; the password itself is not part of this API.\n- `AES_128`: AES-128 password protection.\n- `AES_256`: AES-256 password protection.", "enum": [ "NONE", "PASSWORD", "AES_128", "AES_256" ], "title": "ZipEncryptionType" }, "core.CompressionType": { "type": "string", "description": "The archive format data is compressed into. Password protection applies only to `ZIP` and `SEVEN_ZIP`.\n\n- `ZIP`: ZIP.\n- `TAR`: TAR.\n- `TGZ`: TAR.GZ.\n- `JAR`: JAR.\n- `BZ2`: BZ2.\n- `TAR_BZ2`: TAR.BZ2.\n- `SEVEN_ZIP`: 7z.\n- `GZIP`: GZIP.\n- `Z`: Z.", "enum": [ "ZIP", "TAR", "TGZ", "JAR", "BZ2", "TAR_BZ2", "SEVEN_ZIP", "GZIP", "Z" ], "title": "CompressionType" }, "core.GenericIntegrationUnit": { "type": "object", "description": "An integration unit installed on the instance that this API has no dedicated type for (anything other than `core.JsonCreationIU`, `core.XMLCreationIU` or `core.EdifactCreationIU`), held in `integrationSettings.unit`. `className` names the unit's Java class and must be one installed on this instance; never `core.NoActionUnit` - leave `integrationSettings.unit` out instead to run no unit. Writing the same `className` as the stored unit keeps every stored parameter the caller did not mention; writing a different one starts from that class's own defaults, and a parameter sent with an explicit `null` value is removed, which also falls back to the class's default at run time.", "properties": { "class": { "type": "string", "const": "core.GenericIntegrationUnit", "description": "The type of this object, always `core.GenericIntegrationUnit`. Required where the member it is sent in accepts several types." }, "className": { "type": "string", "description": "Fully qualified Java class name of the integration unit. Must be one of the classes installed on this instance, and not `com.ebd.hub.datawizard.iu.NoActionUnit`. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=INTEGRATION_UNIT`.", "examples": [ "com.ebd.hub.datawizard.iu.PDFFormFiller" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=INTEGRATION_UNIT" }, "params": { "type": "object", "additionalProperties": true, "description": "The unit's free-form configuration, parameter name to string value; a unit created without it reads back with every one at its default. A key must be one the class declares. Omitting a key keeps the value already stored for it (or the class's own default, for a unit that is new or whose `className` just changed). Sending a key with an explicit `null` value removes it, and the unit then runs with it unset, which is not necessarily its default. A parameter whose name marks it as a credential (e.g. `Excel password to open file`) is a secret: a read returns it encrypted, a write accepts that encrypted value unchanged or the cleartext as `\"PLAIN:\"`. Entries whose key matches one of authorization, proxy-authorization, cookie, set-cookie, *password*, *passwd*, *pwd*, *passphrase*, *secret*, *credential*, *token*, *apikey*, *api.key*, *api-key* hold a secret: a read returns those encrypted, and a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else. Every other entry is unaffected." } }, "title": "GenericIntegrationUnit" }, "core.EdifactCreationIU": { "type": "object", "description": "Serialises the target structure as an EDIFACT interchange (phase 5, `integrationSettings.unit`). The target structure must follow the EDIFACT message layout (segments and segment groups). `autoCreateEmptyMandatorySegments` has its own member; every other option (delimiters `:+.? '`, a UNA segment, umlauts replaced) is read and written through `params`, keeping whatever is already stored for a key `params` does not mention.", "properties": { "class": { "type": "string", "const": "core.EdifactCreationIU", "description": "The type of this object, always `core.EdifactCreationIU`. Required where the member it is sent in accepts several types." }, "autoCreateEmptyMandatorySegments": { "type": "boolean", "description": "Whether a mandatory EDIFACT segment or element with no mapped value is written empty rather than left out. Writing it empty produces an interchange the receiver's own mapper typically cannot handle (e.g. an empty segment group, a wrong `UNT` count); the underlying unit's own default is `true`, but a new unit defaults to `false` here instead. Left out on an already stored unit, the stored value survives; a stored unit that never set it reads back `false`, as it runs." }, "params": { "type": "object", "additionalProperties": true, "description": "The unit's remaining settings, key to string value, e.g. `{\"Delimiters\": \":+.? '\"}`. Keys: `Add UNA-segment to result`, `Add value to segment counter`, `Cut line after 80 chars`, `Delimiters`, `Length to cut line`, `One EDI-document per record`, `Replace umlauts`, `Replace umlauts with checking case`, `Return EDIFACT in uppercase completely`, `Trim type (both,left,right)`, `Trim values`, `Write message in one line`. A key left out keeps its stored value (or its default, on a unit that is new or whose class just changed); a key sent as `null` is removed, and the unit then runs with it unset, which is not necessarily its default. Entries whose key matches one of authorization, proxy-authorization, cookie, set-cookie, *password*, *passwd*, *pwd*, *passphrase*, *secret*, *credential*, *token*, *apikey*, *api.key*, *api-key* hold a secret: a read returns those encrypted, and a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else. Every other entry is unaffected." } }, "title": "EdifactCreationIU" }, "core.XMLCreationIU": { "type": "object", "description": "Serialises the target structure as an XML document (phase 5, `integrationSettings.unit`). Field name suffixes shape the output: a field `x_attr` becomes attribute `x` of its parent element, a field `_val` the element's own text. `rootName` has its own member; every other option (UTF-8, XML declaration, empty fields left out) is read and written through `params`, keeping whatever the stored unit or the UI set for a key `params` does not mention.", "properties": { "class": { "type": "string", "const": "core.XMLCreationIU", "description": "The type of this object, always `core.XMLCreationIU`. Required where the member it is sent in accepts several types." }, "params": { "type": "object", "additionalProperties": true, "description": "This unit's remaining configuration (everything but `rootName`), parameter name to string value, e.g. `{\"Without XML-Header\": \"true\"}` (the class is `com.ebd.hub.datawizard.iu.XMLNoTemplateUnit`); a unit created without it reads back with every one at its default. A key must be one this class declares. Omitting a key keeps the value already stored for it (or the class's own default, for a unit that is new or whose class just changed). Sending a key with an explicit `null` value removes it, and the unit then runs with it unset, which is not necessarily its default. Entries whose key matches one of authorization, proxy-authorization, cookie, set-cookie, *password*, *passwd*, *pwd*, *passphrase*, *secret*, *credential*, *token*, *apikey*, *api.key*, *api-key* hold a secret: a read returns those encrypted, and a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else. Every other entry is unaffected." }, "rootName": { "type": "string", "description": "Name of the target node that becomes the root element of the document; everything below it is written. Always set it: changing it must name a node of the target structure; a legally stored value survives an edit that does not touch it, even where it no longer resolves at run time.", "examples": [ "Invoice" ] } }, "title": "XMLCreationIU" }, "core.JsonCreationIU": { "type": "object", "description": "Serialises the target structure as JSON (phase 5, `integrationSettings.unit`). A target node with `maximum` 1 becomes an object, one with a higher `maximum` an array; empty fields and nodes are left out. `startAtNode` has its own member; every other option (type-safe values, pretty print) is read and written through `params`, keeping whatever the stored unit or the UI set for a key `params` does not mention.", "properties": { "class": { "type": "string", "const": "core.JsonCreationIU", "description": "The type of this object, always `core.JsonCreationIU`. Required where the member it is sent in accepts several types." }, "params": { "type": "object", "additionalProperties": true, "description": "This unit's remaining configuration (everything but `startAtNode`), parameter name to string value, e.g. `{\"Pretty print\": \"true\"}` (the class is `com.ebd.hub.datawizard.iu.ExtendedJsonCreationUnit`); a unit created without it reads back with every one at its default. A key must be one this class declares. Omitting a key keeps the value already stored for it (or the class's own default, for a unit that is new or whose class just changed). Sending a key with an explicit `null` value removes it, and the unit then runs with it unset, which is not necessarily its default: an unset `Write values type safe` is `false`, its default `true`. Entries whose key matches one of authorization, proxy-authorization, cookie, set-cookie, *password*, *passwd*, *pwd*, *passphrase*, *secret*, *credential*, *token*, *apikey*, *api.key*, *api-key* hold a secret: a read returns those encrypted, and a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else. Every other entry is unaffected." }, "startAtNode": { "type": "string", "description": "Name of the target node the JSON starts at; the output is wrapped in that node's name (`lines` gives `{\"lines\": [...]}`). Empty or `root` writes the whole target structure, wrapped in the top node's name (`{\"PurchaseOrder\": {...}}`); give the start node `xmlJsonMode` `TRANSPARENT` to drop the wrapper. Changing it must name a node of the target structure; a legally stored value survives an edit that does not touch it, even where it no longer resolves at run time.", "examples": [ "lines" ] } }, "title": "JsonCreationIU" }, "core.NamespaceDefinition": { "type": "object", "description": "One XML namespace declared for a structure: `prefix` names it in `core.DestinationNode.xmlNameSpace` (`prefix=uri` or a bare `prefix`) and in an XML input's node/field names.", "properties": { "class": { "type": "string", "const": "core.NamespaceDefinition", "description": "The type of this object, always `core.NamespaceDefinition`. Required where the member it is sent in accepts several types." }, "prefix": { "type": "string", "description": "The namespace prefix; unique within the list, a second entry with the same prefix overwrites the first.", "examples": [ "ord" ], "minLength": 1 }, "uri": { "type": "string", "description": "The namespace URI the prefix stands for.", "examples": [ "urn:example:order" ], "minLength": 1 } }, "required": [ "prefix", "uri" ], "title": "NamespaceDefinition" }, "core.DataStructureItem": { "type": "object", "description": "One item of a source or target tree: a node (`core.SourceNode`, `core.DestinationNode`), which holds `children`, or a field (`core.SourceField`, `core.DestinationField`), which holds a value. Items are matched and linked by `name`, so keep names unique within a tree.\n\nSend one of these types, named in `class`:\n- `core.DestinationField`: A field of the target structure: a leaf in the `children` of a `core.DestinationNode`.\n- `core.DestinationNode`: A node of the target structure: groups target fields and child nodes, and becomes an object or array (JSON) or an element (XML) in the output.\n- `core.SourceField`: A field of the source structure: one value of the input, a leaf in the `children` of a `core.SourceNode`.\n- `core.SourceNode`: A node of the source structure: a group of input fields and child nodes that the parser fills from the input.", "discriminator": { "propertyName": "class" }, "oneOf": [ { "$ref": "#/components/schemas/core.DestinationField", "title": "DestinationField" }, { "$ref": "#/components/schemas/core.DestinationNode", "title": "DestinationNode" }, { "$ref": "#/components/schemas/core.SourceField", "title": "SourceField" }, { "$ref": "#/components/schemas/core.SourceNode", "title": "SourceNode" }, { "$ref": "#/components/schemas/core.Node", "title": "Node" }, { "$ref": "#/components/schemas/core.AbstractField", "title": "Field" } ], "title": "DataStructureItem" }, "core.JSONFileMetadata": { "type": "object", "description": "How a JSON input is read, sent as `parsing.formatSettings` together with `parsing.documentType: JSON`. Object keys match source nodes and fields by name; an array of objects is a repeating node.", "properties": { "class": { "type": "string", "const": "core.JSONFileMetadata", "description": "The type of this object, always `core.JSONFileMetadata`. Required where the member it is sent in accepts several types." }, "floatsAsBigDecimal": { "type": "boolean", "default": false, "description": "Whether a floating-point source value is mapped as a `BigDecimal` rather than a `Double`, avoiding floating-point rounding." }, "forceSingleRecord": { "type": "boolean", "default": false, "description": "Whether the job's whole input is read as a single record rather than one job run per record." }, "jsonLines": { "type": "boolean", "default": false, "description": "Whether the input is JSON Lines (one JSON document per line) rather than a single JSON document." } }, "title": "JSONFileMetadata" }, "core.CSVFileMetadata": { "type": "object", "description": "How a CSV input is read, sent as `parsing.formatSettings` together with `parsing.documentType: CSV`, e.g. `{\"class\": \"core.CSVFileMetadata\", \"delimiter\": \";\"}`; send it on every CSV profile, since without it the stored delimiter stays (on a new profile: new line, so no line is split into columns). Every line of the file is a record, and the columns are the fields of one repeating source node, in column order (leave `columnRowDelimiter` unset on that node). Skip header lines with `startRow` (`2` skips one line).", "properties": { "class": { "type": "string", "const": "core.CSVFileMetadata", "description": "The type of this object, always `core.CSVFileMetadata`. Required where the member it is sent in accepts several types." }, "delimiter": { "type": "string", "description": "For a plain CSV file (top-level source nodes without `matchCodes`): the character that separates the columns of each line: `NL`, `TAB` or `CR` for those characters, `0x` and a hex code for any character, otherwise the first character of the value; empty means `,`. In a record-type file, where every top-level source node has `matchCodes`, it separates the records instead and each node's `columnRowDelimiter` splits the columns.", "examples": [ ";" ] }, "endRow": { "type": "integer", "format": "int32", "description": "The last line read, counted from one. Default unset (every line).", "minimum": 1 }, "excelConform": { "type": "boolean", "default": false, "description": "Whether the file is read by the Excel CSV convention (e.g. its quoting rules) rather than the plain one. Needed to unescape a doubled `quote` character inside a quoted value (see `quote`); without it, such a value is truncated." }, "forceSingleRecord": { "type": "boolean", "default": false, "description": "Whether the job's whole input is read as a single record rather than one job run per record." }, "lineIsRecord": { "type": "boolean", "default": true, "description": "Whether each line of the file is one record (`true`) or each column position across the whole file is (`false`)." }, "nestedRecordTypes": { "type": "boolean", "default": false, "description": "Whether every top-level source node shares the same `matchCodes` positions, the way an EDI file's record types do." }, "quote": { "type": "string", "default": "\"", "description": "The character values are quoted with, so a delimiter or line break inside a quoted value is not split on; only the first character counts, and empty means `\"`. A doubled quote inside a quoted value (`\"O\"\"Brien\"`) is only unescaped to a literal quote (`O\"Brien`) when `excelConform` is `true`; otherwise it truncates the value at the first doubled quote (`O`)." }, "skipLinesAfterRecordSet": { "type": "integer", "format": "int32", "default": 0, "description": "How many lines to skip between one record set and the next.", "minimum": 0 }, "startColumn": { "type": "integer", "format": "int32", "default": 1, "description": "The first column read, counted from one.", "minimum": 1 }, "startRow": { "type": "integer", "format": "int32", "default": 1, "description": "The first line read, counted from one.", "minimum": 1 } }, "title": "CSVFileMetadata" }, "core.ParquetFileMetadata": { "type": "object", "description": "Sent as `parsing.formatSettings` together with `parsing.documentType: PARQUET`. A profile newly created (or changed to `PARQUET`) with no `inputHandling.encoding` sent defaults to `UTF-8`, since Parquet values are decoded by DuckDB rather than by the profile's own encoding.", "properties": { "class": { "type": "string", "const": "core.ParquetFileMetadata", "description": "The type of this object, always `core.ParquetFileMetadata`. Required where the member it is sent in accepts several types." }, "recordTag": { "type": "string", "description": "The source-tree node every row is read into; blank reads the rows into `root`.", "examples": [ "Order" ] } }, "title": "ParquetFileMetadata" }, "core.XMLFileMetadata": { "type": "object", "description": "How an XML input is read, sent as `parsing.formatSettings` together with `parsing.documentType: XML`. `recordTag` is required once the profile has a source structure: without one the job fails to find a record. Left out, it defaults to the source structure's top-level node. The `splitting.input.xml` members only apply while `parserVersion` is `V4`; switching to `V4` needs the `XML_V4` licence, and they must be left unchanged for another version.", "properties": { "class": { "type": "string", "const": "core.XMLFileMetadata", "description": "The type of this object, always `core.XMLFileMetadata`. Required where the member it is sent in accepts several types." }, "ignoreNamespace": { "type": "boolean", "default": false, "description": "Whether the parser ignores XML namespaces when matching tags to the structure." }, "parserVersion": { "$ref": "#/components/schemas/core.XmlParserVersion", "default": "V3", "description": "The parser generation.", "title": "XmlParserVersion" }, "recordTag": { "type": "string", "description": "The XML tag every record starts at. Not needed while the profile has no source structure yet, so an XML profile can be created first and given its structure later; activating it still needs one. Left out on a write that sets `parsing.documentType` to `XML` or gives the profile its first source structure, it defaults to the element name of the structure's single top-level node (the document's root element, from its first match code). Once there is a source structure, must not be blank: sent blank, cleared, or left out with no single top-level source node.", "examples": [ "Order" ] }, "trimValues": { "type": "boolean", "default": false, "description": "Whether leading/trailing whitespace is removed from a source field's value." } }, "title": "XMLFileMetadata" }, "core.CargoFileMetadata": { "type": "object", "description": "Sent as `parsing.formatSettings` together with `parsing.documentType: CARGO`; the job fails unless the instance is licensed for Cargo-IMP.", "properties": { "class": { "type": "string", "const": "core.CargoFileMetadata", "description": "The type of this object, always `core.CargoFileMetadata`. Required where the member it is sent in accepts several types." } }, "title": "CargoFileMetadata" }, "core.EDIFileMetadata": { "type": "object", "description": "How an EDIFACT message is read, sent as `parsing.formatSettings` together with `parsing.documentType: EDI`; the source structure is the message's segment tree in `mappingSettings.sourceStructure`. Setting `tradacoms: true` switches to Tradacoms and switches `useEnvelopeCharset`, the EDIFACT checks of `inputValidation.edifact` and `errorHandling.edifactContrl.enabled` off; none of them may be switched on while `tradacoms` is `true`.", "properties": { "class": { "type": "string", "const": "core.EDIFileMetadata", "description": "The type of this object, always `core.EDIFileMetadata`. Required where the member it is sent in accepts several types." }, "tradacoms": { "type": "boolean", "default": false, "description": "Whether the message is Tradacoms rather than plain EDIFACT; `true` forces `useEnvelopeCharset`, the EDIFACT checks of `inputValidation.edifact` and `errorHandling.edifactContrl.enabled` off." }, "useEnvelopeCharset": { "type": "boolean", "default": false, "description": "Whether the UNOA/UNOB character set the envelope declares is used for reading. Forced `false` while `tradacoms` is `true`." } }, "title": "EDIFileMetadata" }, "core.X12FileMetadata": { "type": "object", "description": "How an ANSI X12 message is read, sent as `parsing.formatSettings` together with `parsing.documentType: X12`.", "properties": { "class": { "type": "string", "const": "core.X12FileMetadata", "description": "The type of this object, always `core.X12FileMetadata`. Required where the member it is sent in accepts several types." } }, "title": "X12FileMetadata" }, "core.ExcelFileMetadata": { "type": "object", "description": "How an Excel workbook (`.xls`/`.xlsx`) is read, sent as `parsing.formatSettings` together with `parsing.documentType: EXCEL`. Which sheet(s) are read is chosen with `sheetSelection`.", "properties": { "class": { "type": "string", "const": "core.ExcelFileMetadata", "description": "The type of this object, always `core.ExcelFileMetadata`. Required where the member it is sent in accepts several types." }, "applyForAllSheets": { "type": "boolean", "default": false, "description": "Whether `startRow`/hidden-row skipping applies to every sheet rather than only the first." }, "calculateFormulas": { "type": "boolean", "default": true, "description": "Whether formulas are calculated (rather than reading their last cached value)." }, "endRow": { "type": "integer", "format": "int32", "description": "The last line read, counted from one. Default unset (every line).", "minimum": 1 }, "forceSingleRecord": { "type": "boolean", "default": false, "description": "Whether the job's whole input is read as a single record rather than one job run per record." }, "lineIsRecord": { "type": "boolean", "default": true, "description": "Whether each line of the sheet is one record (`true`) or each column position is (`false`)." }, "nestedRecordTypes": { "type": "boolean", "default": false, "description": "Whether every top-level source node shares the same `matchCodes` positions, the way an EDI file's record types do." }, "passwordConfigured": { "type": "boolean", "description": "Whether a workbook password is stored. The password itself is never read or written through this API.", "readOnly": true }, "sheetIndex": { "type": "integer", "format": "int32", "default": 1, "description": "With `sheetSelection: FIXED_INDEX`: the 1-based index of the sheet read.", "minimum": 1 }, "sheetSelection": { "$ref": "#/components/schemas/core.ExcelSheetSelection", "default": "FIXED_INDEX", "description": "Which sheet(s) are read. `DEFINED` requires `sheets`; the others ignore it.", "title": "ExcelSheetSelection" }, "sheets": { "type": "array", "description": "With `sheetSelection: DEFINED`: the sheet names, 1-based indexes or `%VAR_...%` variables read; required in that case. A name containing a comma cannot be listed, except as a single `regex:` definition.", "items": { "type": "string" } }, "skipHiddenColumns": { "type": "boolean", "default": false, "description": "Whether a hidden column is skipped." }, "skipHiddenRows": { "type": "boolean", "default": false, "description": "Whether a hidden row is skipped." }, "skipLinesAfterRecordSet": { "type": "integer", "format": "int32", "default": 0, "description": "How many lines to skip between one record set and the next.", "minimum": 0 }, "startColumn": { "type": "integer", "format": "int32", "default": 1, "description": "The first column read, counted from one.", "minimum": 1 }, "startRow": { "type": "integer", "format": "int32", "default": 1, "description": "The first line read, counted from one.", "minimum": 1 }, "writeSheetIndex": { "$ref": "#/components/schemas/core.ExcelWriteIndex", "default": "NONE", "description": "Whether, and how, a column naming the sheet a row came from is added to it.", "title": "ExcelWriteIndex" } }, "title": "ExcelFileMetadata" }, "core.BWAFileMetadata": { "type": "object", "description": "How a BWA message is read, sent as `parsing.formatSettings` together with `parsing.documentType: BWA`.", "properties": { "class": { "type": "string", "const": "core.BWAFileMetadata", "description": "The type of this object, always `core.BWAFileMetadata`. Required where the member it is sent in accepts several types." }, "maxRows": { "type": "integer", "format": "int32", "default": 0, "description": "The maximum number of rows read, or `0` for no limit.", "minimum": 0 } }, "title": "BWAFileMetadata" }, "core.SAPFileMetadata": { "type": "object", "description": "How an SAP IDoc is read, sent as `parsing.formatSettings` together with `parsing.documentType: SAP_ALE`.", "properties": { "class": { "type": "string", "const": "core.SAPFileMetadata", "description": "The type of this object, always `core.SAPFileMetadata`. Required where the member it is sent in accepts several types." }, "forceSingleRecord": { "type": "boolean", "default": false, "description": "`true` reads the whole input into one record instead of starting a new record at each occurrence of the first top-level node, so several IDocs in one input become one record." } }, "title": "SAPFileMetadata" }, "core.FIXFileMetadata": { "type": "object", "description": "How a fixed-length input is read, sent as `parsing.formatSettings` together with `parsing.documentType: FIX`. Every source field needs its `length` (set on the field itself, not here). A profile newly created (or changed to `FIX`) with `lineBreak` left out defaults to `NEW_LINE`.", "properties": { "class": { "type": "string", "const": "core.FIXFileMetadata", "description": "The type of this object, always `core.FIXFileMetadata`. Required where the member it is sent in accepts several types." }, "forceSingleRecord": { "type": "boolean", "default": false, "description": "Whether the job's whole input is read as a single record rather than one job run per record." }, "lineBreak": { "$ref": "#/components/schemas/core.FixLineBreak", "description": "Whether the input splits on line breaks (`NEW_LINE`, one record per line) or is read as a single continuous record (`NONE`). Left out on a create or on a write that changes `parsing.documentType` to `FIX`, defaults to `NEW_LINE`; otherwise the stored value is kept.", "title": "FixLineBreak" }, "nestedRecordTypes": { "type": "boolean", "default": false, "description": "Whether every top-level source node shares the same `matchCodes` positions, the way an EDI file's record types do." }, "skipChars": { "type": "integer", "format": "int32", "default": 0, "description": "How many leading characters of each record to skip before the fields start, or `-1` for none.", "minimum": -1 }, "startRow": { "type": "integer", "format": "int32", "default": 1, "description": "The first line read, counted from one.", "minimum": 1 } }, "title": "FIXFileMetadata" }, "core.DBFileMetadata": { "type": "object", "description": "How rows read from a database are parsed, sent as `parsing.formatSettings` together with `parsing.documentType: DB`.", "properties": { "class": { "type": "string", "const": "core.DBFileMetadata", "description": "The type of this object, always `core.DBFileMetadata`. Required where the member it is sent in accepts several types." }, "delimiter": { "type": "string", "description": "How the columns of each database row are separated: `,` or `NL` (one column per line). The database rows are always written with commas. Activating the profile sets this to `,`, or to `NL` if the source tree is a token file or has only nodes at its top level. Other values are refused, unless this `DB` profile already has that value saved. A copy of such a profile must send `,` or `NL`. If you leave it out when you create a profile or change it to `DB`, `,` is saved.", "examples": [ "," ] }, "forceSingleRecord": { "type": "boolean", "default": false, "description": "Whether the job's whole input is read as a single record rather than one job run per record." } }, "title": "DBFileMetadata" }, "core.MessageProfileResponseUnit": { "type": "object", "description": "Hands the result to another profile through the internal Lobster message service: the message is put on `context`/`queue` and processed by the profile named in `targetProfile`, which must have a Message input agent (`core.MessageAgentSettings`). With `contentType` `core.ResponseContentType_TRIGGER` it instead starts the time-driven profile `targetProfile` without data. Needs no partner channel. Other than a trigger, an empty result sends nothing and counts as success.", "properties": { "class": { "type": "string", "const": "core.MessageProfileResponseUnit", "description": "The type of this object, always `core.MessageProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "alwaysQuote": { "type": "boolean", "default": false, "description": "`true` quotes every value of the CSV output; only used when `contentType` is `core.ResponseContentType_CSV`." }, "appendLogs": { "type": "boolean", "default": false, "description": "Only for `SYNCHRON`: `true` copies the target profile's job log lines into this job's log." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "context": { "type": "string", "description": "Message context the message is put into: the `context` of the target profile's Message input agent, or `System` (with `queue` `DWForwardReceiver`), which the platform always consumes. `@name@` placeholders are resolved." }, "csvDelim": { "type": "string", "default": ",", "description": "Field delimiter of the CSV output when `contentType` is `core.ResponseContentType_CSV`; ignored for other content types." }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "fileReference": { "type": "boolean", "default": false, "description": "`true` passes the content to the receiving profile as a reference to a file written on the server instead of as message data. Only used when `remoteMessage` is `false`." }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "queue": { "type": "string", "description": "Queue within `context`: the `queue` of the target profile's Message input agent, or `DWForwardReceiver` with `context` `System`. `@name@` placeholders are resolved." }, "remoteMessage": { "type": "boolean", "default": false, "description": "`true` delivers the message only to consumers on other servers of a load-balanced installation, stopping at the first one, and none on this server." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "returnData": { "type": "boolean", "default": false, "description": "Only for `SYNCHRON`: `true` hands the data the target profile returns back to the caller of this profile's HTTP input agent, as if this profile had produced it." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "targetProfile": { "type": "string", "description": "Name of the profile that processes the message (a profile's id is its name: `GET /platform/api/profiles/preview`). It must have a Message input agent, or be time-driven when `contentType` is `core.ResponseContentType_TRIGGER`. Not checked on write; a missing profile fails at run time. Required for a trigger; otherwise an empty name falls back to `:`. `@name@` placeholders are resolved." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "type": { "$ref": "#/components/schemas/core.MessageDeliveryType", "default": "SYNCHRON", "description": "How the message is delivered: `SYNCHRON`, `ASYNCHRON` or `PERSISTENT`; `DIRECT` is not accepted for this unit. Left out, the stored kind is kept.", "title": "MessageDeliveryType" }, "waitTime": { "type": "integer", "format": "int64", "default": 1800, "description": "Seconds. For `SYNCHRON` how long the unit waits for the target profile's answer; for `ASYNCHRON` and `PERSISTENT` the message's lifetime, at least 12 hours. `0` or less means 18000." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "MessageProfileResponseUnit" }, "core.FaxProfileResponseUnit": { "type": "object", "description": "Sends the result as a fax through a fax partner channel. Needs `channel`; the fax service must be configured and licensed on the instance, else the unit fails at run time. The number dialled is `remoteNumber`, or the channel's partner number when that is empty; the channel's own number is the sender.", "properties": { "class": { "type": "string", "const": "core.FaxProfileResponseUnit", "description": "The type of this object, always `core.FaxProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "alwaysQuote": { "type": "boolean", "default": false, "description": "`true` quotes every field of CSV output, not only those that need it. Leaving it out keeps the stored value, `null` resets it to `false`." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "channel": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelFax", "description": "The fax partner channel to send through, as `{\"id\": }` of a `core.IntegrationPartnerChannelFax`; list them with `GET /platform/api/partners/preview/{partnerId}/channels`. Must reference an existing channel visible to this client; at run time it must also be allowed for sending, else the unit fails. A variable `VAR_SYS_CHANNEL_RESPONSE` (`` = this unit's 1-based position) holding a channel id overrides it per job. Its `direction` must be `OUT` or `IN_AND_OUT`, which is checked on write. A channel that was deleted reads as no channel; a copy references none.", "title": "IntegrationPartnerChannelFax" }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "configFile": { "type": "string", "description": "Name of the fax configuration file; leaving it out keeps the stored value, `null` resets it to the default." }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "coverPage": { "type": "string", "description": "Text of a cover page sent before the data; `@name@` placeholders (a target field or variable, also `@VAR_JOBNR@` and `@VAR_FILENAME@`) are resolved. Empty sends no cover page." }, "csvDelim": { "type": "string", "description": "Field delimiter of CSV output when `contentType` is `core.ResponseContentType_CSV`; leaving it out keeps the stored value, `null` resets it to the default." }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "dmz": { "type": "boolean", "default": false, "description": "`true` sends through the Lobster DMZ server instead of directly. Leaving it out keeps the stored value, `null` resets it to `false`." }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "fileName": { "type": "string", "description": "Optional path on the Lobster server where a copy of the fax data is saved as a backup. Placeholders: `@name@` (a target field or variable), `` (the original file name), `
` (date and time), `` (the profile's running number). Empty saves no copy." }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "remoteNumber": { "type": "string", "description": "Fax number to dial; `@name@` placeholders (a target field or variable) are resolved, so the number can come from the data. Empty dials the partner number stored on `channel`." }, "renderText": { "type": "boolean", "default": true, "description": "`true` renders the result as text on the fax instead of sending it as a file. Leaving it out keeps the stored value, `null` resets it to `true`." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "skipSending": { "type": "boolean", "default": false, "description": "`true` prepares the fax but does not send it. Leaving it out keeps the stored value, `null` resets it to `false`." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "FaxProfileResponseUnit" }, "core.As4ProfileResponseUnit": { "type": "object", "description": "Sends the result as an AS4 message through an AS4 partner channel, which holds the partner agreement, endpoint and certificates. Needs `channel`, `fileName` and `mimeType`. An empty result skips the transfer and counts as success.", "properties": { "class": { "type": "string", "const": "core.As4ProfileResponseUnit", "description": "The type of this object, always `core.As4ProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "alwaysQuote": { "type": "boolean", "default": false, "description": "`true` quotes every value of the CSV output; only used when `contentType` is `core.ResponseContentType_CSV`. Absent is stored as `false`." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "channel": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelAS4", "description": "The AS4 partner channel to send through, as `{\"id\": }` of a `core.IntegrationPartnerChannelAS4`; list them with `GET /platform/api/partners/preview/{partnerId}/channels`. Must reference an existing channel visible to this client; at run time it must also be allowed for sending, else the unit fails. A variable `VAR_SYS_CHANNEL_RESPONSE` (`` = this unit's 1-based position) holding a channel id overrides it per job. Its `direction` must be `OUT` or `IN_AND_OUT`, which is checked on write. A channel that was deleted reads as no channel; a copy references none.", "title": "IntegrationPartnerChannelAS4" }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "csvDelim": { "type": "string", "default": ",", "description": "Field delimiter of the CSV output when `contentType` is `core.ResponseContentType_CSV`: one character, `TAB`, `NL` or `CR`, or `0x` followed by two hex digits; empty runs as `,`. Ignored for other content types.", "examples": [ "0x09" ] }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "dmz": { "type": "boolean", "default": false, "description": "`true` sends through the Lobster DMZ server instead of directly. Leaving it out keeps the stored value, `null` resets it to `false`." }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "fileName": { "type": "string", "description": "File name of the payload in the AS4 message. Placeholders: `@name@` (a target field or variable), `` / `` (the original file name, without extension), `
` (date and time), `` (the profile's running number).", "examples": [ "order_
_.xml" ] }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "mimeType": { "type": "string", "description": "Media type declared for the payload; `@name@` placeholders are resolved. A `multipart/...` type is replaced by `application/octet-stream`.", "examples": [ "application/xml" ] }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "As4ProfileResponseUnit" }, "core.AmqpV2ProfileResponseUnit": { "type": "object", "description": "Publishes the result as a message to an AMQP 1.0 or AMQP 0.9.1 broker (e.g. RabbitMQ) through the connection configured under `alias`, to the queue or topic `destinationName`. With `rpc` it waits for a reply and hands it to `forwardProfile`. Needs `alias` and `destinationName`; the `amqp091...` members only apply to an AMQP 0.9.1 connection, `jmsTextMessage` only to a JMS connection. This is the editor's \"AMQP\" unit.", "properties": { "class": { "type": "string", "const": "core.AmqpV2ProfileResponseUnit", "description": "The type of this object, always `core.AmqpV2ProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "alias": { "type": "string", "description": "Name of the connection configuration (broker or endpoint) the unit sends through. Aliases are defined by an administrator on the instance and must be allowed for the profile's client. Not validated on write; a wrong one fails at run time." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "alwaysQuote": { "type": "boolean", "default": false, "description": "`true` quotes every value of the CSV output; only used when `contentType` is `core.ResponseContentType_CSV`." }, "amqp091QueueMustExist": { "type": "boolean", "default": false, "description": "AMQP 0.9.1 only: `true` fails the send when the queue (`QUEUE`) or the topic exchange (`TOPIC`) does not exist, `false` creates it." }, "amqp091RoutingKey": { "type": "string", "description": "AMQP 0.9.1 only, for a `TOPIC`: routing key the message is published to the topic exchange with; empty publishes with an empty routing key. Not allowed for a `QUEUE`, which is routed by its name. `@name@` placeholders are resolved." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressData": { "type": "boolean", "default": false, "description": "`true` packs the content into an archive (ZIP unless another format is chosen via `compressionType`) before it is sent." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "csvDelim": { "type": "string", "default": ",", "description": "Field delimiter of the CSV output when `contentType` is `core.ResponseContentType_CSV`; ignored for other content types." }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "destinationName": { "type": "string", "description": "Name of the queue or topic (see `destinationType`) the message is sent to; `@name@` placeholders are resolved.", "examples": [ "orders.in" ] }, "destinationType": { "$ref": "#/components/schemas/core.AmqpDestinationType", "default": "QUEUE", "description": "`QUEUE` or `TOPIC`: what `destinationName` names. With AMQP 0.9.1 a topic is the exchange the message is published to; the platform creates it as a topic exchange when it is missing.", "title": "AmqpDestinationType" }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "forwardMessageMaxTime": { "type": "integer", "format": "int32", "default": 30, "description": "Seconds a synchronous hand-over (`forwardMessageType` `SYNCHRON`) waits for `forwardProfile` to finish." }, "forwardMessageType": { "$ref": "#/components/schemas/core.MessageDeliveryType", "default": "SYNCHRON", "description": "How the RPC reply is handed to `forwardProfile`: `SYNCHRON` waits `forwardMessageMaxTime` seconds, and an error answer of that profile fails this unit; `ASYNCHRON` keeps the message 24 hours. `PERSISTENT` and any other value, including `DIRECT`, are handled as persistent (kept 4 days, delivery retried while no consumer is available).", "title": "MessageDeliveryType" }, "forwardProfile": { "type": "string", "description": "Name of the profile that receives the reply of an RPC call (`queueType` `RPC` on `core.AmqpProfileResponseUnit`, `rpc` on `core.AmqpV2ProfileResponseUnit`); not settable on any other unit. It must have a Message input agent (`core.MessageAgentSettings`), which gets the reply through its own context and queue; a missing profile or one of another input type fails the unit at run time. `@name@` placeholders are resolved." }, "jmsTextMessage": { "type": "boolean", "default": false, "description": "JMS only: `true` sends the result as a JMS TextMessage, `false` as a BytesMessage." }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "persistent": { "type": "boolean", "description": "`true` sends messages as durable, so the broker keeps them across a restart; with AMQP 0.9.1 a queue or exchange the platform creates is declared durable too. Never applied to RPC messages. Default `false` on `core.AmqpProfileResponseUnit`, `true` on `core.AmqpV2ProfileResponseUnit`." }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "rpc": { "type": "boolean", "default": false, "description": "`true` sends the message as a request and waits up to `rpcMaxTimeout` seconds for the reply, which is handed to `forwardProfile`; no reply in time fails the unit. RPC messages are never durable." }, "rpcMaxTimeout": { "type": "integer", "format": "int32", "default": 0, "description": "Seconds to wait for the reply of an RPC call. With an AMQP broker no reply in time fails the unit, and `0` or less means 120 seconds." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "AmqpV2ProfileResponseUnit" }, "core.X400ProfileResponseUnit": { "type": "object", "description": "Sends the result as an X.400 message through an X.400 partner channel, by default as an attachment named `attachmentName` next to the text in `body`. Needs `channel`; `from` and `to` default to the channel's `localId` and `remoteId`. The instance needs an X.400 licence, else the unit fails at run time.", "properties": { "class": { "type": "string", "const": "core.X400ProfileResponseUnit", "description": "The type of this object, always `core.X400ProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "alwaysQuote": { "type": "boolean", "default": false, "description": "`true` quotes every value of the CSV output; `false` quotes only where needed. Leaving it out keeps the stored value, `null` resets it to `false`." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "attachType": { "$ref": "#/components/schemas/core.MailAttachType", "default": "ATTACHMENT", "description": "Where the result goes. `null` keeps the stored value.", "title": "MailAttachType" }, "attachmentName": { "type": "string", "description": "File name of the attachment, without a path (a path is cut off). Templates: `` the original file name, `` it without extension, `
` the date, `` a running number, `@NAME@` a variable or target field value." }, "body": { "type": "string", "description": "Message text template. Placeholders are written `{--@NAME@--}` and filled from the last record's target fields and variables; unknown placeholders are dropped.", "examples": [ "Invoice {--@invoiceNo@--}, job {--@VAR_JOBNR@--}" ] }, "bodyEncoding": { "$ref": "#/components/schemas/core.X400BodyEncoding", "default": "TEXT", "description": "How the message body is encoded. Leaving it out keeps the stored value, `null` resets it to `TEXT`. A stored code no constant names reads as absent and is kept unless a constant is sent.", "title": "X400BodyEncoding" }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "channel": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelX400", "description": "The X.400 partner channel to send through, as `{\"id\": }`; list them with `GET /platform/api/partners/preview/{partnerId}/channels`. Checked on write; without a channel the unit fails at run time. A variable `VAR_SYS_CHANNEL_RESPONSE` (`` = this unit's 1-based position) holding a channel id overrides it per job. Its `direction` must be `OUT` or `IN_AND_OUT`, which is checked on write. A channel that was deleted reads as no channel; a copy references none.", "title": "IntegrationPartnerChannelX400" }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "csvDelim": { "type": "string", "description": "Field delimiter of CSV output. `null` keeps the stored value.", "examples": [ ";" ] }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "dmz": { "type": "boolean", "default": false, "description": "`true` sends through the Lobster DMZ server. `null` keeps the stored value." }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "from": { "type": "string", "description": "Sender O/R address of the message; `@NAME@` placeholders are resolved. Empty uses the channel's `localId`." }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "mimeType": { "type": "string", "description": "Media type declared for the attachment; `@name@` placeholders are resolved. Leaving it out keeps the stored value, `null` resets it to the default." }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "optionalAttachments": { "type": "array", "description": "Names of further files of the job attached to the message, one entry each; `@name@` placeholders are resolved. An empty list attaches none; leaving it out keeps the stored list, `null` attaches none too.", "items": { "type": "string" } }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "requestMdn": { "type": "boolean", "default": false, "description": "`true` requests a message disposition notification from the recipient. Leaving it out keeps the stored value, `null` resets it to `false`." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "subject": { "type": "string", "description": "Subject of the message. `@NAME@` inserts a variable or target field value, `
` the date, `` the original file name." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "to": { "type": "string", "description": "Recipient O/R address of the message; `@NAME@` placeholders are resolved. Empty uses the channel's `remoteId`." }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "X400ProfileResponseUnit" }, "core.AmqpProfileResponseUnit": { "type": "object", "description": "Publishes the result as a message to a message broker through the connection configured under `alias`. `queueType` chooses a queue, a topic or direct exchange addressed with `routingKey`, or an RPC call whose reply is handed to `forwardProfile`. Needs `alias` and `queueName`. This is the editor's \"AMQP (Legacy)\" unit; its \"AMQP\" unit is `core.AmqpV2ProfileResponseUnit`.", "properties": { "class": { "type": "string", "const": "core.AmqpProfileResponseUnit", "description": "The type of this object, always `core.AmqpProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "alias": { "type": "string", "description": "Name of the connection configuration (broker or endpoint) the unit sends through. Aliases are defined by an administrator on the instance and must be allowed for the profile's client. Not validated on write; a wrong one fails at run time." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "alwaysQuote": { "type": "boolean", "default": false, "description": "`true` quotes every value of the CSV output; only used when `contentType` is `core.ResponseContentType_CSV`." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressData": { "type": "boolean", "default": false, "description": "`true` packs the content into an archive (ZIP unless another format is chosen via `compressionType`) before it is sent." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "csvDelim": { "type": "string", "default": ",", "description": "Field delimiter of the CSV output when `contentType` is `core.ResponseContentType_CSV`; ignored for other content types." }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "forwardMessageMaxTime": { "type": "integer", "format": "int32", "default": 30, "description": "Seconds a synchronous hand-over (`forwardMessageType` `SYNCHRON`) waits for `forwardProfile` to finish." }, "forwardMessageType": { "$ref": "#/components/schemas/core.MessageDeliveryType", "default": "SYNCHRON", "description": "How the RPC reply is handed to `forwardProfile`: `SYNCHRON` waits `forwardMessageMaxTime` seconds, and an error answer of that profile fails this unit; `ASYNCHRON` keeps the message 24 hours. `PERSISTENT` and any other value, including `DIRECT`, are handled as persistent (kept 4 days, delivery retried while no consumer is available).", "title": "MessageDeliveryType" }, "forwardProfile": { "type": "string", "description": "Name of the profile that receives the reply of an RPC call (`queueType` `RPC` on `core.AmqpProfileResponseUnit`, `rpc` on `core.AmqpV2ProfileResponseUnit`); not settable on any other unit. It must have a Message input agent (`core.MessageAgentSettings`), which gets the reply through its own context and queue; a missing profile or one of another input type fails the unit at run time. `@name@` placeholders are resolved." }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "persistent": { "type": "boolean", "description": "`true` sends messages as durable, so the broker keeps them across a restart; with AMQP 0.9.1 a queue or exchange the platform creates is declared durable too. Never applied to RPC messages. Default `false` on `core.AmqpProfileResponseUnit`, `true` on `core.AmqpV2ProfileResponseUnit`." }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "qualityOfService": { "$ref": "#/components/schemas/core.AmqpQualityOfService", "default": "EXACTLY_ONCE", "description": "Delivery guarantee `AT_MOST_ONCE`, `AT_LEAST_ONCE` or `EXACTLY_ONCE`. Stored but not used when this unit sends; it only matters for AMQP input agents.", "title": "AmqpQualityOfService" }, "queueName": { "type": "string", "description": "Name of the queue (`queueType` `PUBLISH` or `RPC`) or of the exchange (`TOPIC` or `ROUTING`) the message is published to; `@name@` placeholders are resolved.", "examples": [ "orders" ] }, "queueType": { "$ref": "#/components/schemas/core.AmqpQueueType", "default": "PUBLISH", "description": "What `queueName` names: `PUBLISH` a queue, `TOPIC` a topic exchange, `ROUTING` a direct (routing) exchange, `RPC` an RPC queue, where the unit waits up to `rpcMaxTimeout` seconds for the reply and hands it to `forwardProfile`. A stored code no constant names reads back without this member; omitting it on a write keeps it, and it fails at run time.", "title": "AmqpQueueType" }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "routingKey": { "type": "string", "description": "Routing key for `queueType` `TOPIC` and `ROUTING`; ignored for queues and RPC. `@name@` placeholders are resolved.", "examples": [ "orders.de" ] }, "rpcMaxTimeout": { "type": "integer", "format": "int32", "default": 0, "description": "Seconds to wait for the reply of an RPC call. With an AMQP broker no reply in time fails the unit, and `0` or less means 120 seconds." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "AmqpProfileResponseUnit" }, "core.As400ProfileResponseUnit": { "type": "object", "description": "Calls a program on an IBM AS/400 (IBM i) system. Needs `host`, `command` and `library`. The login is not published: the user name is internal and the `password` is write-only. A write that leaves them out, adds, removes or reorders units keeps the login only while one stored AS/400 unit has the same `host`. `contentType` and `encoding` do not apply - the unit sends no body of its own.", "properties": { "class": { "type": "string", "const": "core.As400ProfileResponseUnit", "description": "The type of this object, always `core.As400ProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "command": { "type": "string", "description": "Name of the program or command to call. `@name@` placeholders are resolved." }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "host": { "type": "string", "description": "Host name or address of the AS/400 system. `@name@` placeholders are resolved." }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "library": { "type": "string", "description": "Library the program is called from. `@name@` placeholders are resolved." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "objectType": { "type": "string", "default": "PGM", "description": "Type of the object named by `command`: `PGM` for a program, `CMD` for a CL command." }, "params": { "type": "array", "description": "Parameters passed to the call, in call order.", "items": { "$ref": "#/components/schemas/core.As400ResponseUnitParam", "title": "As400ResponseUnitParam" } }, "password": { "type": "string", "format": "password", "description": "The password of the AS/400 login. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "As400ProfileResponseUnit" }, "core.CloudStorageProfileResponseUnit": { "type": "object", "description": "Uploads the result as a file to a cloud storage (Amazon S3, Google Cloud Storage, Azure, Microsoft 365 OneDrive or SharePoint, Google Drive, Dropbox, Box) through a cloud storage partner channel, which holds the provider and its credentials. Needs `channel` and `fileName`; the provider decides which of `bucket`, `documentLibrary` and `blobType` apply. OAuth-based providers require the channel's consent to already be granted.", "properties": { "class": { "type": "string", "const": "core.CloudStorageProfileResponseUnit", "description": "The type of this object, always `core.CloudStorageProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "alwaysQuote": { "type": "boolean", "default": false, "description": "`true` quotes every value of the CSV output; only used when `contentType` is `core.ResponseContentType_CSV`." }, "appendToFile": { "type": "boolean", "default": false, "description": "`true` appends the content to an existing file instead of replacing it. Ignored when `zipFile` is `true`, for Excel content and for the original content of a compressed input; cannot be combined with a post-executor." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "blobType": { "$ref": "#/components/schemas/core.CloudStorageBlobType", "description": "Azure Blob Storage only: type of blob written, `BlockBlob` or `AppendBlob`. A stored value neither names (a legacy or corrupted one, or a fresh unit's own default) reads back absent, and, like every member of this unit, is reset to empty (no type set) on any write that leaves it unset.", "title": "CloudStorageBlobType" }, "bucket": { "type": "string", "description": "Amazon S3 and Google Cloud Storage: the bucket to write into. Microsoft 365: the drive id, or the SharePoint site as `@Name:`. `@name@` placeholders are resolved." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "channel": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelCloudStorage", "description": "The cloud storage partner channel to upload through, as `{\"id\": }` of a `core.IntegrationPartnerChannelCloudStorage`; list them with `GET /platform/api/partners/preview/{partnerId}/channels`. Must reference an existing channel visible to this client; its credentials are not checked. A variable `VAR_SYS_CHANNEL_RESPONSE` (`` = this unit's 1-based position) holding a channel id overrides it per job. A channel that was deleted reads as no channel; a copy references none.", "title": "IntegrationPartnerChannelCloudStorage" }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "createPathIfNeeded": { "type": "boolean", "default": false, "description": "Ignored for a cloud storage unit: missing parent folders of `fileName` are always created where the provider supports it." }, "csvDelim": { "type": "string", "default": ";", "description": "Field delimiter of the CSV output when `contentType` is `core.ResponseContentType_CSV`; ignored for other content types." }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "documentLibrary": { "type": "string", "description": "Microsoft 365 SharePoint only: name of the document library to write into; used only when `bucket` names the site as `@Name:`." }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "fileName": { "type": "string", "description": "Path and name of the file in the storage. Placeholders: `@name@` (a target field or variable), `` / `` (the original file name, without extension), `
` (date and time), `` (the profile's running number). Missing parent folders are created where the provider supports it; invalid characters are corrected.", "examples": [ "invoices///inv_.xml" ] }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "useDmz": { "type": "boolean", "default": false, "description": "`true` connects to the storage provider through the Lobster DMZ server." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipFile": { "type": "boolean", "default": false, "description": "`true` packs the content into an archive (ZIP unless another format is chosen via `compressionType`); the extension of `fileName` is replaced by the archive's." }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "CloudStorageProfileResponseUnit" }, "core.PassBackBinaryDataProfileResponseUnit": { "type": "object", "description": "Passes the integration unit's output back as the result of a cron call that started this profile as a sub-profile (`BasicCallSubProfile`); it does not send anywhere on its own. On a profile with a cron input agent it must be the last unit of `responseSettings.units`. Only meaningful on a profile whose cron input agent is called that way and whose `integrationSettings.unit` is a `core.GenericIntegrationUnit` with `className` `com.ebd.hub.datawizard.iu.PrepareDataForCallingProfile` - neither is checked here.", "properties": { "class": { "type": "string", "const": "core.PassBackBinaryDataProfileResponseUnit", "description": "The type of this object, always `core.PassBackBinaryDataProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "PassBackBinaryDataProfileResponseUnit" }, "core.FileProfileResponseUnit": { "type": "object", "description": "Writes the result as a file to the Lobster server's file system, or with `targetBackup` into the job's backup. Needs `fileName` unless `targetBackup` is true. Missing directories are created, an existing file is replaced, and an empty result file is removed again.", "properties": { "class": { "type": "string", "const": "core.FileProfileResponseUnit", "description": "The type of this object, always `core.FileProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "append": { "type": "boolean", "default": false, "description": "`true` appends the result to an existing file instead of replacing it. `null` keeps the stored value." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "backupSuffix": { "type": "string", "description": "Suffix appended to the backup file's name when `targetBackup` is `true`, e.g. `.xml`; may use `@name@` placeholders. Ignored when `targetBackup` is `false`. `null` keeps the stored value.", "examples": [ ".xml" ] }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "channel": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelSMB", "description": "The SMB partner channel to write through, as `{\"id\": }` of a `core.IntegrationPartnerChannelSMB`; none writes to a local or mounted path. Ignored when `targetBackup` is `true`. A channel that was deleted reads as no channel.", "title": "IntegrationPartnerChannelSMB" }, "checkPath": { "type": "boolean", "default": false, "description": "`true` checks that the target directory exists before writing, instead of creating it. `null` keeps the stored value." }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "csvAlwaysQuote": { "type": "boolean", "default": false, "description": "`true` quotes every field of CSV output, not only those that need it. `null` keeps the stored value." }, "csvDelim": { "type": "string", "default": ";", "description": "Field delimiter of the CSV output when `contentType` is `core.ResponseContentType_CSV`: one character, `TAB`, `NL` or `CR`, or `0x` followed by two hex digits; empty is stored as `;`. Ignored for other content types.", "examples": [ "0x09" ] }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "fileName": { "type": "string", "description": "Path and name of the file on the Lobster server. Placeholders: `@name@` (a target field or variable), `` / `` (the original file name, without extension), `
` (date and time), `` (the profile's running number). The directory must be one the profile's client may write to, else the unit fails at run time. Ignored when `targetBackup` is `true`.", "examples": [ "/data/out/orders_
_.json" ] }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "password": { "type": "string", "format": "password", "description": "SMB password. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "smbDomain": { "type": "string", "description": "SMB domain for the share; leaving it out keeps the stored value, `null` clears it." }, "targetBackup": { "type": "boolean", "default": false, "description": "`true` keeps the result as a backup file of the job in the profile's backup directory (named `ARC__...`) instead of writing it to `fileName`, which is then stored unused, or as `BACKUP` when empty." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "FileProfileResponseUnit" }, "core.OftpProfileResponseUnit": { "type": "object", "description": "Sends the result as an OFTP virtual file to a partner through an OFTP partner channel. Needs `channel` and `fileName`; `origin` and `destination` default to the channel's own and the partner's id. An empty content skips the transfer.", "properties": { "class": { "type": "string", "const": "core.OftpProfileResponseUnit", "description": "The type of this object, always `core.OftpProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "alwaysQuote": { "type": "boolean", "default": false, "description": "`true` quotes every value of the CSV output; only used when `contentType` is `core.ResponseContentType_CSV`. Absent is stored as `false`." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "channel": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelOFTP", "description": "The OFTP partner channel to send through, as `{\"id\": }`; list them with `GET /platform/api/partners/preview/{partnerId}/channels`. Must reference an existing, visible OFTP channel. Without a channel the unit fails at run time. A variable `VAR_SYS_CHANNEL_RESPONSE` (`` = this unit's 1-based position) holding a channel id overrides it per job. Its `direction` must be `OUT` or `IN_AND_OUT`, which is checked on write. A channel that was deleted reads as no channel; a copy references none.", "title": "IntegrationPartnerChannelOFTP" }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "csvDelim": { "type": "string", "default": ",", "description": "Field delimiter of the CSV output when `contentType` is `core.ResponseContentType_CSV`: one character, `TAB`, `NL` or `CR`, or `0x` followed by two hex digits; empty runs as `,`. Ignored for other content types.", "examples": [ "0x09" ] }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "destination": { "type": "string", "description": "SFID the virtual file is addressed to (OFTP destination), upper-cased at run time; `@NAME@` placeholders are resolved. Empty uses the channel's `remoteSfid`." }, "dmzOption": { "$ref": "#/components/schemas/core.OftpDmzOption", "default": "DMZ_BY_SYSTEM", "description": "Whether the transfer goes through the Lobster DMZ. `null` keeps the stored value.", "title": "OftpDmzOption" }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "fileName": { "type": "string", "description": "Name of the OFTP virtual file, at most 26 characters after resolution (longer fails the unit at run time, not on save); OFTP allows `0-9 A-Z / - . & ( )`. Templates: `` the original file name, `` it without extension, `
` the date, `` a running number, `@NAME@` a variable or target field value.", "examples": [ "INV
" ] }, "host": { "type": "string", "description": "Host of the partner for a TCP/IP connection; non-empty overrides the channel's. Leaving it out keeps the stored value, `null` clears it." }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noFileCounter": { "type": "boolean", "default": false, "description": "`true` does not append a running counter to the file name. Leaving it out keeps the stored value, `null` resets it to `false`." }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "oftpByTcpIp": { "type": "boolean", "default": true, "description": "`true` connects over TCP/IP, `false` over ISDN. Leaving it out keeps the stored value, `null` resets it to `true`." }, "oftpTLS": { "type": "boolean", "default": true, "description": "`true` secures the TCP/IP connection with TLS. Leaving it out keeps the stored value, `null` resets it to `true`." }, "origin": { "type": "string", "description": "SFID the virtual file is sent from (OFTP origin), upper-cased at run time; `@NAME@` placeholders are resolved. Empty uses the channel's `localSsid`." }, "port": { "type": "string", "description": "Port of the partner's OFTP server; empty uses the channel's. `null` keeps the stored value.", "examples": [ "3305" ] }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "receiveFile": { "type": "boolean", "default": false, "description": "`true` also receives the files the partner has waiting. Leaving it out keeps the stored value, `null` resets it to `false`." }, "recordLength": { "type": "integer", "format": "int32", "default": 128, "description": "Record length of the file for a fixed record format. Leaving it out keeps the stored value, `null` resets it to `128`." }, "recordType": { "$ref": "#/components/schemas/core.OftpRecordType", "default": "UNSTRUCTURED", "description": "Record format of the file. Leaving it out keeps the stored value, `null` resets it to `UNSTRUCTURED`. A stored code no constant names reads as absent and is kept unless a constant is sent.", "title": "OftpRecordType" }, "remoteNumber": { "type": "string", "description": "ISDN number of the partner. Leaving it out keeps the stored value, `null` clears it." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "sendMode": { "$ref": "#/components/schemas/core.OftpSendMode", "default": "NOW", "description": "When the file is sent. Leaving it out keeps the stored value, `null` resets it to `NOW`. A stored code no constant names reads as absent and is kept unless a constant is sent.", "title": "OftpSendMode" }, "serviceName": { "type": "string", "description": "Name of the OFTP service used for the transfer. Leaving it out keeps the stored value, `null` clears it." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "x25LocalId": { "type": "string", "description": "Local X.25 id. Leaving it out keeps the stored value, `null` clears it." }, "x25RemoteId": { "type": "string", "description": "Remote X.25 id. Leaving it out keeps the stored value, `null` clears it." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "OftpProfileResponseUnit" }, "core.MailProfileResponseUnit": { "type": "object", "description": "Sends the result by e-mail. Needs `to`; a unit without `smtpHost` sends through the Lobster server's default mail server. The SMTP login cannot be set through this API. With `attachType` `NONE`, the mail contains only `body` and is always sent. With any other `attachType`, no mail is sent if `contentType` is `core.ResponseContentType_NONE`, or if the result is empty and `allowEmptyData` is `false`; the unit still counts as successful.", "properties": { "class": { "type": "string", "const": "core.MailProfileResponseUnit", "description": "The type of this object, always `core.MailProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "alwaysQuote": { "type": "boolean", "default": false, "description": "`true` quotes every value of the CSV output; `false` quotes only where needed. Absent is stored as `false`." }, "asHtml": { "type": "boolean", "default": false, "description": "`true` sends `body` as HTML. `null` keeps the stored value." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "attachType": { "$ref": "#/components/schemas/core.MailAttachType", "default": "ATTACHMENT", "description": "Where the result goes. `null` keeps the stored value.", "title": "MailAttachType" }, "attachmentName": { "type": "string", "description": "File name of the attached result; the placeholders of `subject` are resolved. Empty uses a generated name. `null` keeps the stored value." }, "body": { "type": "string", "description": "Plain text of the mail body. `@name@` placeholders are replaced by the values of the last record's target fields; `@VAR_JOBNR@`, `@VAR_PROFILENAME@` and `@VAR_FILENAME@` are available too." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "cc": { "type": "array", "description": "Further recipients, one entry each: a plain address is sent a copy (CC), one prefixed `bcc:` a blind copy, one prefixed `reply-to:` becomes the reply address. `@name@` placeholders are resolved, and an entry may hold several addresses separated by `;`. `null` keeps the stored list.", "items": { "type": "string" } }, "channel": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelMail", "description": "The mail partner channel to send through, as `{\"id\": }` of a `core.IntegrationPartnerChannelMail`; none sends through the default mail server or `smtpHost`. A channel that was deleted reads as no channel.", "title": "IntegrationPartnerChannelMail" }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "csvDelim": { "type": "string", "default": ",", "description": "Field delimiter of the CSV output when `contentType` is `core.ResponseContentType_CSV`: one character, `TAB`, `NL` or `CR`, or `0x` followed by two hex digits; empty runs as `,`. Ignored for other content types.", "examples": [ "0x09" ] }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "from": { "type": "string", "description": "Sender address; `@name@` placeholders are resolved.", "examples": [ "integration@example.com" ] }, "htmlEditor": { "type": "boolean", "default": false, "description": "`true` edits an HTML `body` in the rich-text editor instead of as source text. Leaving it out keeps the stored value, `null` resets it to `false`." }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "mimeType": { "type": "string", "default": "application/octet-stream", "description": "MIME type of the attachment. `null` keeps the stored value." }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "optionalAttachments": { "type": "array", "description": "Names of further files of the job attached to the mail, one entry each; `@name@` placeholders are resolved. An empty list attaches none; leaving it out keeps the stored list, `null` attaches none too.", "items": { "type": "string" } }, "password": { "type": "string", "format": "password", "description": "SMTP login password. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "smtpHost": { "type": "string", "description": "SMTP server the mail is sent through; empty uses the Lobster server's default mail server. `null` keeps the stored value." }, "smtpPort": { "type": "string", "description": "Port of `smtpHost`; empty uses the default. `null` keeps the stored value.", "examples": [ "587" ] }, "subject": { "type": "string", "description": "Subject line; `@name@` placeholders (a target field or variable), ``, the date placeholders and `` are resolved.", "examples": [ "Order @orderNo@ of --
" ] }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "to": { "type": "string", "description": "Recipient address; several are separated by `;`. `@name@` placeholders are resolved, so the address can come from a target field.", "examples": [ "orders@example.com" ] }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "MailProfileResponseUnit" }, "core.OpaqueProfileResponseUnit": { "type": "object", "description": "Stand-in for a response unit of a type this API does not model. It carries only `sourceClass`, `position` and `active`, never the unit's actual configuration. It is read-only: send it back unchanged at its position in `units` to keep the unit, or omit it to delete the unit.", "properties": { "class": { "type": "string", "const": "core.OpaqueProfileResponseUnit", "description": "The type of this object, always `core.OpaqueProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "position": { "type": "integer", "format": "int32", "description": "1-based position of the unit in the stored `units` list, which is how it is identified. Read-only: send it back as read, matching a stored unit of type `sourceClass`, and only once.", "examples": [ 3 ] }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "sourceClass": { "type": "string", "description": "Fully qualified name of the stored unit's internal type; it tells which kind of unit this is. Read-only: send it back exactly as read.", "examples": [ "com.ebd.hub.datawizard.data.As400ResponseUnit" ] }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "OpaqueProfileResponseUnit" }, "core.HttpProfileResponseUnit": { "type": "object", "description": "Calls an external HTTP(S) endpoint with the result: the request goes to `httpSettings` (method, host, port, path, query, headers) and its body is chosen by `contentType`. Set `returnResponseToCaller` to hand the answer back to the caller of this profile's HTTP input agent, or `useForwardMessage` with `forwardProfile` to process the answer in another profile. A status of 300 or higher (after the retries) or an answer not matching `httpOk` fails the unit. Minimal: `httpSettings` with `httpMethod`, `host` and `uri`, plus `contentType`.", "properties": { "class": { "type": "string", "const": "core.HttpProfileResponseUnit", "description": "The type of this object, always `core.HttpProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "alwaysQuote": { "type": "boolean", "default": false, "description": "`true` quotes every value of the CSV body; only used when `contentType` is `core.ResponseContentType_CSV`." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "certId": { "type": "integer", "format": "int64", "default": 0, "description": "Id of a local certificate in the platform's certificate store, sent as TLS client certificate; not the certificate's serial number. `0` uses the `channel`'s certificate, if any. Must reference an existing certificate when changed.", "examples": [ 42 ] }, "channel": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelHTTP", "description": "HTTP partner channel whose address and credentials the request uses, as `{\"id\": }` of a `core.IntegrationPartnerChannelHTTP`; list them with `GET /platform/api/partners/preview/{partnerId}/channels`. At run time an empty `host` (or ``) and `port` come from the channel's address, `` in `uri` becomes its path, and user, password and certificate (when `certId` is `0`) come from the channel. Must reference an existing channel visible to this client. A variable `VAR_SYS_CHANNEL_RESPONSE` (`` = this unit's 1-based position) holding a channel id overrides it per job. Its `direction` must be `OUT` or `IN_AND_OUT`, which is checked on write. A channel that was deleted reads as no channel; a copy references none.", "title": "IntegrationPartnerChannelHTTP" }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressed": { "type": "boolean", "default": false, "description": "`true` packs the content into an archive (ZIP unless another format is chosen via `compressionType`) before sending." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "csvDelim": { "type": "string", "default": ",", "description": "Field delimiter of the CSV body when `contentType` is `core.ResponseContentType_CSV`; ignored for other content types." }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "customResponseData": { "type": "string", "description": "Text handed to `forwardProfile` as its input when the upstream answer has no body; only used with `useForwardMessage`. Empty: an answer without body is then not forwarded." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "dmz": { "type": "boolean", "default": false, "description": "`true` sends the request through the Lobster DMZ server instead of directly, unless the instance disables DMZ use." }, "encodeUrl": { "type": "boolean", "default": false, "description": "`true` percent-encodes the resolved `uri` path as UTF-8 before sending, and the `query` too when the unit sends content and the query holds no ``." }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "errorProfile": { "type": "string", "description": "Name of a profile that processes the error answer when the call ends with status 300 or higher (after the retries); only used when `useForwardMessage` is `true`. It is reached like `forwardProfile` (see `forwardMessageType`), and this unit still fails. `@name@` placeholders are resolved." }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "filenameMultipart": { "type": "string", "description": "Legacy: file name of the data part in the old query-based multipart form, used only when an old exported profile without `multiParts` is imported. Not used when sending; set `fileName` on the `multiParts` entry instead." }, "forwardContext": { "type": "string", "description": "Message context used to hand the answer to `forwardProfile` or `errorProfile` when `forwardMessageType` is not `DIRECT`: the `context` of that profile's Message input agent, or `System` (with `forwardQueue` `DWForwardReceiver`), which the platform always consumes. `@name@` placeholders are resolved." }, "forwardMessageType": { "$ref": "#/components/schemas/core.MessageDeliveryType", "default": "SYNCHRON", "description": "How the answer reaches `forwardProfile` or `errorProfile`: `SYNCHRON` waits up to 30 minutes for that profile, `ASYNCHRON` or `PERSISTENT` keeps the message up to 12 hours, both through `forwardContext`/`forwardQueue`, or `DIRECT`, which runs the profile at once in this process; with `returnResponseToCaller` its answer then goes back to the caller. Left out, the stored value is kept.", "title": "MessageDeliveryType" }, "forwardProfile": { "type": "string", "description": "Name of the profile that processes the upstream answer when `useForwardMessage` is `true` and the status is below 300 (a profile's id is its name: `GET /platform/api/profiles/preview`). The answer body, or `customResponseData` when it is empty, is its input; the response headers and `VAR_RESPONSE_HTTP_HEADER_STATUS_CODE` arrive as variables. Unless `forwardMessageType` is `DIRECT` it must have a Message input agent. A failed hand-over fails this unit." }, "forwardQueue": { "type": "string", "description": "Queue within `forwardContext`: the `queue` of the receiving profile's Message input agent, or `DWForwardReceiver` with `forwardContext` `System`. Not used for `DIRECT`. `@name@` placeholders are resolved." }, "httpOk": { "type": "string", "description": "Expected answer: when set, the unit succeeds only if the trimmed response body equals this text or, with the prefix `regex:`, matches the whole body as a regular expression. Empty accepts any status below 300. While the answer is forwarded to `forwardProfile` it is not compared, but an empty answer without `customResponseData` then fails the unit.", "examples": [ "regex:.*OK.*" ] }, "httpSettings": { "$ref": "#/components/schemas/core.HttpClientSettings", "description": "Target and method of the request: `httpMethod`, `sslEnabled`, `host`, `port`, `uri`, `query` and `headers`. Header values may hold `@name@` placeholders; a header named `method` overrides the method at run time, and the key `dyn_header_entries` takes a value of `Name: value` lines that each become a header.", "title": "HttpClientSettings" }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "mimeType": { "type": "string", "default": "application/octet-stream", "description": "Content-Type of the request body; `@name@` placeholders are resolved.", "examples": [ "application/json" ] }, "multiPart": { "type": "boolean", "default": false, "description": "`true` sends a `multipart/form-data` body built from `multiParts`, which needs at least one entry, else the unit fails at run time. Needs `POST`, `PUT`, `PATCH`, `GETWITHCONTENT` or `DELETEWITHCONTENT`: switched on over a stored `GET`, `DELETE` or `HEAD` the write leaves alone, the method becomes `POST`. Ignored when `webService` is `true`." }, "multiParts": { "type": "array", "description": "Elements named to match one of authorization, proxy-authorization, cookie, set-cookie, *password*, *passwd*, *pwd*, *passphrase*, *secret*, *credential*, *token*, *apikey*, *api.key*, *api-key* hold a secret: a read returns those encrypted, and a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else. Every other element is unaffected.", "items": { "$ref": "#/components/schemas/core.CronHttpMultiPart", "title": "CronHttpMultiPart" } }, "multipartBrowserMode": { "$ref": "#/components/schemas/core.HttpMultiPartMode", "default": "RFC6532", "description": "How the multipart body is encoded: `RFC6532` (UTF-8 in the part headers), `STRICT` (strict RFC encoding), `COMPATIBLE` (browser-compatible) or `SYSTEM` (the instance's setting, `STRICT` unless configured otherwise). Only used with `multiPart`.", "title": "HttpMultiPartMode" }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "noUrlEncoding": { "type": "boolean", "default": false, "description": "`true` inserts `@name@` placeholder values into `uri` and `query` as they are instead of URL-encoding them." }, "password": { "type": "string", "format": "password", "description": "The password of the HTTP login. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "returnResponseToCaller": { "type": "boolean", "default": false, "description": "`true` hands the upstream answer (body and headers) back to the caller of this profile's HTTP input agent. To answer the caller with the profile's own output instead, use a `core.PassBackBinaryDataProfileResponseUnit` as the last unit. The agent must have `useResponseOnSuccess` off, else the caller gets its static text. An error answer is passed back too, and then counts as success if this is the profile's only response unit." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "useForwardMessage": { "type": "boolean", "default": false, "description": "`true` hands the upstream answer to `forwardProfile` (status below 300) or `errorProfile` (300 or higher)." }, "validateCertificateChain": { "type": "boolean", "default": false, "description": "`true` validates the server's TLS certificate chain; `false` accepts any server certificate." }, "webService": { "type": "boolean", "default": false, "description": "`true` treats the call as a SOAP web service call: the `SOAPAction` and further headers are taken from the SOAP content, and an answer with status 500 or higher is checked for a SOAP fault. Needs `POST`, `PUT`, `PATCH`, `GETWITHCONTENT` or `DELETEWITHCONTENT`: switched on over a stored `GET`, `DELETE` or `HEAD` the write leaves alone, the method becomes `POST`." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "HttpProfileResponseUnit" }, "core.SapProfileResponseUnit": { "type": "object", "description": "Calls a function module (RFC) in an SAP system with parameters filled from the target tree. The target tree follows the RFC's layout: nodes named `SAP_Table_` or `SAP_Struct_`, fields named `SAP_Fld_`; other target fields are ignored. Needs `alias` and `rfc`. By default the RFC is called once per record, `singleCall` puts all records into one call. `contentType` and `encoding` do not apply.", "properties": { "class": { "type": "string", "const": "core.SapProfileResponseUnit", "description": "The type of this object, always `core.SapProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "alias": { "type": "string", "description": "Name of the SAP connection to call through, an SAP alias configured on the Lobster instance (it must already exist and be allowed for the profile's client, else the unit fails at run time). `@NAME@` placeholders are resolved." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "forwardContentType": { "$ref": "#/components/schemas/core.SapForwardContentType", "description": "Format the RFC answer is forwarded in. Unset forwards it as XML.", "title": "SapForwardContentType" }, "forwardMessageContext": { "type": "string", "description": "Context of the message forwarded to `forwardProfile`; `@NAME@` placeholders are resolved." }, "forwardMessageQueue": { "type": "string", "description": "Queue of the message forwarded to `forwardProfile`; `@NAME@` placeholders are resolved." }, "forwardProfile": { "type": "string", "description": "Name of the profile that receives the forwarded RFC answer; it needs a Message input agent. `@NAME@` placeholders are resolved." }, "forwardResponse": { "type": "boolean", "default": false, "description": "`true` forwards the RFC answer to the profile named in `forwardProfile` as a message." }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "messageType": { "$ref": "#/components/schemas/core.SapMessageType", "default": "SYNCHRON", "description": "How the forwarded answer is handed to `forwardProfile`. Leaving it out keeps the stored value, `null` resets it to `SYNCHRON`. A stored code no constant names reads as absent and is kept unless a constant is sent.", "title": "SapMessageType" }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "qrfc": { "type": "string", "description": "Queue name for a queued RFC (qRFC); empty calls the RFC without a queue. `@NAME@` placeholders are resolved." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "returnData": { "type": "boolean", "default": false, "description": "`true` hands the RFC's answer back to the HTTP caller of the profile. Only works in a profile whose input agent is HTTP and whose responses do not run in the background; otherwise ignored." }, "rfc": { "type": "string", "description": "Name of the function module to call; `@NAME@` placeholders are resolved. An unknown name fails the unit at run time.", "examples": [ "BAPI_SALESORDER_CREATEFROMDAT2" ] }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "singleCall": { "type": "boolean", "default": false, "description": "`true` fills all records of the job into one RFC call; `false` calls the RFC once per record." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "throwErrorOnFailedMessage": { "type": "boolean", "default": false, "description": "`true` fails the unit when the forwarded message could not be delivered, `false` ignores it." }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "SapProfileResponseUnit" }, "core.WebDAVProfileResponseUnit": { "type": "object", "description": "Uploads the result as a file to a WebDAV server (HTTP PUT) reached through an HTTP partner channel. The file goes to the channel's `url` + `directory` + `fileName`; missing directories are created. Needs `channel` and `fileName`. An empty content skips the upload.", "properties": { "class": { "type": "string", "const": "core.WebDAVProfileResponseUnit", "description": "The type of this object, always `core.WebDAVProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "alwaysQuote": { "type": "boolean", "default": false, "description": "With `contentType` `core.ResponseContentType_CSV`: `true` puts every field in quotes." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "certId": { "type": "integer", "format": "int64", "default": 0, "description": "Id of a local certificate in the platform's certificate store, sent as TLS client certificate. `0` uses the `channel`'s certificate, if any. Not checked on write. Leaving it out keeps the stored value, `null` resets it to `0`." }, "channel": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelHTTP", "description": "The HTTP partner channel to upload through, as `{\"id\": }`; list them with `GET /platform/api/partners/preview/{partnerId}/channels`. Must reference an existing channel. Its `url` is the server address and its login data and certificate authenticate, unless the unit has its own host or credentials, which are not settable through this API and win when present. A variable `VAR_SYS_CHANNEL_RESPONSE` (`` = this unit's 1-based position) holding a channel id overrides it per job. Its `direction` must be `OUT` or `IN_AND_OUT`, which is checked on write. A channel that was deleted reads as no channel; a copy references none.", "title": "IntegrationPartnerChannelHTTP" }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "csvDelim": { "type": "string", "default": ",", "description": "Field delimiter when `contentType` is `core.ResponseContentType_CSV`: one character, or `TAB`, `CR`, `NL`, or a hex code.", "examples": [ "0x1F" ] }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "directory": { "type": "string", "description": "Directory below the channel's `url` the file is put into, with the same templates as `fileName`; directories that do not exist are created first.", "examples": [ "/inbox/orders" ] }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "fileName": { "type": "string", "description": "Name of the uploaded file; it is URL-encoded for you. Templates: `` the original file name, `` it without extension, `
` the date, `` a running number, `@NAME@` a variable or target field value.", "examples": [ "order_
_.xml" ] }, "host": { "type": "string", "description": "WebDAV server URL; non-empty overrides the channel's address. Leaving it out keeps the stored value, `null` clears it." }, "httpHeader": { "type": "object", "additionalProperties": true, "description": "Additional HTTP headers sent with the request; values may hold `@name@` placeholders. Leaving it out keeps the stored value, `null` clears them. Entries whose key matches one of authorization, proxy-authorization, cookie, set-cookie, *password*, *passwd*, *pwd*, *passphrase*, *secret*, *credential*, *token*, *apikey*, *api.key*, *api-key*, Authorization, Proxy-Authorization hold a secret: a read returns those encrypted, and a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else. Every other entry is unaffected." }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "mimeType": { "type": "string", "default": "application/octet-stream", "description": "`Content-Type` sent with the upload. The special value `lobster/unzip` unpacks a ZIP content and uploads every file in it into `directory` instead.", "examples": [ "application/json" ] }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "password": { "type": "string", "format": "password", "description": "Login password of the WebDAV server. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "transactional": { "type": "boolean", "default": false, "description": "`true` locks the target on the server (WebDAV LOCK) for the upload and unlocks it afterwards; the server must support locking." }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "zip": { "type": "boolean", "default": false, "description": "`true` packs the content into an archive (ZIP unless another format is chosen via `compressionType`) before the upload and replaces the extension of `fileName` with the archive's." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "WebDAVProfileResponseUnit" }, "core.GooglePubSubProfileResponseUnit": { "type": "object", "description": "Publishes the result as one message to a Google Cloud Pub/Sub topic (`topicName`) through the connection configured under `alias`, which holds the credentials. Needs `alias` and `topicName`. The unit waits up to 5 seconds for the message id; a failed publish fails the unit.", "properties": { "class": { "type": "string", "const": "core.GooglePubSubProfileResponseUnit", "description": "The type of this object, always `core.GooglePubSubProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "alias": { "type": "string", "description": "Name of the connection configuration (broker or endpoint) the unit sends through. Aliases are defined by an administrator on the instance and must be allowed for the profile's client. Not validated on write; a wrong one fails at run time." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "alwaysQuote": { "type": "boolean", "default": false, "description": "`true` quotes every value of the CSV output; only used when `contentType` is `core.ResponseContentType_CSV`." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressData": { "type": "boolean", "default": false, "description": "`true` packs the content into an archive (ZIP unless another format is chosen via `compressionType`) before it is sent." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "csvDelim": { "type": "string", "default": ",", "description": "Field delimiter of the CSV output when `contentType` is `core.ResponseContentType_CSV`; ignored for other content types." }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "topicName": { "type": "string", "description": "Topic the message is published to on the broker behind `alias`; `@name@` placeholders (a target field or variable) are resolved at run time.", "examples": [ "orders" ] }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "GooglePubSubProfileResponseUnit" }, "core.SmsProfileResponseUnit": { "type": "object", "description": "Sends a text message (SMS) built from the `body` template through an SMS provider configured on the instance. Needs `provider`, `from`, `to` and `body`; the job's data goes into the text only through placeholders, since `contentType` and `encoding` do not apply. An empty text sends nothing and counts as success.", "properties": { "class": { "type": "string", "const": "core.SmsProfileResponseUnit", "description": "The type of this object, always `core.SmsProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "body": { "type": "string", "description": "Message text template. Placeholders are written `{--@NAME@--}` and filled from the last record's target fields and variables; also `@VAR_FILENAME@`, `@VAR_PROFILENAME@`, `@VAR_FILESIZE@`. Unknown placeholders are dropped.", "examples": [ "Order {--@orderNo@--} shipped (job {--@VAR_JOBNR@--})" ] }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "from": { "type": "string", "description": "Sender shown to the recipient, a phone number or sender name as the provider allows. `@NAME@` placeholders (variables, target field values) are resolved." }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "provider": { "type": "string", "description": "Name of the SMS provider (gateway account) to send through, as configured in the SMS service of the Lobster instance; it must already exist there. Not checked on save." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "to": { "type": "string", "description": "Mobile number the message goes to, or a placeholder such as `@VAR_MOBILE@` holding it; `@NAME@` placeholders are resolved per job.", "examples": [ "+491701234567" ] }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "type": { "$ref": "#/components/schemas/core.SmsMessageType", "default": "NORMAL", "description": "Kind of SMS. Omitting it keeps the stored kind, which reads back absent when it is an older kind this API cannot name.", "title": "SmsMessageType" }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "SmsProfileResponseUnit" }, "core.AS2ProfileResponseUnit": { "type": "object", "description": "Sends the result as an AS2 message to a trading partner through an AS2 partner channel. Needs `channel` and `fileName`; the AS2 ids, the partner's URL, certificates and signing or encryption come from the channel. An empty result skips the transfer and counts as success.", "properties": { "class": { "type": "string", "const": "core.AS2ProfileResponseUnit", "description": "The type of this object, always `core.AS2ProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "alwaysQuote": { "type": "boolean", "default": false, "description": "`true` quotes every value of the CSV output; `false` quotes only where needed. Leaving it out keeps the stored value, `null` resets it to `false`." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "channel": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelAS2", "description": "The AS2 partner channel to send through, as `{\"id\": }` of a `core.IntegrationPartnerChannelAS2`; list them with `GET /platform/api/partners/preview/{partnerId}/channels`. Must reference an existing channel visible to this client; at run time it must also be allowed for sending, else the unit fails. A variable `VAR_SYS_CHANNEL_RESPONSE` (`` = this unit's 1-based position) holding a channel id overrides it per job. Its `direction` must be `OUT` or `IN_AND_OUT`, which is checked on write. A channel that was deleted reads as no channel; a copy references none.", "title": "IntegrationPartnerChannelAS2" }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "csvDelim": { "type": "string", "description": "Field delimiter of CSV output. `null` keeps the stored value.", "examples": [ ";" ] }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "dmz": { "type": "boolean", "default": false, "description": "`true` sends through the Lobster DMZ server. `null` keeps the stored value." }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "fileName": { "type": "string", "description": "File name of the payload in the AS2 message, as the partner receives it. Placeholders: `@name@` (a target field or variable), `` / `` (the original file name, without extension), `
` (date and time), `` (the profile's running number).", "examples": [ "INVOIC_
_.edi" ] }, "httpHeader": { "type": "object", "additionalProperties": true, "description": "Additional HTTP headers sent with the request; values may hold `@name@` placeholders. Leaving it out keeps the stored value, `null` clears them. Entries whose key matches one of authorization, proxy-authorization, cookie, set-cookie, *password*, *passwd*, *pwd*, *passphrase*, *secret*, *credential*, *token*, *apikey*, *api.key*, *api-key*, Authorization, Proxy-Authorization hold a secret: a read returns those encrypted, and a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else. Every other entry is unaffected." }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "mimeType": { "type": "string", "description": "Media type declared for the payload; placeholders as in `fileName`. Leaving it out keeps the stored value, `null` resets it to the default." }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "subject": { "type": "string", "description": "Subject of the AS2 message; placeholders as in `fileName`. `null` keeps the stored value." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "url": { "type": "string", "description": "Target URL of the AS2 partner; non-empty overrides the channel's address, placeholders as in `fileName`. Leaving it out keeps the stored value, `null` clears it." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "AS2ProfileResponseUnit" }, "core.ProProfileResponseUnit": { "type": "object", "description": "Hands the unit's output to a pro response class installed on the instance, named by `customClass`, with its settings in `proProperties`. Changing `customClass`, `customClassConfig` or `proProperties` needs a data administrator, and `customClass` must be a pro response class unless a unit of the profile already stores that class and configuration; a new profile also takes a class this instance does not list, which a stored unit may name.", "properties": { "class": { "type": "string", "const": "core.ProProfileResponseUnit", "description": "The type of this object, always `core.ProProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "alwaysQuote": { "type": "boolean", "default": false, "description": "`true` quotes every value of the CSV output; only used when `contentType` is `core.ResponseContentType_CSV`." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressData": { "type": "boolean", "default": false, "description": "`true` packs the content into an archive (ZIP unless another format is chosen via `compressionType`) before it is handed over." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "csvDelim": { "type": "string", "default": ",", "description": "Field delimiter of the CSV output when `contentType` is `core.ResponseContentType_CSV`; ignored for other content types." }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customClass": { "type": "string", "description": "Fully qualified Java class name of the custom response class that receives the output. Must be one of the response classes installed on the instance, unless a custom unit of the profile already stores it; a `core.ProProfileResponseUnit` takes only the pro response classes of that list. `null` keeps the stored value. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=RESPONSE`.", "examples": [ "com.ebd.hub.datawizard.util.WaitResponse" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=RESPONSE" }, "customClassConfig": { "type": "string", "description": "Configuration handed to the custom response class, e.g. a wait time or a configuration name. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "proProperties": { "type": "object", "additionalProperties": true, "description": "Settings of the pro class, by name. Changing them needs a data administrator. `null` keeps the stored value, an empty object clears it. Entries whose key matches one of authorization, proxy-authorization, cookie, set-cookie, *password*, *passwd*, *pwd*, *passphrase*, *secret*, *credential*, *token*, *apikey*, *api.key*, *api-key* hold a secret: a read returns those encrypted, and a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else. Every other entry is unaffected." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "ProProfileResponseUnit" }, "core.SSHProfileResponseUnit": { "type": "object", "description": "Copies the result as a file by SCP to a server reached through an SSH partner channel. Needs `channel` and `fileName`; the channel's host, login and key are used. This is the editor's \"SCP\" unit. An empty content skips the transfer.", "properties": { "class": { "type": "string", "const": "core.SSHProfileResponseUnit", "description": "The type of this object, always `core.SSHProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "alwaysQuote": { "type": "boolean", "default": false, "description": "`true` quotes every value of the CSV output; `false` quotes only where needed. Absent is stored as `false`." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "channel": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelSFTP", "description": "The SSH partner channel to copy through, as `{\"id\": }` of a `core.IntegrationPartnerChannelSFTP`; list them with `GET /platform/api/partners/preview/{partnerId}/channels`. Must reference an existing channel that allows SCP (on by default), else the unit fails at run time. A variable `VAR_SYS_CHANNEL_RESPONSE` (`` = this unit's 1-based position) holding a channel id overrides it per job. Its `direction` must be `OUT` or `IN_AND_OUT`, which is checked on write. A channel that was deleted reads as no channel; a copy references none.", "title": "IntegrationPartnerChannelSFTP" }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "controlFileData": { "type": "string", "description": "Template of the control file's content. Leaving it out keeps the stored value, `null` resets it to the default." }, "controlFileNaming": { "$ref": "#/components/schemas/core.TmpFileNaming", "description": "How the control file is named relative to the target file. Leaving it out keeps the stored value, `null` resets it to the default.", "title": "TmpFileNaming" }, "controlSuffix": { "type": "string", "description": "Name or suffix of the control file, as chosen by `controlFileNaming`. Leaving it out keeps the stored value, `null` resets it to the default." }, "csvDelim": { "type": "string", "default": ",", "description": "Field delimiter of the CSV output when `contentType` is `core.ResponseContentType_CSV`: one character, `TAB`, `NL` or `CR`, or `0x` followed by two hex digits; empty runs as `,`. Ignored for other content types.", "examples": [ "0x09" ] }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "directory": { "type": "string", "description": "Directory on the server the file is written into, with the same templates as `fileName`. Empty writes the file relative to the login's home directory.", "examples": [ "/upload/in" ] }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "fileName": { "type": "string", "description": "Name of the file written on the server. Templates: `` the original file name, `` it without extension, `
` the date, `` a running number, `@NAME@` a variable or target field value, `%NAME%` a system constant.", "examples": [ "orders_
_.json" ] }, "host": { "type": "string", "description": "SSH server host; non-empty overrides the channel's. Leaving it out keeps the stored value, `null` clears it." }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "password": { "type": "string", "format": "password", "description": "SSH login password. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." }, "port": { "type": "string", "default": "22", "description": "SSH server port. It may contain a placeholder that is filled in at run time. Leaving it out keeps the stored value, `null` resets it to `22`." }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "tmpFileNaming": { "$ref": "#/components/schemas/core.TmpFileNaming", "description": "How the temporary file is named relative to the target file. Leaving it out keeps the stored value, `null` resets it to the default.", "title": "TmpFileNaming" }, "tmpSuffix": { "type": "string", "description": "Name or suffix of the temporary file the data is uploaded under first and then renamed; empty uploads directly. Leaving it out keeps the stored value, `null` resets it to the default." }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "useControlFile": { "type": "boolean", "default": false, "description": "`true` writes a control file next to the uploaded file. Leaving it out keeps the stored value, `null` resets it to `false`." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "SSHProfileResponseUnit" }, "core.KafkaProfileResponseUnit": { "type": "object", "description": "Publishes the result as one record to a Kafka topic (`topicName`) through the broker connection configured under `alias`; `producerProperties` adds Kafka producer settings. The record key value is not settable through this API. For Avro values set `dataSerializer` to `AVRO` or `AVRO_APICURIO` with `schemaFilePath` and a schema registry (`schemaRegistryUrl` or `registryChannelId`).", "properties": { "class": { "type": "string", "const": "core.KafkaProfileResponseUnit", "description": "The type of this object, always `core.KafkaProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "alias": { "type": "string", "description": "Name of the connection configuration (broker or endpoint) the unit sends through. Aliases are defined by an administrator on the instance and must be allowed for the profile's client. Not validated on write; a wrong one fails at run time." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "alwaysQuote": { "type": "boolean", "default": false, "description": "`true` quotes every value of the CSV output; only used when `contentType` is `core.ResponseContentType_CSV`." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "autoRegisterSchema": { "type": "boolean", "default": false, "description": "Only for `dataSerializer` `AVRO` and `AVRO_APICURIO`: `true` lets the serializer register the schema in the registry when it is not there yet." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "clientId": { "type": "string", "description": "Kafka `client.id` of the producer; `@name@` placeholders and `%NAME%` constants are resolved. Empty keeps Kafka's own default.", "examples": [ "lobster-orders" ] }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressData": { "type": "boolean", "default": false, "description": "`true` packs the content into an archive (ZIP unless another format is chosen via `compressionType`) before it is sent." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "csvDelim": { "type": "string", "default": ",", "description": "Field delimiter of the CSV output when `contentType` is `core.ResponseContentType_CSV`; ignored for other content types." }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dataSerializer": { "$ref": "#/components/schemas/core.KafkaDataType", "default": "STRING", "description": "How the record value is serialized: `STRING` (the content as text in `encoding`), `BYTES` (the content bytes unchanged), `INTEGER`, `LONG`, `FLOAT`, `DOUBLE` or `UUID` (the content converted to that type), or `AVRO` (Confluent schema registry) / `AVRO_APICURIO` (Apicurio registry) with the schema from `schemaFilePath`.", "title": "KafkaDataType" }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "keySerializer": { "$ref": "#/components/schemas/core.KafkaDataType", "default": "STRING", "description": "Type the record key is serialized as: `STRING`, `BYTES`, `INTEGER`, `LONG`, `FLOAT`, `DOUBLE` or `UUID`; no Avro type is available for keys.", "title": "KafkaDataType" }, "keyValue": { "type": "string", "description": "Record key sent with every message, as text; `@name@` placeholders are resolved at run time. Empty sends records without a key." }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "persistTooLargeRecord": { "type": "boolean", "default": false, "description": "`true`: when the broker rejects a record as too large, the payload is stored on the Lobster server and a placeholder record (`persisted-payload`) with a header referencing it is sent instead. Meant for load-balanced installations only." }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "producerProperties": { "type": "object", "additionalProperties": true, "description": "map Entries whose key matches one of authorization, proxy-authorization, cookie, set-cookie, *password*, *passwd*, *pwd*, *passphrase*, *secret*, *credential*, *token*, *apikey*, *api.key*, *api-key*, sasl.jaas.config, basic.auth.user.info, ssl.keystore.key hold a secret: a read returns those encrypted, and a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else. Every other entry is unaffected." }, "registryChannelId": { "type": "integer", "format": "int64", "default": 0, "description": "Id of an HTTP partner channel holding the schema registry's address and credentials (user and password, or OAuth2 client id and secret), from `GET /platform/api/partners/preview/{partnerId}/channels`; only used for `dataSerializer` `AVRO` and `AVRO_APICURIO`. `0` uses none. Not checked on write: a wrong id is stored as-is. `schemaRegistryUrl` and `producerProperties` override the channel's values." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "schemaFilePath": { "type": "string", "description": "Path on the Lobster server of the Avro schema file the value is serialized with; only used for `dataSerializer` `AVRO` and `AVRO_APICURIO`. `@name@` placeholders are resolved." }, "schemaRegistryUrl": { "type": "string", "description": "URL of the schema registry for `dataSerializer` `AVRO` and `AVRO_APICURIO`; overrides the address of `registryChannelId`. Empty uses the channel's.", "examples": [ "https://registry.example.com:8081" ] }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "topicName": { "type": "string", "description": "Topic the message is published to on the broker behind `alias`; `@name@` placeholders (a target field or variable) are resolved at run time.", "examples": [ "orders" ] }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "KafkaProfileResponseUnit" }, "core.TcpProfileResponseUnit": { "type": "object", "description": "Sends the result as text over a TCP connection named by `alias`; not settable through this API, it must already exist on the instance. With a client connection the payload goes to the remote server, and the server's answer can be passed on to another profile (`useForwardMessage`); with a server connection (a profile started by the TCP input agent) it answers the connected client named by the variable `VAR_SENDER`, only if that connection has a response handler. The payload is read as text in `encoding`.", "properties": { "class": { "type": "string", "const": "core.TcpProfileResponseUnit", "description": "The type of this object, always `core.TcpProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "alias": { "type": "string", "description": "Name of the connection configuration (broker or endpoint) the unit sends through. Aliases are defined by an administrator on the instance and must be allowed for the profile's client. Not validated on write; a wrong one fails at run time." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "alwaysQuote": { "type": "boolean", "default": false, "description": "`true` quotes every value of the CSV output; only used when `contentType` is `core.ResponseContentType_CSV`." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressData": { "type": "boolean", "default": false, "description": "`true` packs the content into an archive (ZIP unless another format is chosen via `compressionType`) before it is sent." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "csvDelim": { "type": "string", "default": ",", "description": "Field delimiter of the CSV output when `contentType` is `core.ResponseContentType_CSV`; ignored for other content types." }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "forwardContext": { "type": "string", "description": "Message context the forwarded answer is sent to, together with `forwardQueue`; used for `forwardMessageType` `SYNCHRON` and `ASYNCHRON`. `@NAME@` placeholders are resolved." }, "forwardMessageType": { "$ref": "#/components/schemas/core.MessageDeliveryType", "default": "SYNCHRON", "description": "How the answer reaches `forwardProfile`: `SYNCHRON` and `ASYNCHRON` send a message to `forwardContext`/`forwardQueue`, `DIRECT` starts `forwardProfile` directly. `PERSISTENT` currently behaves like `DIRECT`. Omitting it keeps the stored value.", "title": "MessageDeliveryType" }, "forwardProfile": { "type": "string", "description": "Name of the profile that processes the forwarded answer, usually a profile with a Message input agent (see `GET /platform/api/profiles/preview`); `@NAME@` placeholders are resolved. Sent as a message, the answer carries the variable `VAR_REMOTEHOST` with the server's address. Nothing is forwarded while it is empty." }, "forwardQueue": { "type": "string", "description": "Message queue within `forwardContext` the forwarded answer is sent to; used for `forwardMessageType` `SYNCHRON` and `ASYNCHRON`. `@NAME@` placeholders are resolved." }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "useForwardMessage": { "type": "boolean", "default": false, "description": "`true` waits for the remote server's answer and passes it on to `forwardProfile`; `false` sends without waiting for an answer. Ignored for a server connection; only meaningful for a client connection with a response handler." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "TcpProfileResponseUnit" }, "core.FtpProfileResponseUnit": { "type": "object", "description": "Uploads the result as a file to the partner's FTP server through an FTP partner channel: host, port and login come from the channel unless `host` or `port` override them. Needs `channel` and `fileName`. The login is not settable through this API. The other FTP options are not part of this object and keep their defaults.", "properties": { "class": { "type": "string", "const": "core.FtpProfileResponseUnit", "description": "The type of this object, always `core.FtpProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "alwaysQuote": { "type": "boolean", "default": false, "description": "`true` quotes every value of the CSV output; `false` quotes only where needed. Absent is stored as `false`." }, "append": { "type": "boolean", "default": false, "description": "`true` appends to an existing remote file instead of replacing it. Leaving it out keeps the stored value, `null` resets it to `false`." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "channel": { "$ref": "#/components/schemas/core.IntegrationPartnerChannelFTP", "description": "The FTP partner channel to upload through, as `{\"id\": }` of a `core.IntegrationPartnerChannelFTP`; list them with `GET /platform/api/partners/preview/{partnerId}/channels`. Must reference an existing channel visible to this client; at run time it must also be allowed for sending and have an address and login, else the unit fails. A variable `VAR_SYS_CHANNEL_RESPONSE` (`` = this unit's 1-based position) holding a channel id overrides it per job. Its `direction` must be `OUT` or `IN_AND_OUT`, which is checked on write. A channel that was deleted reads as no channel; a copy references none.", "title": "IntegrationPartnerChannelFTP" }, "checkPath": { "type": "boolean", "default": true, "description": "`true` checks that the target directory exists before uploading. Leaving it out keeps the stored value, `null` resets it to `true`." }, "clientType": { "$ref": "#/components/schemas/core.FtpClientType", "default": "FTP", "description": "Protocol; must match the channel's. `null` keeps the stored value.", "title": "FtpClientType" }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "controlFileData": { "type": "string", "description": "Template of the control file's content. Leaving it out keeps the stored value, `null` resets it to the default." }, "controlFileNaming": { "$ref": "#/components/schemas/core.TmpFileNaming", "description": "How the control file is named relative to the target file. Leaving it out keeps the stored value, `null` resets it to the default.", "title": "TmpFileNaming" }, "controlSuffix": { "type": "string", "description": "Name or suffix of the control file, as chosen by `controlFileNaming`. Leaving it out keeps the stored value, `null` resets it to the default." }, "csvDelim": { "type": "string", "default": ",", "description": "Field delimiter of the CSV output when `contentType` is `core.ResponseContentType_CSV`: one character, `TAB`, `NL` or `CR`, or `0x` followed by two hex digits; empty runs as `,`. Ignored for other content types.", "examples": [ "0x09" ] }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "dir": { "type": "string", "description": "Directory on the FTP server the file is uploaded to; empty uploads to the login directory. `null` keeps the stored value." }, "dmz": { "type": "boolean", "default": false, "description": "`true` uploads through the Lobster DMZ server instead of directly. `null` keeps the stored value." }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "fileName": { "type": "string", "description": "Name of the uploaded file on the FTP server. Placeholders: `@name@` (a target field or variable), `` / `` (the original file name, without extension), `
` (date and time), `` (the profile's running number).", "examples": [ "orders_
_.csv" ] }, "host": { "type": "string", "description": "FTP server host; non-empty overrides the channel's. `null` keeps the stored value." }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "passive": { "type": "boolean", "default": true, "description": "`true` connects in passive mode. Not used for SFTP. Leaving it out keeps the stored value, `null` resets it to `true`." }, "password": { "type": "string", "format": "password", "description": "FTP login password. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." }, "port": { "type": "string", "description": "Port of the FTP server. It may contain a placeholder that is filled in at run time. Leave it empty or send `0` to use the port of the channel. A new unit created without a port gets `21`, and then connects on port 21 even if the channel uses another port. `null` keeps the stored value.", "examples": [ "22" ] }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "siteCmd": { "type": "string", "description": "SITE commands sent to the server before the upload, one per line. Leaving it out keeps the stored value, `null` clears them." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "tmpFileNaming": { "$ref": "#/components/schemas/core.TmpFileNaming", "description": "How the temporary file is named relative to the target file. Leaving it out keeps the stored value, `null` resets it to the default.", "title": "TmpFileNaming" }, "tmpSuffix": { "type": "string", "description": "Name or suffix of the temporary file the data is uploaded under first and then renamed; empty uploads directly. Leaving it out keeps the stored value, `null` resets it to the default." }, "transferMode": { "type": "boolean", "default": false, "description": "`true` transfers in ASCII mode, `false` in binary mode. Not used for SFTP. Leaving it out keeps the stored value, `null` resets it to `false`." }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "useControlFile": { "type": "boolean", "default": false, "description": "`true` writes a control file next to the uploaded file. Leaving it out keeps the stored value, `null` resets it to `false`." }, "verifyFile": { "type": "boolean", "default": false, "description": "`true` verifies the uploaded file by reading its size back. Leaving it out keeps the stored value, `null` resets it to `false`." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "FtpProfileResponseUnit" }, "core.CustomProfileResponseUnit": { "type": "object", "description": "Hands the unit's output to a custom response class installed on the instance, named by `customClass`. Changing `customClass` or `customClassConfig`, or setting them on a new unit, needs a data administrator, and `customClass` must be a registered response class unless a custom unit of the profile already stores that class and configuration. The pass-back class is not accepted here; use `core.PassBackBinaryDataProfileResponseUnit`.", "properties": { "class": { "type": "string", "const": "core.CustomProfileResponseUnit", "description": "The type of this object, always `core.CustomProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "alwaysQuote": { "type": "boolean", "default": false, "description": "`true` quotes every value of the CSV output; only used when `contentType` is `core.ResponseContentType_CSV`." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressData": { "type": "boolean", "default": false, "description": "`true` packs the content into an archive (ZIP unless another format is chosen via `compressionType`) before it is handed over." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "csvDelim": { "type": "string", "default": ",", "description": "Field delimiter of the CSV output when `contentType` is `core.ResponseContentType_CSV`; ignored for other content types." }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customClass": { "type": "string", "description": "Fully qualified Java class name of the custom response class that receives the output. Must be one of the response classes installed on the instance, unless a custom unit of the profile already stores it; a `core.ProProfileResponseUnit` takes only the pro response classes of that list. `null` keeps the stored value. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=RESPONSE`.", "examples": [ "com.ebd.hub.datawizard.util.WaitResponse" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=RESPONSE" }, "customClassConfig": { "type": "string", "description": "Configuration handed to the custom response class, e.g. a wait time or a configuration name. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "CustomProfileResponseUnit" }, "core.MqttProfileResponseUnit": { "type": "object", "description": "Publishes the result as one message to an MQTT broker. The broker is named by `alias`, an MQTT connection the profile's client may use; not settable through this API, it must already exist on the instance. Needs `alias` and `topic`; `contentType` chooses the payload (usually `core.ResponseContentType_IU`).", "properties": { "class": { "type": "string", "const": "core.MqttProfileResponseUnit", "description": "The type of this object, always `core.MqttProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "alias": { "type": "string", "description": "Name of the connection configuration (broker or endpoint) the unit sends through. Aliases are defined by an administrator on the instance and must be allowed for the profile's client. Not validated on write; a wrong one fails at run time." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "alwaysQuote": { "type": "boolean", "default": false, "description": "`true` quotes every value of the CSV output; only used when `contentType` is `core.ResponseContentType_CSV`." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressData": { "type": "boolean", "default": false, "description": "`true` packs the content into an archive (ZIP unless another format is chosen via `compressionType`) before it is sent." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "csvDelim": { "type": "string", "default": ",", "description": "Field delimiter of the CSV output when `contentType` is `core.ResponseContentType_CSV`; ignored for other content types." }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "qos": { "$ref": "#/components/schemas/core.MqttQualityOfService", "default": "AT_LEAST_ONCE", "description": "MQTT quality of service of the publish: `AT_MOST_ONCE`, `AT_LEAST_ONCE` or `EXACTLY_ONCE`. Omitting it keeps the stored value.", "title": "MqttQualityOfService" }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "topic": { "type": "string", "description": "MQTT topic the message is published to. Resolved per job: `@NAME@` inserts a variable or target field value, `%NAME%` a system constant, `
` the date.", "examples": [ "orders/outbound" ] }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "MqttProfileResponseUnit" }, "core.SapAleProfileResponseUnit": { "type": "object", "description": "Sends the result to an SAP system as IDocs (ALE), by calling `IDOC_INBOUND_ASYNCHRONOUS`. The content must be IDoc flat records starting with an `EDI_DC40` control record, which is what the default `contentType` `core.ResponseContentType_FIX` writes from a target tree shaped as an IDoc. Needs `alias`; `encoding` does not apply (always UTF-8). An empty content skips the call.", "properties": { "class": { "type": "string", "const": "core.SapAleProfileResponseUnit", "description": "The type of this object, always `core.SapAleProfileResponseUnit`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": true, "description": "Whether the unit runs. An inactive unit (`false`) stays stored but is skipped in phase 6, which the job log notes; the other units still run in list order." }, "alias": { "type": "string", "description": "Name of the SAP connection to send through, an SAP alias configured on the Lobster instance (it must already exist and be allowed for the profile's client, else the unit fails at run time). `@NAME@` placeholders are resolved." }, "allowEmptyData": { "type": "boolean", "default": false, "description": "Whether this unit still runs when its body would be empty; `false` skips the unit. `null` keeps the stored value." }, "alwaysQuote": { "type": "boolean", "default": false, "description": "`true` quotes every value of the CSV output; only used when `contentType` is `core.ResponseContentType_CSV`. Absent is stored as `false`." }, "asmId": { "type": "string", "description": "Id of the ASM (application server monitoring) entry this unit reports to; empty reports to none. `null` keeps the stored value." }, "callBeforeArchiveOperation": { "type": "boolean", "default": false, "description": "Whether `postExecutorClass` runs before this unit's output is moved into the job's archive, rather than after. `null` keeps the stored value." }, "checkDocnums": { "type": "boolean", "default": false, "description": "Check the IDocs before sending: every `EDI_DC40` control record needs a unique, non-empty numeric `DOCNUM`, every data segment must carry a `DOCNUM` and client (`MANDT`) of a control record, and every control record needs data segments; a violation fails the unit." }, "compress": { "type": "boolean", "default": false, "description": "Whether the unit's own body is packed into an archive before it is sent; `compressionType` then chooses the format. Published only on unit types with their own archive flag under this name; the others publish an equivalent flag under their own name instead (e.g. `zipFile`, `compressed`, `zip`, `compressData`) and refuse a non-null value here. `null` keeps the stored value." }, "compressionType": { "$ref": "#/components/schemas/core.CompressionType", "description": "Archive format used when the unit archives its output (`compress`, or the unit type's own archive switch); ignored otherwise. Available on every unit type that can archive. `null` keeps the stored value. A new unit created without a format archives as `ZIP`, and reads back with `null` here, just like a unit created in the profile editor.", "title": "CompressionType" }, "configFile": { "type": "string", "description": "Optional filter for the IDoc segments sent: empty sends all; otherwise a properties file path and/or `key=value` pairs separated by `;`: `mode=default` sends segments starting with `E`, `Y` or `Z`, `mode=uppercase` those starting with `A`-`Z`, `mode=regex;regex=` those matching the pattern; any other non-empty value sends segments not starting with lowercase `r` or `p`." }, "contentType": { "$ref": "#/components/schemas/core.ResponseContentType", "description": "Body the unit sends, selected by `class`: `core.ResponseContentType_IU` (the integration unit's output), `core.ResponseContentType_ORIG` (input as received), `core.ResponseContentType_NONE` (no body), or a target tree written directly as `_XML`, `_CSV`, `_FIX` or `_EXCEL`. When omitted, most unit types write `_ORIG` even over a stored value (Kafka, MQTT, AMQP and Google Pub/Sub keep it), so send it with every unit. Not used by `core.SapProfileResponseUnit`/`core.SmsProfileResponseUnit`; must stay absent on `core.OpaqueProfileResponseUnit`.", "title": "ResponseContentType" }, "csvDelim": { "type": "string", "default": ",", "description": "Field delimiter of the CSV output when `contentType` is `core.ResponseContentType_CSV`: one character, `TAB`, `NL` or `CR`, or `0x` followed by two hex digits; empty runs as `,`. Ignored for other content types.", "examples": [ "0x09" ] }, "csvQuote": { "type": "string", "default": "\"", "description": "Quoting character of the CSV output when `contentType` is `core.ResponseContentType_CSV`, as a one-character string; an empty string is stored as `\"`. Ignored for other content types, and not published on unit types with no content settings at all. `null` keeps the stored value." }, "customErrorText": { "type": "string", "description": "Text appended to the job log when this unit fails, in addition to the underlying error; empty adds nothing. `null` keeps the stored value." }, "dependencyType": { "$ref": "#/components/schemas/core.ResponseDependencyType", "default": "NONE", "description": "Whether this unit's run depends on an earlier one in `units`: `NONE` runs it unconditionally, `ON_ERROR`/`ON_SUCCESS` only after the unit(s) named by `dependsOn` failed or succeeded. `null` keeps the stored value.", "title": "ResponseDependencyType" }, "dependsOn": { "type": "string", "description": "The earlier unit(s) this one depends on while `dependencyType` is not `NONE`: a comma-separated list of 1-based positions in `units`, each less than this unit's own position; `*` (only with `ON_ERROR`) means any earlier unit; a `@variable@` or `%constant%` is resolved per job. Ignored while `dependencyType` is `NONE`. `null` keeps the stored value.", "examples": [ "1,2" ] }, "encoding": { "type": "string", "description": "Character encoding the body is written in, as a Java charset name. `_IU` output is converted into it, and `_ORIG_UNZIPPED_DIFF_CODING` converts the input from the profile's `inputHandling.encoding` into it; a character the encoding cannot represent is replaced (by `_` or `?`, depending on the output type), not refused. Ignored for `_EXCEL` and for `_ORIG`/`_ORIG_UNZIPPED`, which keep the input's bytes. An empty value and the legacy `Raw data` fall back to `8859_1` (ISO-8859-1) at run time. An unsupported name is refused on write. Not used by SAP, SAP ALE, SMS units. Read-only on `core.PassBackBinaryDataProfileResponseUnit` (always `8859_1`): it reads back absent, and a write other than empty or an ISO-8859-1 name is refused.", "examples": [ "UTF-8" ] }, "excelConform": { "type": "boolean", "default": false, "description": "`true` writes the CSV output in a form Excel opens without a manual import wizard; only used when `contentType` is `core.ResponseContentType_CSV`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "label": { "type": "string", "description": "Optional label shown for this unit in the list of response units. `null` keeps the stored value." }, "maxWaitTime": { "type": "integer", "format": "int32", "default": 0, "description": "Maximum time in seconds to wait for this unit before it is considered failed, `0` for no limit. Not settable on unit types that keep no execution-time limit: absent on a read of them. `null` keeps the stored value.", "examples": [ 300 ] }, "newLine": { "$ref": "#/components/schemas/core.ResponseNewLine", "default": "CRLF", "description": "Line terminator written between CSV/FIX records; ignored for other content types. Same publication set as `csvQuote`. `null` keeps the stored value.", "title": "ResponseNewLine" }, "noTrailingLineFeed": { "type": "boolean", "default": false, "description": "`true` omits the line terminator after the last CSV/FIX record; used only for those content types. Same publication set as `csvQuote`. `null` keeps the stored value." }, "postExecutorClass": { "type": "string", "description": "Fully qualified Java class name of a post-executor that processes this unit's output after it ran; empty runs none. Must be one of the post-executors installed on the instance or a class that loads as a post-executor, unless it is already the stored value. `null` keeps the stored value; send `\"\"` to switch it off. The valid values are listed by `GET /platform/api/profiles/preview/class-registry?kind=POST_EXECUTER`.", "examples": [ "com.ebd.hub.datawizard.postexec.ZUGFerdPDF" ], "x-lobster-values-from": "/platform/api/profiles/preview/class-registry?kind=POST_EXECUTER" }, "postExecutorConfig": { "type": "string", "description": "Configuration name passed to `postExecutorClass`; empty passes none. `null` keeps the stored value." }, "replaceNewLineInFixRecord": { "type": "boolean", "default": false, "description": "`true` replaces `\\r\\n` occurring inside a string field's value with a space in the FIX output; only used when `contentType` is `core.ResponseContentType_FIX`. Same publication set as `csvQuote`. `null` keeps the stored value." }, "retries": { "type": "integer", "format": "int32", "default": -1, "description": "Number of retries on failure; `-1` uses the system default, a value below `-1` is stored as `-1` and `0` as `1`. Only on unit types that support retries: absent on a read of any other type, and not settable there. `null` keeps the stored value." }, "retryIntervalSeconds": { "type": "integer", "format": "int32", "default": -1, "description": "Seconds to wait between retries, at least `3` unless `-1` (the system default), which a lower value other than `-1` is raised to. Same type restriction as `retries`. `null` keeps the stored value." }, "runOnlyIfCompareOperation": { "$ref": "#/components/schemas/core.ResponseCompareOperation", "default": "EQ", "description": "How `runOnlyIfVariableValue` is compared against `runOnlyIfVariableName`'s value. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value.", "title": "ResponseCompareOperation" }, "runOnlyIfUseVariable": { "type": "boolean", "default": false, "description": "Whether this unit runs only while the variable named by `runOnlyIfVariableName` compares as `runOnlyIfCompareOperation` against `runOnlyIfVariableValue`; `false` runs it unconditionally. `null` keeps the stored value." }, "runOnlyIfVariableName": { "type": "string", "description": "Target field or profile variable `runOnlyIfUseVariable` gates this unit on; must not be blank while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "runOnlyIfVariableValue": { "type": "string", "default": "true", "description": "Value `runOnlyIfVariableName`'s value is compared against. Only used while `runOnlyIfUseVariable` is `true`. `null` keeps the stored value." }, "testMode": { "$ref": "#/components/schemas/core.ResponseTestMode", "default": "ANY", "description": "Whether this unit runs on a test run of its profile: `ANY` every time, `ONLY` only on a test run, `NOT` never on a test run. `null` keeps the stored value.", "title": "ResponseTestMode" }, "treatAsGlobalError": { "type": "boolean", "default": true, "description": "Whether a failure of this unit marks its whole job as failed. `null` keeps the stored value." }, "zipEncryption": { "$ref": "#/components/schemas/core.ZipEncryptionType", "default": "NONE", "description": "Password protection of a `ZIP`/`SEVEN_ZIP` `compressionType`; ignored for other formats and while the unit's archive flag is off. `SEVEN_ZIP` has no AES option: `AES_128`/`AES_256` are silently downgraded to `PASSWORD`. Not settable on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value.", "title": "ZipEncryptionType" }, "zipPassword": { "type": "string", "format": "password", "description": "Password of the encrypted archive when `compressionType` packs one; never returned. Not modelled on `core.CloudStorageProfileResponseUnit`, which keeps a stored password unmapped. `null` keeps the stored value. Holds a secret. A read returns it encrypted; a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else." } }, "title": "SapAleProfileResponseUnit" }, "core.CheckpointDay": { "type": "string", "description": "The day (or weekday range) a checkpoint applies to. `MONDAY_TO_FRIDAY` and `MONDAY_TO_SUNDAY` are a write-only shorthand for entering the same checkpoint on every day of the range; reading a profile back always reports the plain day (`SUNDAY` to `SATURDAY`) a checkpoint is stored under.\n\n- `SUNDAY`: Sunday.\n- `MONDAY`: Monday.\n- `TUESDAY`: Tuesday.\n- `WEDNESDAY`: Wednesday.\n- `THURSDAY`: Thursday.\n- `FRIDAY`: Friday.\n- `SATURDAY`: Saturday.\n- `MONDAY_TO_FRIDAY`: Monday through Friday: writes the same checkpoint on each of those five days.\n- `MONDAY_TO_SUNDAY`: Monday through Sunday: writes the same checkpoint on all seven days.", "enum": [ "SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "MONDAY_TO_FRIDAY", "MONDAY_TO_SUNDAY" ], "title": "CheckpointDay" }, "core.JsonSplitSettings": { "type": "object", "description": "Splitting a JSON input; applies only while `parsing.documentType` is `JSON`, otherwise a changed member is rejected. `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.JsonSplitSettings", "description": "The type of this object, always `core.JsonSplitSettings`. Required where the member it is sent in accepts several types." }, "enabled": { "type": "boolean", "default": false, "description": "Whether the document is split with `splitterSettings` rather than read as a whole." }, "linesPerChunk": { "type": "integer", "format": "int32", "default": 0, "description": "Together with `parsing.formatSettings.jsonLines: true`: how many lines are read into one chunk before it is mapped, or `0` for one chunk per line.", "minimum": 0 }, "splitterSettings": { "type": "object", "additionalProperties": true, "description": "Settings for the JSON splitter, used while `enabled` is `true`; the allowed keys are the splitter's own (e.g. its chunk-defining path). Must be keys and values the splitter itself accepts." } }, "title": "JsonSplitSettings" }, "core.XmlSplitSettings": { "type": "object", "description": "Splitting an XML input into chunks; applies only while `parsing.documentType` is `XML` and `parsing.formatSettings.parserVersion` is `V4`, otherwise a changed member is rejected. `null` keeps every stored value; sending an object only changes the members it carries.", "properties": { "class": { "type": "string", "const": "core.XmlSplitSettings", "description": "The type of this object, always `core.XmlSplitSettings`. Required where the member it is sent in accepts several types." }, "chunkSize": { "type": "integer", "format": "int32", "default": 0, "description": "How many `splitElement` chunks are read before the document is handed to the mapping, or `0` to split on every occurrence. Needs `splitElement`.", "minimum": 0 }, "copyElements": { "type": "array", "description": "Further tags, in addition to `splitElement`, to copy the value of into every chunk. Needs `splitElement`.", "items": { "type": "string" } }, "copyRootAttributes": { "type": "boolean", "default": false, "description": "Whether the document's root attributes are copied into every chunk. Needs `splitElement`." }, "memoryMode": { "$ref": "#/components/schemas/core.XmlMemoryMode", "default": "HYBRID", "description": "Together with `streaming: true`: where the document is held while it streams.", "title": "XmlMemoryMode" }, "splitElement": { "type": "string", "description": "The tag the document is split into chunks at, so a chunk is parsed and mapped before the next is read. Required together with `chunkSize`/`copyElements`/`copyRootAttributes`, and must differ from `parsing.formatSettings.recordTag`." }, "streaming": { "type": "boolean", "default": false, "description": "Whether the streaming parser is used for a document too large to fit in memory otherwise." } }, "title": "XmlSplitSettings" }, "ErrorDetail": { "type": "object", "description": "A single failure within the request.", "properties": { "code": { "type": "string", "description": "Stable machine-readable `UPPER_SNAKE` code of this individual failure, e.g. `FIELD_REQUIRED`, `FIELD_INVALID` or `VALUE_OUT_OF_RANGE`." }, "message": { "type": "string", "description": "Human-readable, non-localized explanation of this individual failure." }, "target": { "type": "string", "description": "What this failure refers to, e.g. the violated field." } }, "required": [ "code", "message" ] }, "core.Weekday": { "type": "string", "description": "A day of the week: `day` of a data queue skip window.\n\n- `SUNDAY`: Sunday.\n- `MONDAY`: Monday.\n- `TUESDAY`: Tuesday.\n- `WEDNESDAY`: Wednesday.\n- `THURSDAY`: Thursday.\n- `FRIDAY`: Friday.\n- `SATURDAY`: Saturday.", "enum": [ "SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY" ], "title": "Weekday" }, "core.OftpProtocol": { "type": "string", "description": "An OFTP transport allowed by `allowedProtocols` on an OFTP channel.\n\n- `ISDN`: OFTP over ISDN.\n- `TCPIP`: OFTP over TCP/IP without TLS.\n- `TCPIP_TLS`: OFTP over TCP/IP with TLS.", "enum": [ "ISDN", "TCPIP", "TCPIP_TLS" ], "title": "OftpProtocol" }, "core.IntegrationPartnerContact": { "type": "object", "description": "A contact person (a person to reach, not a login): a partner's contacts are held in the partner's `contacts` member, the contact of a single channel in that channel's `contact` member.", "properties": { "class": { "type": "string", "const": "core.IntegrationPartnerContact", "description": "The type of this object, always `core.IntegrationPartnerContact`. Required where the member it is sent in accepts several types." }, "emailAddresses": { "type": "array", "description": "E-mail addresses of the contact, one entry per address; in the stored form (comma-separated, display names quoted) they must fit 250 characters.", "examples": [ "[\"erika.mustermann@acme.example\"]" ], "items": { "type": "string" } }, "fax": { "type": "string", "description": "Fax number of the contact.", "examples": [ "+49 30 1234568" ], "maxLength": 20 }, "id": { "type": "integer", "format": "int64", "description": "Id of the contact, assigned by the server. Ignored on create. On a partner update an id must be one of this partner's stored contact ids and updates that contact, left out creates a new one; on a channel update it must be the id of the channel's own contact, left out updates that contact." }, "language": { "type": "string", "description": "Language of the contact, as stored by the platform; left out or blank, none is set.", "examples": [ "de" ], "maxLength": 10 }, "name": { "type": "string", "description": "Name of the contact person.", "examples": [ "Erika Mustermann" ], "maxLength": 250 }, "note": { "type": "string", "description": "Free-text note about the contact." }, "phone": { "type": "string", "description": "Phone number of the contact.", "examples": [ "+49 30 1234567" ], "maxLength": 20 } }, "title": "IntegrationPartnerContact" }, "core.ChannelDirection": { "type": "string", "description": "The way data flows over a channel (its `direction`).\n\n- `IN`: Incoming only: the partner sends data to the platform. What a channel gets on create when it names none, except JMS, AMQP 0-9-1, AMQP 1.0, Google Pub/Sub, cloud storage and SMB.\n- `OUT`: Outgoing only: the platform sends data to the partner.\n- `IN_AND_OUT`: Both: data flows in either direction.", "enum": [ "IN", "OUT", "IN_AND_OUT" ], "title": "ChannelDirection" }, "core.OftpReleaseLevel": { "type": "string", "description": "The highest OFTP protocol release an OFTP channel offers: `maximumProtocolReleaseLevel`.\n\n- `V1_2`: OFTP 1.2.\n- `V1_3`: OFTP 1.3.\n- `V1_4`: OFTP 1.4.\n- `V2_0`: OFTP 2.0.", "enum": [ "V1_2", "V1_3", "V1_4", "V2_0" ], "title": "OftpReleaseLevel" }, "core.IntegrationPartner": { "type": "object", "description": "A business party the platform exchanges data with. The partner itself holds only its name, status and rate-limit policy; its connections (logins, addresses, identifiers) are channels, managed under `/platform/api/partners/preview/{partnerId}/channels`, which profiles reference instead of the partner. `{\"name\": \"ACME Logistics\"}` is enough to create one; deleting a partner also deletes all its channels.", "properties": { "class": { "type": "string", "const": "core.IntegrationPartner", "description": "The type of this object, always `core.IntegrationPartner`. Required where the member it is sent in accepts several types." }, "contacts": { "type": "array", "description": "Contacts of the partner (people, not logins). `null` or left out keeps the stored contacts; a list replaces them: contacts not in the list are deleted, entries with a known `id` are updated, entries without one are created. Not carried on the partner embedded in a channel body.", "items": { "$ref": "#/components/schemas/core.IntegrationPartnerContact", "title": "IntegrationPartnerContact" } }, "id": { "type": "integer", "format": "int64", "description": "Numeric id of the partner, assigned by the server on create; it is the `{partnerId}` in the partner's URLs and its channels' URLs. A value sent in a body is ignored.", "readOnly": true }, "isManagedByTpm": { "type": "boolean", "description": "`true` when the partner is managed by the connected Trading Partner Manager (TPM). Such a partner and its channels cannot be deleted through this API. Set only by the TPM synchronisation; a value sent here is ignored.", "readOnly": true }, "name": { "type": "string", "description": "Display name of the partner. Must be unique among all partners that are not deleted.", "examples": [ "ACME Logistics" ], "maxLength": 250, "minLength": 1 }, "policy": { "type": "string", "description": "Name of the rate-limit policy for requests this partner sends to the platform's REST API and MCP endpoints through its HTTP channels; it applies when the HTTP channel itself names no policy. `Global` is built in; another name must reference an existing policy. Left out on create or blank, the partner has no policy; an explicit `null` keeps the stored value.", "examples": [ "Global" ] }, "status": { "$ref": "#/components/schemas/core.PartnerStatus", "default": "ACTIVE", "description": "Whether the partner is in use. An explicit `null` keeps the stored value. `DELETED` cannot be written - delete the partner with DELETE instead.", "title": "PartnerStatus" } }, "required": [ "name" ], "title": "IntegrationPartner" }, "core.FtpProtocol": { "type": "string", "description": "An FTP flavour the partner may use to log in to the platform's FTP server: `allowedProtocols` of an FTP channel.\n\n- `FTP`: Plain FTP, unencrypted.\n- `FTPS_EXPLICIT`: FTPS explicit: the connection starts plain and upgrades to TLS (AUTH TLS).\n- `FTPS_IMPLICIT`: FTPS implicit: TLS from the first byte.", "enum": [ "FTP", "FTPS_EXPLICIT", "FTPS_IMPLICIT" ], "title": "FtpProtocol" }, "core.MailChannelProtocol": { "type": "string", "description": "A mail protocol the channel may be used with: `allowedProtocols` of a mail channel.\n\n- `SMTP`: SMTP: sending mail without login.\n- `ASMTP`: ASMTP: sending mail through an SMTP server that requires a login.\n- `POP3`: POP3: fetching mail from a POP3 mailbox.\n- `IMAP`: IMAP: fetching mail from an IMAP mailbox.", "enum": [ "SMTP", "ASMTP", "POP3", "IMAP" ], "title": "MailChannelProtocol" }, "core.MailContentPart": { "type": "string", "description": "Which part of a mail a rule applies to: `contentType` of a mail dispatch rule, `contentType` of an SMTP rule.\n\n- `BODY`: The rule applies to the mail body.\n- `ATTACHMENT`: The rule applies to attachments.\n- `BODY_AND_ATTACHMENT`: The rule applies to both the body and attachments.\n- `NONE`: The rule applies only to mails with an empty body and no attachment, so only the channel, sender, recipients and subject are checked.", "enum": [ "BODY", "ATTACHMENT", "BODY_AND_ATTACHMENT", "NONE" ], "title": "MailContentPart" }, "core.MailProtocol": { "type": "string", "description": "The protocol a mail rule's agent fetches with: `mailType` of a mail dispatch rule, `mailType` of an SMTP rule.\n\n- `POP3`: POP3.\n- `IMAP`: IMAP.\n- `X400`: X.400; on a mail dispatch rule this also makes `sender` compared as an X.400 address instead of text.", "enum": [ "POP3", "IMAP", "X400" ], "title": "MailProtocol" }, "core.MailChannelMatch": { "type": "string", "description": "How a mail's sender is matched against a partner channel: `matchChannel` of a mail dispatch rule, `channelMatchType` of an SMTP rule.\n\n- `POLLING_CHANNEL`: The mail belongs to the rule's own polling channel.\n- `SET_CHANNEL`: The mail belongs to `channel`.\n- `OWN_IDENTIFIER`: The mail belongs to any channel with the same own identifier as `channel`.\n- `IGNORE`: The channel is ignored; `channel` is not evaluated.", "enum": [ "POLLING_CHANNEL", "SET_CHANNEL", "OWN_IDENTIFIER", "IGNORE" ], "title": "MailChannelMatch" }, "core.MessageFilterSetting": { "type": "object", "description": "One parameter of a function in an agent's `filters` (an element of `settings`): where the value comes from (`type`) and the value itself (`value`). The position in `settings` decides which parameter of the function it fills.", "properties": { "class": { "type": "string", "const": "core.MessageFilterSetting", "description": "The type of this object, always `core.MessageFilterSetting`. Required where the member it is sent in accepts several types." }, "index": { "type": "string", "description": "Letter of the parameter this entry fills: `a` for the first, `b` for the second, and so on. Keep it matching the entry's position in `settings`: the function takes its parameters by position.", "examples": [ "a" ] }, "type": { "type": "string", "description": "Where the parameter's value comes from: `constant` the text in `value` (`%name%` constants are resolved), `linked field` the received message text (`value` is ignored), `result` the result of an earlier function of the same `filters` list, `value` being its 1-based position, `variable` the variable named in `value` (the profile's own variables are not available in this check). `field`, `destination` and `input` refer to source fields, target fields and macro inputs, which the message check does not have. Required; any other value is rejected.", "examples": [ "constant" ] }, "value": { "type": "string", "description": "The parameter's value as text; its meaning depends on `type`: the constant itself, the 1-based position of an earlier function for `result`, or a variable name for `variable`." }, "xpathExpression": { "type": "string", "description": "XPath of a source value, used only by the XML/JSON path mapping engine; the message check runs a simple mapping and ignores it. Leave it empty." } }, "title": "MessageFilterSetting" }, "core.MqttCondition": { "type": "string", "description": "The comparison an MQTT, AMQP or Kafka pre-selection condition applies to a message: `condition` of a condition entry. Use each condition once; a later entry with the same condition replaces the earlier one.\n\n- `REGEX`: The whole message matches a Java regular expression. Text messages only.\n- `CONTAINS`: The message contains a value as a case-sensitive substring. Text messages only.\n- `SMALLER`: The message is numerically or chronologically smaller than a value. Numeric and date messages.\n- `GREATER`: The message is numerically or chronologically greater than a value. Numeric and date messages.\n- `EQUALS`: The message equals a value. Text, numeric and date messages.\n- `NOT`: The message differs from at least one value. Text, numeric and date messages.\n- `SMALLER_EQUALS`: The message is smaller than or equal to a value. Numeric and date messages.\n- `GREATER_EQUALS`: The message is greater than or equal to a value. Numeric and date messages.", "enum": [ "REGEX", "CONTAINS", "SMALLER", "GREATER", "EQUALS", "NOT", "SMALLER_EQUALS", "GREATER_EQUALS" ], "title": "MqttCondition" }, "core.AccumulationAggregation": { "type": "string", "description": "How an accumulation combines the messages of a flushed batch into one: `aggregation` of the accumulation settings.\n\n- `CONCAT`: Joins the batch's payloads with no separator between them.\n- `CONCAT_SEPARATOR`: Joins the batch's payloads with `separator` between them.\n- `XML_WRAP`: Wraps the batch's payloads as XML elements under one root element named `xmlWrapRootName`.\n- `JSON_ARRAY`: Combines the batch's payloads into one JSON array.\n- `FINAL_VALUE`: Keeps only the value `finalValueFunction` selects from the batch.", "enum": [ "CONCAT", "CONCAT_SEPARATOR", "XML_WRAP", "JSON_ARRAY", "FINAL_VALUE" ], "title": "AccumulationAggregation" }, "core.AccumulationComparator": { "type": "object", "description": "One payload comparison of `AccumulationSettings.comparators`: `operator` checked against the newest buffered message's payload, read as `payloadDataType`, for each of `values`. Several `values` are OR-composed for the same `operator`, e.g. two `EQUALS` values flush on either.", "properties": { "class": { "type": "string", "const": "core.AccumulationComparator", "description": "The type of this object, always `core.AccumulationComparator`. Required where the member it is sent in accepts several types." }, "operator": { "$ref": "#/components/schemas/core.AccumulationOperator", "description": "Comparison to apply: `REGEX` and `CONTAINS` need `payloadDataType` `STRING`; `SMALLER`, `GREATER`, `SMALLER_EQUALS` and `GREATER_EQUALS` need `BIG_INTEGER`, `BIG_DECIMAL` or `DATE`; `EQUALS` and `NOT` work with every supported `payloadDataType`. A value that fails to parse as `payloadDataType` fails the whole check for that message. Required.", "title": "AccumulationOperator" }, "values": { "type": "array", "description": "Values compared against the payload; must not be empty. Compared as text for `REGEX` and `CONTAINS`, otherwise parsed as `payloadDataType`.", "items": { "type": "string" } } }, "title": "AccumulationComparator" }, "core.AccumulationFinalValueFunction": { "type": "string", "description": "The value an accumulation keeps from a flushed batch when its `aggregation` is `FINAL_VALUE`: `finalValueFunction` of the accumulation settings.\n\n- `MIN`: Keeps the batch's smallest numeric payload, unchanged.\n- `MAX`: Keeps the batch's largest numeric payload, unchanged.\n- `AVG`: Computes the average of the batch's numeric payloads and stores it as a new value.\n- `LAST`: Keeps the most recent payload of the batch, unchanged; the only value that also works for non-numeric payloads.", "enum": [ "MIN", "MAX", "AVG", "LAST" ], "title": "AccumulationFinalValueFunction" }, "core.AccumulationMetadataStrategy": { "type": "string", "description": "Which buffered message's file name, sender and message variables a flushed batch keeps: `metadataStrategy` of the accumulation settings.\n\n- `FIRST`: Uses the metadata of the batch's first message.\n- `LAST`: Uses the metadata of the batch's last message.\n- `COLLECT_INDEXED`: Keeps every message's metadata, indexed by its position in the batch.\n- `COMMON_ONLY`: Keeps only the metadata values that are the same across every message in the batch.", "enum": [ "FIRST", "LAST", "COLLECT_INDEXED", "COMMON_ONLY" ], "title": "AccumulationMetadataStrategy" }, "core.SshProtocol": { "type": "string", "description": "An SSH flavour the partner may use to log in to the platform's SFTP server: `allowedProtocols` of an SFTP channel.\n\n- `SCP`: SCP: file copy over SSH.\n- `SFTP`: SFTP: file transfer over SSH.\n- `SSH`: SSH: remote command execution. Not allowed on a new channel.", "enum": [ "SCP", "SFTP", "SSH" ], "title": "SshProtocol" }, "core.As2MdnMode": { "type": "string", "description": "Which MDN (receipt) an AS2 or AS4 channel requests for its outgoing messages: `mdnMode` of an AS2 or AS4 channel.\n\n- `DEFAULT`: Uses the AS2 service's system setting.\n- `SYNCHRON`: Requests the MDN returned in the HTTP response.\n- `ASYNCHRON`: Requests the MDN sent later to the channel's `sendingMdnUrl`, or the AS2 service's default if none is set.", "enum": [ "DEFAULT", "SYNCHRON", "ASYNCHRON" ], "title": "As2MdnMode" }, "core.SapStructureRow": { "type": "object", "description": "One row of values for an SAP structure or table parameter; one element of the `rows` of an entry in `structures` or `tables`.", "properties": { "class": { "type": "string", "const": "core.SapStructureRow", "description": "The type of this object, always `core.SapStructureRow`. Required where the member it is sent in accepts several types." }, "values": { "type": "array", "description": "Values in the order of the entry's `header`, e.g. `[\"000000000000004711\", \"1000\"]`. Date masks such as `@yyyyMMdd@`, `%NAME%` constants and `@NAME@` variables are resolved on each run.", "items": { "type": "string" } } }, "title": "SapStructureRow" }, "core.OpenIdSettings": { "type": "object", "description": "How the platform validates a partner's bearer-token (JWT) login on its HTTP server, held in the `openIdSettings` member of an HTTP channel. A token is accepted for this channel only when its `iss` equals `issuer`, its `aud` contains `audience`, its signature verifies and it has not expired; the signature is checked against the stored certificate `certificateId`, or against the keys fetched from `url` when `certificateDynamicFetch` is `true`. Contains no secret. Read back only when the channel has stored settings; `\"openIdSettings\": {}` (every member empty) removes them.", "properties": { "class": { "type": "string", "const": "core.OpenIdSettings", "description": "The type of this object, always `core.OpenIdSettings`. Required where the member it is sent in accepts several types." }, "audience": { "type": "string", "description": "Audience (`aud` claim) a partner's token must contain: the token's `aud` may be this one value or a list that includes it.", "examples": [ "lobster-platform" ] }, "certificateDynamicFetch": { "type": "boolean", "default": false, "description": "`true` fetches the signing keys from `url` instead of using the stored certificate `certificateId`; `false`, `null` or left out uses the stored certificate." }, "certificateId": { "type": "string", "description": "Id of the stored (partner) certificate whose public key verifies the token signature; used when `certificateDynamicFetch` is not `true`. Must reference an existing certificate.", "examples": [ "43" ] }, "issuer": { "type": "string", "description": "Issuer (`iss` claim) a partner's token must carry; compared for an exact match.", "examples": [ "https://login.acme.example" ] }, "url": { "type": "string", "description": "JWKS endpoint of the issuer the signing keys are fetched from; used only when `certificateDynamicFetch` is `true`.", "examples": [ "https://login.acme.example/.well-known/jwks.json" ] } }, "title": "OpenIdSettings" }, "core.HttpMethod": { "type": "string", "description": "HTTP method of an outgoing request (`httpSettings.httpMethod` of an HTTP response unit or a time-driven HTTP agent). The `...WITHCONTENT` variants send a request body with a method that normally has none. An HTTP response unit using `GET`, `HEAD` or `DELETE` must send no content (`contentType` `core.ResponseContentType_NONE`) unless `uri` or `query` contains ``, else it fails at run time.\n\n- `GET`: Reads a resource; sends no request body.\n- `GETWITHCONTENT`: GET that carries a request body, for APIs that expect one.\n- `POST`: Sends the data as the request body; the default of an HTTP response unit.\n- `PUT`: Sends the data as the request body to create or replace a resource.\n- `PATCH`: Sends the data as the request body to change part of a resource.\n- `DELETE`: Deletes a resource; sends no request body.\n- `DELETEWITHCONTENT`: DELETE that carries a request body.\n- `HEAD`: Like GET, but the server answers with headers only.", "enum": [ "GET", "GETWITHCONTENT", "POST", "PUT", "PATCH", "DELETE", "DELETEWITHCONTENT", "HEAD" ], "title": "HttpMethod" }, "core.DestinationField": { "type": "object", "description": "A field of the target structure: a leaf in the `children` of a `core.DestinationNode`. It gets its value from a link in `mappingSettings.mappings`, from its `functions` chain (the last result wins) or from `fixValue` (applied last); with none of them it stays empty and the JSON unit leaves it out. Fields run in the order they are declared, so a field that fills a list or map must come before the field that reads it. Its `name` is what the output member and the `@name@` placeholders of response units use. The `sql...` members only matter on a database node.", "properties": { "class": { "type": "string", "const": "core.DestinationField", "description": "The type of this object, always `core.DestinationField`. Required where the member it is sent in accepts several types." }, "aiDocumentation": { "type": "string", "description": "Documentation text the AI assistant reads and writes for this item, describing what the item holds or how its value is built; it is not used when the profile runs." }, "calculationField": { "type": "boolean", "default": false, "description": "Makes the field a helper that computes a value without writing it to the output, e.g. to fill a list, sum into a map or drop a record; its chain runs as usual." }, "children": { "type": "array", "description": "The items below this one, in order: fields and child nodes of the same side (source items in the source structure, target items in the target structure). Only nodes have children; a field cannot have children. On the target side the order is the order of execution and of the output, so an item that fills a list or map must come before the item that reads it. A PATCH that sends this list replaces it.", "items": { "$ref": "#/components/schemas/core.DataStructureItem" } }, "dataType": { "$ref": "#/components/schemas/core.ValueType", "default": "STRING", "description": "The field's data type; values are converted to it silently (a non-numeric text becomes `0` in an `INTEGER` field).", "title": "ValueType" }, "description": { "type": "string", "description": "Free-text note on the field. In a DataCockpit/Portal form profile it also carries the form control keywords, e.g. `_hidden_` or `_readOnly_`." }, "fillFromLeft": { "type": "boolean", "default": false, "description": "Pads a value shorter than `length` on the left instead of the right, e.g. `42` becomes `00000042` with `fillWith: \"0\"` and `length: 8`. Only used when `fillWith` is set." }, "fillWith": { "type": "string", "description": "Padding character for `length`: a `STRING` or `BLOB` value shorter than `length` is filled up with the first character of this text; a negative number padded with `0` keeps its minus sign in front. Pads on the right unless `fillFromLeft` is true.", "examples": [ "0" ] }, "fixValue": { "type": "string", "description": "A constant that becomes the field's value, converted to `dataType` (parsed with `template` for dates). It is applied after the whole chain ran, so it overrides a link and the chain's result while the chain still runs for its side effects (lists, maps, variables); only a chain that ends without a value leaves the field empty." }, "functions": { "type": "array", "description": "The function chain that computes the field's value, run top to bottom each time the field is evaluated; the last function's result becomes the value, and a function returning nothing ends the chain and leaves the field without a value (it is then left out of the output). Parameters of type `LINK` read the linked source value, `RESULT` an earlier function's result. A PATCH replaces the whole list.", "items": { "$ref": "#/components/schemas/core.FunctionConfiguration", "title": "FunctionConfiguration" } }, "length": { "type": "integer", "format": "int32", "default": 0, "description": "Length of the field in characters; `0` means no length. On a source field it is the field's width in fixed-length input. On a target field of type `STRING` or `BLOB` a longer value is cut to this length and, when `fillWith` is set, a shorter one is padded to it." }, "logFieldValue": { "type": "boolean", "default": false, "description": "Records the field's final value with the job, under `nameForLogging` or the field name, so it can be looked at after the run." }, "mandatory": { "type": "boolean", "default": false, "description": "Requires a value; a field left empty fails the job." }, "name": { "type": "string", "description": "The item's name, its identity: links, node paths and function parameters refer to it, and it names the output member or element. Keep it unique within the whole structure, since items are stored under their name. Allowed characters: on the source side letters, digits, `-`, `_` and `.`, starting with a letter or `_`; on the target side the same plus `#`, which may also start with a digit. Any other name is corrected (`@VAR_FILENAME@` is stored as `D-VAR_FILENAME_` on the target side and `F-VAR_FILENAME_` on the source side), and `root` becomes `Root`; references to it in the same write (`mappingSettings` links, node paths, sort fields, function parameters) follow the correction. A name the profile already stores is kept as it is. For JSON input it matches the object key (the key as sent, when the name is corrected). On the target side everything from the last `#` on is left out of the output name, so `id#order` and `id#item` both write `id`; the suffixes `_attr` (XML attribute), `_val` (the element's own text, or the values of a JSON array) and `_name` (dynamic element name) have special meaning.", "minLength": 1 }, "nameForLogging": { "type": "string", "description": "The name under which `logFieldValue` records the value. Left empty, the field's `name` is used.", "examples": [ "Order number" ] }, "note": { "type": "string", "description": "Free-text note on the field, kept apart from `description`." }, "skipEmptySqlValue": { "type": "boolean", "default": false, "description": "On a database node, leaves the column out of the SQL statement while the field is empty, instead of writing an empty value." }, "sourceObjectId": { "type": "string", "description": "Always the same as `name`; read-only, a sent value is ignored.", "readOnly": true }, "sqlAutoGenKey": { "type": "boolean", "default": false, "description": "On a database node, the column's value is generated by the database (an auto-increment key) rather than taken from the mapping." }, "sqlColumnName": { "type": "string", "description": "Name of the database column this field writes on a database node (`dbAlias` and `sqlTableOrProcedure` set on the parent node).", "examples": [ "ORDER_NO" ] }, "sqlKey": { "type": "boolean", "default": false, "description": "On a database node, marks the field's column as part of the key that update and delete statements match rows by (the `where` clause); see `sqlMode`." }, "template": { "type": "string", "description": "Format mask for the field's value: a Java date pattern for `DATE` and `TIMESTAMP` fields, or a number mask such as `N7.3` (no decimal point, the last three digits are decimals). On a source field it says how the input text is parsed; on a target field it parses `fixValue` and, with `useTemplate: true`, formats the value written to the output.", "examples": [ "dd.MM.yyyy" ] }, "useTemplate": { "type": "boolean", "default": false, "description": "Formats the value with the field's `template` on output, meant for non-`STRING` fields, e.g. a `DATE` with `yyyy-MM-dd` or a number with `N7.3`; the result is text, so the JSON unit writes it as a string. Has no effect without a `template` or on a `BOOLEAN` field." }, "xmlNameSpace": { "type": "string", "description": "XML output only: the namespace of this field's element, as `prefix=uri` or as a bare `prefix` of a namespace the profile declares.", "examples": [ "ord=urn:example:order" ] } }, "required": [ "name" ], "title": "DestinationField" }, "core.DestinationNode": { "type": "object", "description": "A node of the target structure: groups target fields and child nodes, and becomes an object or array (JSON) or an element (XML) in the output. Without a `path` it has exactly one instance; with `path` set to a source node's name it gets one instance per instance of that source node (\"for every source item produce a target item\"). A `functions` chain on a node is a condition. With `dbAlias` and `sqlTableOrProcedure` the node also writes to a database.", "properties": { "class": { "type": "string", "const": "core.DestinationNode", "description": "The type of this object, always `core.DestinationNode`. Required where the member it is sent in accepts several types." }, "aiDocumentation": { "type": "string", "description": "Documentation text the AI assistant reads and writes for this item, describing what the item holds or how its value is built; it is not used when the profile runs." }, "children": { "type": "array", "description": "The items below this one, in order: fields and child nodes of the same side (source items in the source structure, target items in the target structure). Only nodes have children; a field cannot have children. On the target side the order is the order of execution and of the output, so an item that fills a list or map must come before the item that reads it. A PATCH that sends this list replaces it.", "items": { "$ref": "#/components/schemas/core.DataStructureItem" } }, "createNewRecord": { "type": "boolean", "default": false, "description": "Starts a new record after the node has been passed rather than when it begins, as stored by the profile editor." }, "dbAlias": { "type": "string", "description": "The database alias this node writes to; must exist on the instance. Running its SQL statements also requires the profile's activation switch for database writes, which is not settable through this API.", "examples": [ "erp" ] }, "description": { "type": "string", "description": "Free-text note on the node. In a DataCockpit/Portal form profile it also carries the form control keywords, e.g. `_readOnly_` or `_exclude_`." }, "emptyTable": { "type": "boolean", "default": false, "description": "Deletes the whole content of the node's table (`sqlTableOrProcedure`) before the node writes to it." }, "fieldDelimiter": { "type": "string", "description": "For CSV output with record types: the separator between the fields of this node's line, e.g. `;`, `TAB` or a hex code such as `0x09`. Empty or left out, `;` applies.", "examples": [ ";" ] }, "functions": { "type": "array", "description": "A condition on the node: the chain runs for each instance before its children, and its last result, read as a boolean, decides whether the instance exists (nothing below it runs when it is false). A PATCH replaces the whole list.", "items": { "$ref": "#/components/schemas/core.FunctionConfiguration", "title": "FunctionConfiguration" } }, "inactive": { "type": "boolean", "default": false, "description": "Switches the node and everything below it off: it is not parsed, mapped or written, as if it were not in the tree." }, "iterationMode": { "$ref": "#/components/schemas/core.IterationMode", "default": "ITERATING_THROUGH_ALL_NODES", "description": "How the node processes its fields and child nodes per instance.", "title": "IterationMode" }, "iterationNode": { "type": "boolean", "default": false, "description": "Marks a helper node that iterates only to compute something, e.g. to fill lists or maps or to sum values; the mapping keeps only the values of the instance being processed rather than all of them. As in the editor, every node below such a node is stored, and read back, as one too: clearing the flag on the parent leaves it set on the nodes below." }, "lineBreak": { "type": "boolean", "default": true, "description": "For line-based output (CSV, fixed-length, Excel) starts a new line after each instance of the node; JSON and XML ignore it." }, "maximum": { "type": "integer", "format": "int32", "default": 99999, "description": "How often the node may occur at most: `1` for a single object, `99999` for a repeating node (unbounded; a JSON array of objects is a repeating node). The JSON unit writes a node with `maximum` above 1 as an array. The input is checked against it only when the profile's min/max check is enabled. Must be at least 1 and not less than `minimum`." }, "minimum": { "type": "integer", "format": "int32", "default": 0, "description": "How often the node must occur at least: `0` when it may be missing, `1` when it is required." }, "name": { "type": "string", "description": "The item's name, its identity: links, node paths and function parameters refer to it, and it names the output member or element. Keep it unique within the whole structure, since items are stored under their name. Allowed characters: on the source side letters, digits, `-`, `_` and `.`, starting with a letter or `_`; on the target side the same plus `#`, which may also start with a digit. Any other name is corrected (`@VAR_FILENAME@` is stored as `D-VAR_FILENAME_` on the target side and `F-VAR_FILENAME_` on the source side), and `root` becomes `Root`; references to it in the same write (`mappingSettings` links, node paths, sort fields, function parameters) follow the correction. A name the profile already stores is kept as it is. For JSON input it matches the object key (the key as sent, when the name is corrected). On the target side everything from the last `#` on is left out of the output name, so `id#order` and `id#item` both write `id`; the suffixes `_attr` (XML attribute), `_val` (the element's own text, or the values of a JSON array) and `_name` (dynamic element name) have special meaning.", "minLength": 1 }, "note": { "type": "string", "description": "Free-text note on the node, kept apart from `description`." }, "offsetVariable": { "type": "string", "description": "Name of a profile variable, in `@` signs (`@OFFSET@`), whose value shifts where the node starts reading from its source; empty for none.", "examples": [ "@OFFSET@" ] }, "onlyForSql": { "type": "boolean", "default": false, "description": "Uses the node only for its database operation: it is mapped and written to the database but left out of the output of the integration unit." }, "optimizePath": { "type": "boolean", "default": true, "description": "Lets the node reuse the source instance its parent is iterating when `path` is empty or names the parent's own source node. When `false`, `relativePath` is switched off as well, so `path` then selects every instance in the whole record." }, "optionalPreSql": { "type": "string", "description": "An SQL command run once before the node's own statements, on its `dbAlias`.", "examples": [ "DELETE FROM ORDERS_TMP" ] }, "optionalSettings": { "type": "integer", "format": "int32", "default": 0, "description": "A number some output units read: for EDIFACT, X12 and Tradacoms output `1` marks the node as a composite data element (a component); the Excel output unit reads it as the 1-based sheet number. `0` means none." }, "optionalXpathFilter": { "type": "string", "description": "An XPath expression appended to the node's path; only used with the streaming XML parser (XML input with parser version V4).", "examples": [ "[@type='A']" ] }, "path": { "type": "string", "description": "Name of the source node this node iterates: one instance is built per instance of that source node. Empty gives exactly one instance; must reference an existing source node when set. Special values: `@List:@` repeats the node once per entry of a list filled by the mapping, `@Map:@` once per map entry.", "examples": [ "items" ] }, "relativePath": { "type": "boolean", "default": true, "description": "Resolves `path` relative to the source instance the parent node is iterating, so a nested repeating node (order lines) only sees the lines of the current order. Only takes effect together with `optimizePath: true`." }, "sortFieldName": { "type": "string", "description": "Name of one of this node's target fields to sort its instances by after the mapping; the direction is `sortingMode`. Empty keeps the mapping order.", "examples": [ "lineNo" ] }, "sortingMode": { "$ref": "#/components/schemas/core.SortingMode", "default": "ASCENDING", "description": "Sort direction for `sortFieldName`.", "title": "SortingMode" }, "sourceObjectId": { "type": "string", "description": "Always the same as `name`; read-only, a sent value is ignored.", "readOnly": true }, "sqlMode": { "$ref": "#/components/schemas/core.SqlMode", "default": "INSERT", "description": "The SQL statement this database node runs per instance: insert, upsert, update, delete or stored procedure.", "title": "SqlMode" }, "sqlTableOrProcedure": { "type": "string", "description": "The table this database node writes to, or the stored procedure it calls when `sqlMode` is `STORED_PROCEDURE`. Its fields name the columns in `sqlColumnName`.", "examples": [ "ORDERS" ] }, "stepSizeVariable": { "type": "string", "description": "Name of a profile variable, in `@` signs (`@STEP@`), whose integer value is how many source records the node advances per iteration while it reads; empty, or a value of 0 or less, advances one record at a time.", "examples": [ "@STEP@" ] }, "subNodesAreAlternative": { "type": "boolean", "default": false, "description": "Only one of the node's child nodes is written (a choice, as in an XSD or DTD)." }, "transactionControl": { "$ref": "#/components/schemas/core.TransactionControl", "default": "AFTER_RECORD", "description": "When this database node's SQL statements are committed. Only used with `dbAlias`.", "title": "TransactionControl" }, "xmlJsonMode": { "$ref": "#/components/schemas/core.XmlJsonMode", "default": "NORMAL", "description": "How the JSON or XML integration unit writes this node.", "title": "XmlJsonMode" }, "xmlNameSpace": { "type": "string", "description": "XML output only: the namespace of this node's element, as `prefix=uri` or as a bare `prefix` of a namespace the profile declares.", "examples": [ "ord=urn:example:order" ] } }, "required": [ "name" ], "title": "DestinationNode" }, "core.SourceField": { "type": "object", "description": "A field of the source structure: one value of the input, a leaf in the `children` of a `core.SourceNode`. For JSON input the field matches the object key of the same `name` (or its `matchCodes`) inside the enclosing node's object; for CSV input the fields of a node are its columns, in order. A target field takes its value through a `core.MappingLink` whose `source` is this field's `name`; function chains read it as the `LINK` parameter of the linked target field.", "properties": { "class": { "type": "string", "const": "core.SourceField", "description": "The type of this object, always `core.SourceField`. Required where the member it is sent in accepts several types." }, "aiDocumentation": { "type": "string", "description": "Documentation text the AI assistant reads and writes for this item, describing what the item holds or how its value is built; it is not used when the profile runs." }, "allowedValues": { "type": "array", "description": "The only values the field accepts, e.g. `[\"EUR\", \"USD\"]`: for JSON and XML input a value not in the list fails the job. `*` accepts anything, and a first entry `regex:` makes the check a regular expression. Empty or left out, any value is accepted.", "items": { "type": "string" } }, "children": { "type": "array", "description": "The items below this one, in order: fields and child nodes of the same side (source items in the source structure, target items in the target structure). Only nodes have children; a field cannot have children. On the target side the order is the order of execution and of the output, so an item that fills a list or map must come before the item that reads it. A PATCH that sends this list replaces it.", "items": { "$ref": "#/components/schemas/core.DataStructureItem" } }, "columnRowDelimiter": { "type": "string", "description": "Kept as stored: the separator the field's record is split by; the file's own delimiter applies to a plain CSV file.", "examples": [ ";" ] }, "dataEvent": { "$ref": "#/components/schemas/core.PortalEvent", "description": "DataCockpit/Portal form profiles only: when the form calls its data profile for this field.", "title": "PortalEvent" }, "dataType": { "$ref": "#/components/schemas/core.ValueType", "default": "STRING", "description": "The field's data type; values are converted to it silently (a non-numeric text becomes `0` in an `INTEGER` field).", "title": "ValueType" }, "defaultValue": { "type": "string", "description": "The value the field takes when its value in the input is empty (JSON, CSV and EDIFACT input).", "examples": [ "EUR" ] }, "description": { "type": "string", "description": "Free-text note on the field. In a DataCockpit/Portal form profile it also carries the form control keywords, e.g. `_hidden_` or `_readOnly_`." }, "iterationMode": { "$ref": "#/components/schemas/core.IterationMode", "default": "ITERATING_THROUGH_ALL_NODES", "description": "Kept as stored; the parser does not read it for a field.", "title": "IterationMode" }, "length": { "type": "integer", "format": "int32", "default": 0, "description": "Length of the field in characters; `0` means no length. On a source field it is the field's width in fixed-length input. On a target field of type `STRING` or `BLOB` a longer value is cut to this length and, when `fillWith` is set, a shorter one is padded to it." }, "localizationKey": { "type": "string", "description": "DataCockpit/Portal form profiles only: the key under which the field's label is localised in the form." }, "mandatory": { "type": "boolean", "default": false, "description": "The mandatory flag of the field's value definition, kept as stored. Whether the field must occur in the input follows `minimum` alone: a `minimum` above 0 makes it required, and writing `minimum` sets that requirement whatever this flag holds." }, "matchCodes": { "type": "array", "description": "Rules that recognise this field in the input by a value instead of by its `name`: for JSON input, a key. Use them to read the same key at two levels, e.g. fields `orderId` and `itemId` that both match the key `id` with condition `EQUALS`. Leave empty to match by name; for XML input an empty one is set on write to the element name, or for `x_attr` the attribute `x` and for `_val` the text of ``.", "items": { "$ref": "#/components/schemas/core.MatchCode", "title": "MatchCode" } }, "maximum": { "type": "integer", "format": "int32", "default": 0, "description": "How often the field may occur at most, usually `1`; checked when the profile's min/max check is enabled." }, "minimum": { "type": "integer", "format": "int32", "default": 0, "description": "How often the field must occur at least; `1` makes it required when the profile's min/max check is enabled." }, "name": { "type": "string", "description": "The item's name, its identity: links, node paths and function parameters refer to it, and it names the output member or element. Keep it unique within the whole structure, since items are stored under their name. Allowed characters: on the source side letters, digits, `-`, `_` and `.`, starting with a letter or `_`; on the target side the same plus `#`, which may also start with a digit. Any other name is corrected (`@VAR_FILENAME@` is stored as `D-VAR_FILENAME_` on the target side and `F-VAR_FILENAME_` on the source side), and `root` becomes `Root`; references to it in the same write (`mappingSettings` links, node paths, sort fields, function parameters) follow the correction. A name the profile already stores is kept as it is. For JSON input it matches the object key (the key as sent, when the name is corrected). On the target side everything from the last `#` on is left out of the output name, so `id#order` and `id#item` both write `id`; the suffixes `_attr` (XML attribute), `_val` (the element's own text, or the values of a JSON array) and `_name` (dynamic element name) have special meaning.", "minLength": 1 }, "newRecordOnValueChange": { "type": "boolean", "default": false, "description": "Starts a new record whenever this field's value differs from the one before, e.g. to split a CSV file into one record per order number; each record is mapped on its own." }, "note": { "type": "string", "description": "Free-text note the mapping editor shows next to the item; it is not used when the profile runs. Not to be confused with `description`, which some item types carry as well." }, "showInList": { "type": "boolean", "default": false, "description": "DataCockpit/Portal form profiles only: shows the field as a column in the form's data list." }, "sourceObjectId": { "type": "string", "description": "Always the same as `name`; read-only, a sent value is ignored.", "readOnly": true }, "template": { "type": "string", "description": "Format mask for the field's value: a Java date pattern for `DATE` and `TIMESTAMP` fields, or a number mask such as `N7.3` (no decimal point, the last three digits are decimals). On a source field it says how the input text is parsed; on a target field it parses `fixValue` and, with `useTemplate: true`, formats the value written to the output.", "examples": [ "dd.MM.yyyy" ] }, "xmlNameSpace": { "type": "string", "description": "XML input only: the namespace prefix of this field's element or attribute as the input declares it.", "examples": [ "ord" ] } }, "required": [ "name" ], "title": "SourceField" }, "core.SourceNode": { "type": "object", "description": "A node of the source structure: a group of input fields and child nodes that the parser fills from the input. For JSON input an object is a node with `maximum 1` and an array of objects a repeating node with `maximum 99999` (`minimum 0` if it may be empty); the top-level JSON object is the top-level source node itself, and keys match nodes and fields by `name` (or by `matchCodes`). For CSV input one repeating node holds the columns as fields, in column order. A target node iterates a source node by naming it in its `path`.", "properties": { "class": { "type": "string", "const": "core.SourceNode", "description": "The type of this object, always `core.SourceNode`. Required where the member it is sent in accepts several types." }, "aiDocumentation": { "type": "string", "description": "Documentation text the AI assistant reads and writes for this item, describing what the item holds or how its value is built; it is not used when the profile runs." }, "children": { "type": "array", "description": "The items below this one, in order: fields and child nodes of the same side (source items in the source structure, target items in the target structure). Only nodes have children; a field cannot have children. On the target side the order is the order of execution and of the output, so an item that fills a list or map must come before the item that reads it. A PATCH that sends this list replaces it.", "items": { "$ref": "#/components/schemas/core.DataStructureItem" } }, "columnRowDelimiter": { "type": "string", "description": "For CSV record-type files (every top-level source node has `matchCodes`): the separator that splits this node's line into its fields, e.g. `;`, `TAB` or a hex code such as `0x09`. Leave it unset for a plain CSV file, whose columns `parsing.formatSettings.delimiter` splits; on a top node it must differ from the file delimiter." }, "createNewRecord": { "type": "boolean", "default": false, "description": "With `newRecordAfter` of `0` or more, starts the new record after the node has been passed rather than when it begins." }, "dataProfile": { "type": "string", "description": "DataCockpit/Portal form profiles only: the name of the data profile the form calls for this node (see `GET /platform/api/profiles/preview`)." }, "dbAlias": { "type": "string", "description": "Database input only: the alias of the database the node's data is read from.", "examples": [ "erp" ] }, "description": { "type": "string", "description": "Free-text note on the node. In a DataCockpit/Portal form profile it also carries the form control keywords, e.g. `_readOnly_` or `_exclude_`." }, "fixRecordDelimiter": { "type": "string", "description": "Fixed-length input only: a separator between the fixed-width fields of this node's records, e.g. a hex code such as `0x09`.", "examples": [ ";" ] }, "functions": { "type": "array", "description": "A condition on the node, kept as stored: a chain of functions the input unit keeps with the node. A write replaces the whole list; omitted, the stored conditions are kept, and an empty list removes them.", "items": { "$ref": "#/components/schemas/core.FunctionConfiguration", "title": "FunctionConfiguration" } }, "inactive": { "type": "boolean", "default": false, "description": "Switches the node and everything below it off: it is not parsed, mapped or written, as if it were not in the tree." }, "iterationMode": { "$ref": "#/components/schemas/core.IterationMode", "default": "ITERATING_THROUGH_ALL_NODES", "description": "Stored with the input node so a copied profile matches its export; the mapping only evaluates it on output nodes.", "title": "IterationMode" }, "lineBreak": { "type": "boolean", "default": true, "description": "Kept as stored: line-based formats start a new line after each instance of the node. The parser does not read it." }, "localizationKey": { "type": "string", "description": "DataCockpit/Portal form profiles only: the key under which the node's label is localised in the form." }, "matchCodes": { "type": "array", "description": "Rules that recognise this node in the input by a value instead of by its `name`, e.g. a JSON key or the record type of a CSV line; the node matches when any rule matches. Empty matches by name, except for EDIFACT, X12, IDoc and XML input, which recognise a node only by its match codes (an EDIFACT or X12 segment by its tag with `EQUALS`): on write an empty XML node gets its own name, and an EDIFACT or X12 segment group the codes of the segments it holds.", "items": { "$ref": "#/components/schemas/core.MatchCode", "title": "MatchCode" } }, "maximum": { "type": "integer", "format": "int32", "default": 99999, "description": "How often the node may occur at most: `1` for a single object, `99999` for a repeating node (unbounded; a JSON array of objects is a repeating node). The JSON unit writes a node with `maximum` above 1 as an array. The input is checked against it only when the profile's min/max check is enabled. Must be at least 1 and not less than `minimum`." }, "minimum": { "type": "integer", "format": "int32", "default": 0, "description": "How often the node must occur at least: `0` when it may be missing, `1` when it is required." }, "name": { "type": "string", "description": "The item's name, its identity: links, node paths and function parameters refer to it, and it names the output member or element. Keep it unique within the whole structure, since items are stored under their name. Allowed characters: on the source side letters, digits, `-`, `_` and `.`, starting with a letter or `_`; on the target side the same plus `#`, which may also start with a digit. Any other name is corrected (`@VAR_FILENAME@` is stored as `D-VAR_FILENAME_` on the target side and `F-VAR_FILENAME_` on the source side), and `root` becomes `Root`; references to it in the same write (`mappingSettings` links, node paths, sort fields, function parameters) follow the correction. A name the profile already stores is kept as it is. For JSON input it matches the object key (the key as sent, when the name is corrected). On the target side everything from the last `#` on is left out of the output name, so `id#order` and `id#item` both write `id`; the suffixes `_attr` (XML attribute), `_val` (the element's own text, or the values of a JSON array) and `_name` (dynamic element name) have special meaning.", "minLength": 1 }, "newRecordAfter": { "type": "integer", "format": "int32", "default": -1, "description": "Splits the input into several records at this node, for CSV, fixed-length and XML input: `-1` switches it off, a value of `0` or more switches it on. Each record is mapped on its own." }, "note": { "type": "string", "description": "Free-text note the mapping editor shows next to the item; it is not used when the profile runs. Not to be confused with `description`, which some item types carry as well." }, "optionalSettings": { "type": "integer", "format": "int32", "default": 0, "description": "A number some input units read from the node, kept as stored. `0` means none." }, "path": { "type": "string", "description": "XML input only: an XPath, relative to the parent element, that selects this node's elements instead of matching them by name. Leave it empty for other formats." }, "sourceObjectId": { "type": "string", "description": "Always the same as `name`; read-only, a sent value is ignored.", "readOnly": true }, "sqlTableOrProcedure": { "type": "string", "description": "Database input only: the table the node's data is read from.", "examples": [ "ORDERS" ] }, "subNodesAreAlternative": { "type": "boolean", "default": false, "description": "Only one of the node's child nodes occurs (a choice, as in an XSD or DTD); checked when the profile's min/max check is on." }, "xmlNameSpace": { "type": "string", "description": "XML input only: the namespace prefix of this node's element as the input declares it.", "examples": [ "ord" ] } }, "required": [ "name" ], "title": "SourceNode" }, "core.Node": { "type": "object", "description": "A node of a source or target tree: a group of fields and child nodes that occurs between `minimum` and `maximum` times. Send both bounds on every node; `99999` means unbounded.\n\nSend one of these types, named in `class`:\n- `core.DestinationNode`: A node of the target structure: groups target fields and child nodes, and becomes an object or array (JSON) or an element (XML) in the output.\n- `core.SourceNode`: A node of the source structure: a group of input fields and child nodes that the parser fills from the input.", "discriminator": { "propertyName": "class" }, "oneOf": [ { "$ref": "#/components/schemas/core.DestinationNode", "title": "DestinationNode" }, { "$ref": "#/components/schemas/core.SourceNode", "title": "SourceNode" } ], "title": "Node" }, "core.AbstractField": { "type": "object", "description": "A field of a source or target tree: a leaf that holds one value of its `dataType`. A target field gets its value from a link, from its function chain or from `fixValue`.\n\nSend one of these types, named in `class`:\n- `core.DestinationField`: A field of the target structure: a leaf in the `children` of a `core.DestinationNode`.\n- `core.SourceField`: A field of the source structure: one value of the input, a leaf in the `children` of a `core.SourceNode`.", "discriminator": { "propertyName": "class" }, "oneOf": [ { "$ref": "#/components/schemas/core.DestinationField", "title": "DestinationField" }, { "$ref": "#/components/schemas/core.SourceField", "title": "SourceField" } ], "title": "Field" }, "core.XmlParserVersion": { "type": "string", "description": "The XML parser generation: `parserVersion` of `core.XMLFileMetadata`. An unlicensed instance refuses a write that sets a version requiring a licence it lacks.\n\n- `V1`: The oldest parser generation. Deprecated.\n- `V2`: Deprecated.\n- `V3`: The default parser generation.\n- `V4`: The streaming parser generation; needs the `XML_V4` licence.", "enum": [ "V1", "V2", "V3", "V4" ], "title": "XmlParserVersion" }, "core.ExcelSheetSelection": { "type": "string", "description": "Which sheet(s) of the workbook are read: `sheetSelection` of `core.ExcelFileMetadata`.\n\n- `FIXED_INDEX`: A single sheet addressed by its 1-based index, `sheetIndex`.\n- `DEFINED`: One or more sheets named in `sheets`, which is then required.\n- `ALL`: Every sheet of the workbook.", "enum": [ "FIXED_INDEX", "DEFINED", "ALL" ], "title": "ExcelSheetSelection" }, "core.ExcelWriteIndex": { "type": "string", "description": "Whether a column naming the sheet a row came from is added to it: `writeSheetIndex` of `core.ExcelFileMetadata`.\n\n- `NONE`: No column is added.\n- `NAME`: The sheet's name is added as a column.\n- `INDEX`: The sheet's index is added as a column.", "enum": [ "NONE", "NAME", "INDEX" ], "title": "ExcelWriteIndex" }, "core.FixLineBreak": { "type": "string", "description": "Whether a FIX-record profile splits its input on line breaks: `lineBreak` of `core.FIXFileMetadata`.\n\n- `NEW_LINE`: Every line is one record.\n- `NONE`: The whole input is one continuous record; records are told apart by their field lengths alone.", "enum": [ "NEW_LINE", "NONE" ], "title": "FixLineBreak" }, "core.ResponseContentType": { "type": "object", "description": "What a response unit sends: the integration unit's output (`_IU`), the original input (`_ORIG`, `_ORIG_UNZIPPED`, `_ORIG_UNZIPPED_DIFF_CODING`), nothing (`_NONE`), the target tree written directly (`_XML`, `_CSV`, `_FIX`, `_EXCEL`) or only a trigger (`_TRIGGER`).\n\nSend one of these types, named in `class`:\n- `core.ResponseContentType_CSV`: Writes the mapped target tree as CSV text, in the unit's `encoding`.\n- `core.ResponseContentType_XML`: Writes the mapped target tree as XML with the platform's built-in XML writer, in the unit's `encoding`.\n- `core.ResponseContentType_NONE`: Sends no content at all.\n- `core.ResponseContentType_ORIG`: Sends the original input as the profile received it, unchanged.\n- `core.ResponseContentType_EXCEL`: Writes the mapped target tree as an Excel workbook: `.xlsx` when the unit's target file name ends with `.xlsx`, otherwise the Excel 97-2003 `.xls` format.\n- `core.ResponseContentType_ORIG_UNZIPPED_DIFF_CODING`: Sends the original input uncompressed and re-encoded: like `core.ResponseContentType_ORIG_UNZIPPED`, but the text is converted from the profile's input encoding (its `inputHandling.encoding`) into the unit's `encoding`.\n- `core.ResponseContentType_TRIGGER`: Sends the value of the variable `VAR_TRIGGER_VALUE` from the last record, a short value for triggering another profile instead of a document.\n- `core.ResponseContentType_ORIG_UNZIPPED`: Sends the original input uncompressed: like `core.ResponseContentType_ORIG`, but an input the profile unpacked is not packed again, and a GZIP-compressed input is decompressed.\n- `core.ResponseContentType_FIX`: Writes the mapped target tree as fixed-length records, each field padded or cut to the length defined on its target field.\n- `core.ResponseContentType_IU`: Sends the output of the profile's integration unit (phase 5, `integrationSettings.unit`), e.g. the JSON written by `core.JsonCreationIU`.", "discriminator": { "propertyName": "class" }, "oneOf": [ { "$ref": "#/components/schemas/core.ResponseContentType_CSV", "title": "ResponseContentType_CSV" }, { "$ref": "#/components/schemas/core.ResponseContentType_XML", "title": "ResponseContentType_XML" }, { "$ref": "#/components/schemas/core.ResponseContentType_NONE", "title": "ResponseContentType_NONE" }, { "$ref": "#/components/schemas/core.ResponseContentType_ORIG", "title": "ResponseContentType_ORIG" }, { "$ref": "#/components/schemas/core.ResponseContentType_EXCEL", "title": "ResponseContentType_EXCEL" }, { "$ref": "#/components/schemas/core.ResponseContentType_ORIG_UNZIPPED_DIFF_CODING", "title": "ResponseContentType_ORIG_UNZIPPED_DIFF_CODING" }, { "$ref": "#/components/schemas/core.ResponseContentType_TRIGGER", "title": "ResponseContentType_TRIGGER" }, { "$ref": "#/components/schemas/core.ResponseContentType_ORIG_UNZIPPED", "title": "ResponseContentType_ORIG_UNZIPPED" }, { "$ref": "#/components/schemas/core.ResponseContentType_FIX", "title": "ResponseContentType_FIX" }, { "$ref": "#/components/schemas/core.ResponseContentType_IU", "title": "ResponseContentType_IU" } ], "title": "ResponseContentType" }, "core.ResponseDependencyType": { "type": "string", "description": "Whether a response unit's run depends on an earlier one in `responseSettings.units`, named by `dependsOn`.\n\n- `NONE`: Runs unconditionally; `dependsOn` is not used.\n- `ON_ERROR`: Runs only after the unit(s) named by `dependsOn` failed.\n- `ON_SUCCESS`: Runs only after the unit named by `dependsOn` succeeded.", "enum": [ "NONE", "ON_ERROR", "ON_SUCCESS" ], "title": "ResponseDependencyType" }, "core.ResponseNewLine": { "type": "string", "description": "Line terminator written between CSV/FIX records. Ignored for other content types.\n\n- `CRLF`: `\\r\\n`.\n- `CR`: `\\r`.\n- `LF`: `\\n`.\n- `NONE`: No line terminator.", "enum": [ "CRLF", "CR", "LF", "NONE" ], "title": "ResponseNewLine" }, "core.ResponseCompareOperation": { "type": "string", "description": "How a response unit's `runOnlyIfVariableValue` is compared against the variable named by `runOnlyIfVariableName`. Requires `runOnlyIfUseVariable` `true`.\n\n- `EQ`: The unit runs while the variable equals `runOnlyIfVariableValue`.\n- `NE`: The unit runs while the variable differs from `runOnlyIfVariableValue`.", "enum": [ "EQ", "NE" ], "title": "ResponseCompareOperation" }, "core.ResponseTestMode": { "type": "string", "description": "Whether a response unit runs on a test run of its profile.\n\n- `ANY`: Runs on both a real and a test run.\n- `ONLY`: Runs only on a test run.\n- `NOT`: Runs only on a real run, never on a test run.", "enum": [ "ANY", "ONLY", "NOT" ], "title": "ResponseTestMode" }, "core.MessageDeliveryType": { "type": "string", "description": "How a message handed to the internal Lobster message service is delivered to the receiving profile: `type` of a `core.MessageProfileResponseUnit`, and `forwardMessageType` of a `core.TcpProfileResponseUnit`, `core.HttpProfileResponseUnit`, `core.AmqpProfileResponseUnit` or `core.AmqpV2ProfileResponseUnit`. Each of those members says what its unit does with `DIRECT`, since that differs by unit.\n\n- `SYNCHRON`: Delivers the message at once and waits for the receiving profile to finish; an error answer fails the sending unit.\n- `ASYNCHRON`: Delivers the message without waiting; the sending unit does not learn the receiving profile's result.\n- `PERSISTENT`: Like `ASYNCHRON`, but the message is stored and delivery is retried while no consumer is available, until its lifetime ends.\n- `DIRECT`: Runs the receiving profile directly, without the message service, where the response unit accepts it (see that member): a message response unit does not accept it, and an AMQP response unit treats it as `PERSISTENT` instead.", "enum": [ "SYNCHRON", "ASYNCHRON", "PERSISTENT", "DIRECT" ], "title": "MessageDeliveryType" }, "core.IntegrationPartnerChannelFax": { "type": "object", "description": "The partner's fax line, used by the platform's ISDN fax service: the number faxes to the partner are dialled at and incoming faxes are matched on, plus the station id and header sent. Needs `isdnRemoteNumber`. Referenced by `core.FaxProfileResponseUnit.channel` (send) and `core.FaxAgentSettings.channelIds` (partners whose faxes the profile receives). Channel list filter: `type=Fax`.", "properties": { "class": { "type": "string", "const": "core.IntegrationPartnerChannelFax", "description": "The type of this object, always `core.IntegrationPartnerChannelFax`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": false, "description": "Whether the channel is in use. Only active channels take part at runtime: logins on the platform's servers and the matching of incoming data to a partner skip inactive ones. A partner whose `status` is `INACTIVE` makes all its channels read as `false` in the channel list." }, "communicationLogEnabled": { "type": "boolean", "description": "Whether the transfers over this channel are written to the communication log. `null` or left out keeps the stored value; a channel that never stored the setting reads as `true`." }, "communicationLogRetainDays": { "type": "integer", "format": "int32", "default": -1, "description": "Number of days the communication log keeps this channel's entries; `0` and up are stored, `-1` removes the setting so the communication log service's global retention applies. Only used while `communicationLogEnabled` is on. `null` or left out keeps the stored value; a channel that never stored one reads `-1`.", "minimum": -1 }, "contact": { "$ref": "#/components/schemas/core.IntegrationPartnerContact", "description": "The channel's contact person, the one the channel editor's contact section shows. Every channel created here gets exactly one: left out, an empty one. Only one channel contact is exposed; a channel that stores more than one shows the first, and a write leaves the others as they are. `null` or left out keeps the stored contact. On create its `id` is ignored; on update an `id` must be the channel's own contact id.", "title": "IntegrationPartnerContact" }, "defaultSendHeadline": { "type": "string", "description": "Header line sent with faxes to this partner; left out, the fax service's default applies." }, "defaultSendStationID": { "type": "string", "description": "Station id sent with faxes to this partner; left out, the fax service's default applies." }, "direction": { "$ref": "#/components/schemas/core.ChannelDirection", "description": "The way data flows over the channel: `IN` (the partner sends to the platform), `OUT` (the platform sends to the partner) or `IN_AND_OUT`. Left out or `null` on create it defaults to `IN`; it cannot be set to `null` afterwards. JMS, AMQP 0-9-1, AMQP 1.0, Google Pub/Sub, cloud storage and SMB channels are always `IN_AND_OUT`: that is their default, any other value is refused, and a patch sending `null` there changes nothing. A legacy channel of these types stored with neither flag set reads `IN_AND_OUT` and has both flags set by its next write. Any other channel stored before this member existed, with no direction, reads back without it until one is written.", "title": "ChannelDirection" }, "expectedHeadline": { "type": "string", "description": "Fax header the partner is expected to send. Stored only: neither the editor nor the fax service uses it." }, "expectedStationID": { "type": "string", "description": "Station id the partner's fax machine is expected to send. Stored only, not checked when a fax arrives." }, "faxIncomingDirectory": { "type": "string", "description": "Directory on the Lobster server where faxes received from this partner are saved (created if missing). Left out, they go to the fax service's directory for unresolved faxes.", "examples": [ "./fax/acme" ] }, "faxOutgoingDirectory": { "type": "string", "description": "Directory for outgoing faxes. Stored only: neither the editor nor the fax service uses it." }, "id": { "type": "integer", "format": "int64", "description": "Numeric id of the channel, assigned by the server on create; on the channel resource a value sent in the body is ignored. Profiles reference a channel by this id, looked up with `GET /platform/api/partners/preview/{partnerId}/channels`.", "examples": [ 1042 ] }, "internalUsageOnly": { "type": "boolean", "default": false, "description": "Whether the channel stays on the platform's own server and is not synchronized to a DMZ server (the editor's \"Invisible to DMZ\" switch). `null` or left out keeps the stored value; a new channel is visible to the DMZ, except a new SMB channel, which is stored invisible unless it sends `false`. A new JMS, AMQP 0-9-1, AMQP 1.0, Google Pub/Sub and cloud storage channel is stored invisible to the DMZ, as the editor does; there the member reads absent, a value sent is ignored and a stored channel keeps its flag." }, "isdnLocalNumber": { "type": "string", "description": "The platform's own fax number, sent as the calling number when faxing this partner; left out, the fax service's default number applies. For an incoming fax it is available to the profile as `VAR_FAX_LOCAL_NUMBER`." }, "isdnRemoteNumber": { "type": "string", "description": "The partner's fax number, dialled when a fax is sent through this channel. On create it also becomes `remoteId`, which incoming faxes are matched on. Required on create; a write may not blank it.", "examples": [ "+49891234567" ], "minLength": 1 }, "name": { "type": "string", "description": "Display name of the channel. Must be unique among the partner's channels of the same type.", "maxLength": 100, "minLength": 1 }, "partner": { "$ref": "#/components/schemas/core.IntegrationPartner", "description": "The partner that owns the channel, embedded on read. Set by the server from the `{partnerId}` in the request path; a value sent here is ignored, and a channel cannot move to another partner.", "readOnly": true, "title": "IntegrationPartner" }, "remoteId": { "type": "string", "description": "Identity an incoming fax is matched on: the calling number is compared with it. Set by the server from `isdnRemoteNumber` when the channel is created and kept afterwards - a later change of `isdnRemoteNumber` does not update it. Must be unique among fax channels. Read-only.", "readOnly": true } }, "required": [ "isdnRemoteNumber", "name" ], "title": "IntegrationPartnerChannelFax" }, "core.MailAttachType": { "type": "string", "description": "Where the result goes in the sent message: `attachType` of an SMTP response unit, `attachType` of an X.400 response unit.\n\n- `NONE`: The result is not sent.\n- `ATTACHMENT`: The result is sent as an attachment.\n- `BODY`: The result is sent as the message body.\n- `BOTH`: The result is sent as the message body and as an attachment.", "enum": [ "NONE", "ATTACHMENT", "BODY", "BOTH" ], "title": "MailAttachType" }, "core.X400BodyEncoding": { "type": "string", "description": "How the message body of an X.400 response unit is encoded: `bodyEncoding`.\n\n- `TEXT`: General text.\n- `BILATERAL`: Bilaterally defined.\n- `IA5`: IA5 text.", "enum": [ "TEXT", "BILATERAL", "IA5" ], "title": "X400BodyEncoding" }, "core.As400ResponseUnitParam": { "type": "object", "description": "One parameter of the AS/400 program call, an element of `params`.", "properties": { "class": { "type": "string", "const": "core.As400ResponseUnitParam", "description": "The type of this object, always `core.As400ResponseUnitParam`. Required where the member it is sent in accepts several types." }, "length": { "type": "integer", "format": "int32", "default": 9, "description": "Length of the parameter in characters or bytes (digits for `PACKED_DECIMAL`/`ZONED_DECIMAL`); ignored for `SIGNED_2_BYTE`, `SIGNED_4_BYTE`, `FLOAT_4`, `FLOAT_8` and `UNSIGNED_2_BYTE`/`UNSIGNED_4_BYTE`." }, "lengthDigit": { "type": "integer", "format": "int32", "default": 2, "description": "Number of decimal places, only used while `type` is `PACKED_DECIMAL` or `ZONED_DECIMAL`." }, "lengthReturn": { "type": "integer", "format": "int32", "default": 0, "description": "Length in bytes of the answer read back into a target field, only used while `mode` is `OUT` or `IN_OUT`." }, "mode": { "$ref": "#/components/schemas/core.As400ParamMode", "default": "OUT", "description": "Direction of the parameter.", "title": "As400ParamMode" }, "type": { "$ref": "#/components/schemas/core.As400ParamType", "default": "TEXT", "description": "Data type of the parameter.", "title": "As400ParamType" }, "value": { "type": "string", "description": "Value sent to the program while `mode` is `IN` or `IN_OUT`; ignored for `OUT`. `@name@` placeholders are resolved." } }, "title": "As400ResponseUnitParam" }, "core.CloudStorageBlobType": { "type": "string", "description": "Azure Blob Storage only: type of blob written.\n\n- `BlockBlob`: Block blob: each write uploads the file as one block blob.\n- `AppendBlob`: Append blob: each write appends to the existing blob, creating it on the first one.", "enum": [ "BlockBlob", "AppendBlob" ], "title": "CloudStorageBlobType" }, "core.IntegrationPartnerChannelCloudStorage": { "type": "object", "description": "Access to a cloud storage account (Amazon S3, Azure, Google, Dropbox, OneDrive, Box). Needs `provider` (fixed after create) and `applicationId`, plus `additionalParam` for `S3` and `GOOGLE_CLOUD`; no credential is settable through this API, so a channel created here is not usable until provisioned elsewhere. Referenced by `core.CloudStorageProfileResponseUnit.channel` and `core.CronCloudStorageAgentSettings.comChannelId`; channel list filter `type=CloudStorage`.", "properties": { "class": { "type": "string", "const": "core.IntegrationPartnerChannelCloudStorage", "description": "The type of this object, always `core.IntegrationPartnerChannelCloudStorage`. Required where the member it is sent in accepts several types." }, "active": { "type": "boolean", "default": false, "description": "Whether the channel is in use. Only active channels take part at runtime: logins on the platform's servers and the matching of incoming data to a partner skip inactive ones. A partner whose `status` is `INACTIVE` makes all its channels read as `false` in the channel list." }, "additionalParam": { "type": "string", "description": "Provider-specific extra value: the AWS region for `S3`, the project id for `GOOGLE_CLOUD`, the Microsoft tenant for `ONEDRIVE_M365` (filled with `common` when left out on create), the storage account for Azure with OAuth2. Required on create for `S3` and `GOOGLE_CLOUD`, and for these three providers a write may not blank it.", "examples": [ "eu-central-1" ] }, "applicationId": { "type": "string", "description": "The id the channel authenticates with at the provider - the access key id for `S3`, the Google e-mail for `GOOGLE_CLOUD`, the storage account name for Azure with shared key, the app's client id for the OAuth providers. An identifier, not a secret. Required on create; a write may not blank it. Two channels must not share the same `provider`, `applicationId` and `additionalParam` while neither has a secret yet.", "minLength": 1 }, "communicationLogEnabled": { "type": "boolean", "description": "Whether the transfers over this channel are written to the communication log. `null` or left out keeps the stored value; a channel that never stored the setting reads as `true`." }, "communicationLogRetainDays": { "type": "integer", "format": "int32", "default": -1, "description": "Number of days the communication log keeps this channel's entries; `0` and up are stored, `-1` removes the setting so the communication log service's global retention applies. Only used while `communicationLogEnabled` is on. `null` or left out keeps the stored value; a channel that never stored one reads `-1`.", "minimum": -1 }, "contact": { "$ref": "#/components/schemas/core.IntegrationPartnerContact", "description": "The channel's contact person, the one the channel editor's contact section shows. Every channel created here gets exactly one: left out, an empty one. Only one channel contact is exposed; a channel that stores more than one shows the first, and a write leaves the others as they are. `null` or left out keeps the stored contact. On create its `id` is ignored; on update an `id` must be the channel's own contact id.", "title": "IntegrationPartnerContact" }, "direction": { "$ref": "#/components/schemas/core.ChannelDirection", "description": "The way data flows over the channel: `IN` (the partner sends to the platform), `OUT` (the platform sends to the partner) or `IN_AND_OUT`. Left out or `null` on create it defaults to `IN`; it cannot be set to `null` afterwards. JMS, AMQP 0-9-1, AMQP 1.0, Google Pub/Sub, cloud storage and SMB channels are always `IN_AND_OUT`: that is their default, any other value is refused, and a patch sending `null` there changes nothing. A legacy channel of these types stored with neither flag set reads `IN_AND_OUT` and has both flags set by its next write. Any other channel stored before this member existed, with no direction, reads back without it until one is written.", "title": "ChannelDirection" }, "id": { "type": "integer", "format": "int64", "description": "Numeric id of the channel, assigned by the server on create; on the channel resource a value sent in the body is ignored. Profiles reference a channel by this id, looked up with `GET /platform/api/partners/preview/{partnerId}/channels`.", "examples": [ 1042 ] }, "internalUsageOnly": { "type": "boolean", "default": false, "description": "Whether the channel stays on the platform's own server and is not synchronized to a DMZ server (the editor's \"Invisible to DMZ\" switch). `null` or left out keeps the stored value; a new channel is visible to the DMZ, except a new SMB channel, which is stored invisible unless it sends `false`. A new JMS, AMQP 0-9-1, AMQP 1.0, Google Pub/Sub and cloud storage channel is stored invisible to the DMZ, as the editor does; there the member reads absent, a value sent is ignored and a stored channel keeps its flag." }, "legacyImplementation": { "type": "boolean", "default": true, "description": "Whether the channel runs the older of the two cloud client implementations; `true` for a channel that never stored a choice. Read-only: it decides where the secret is kept.", "readOnly": true }, "name": { "type": "string", "description": "Display name of the channel. Must be unique among the partner's channels of the same type.", "maxLength": 100, "minLength": 1 }, "oauth2Authentication": { "type": "boolean", "default": false, "description": "For `AZURE_FILE` and `AZURE_BLOB`: `true` when the channel authenticates with OAuth2 (then `tenant` and `additionalParam` apply), `false` for a shared key. Read-only.", "readOnly": true }, "oauth2RefreshUrl": { "type": "string", "description": "OAuth2 token endpoint the channel refreshes its access token at. Derived by the platform from `provider` (and the tenant) once the channel is authorised; usually empty before. Read-only.", "readOnly": true }, "partner": { "$ref": "#/components/schemas/core.IntegrationPartner", "description": "The partner that owns the channel, embedded on read. Set by the server from the `{partnerId}` in the request path; a value sent here is ignored, and a channel cannot move to another partner.", "readOnly": true, "title": "IntegrationPartner" }, "provider": { "$ref": "#/components/schemas/core.CloudStorageProvider", "description": "The cloud service this channel connects to. Required on create and fixed afterwards; an explicit `null` keeps the stored provider.", "title": "CloudStorageProvider" }, "tenant": { "type": "string", "description": "Microsoft tenant (directory) id or domain, used to build the OAuth2 token URL of an `AZURE_FILE` or `AZURE_BLOB` channel that authenticates with OAuth2 instead of a shared key (see `oauth2Authentication`)." } }, "required": [ "applicationId", "name" ], "title": "IntegrationPartnerChannelCloudStorage" }, "core.OftpRecordType": { "type": "string", "description": "The record format of the file an OFTP response unit sends: `recordType`.\n\n- `FIXED`: Fixed-length records.\n- `VARIABLE`: Variable-length records.\n- `UNSTRUCTURED`: Unstructured data.\n- `TEXT`: Text.", "enum": [ "FIXED", "VARIABLE", "UNSTRUCTURED", "TEXT" ], "title": "OftpRecordType" }, "core.OftpSendMode": { "type": "string", "description": "When an OFTP response unit sends its file: `sendMode`.\n\n- `NOW`: Sends the file now.\n- `PICKUP`: Leaves the file for the partner to pick up.\n- `PICKUP_ON_FAILURE`: Sends the file now and leaves it for pickup if sending fails.\n- `PICKUP_ONLY`: Only leaves the file for pickup.", "enum": [ "NOW", "PICKUP", "PICKUP_ON_FAILURE", "PICKUP_ONLY" ], "title": "OftpSendMode" }, "core.SapForwardContentType": { "type": "string", "description": "The format the RFC answer of an SAP response unit is forwarded in: `forwardContentType`.\n\n- `CSV`: CSV.\n- `FIX`: Fixed-length records.\n- `XML`: XML.\n- `SAP_XML`: SAP's own XML rendering of the function.", "enum": [ "CSV", "FIX", "XML", "SAP_XML" ], "title": "SapForwardContentType" }, "core.SapMessageType": { "type": "string", "description": "How the RFC answer of an SAP response unit is handed to the profile: `messageType`.\n\n- `SYNCHRON`: Delivers the message at once and waits for the receiving profile to finish.\n- `ASYNCHRON`: Delivers the message without waiting for the receiving profile.\n- `PERSISTENT`: Like `ASYNCHRON`, but the message is stored and delivery is retried while no consumer is available.", "enum": [ "SYNCHRON", "ASYNCHRON", "PERSISTENT" ], "title": "SapMessageType" }, "core.SmsMessageType": { "type": "string", "description": "Kind of SMS an SMS response unit sends (its `type`). A stored unit using one of the older kinds no longer offered (ringtone, operator logo, picture, OTA) reads back without `type`.\n\n- `NORMAL`: A plain text message; the default.\n- `FLUSH`: A flash SMS, sent to the provider as its own message type; whether and how it differs on the phone depends on the provider.\n- `VCARD`: A vCard business card: `body` should hold the vCard text (`BEGIN:VCARD` ... `END:VCARD`).", "enum": [ "NORMAL", "FLUSH", "VCARD" ], "title": "SmsMessageType" }, "core.TmpFileNaming": { "type": "string", "description": "How the temporary or control file is named relative to the target file.\n\n- `SUFFIX`: The target's name followed by the configured text.\n- `PREFIX`: The configured text followed by the target's name.\n- `NAME`: The configured text is the whole name.", "enum": [ "SUFFIX", "PREFIX", "NAME" ], "title": "TmpFileNaming" }, "core.FtpClientType": { "type": "string", "description": "The protocol an FTP response unit uploads with: `clientType` of an FTP response unit.\n\n- `FTP`: Plain FTP.\n- `SFTP`: SFTP, FTP over SSH.\n- `FTPS`: FTPS, FTP over TLS.", "enum": [ "FTP", "SFTP", "FTPS" ], "title": "FtpClientType" }, "core.XmlMemoryMode": { "type": "string", "description": "How the V4 XML parser holds the document while `splitting.input.xml.streaming` is `true`: `splitting.input.xml.memoryMode`.\n\n- `IN_MEMORY`: Holds the whole document in memory.\n- `DISK`: Holds the document on disk.\n- `HYBRID`: Starts in memory and spills to disk past a size threshold.", "enum": [ "IN_MEMORY", "DISK", "HYBRID" ], "title": "XmlMemoryMode" }, "core.PartnerStatus": { "type": "string", "description": "Lifecycle state of a partner (its `status`). It switches all of the partner's channels on or off at once, on top of each channel's own `active` flag.\n\n- `ACTIVE`: The partner is in use; each of its channels works when its own `active` is true. The default.\n- `INACTIVE`: The partner is switched off: the platform treats all its channels as inactive and the channel list shows them with `active: false`, while their stored flags stay unchanged and return with `ACTIVE`.\n- `DELETED`: Soft-deleted by DELETE. Cannot be written, and a read normally never shows a deleted partner.", "enum": [ "ACTIVE", "INACTIVE", "DELETED" ], "title": "PartnerStatus" }, "core.AccumulationOperator": { "type": "string", "description": "The comparison an accumulation payload comparator applies to a buffered message: `operator` of an `AccumulationComparator` entry.\n\n- `REGEX`: Whether the payload matches a Java regular expression. Text payloads only.\n- `CONTAINS`: Whether the payload contains a value as a case-sensitive substring. Text payloads only.\n- `SMALLER`: Whether the payload is numerically or chronologically smaller than a value. Numeric and date payloads.\n- `GREATER`: Whether the payload is numerically or chronologically greater than a value. Numeric and date payloads.\n- `EQUALS`: Whether the payload equals a value. Text, numeric and date payloads.\n- `NOT`: Whether the payload differs from a value. Text, numeric and date payloads.\n- `SMALLER_EQUALS`: Whether the payload is smaller than or equal to a value. Numeric and date payloads.\n- `GREATER_EQUALS`: Whether the payload is greater than or equal to a value. Numeric and date payloads.", "enum": [ "REGEX", "CONTAINS", "SMALLER", "GREATER", "EQUALS", "NOT", "SMALLER_EQUALS", "GREATER_EQUALS" ], "title": "AccumulationOperator" }, "core.FunctionConfiguration": { "type": "object", "description": "One call of a mapping function, one element of the `functions` chain of a target field or node, e.g. `72 replace(a, b, c, d)` removing every `-` from the linked value: `{\"class\": \"core.FunctionConfiguration\", \"id\": 72, \"functionParameters\": [{\"parameterType\": \"LINK\", \"data\": \"\"}, {\"parameterType\": \"VALUE\", \"data\": \"-\"}, {\"parameterType\": \"VALUE\", \"data\": \"\"}, {\"parameterType\": \"VALUE\", \"data\": \"\"}]}`. The chain runs top to bottom; on a field the last function's result becomes the value (a function returning nothing ends the chain and leaves the field without a value), on a node it is a condition that decides whether the node instance exists. Later functions read earlier results with `RESULT` parameters. See the function catalogue at `/platform/api/functions/preview`.", "properties": { "class": { "type": "string", "const": "core.FunctionConfiguration", "description": "The type of this object, always `core.FunctionConfiguration`. Required where the member it is sent in accepts several types." }, "functionParameters": { "type": "array", "description": "The arguments, by position: the first entry is the function's parameter `a`, the second `b`, and so on, as listed in the function's `parameters` in the catalogue. Parameters left out at the end are stored empty, as `{\"parameterType\": \"VALUE\", \"data\": \"\"}`; an unused parameter before a used one is sent that way. An optional parameter (`[a]` in the function name) is one that may be empty. Some positions here hold a secret, decided by the rest of this object rather than by a name of their own. A read returns those encrypted, and a write accepts either that encrypted form or the cleartext behind a \"PLAIN:\" prefix, and rejects anything else.", "items": { "$ref": "#/components/schemas/core.FunctionParameter", "title": "FunctionParameter" } }, "id": { "type": "integer", "format": "int32", "description": "Id of the mapping function to call; see the function catalogue at `/platform/api/functions/preview`. Ids from `5000` up are the instance's own custom functions. Must reference an existing function id.", "examples": [ 72 ] } }, "title": "FunctionConfiguration" }, "core.IterationMode": { "type": "string", "description": "How a target node (the `iterationMode` of a `core.DestinationNode`) processes its children for each source instance its `path` selects.\n\n- `LOOP`: For a node without child nodes (they are not processed); its fields run once per matched source instance.\n- `ALL_ELEMENTS_PER_NODE`: The fields run for each instance, but child nodes run only once, over the matches of all instances together, so with nested repeating nodes all items of all orders land under the first order.\n- `ITERATING_THROUGH_ALL_NODES`: Fields and child nodes run inside each instance, so nested repeating nodes stay grouped (the lines of each order under that order).", "enum": [ "LOOP", "ALL_ELEMENTS_PER_NODE", "ITERATING_THROUGH_ALL_NODES" ], "title": "IterationMode" }, "core.SortingMode": { "type": "string", "description": "The order in which a target node's instances are sorted after the mapping, by the value of the field its `sortFieldName` names. Has no effect while `sortFieldName` is empty.\n\n- `ASCENDING`: Smallest value first. The default.\n- `DESCENDING`: Largest value first.", "enum": [ "ASCENDING", "DESCENDING" ], "title": "SortingMode" }, "core.SqlMode": { "type": "string", "description": "The SQL statement a database node (a `core.DestinationNode` with `dbAlias` and `sqlTableOrProcedure`) runs for each of its instances. Update and delete statements match rows by the node's fields marked `sqlKey`.\n\n- `INSERT`: Inserts a row. The default.\n- `DELETE_BEFORE_INSERT`: Deletes the rows matching the `sqlKey` fields, then inserts.\n- `TRY_UPDATE_BEFORE_INSERT`: Updates the rows matching the `sqlKey` fields and inserts when none matched (an upsert). Without any `sqlKey` field it only inserts.\n- `ONLY_UPDATE`: Updates the rows matching the `sqlKey` fields, never inserts.\n- `ONLY_DELETE`: Deletes the rows matching the `sqlKey` fields.\n- `STORED_PROCEDURE`: Calls the procedure named in `sqlTableOrProcedure` with the node's fields as its parameters.", "enum": [ "INSERT", "DELETE_BEFORE_INSERT", "TRY_UPDATE_BEFORE_INSERT", "ONLY_UPDATE", "ONLY_DELETE", "STORED_PROCEDURE" ], "title": "SqlMode" }, "core.TransactionControl": { "type": "string", "description": "When the SQL statements of a database node (a `core.DestinationNode` with `dbAlias`) are committed.\n\n- `AFTER_RECORD`: Commits after each record of the input has been processed. The default.\n- `ALL_OPEN_STATEMENTS`: Right after this node's statement, commits every open database session of the job.\n- `ONLY_DB_ALIAS_OF_THIS_NODE`: Right after this node's statement, commits only the session of this node's `dbAlias`.\n- `AFTER_ALL_RECORDS`: Commits once, after the last record of the job.\n- `IN_RESPONSE_PATH`: Left open until a commit or rollback custom response class ends the transaction.", "enum": [ "AFTER_RECORD", "ALL_OPEN_STATEMENTS", "ONLY_DB_ALIAS_OF_THIS_NODE", "AFTER_ALL_RECORDS", "IN_RESPONSE_PATH" ], "title": "TransactionControl" }, "core.XmlJsonMode": { "type": "string", "description": "How the JSON or XML integration unit writes a target node (the `xmlJsonMode` of a `core.DestinationNode`). By default a node with `maximum 1` becomes an object and one with `maximum > 1` an array.\n\n- `NORMAL`: Written as its own object or element under its name. The default.\n- `TRANSPARENT`: The node's members are written straight into its parent, without a wrapper of its own; on the node named in the JSON unit's `startAtNode` it removes the `{\"\": ...}` wrapper.\n- `EXCLUDE`: The node is computed but left out of the output, with everything below it.\n- `ARRAY`: Always written as a JSON array, even with a single instance.\n- `ARRAY_TRANSPARENT`: The entries of the node's array are merged into its parent instead of forming an array of their own; directly below a `NORMAL` node the job fails.\n- `ARRAY_GROUPED`: One array per parent instance.", "enum": [ "NORMAL", "TRANSPARENT", "EXCLUDE", "ARRAY", "ARRAY_TRANSPARENT", "ARRAY_GROUPED" ], "title": "XmlJsonMode" }, "core.PortalEvent": { "type": "string", "description": "DataCockpit/Portal form profiles only: when the form calls its data profile for a field: `dataEvent` of a source field.\n\n- `NONE`: Never calls the data profile for this field. The default.\n- `INITIAL`: Calls the data profile once, when the form loads.\n- `CHANGE`: Calls the data profile whenever this field's value changes.\n- `INITIAL_AND_CHANGE`: Calls the data profile both when the form loads and whenever this field's value changes.", "enum": [ "NONE", "INITIAL", "CHANGE", "INITIAL_AND_CHANGE" ], "title": "PortalEvent" }, "core.MatchCode": { "type": "object", "description": "A rule that recognises a source node or field in the input by a value instead of by its name, one element of `matchCodes` on a `core.SourceNode` or `core.SourceField`. The item matches when any of its match codes matches; an item with match codes is no longer matched by name. For JSON input the value tested is the object key, so two fields `orderId` and `itemId` can both read a key `id` at different levels: `{\"class\": \"core.MatchCode\", \"checkValue\": \"id\", \"condition\": \"EQUALS\"}`. For CSV record types it is the column value that identifies the record type.", "properties": { "class": { "type": "string", "const": "core.MatchCode", "description": "The type of this object, always `core.MatchCode`. Required where the member it is sent in accepts several types." }, "checkValue": { "type": "string", "description": "The value to compare with, case-sensitive: for JSON input a key name such as `id`, for `REGULAR_EXPRESSION` a pattern. A character can be written as its hex code, `\\0x09` for a tab." }, "condition": { "$ref": "#/components/schemas/core.MatchCodeCondition", "default": "STARTS_WITH", "description": "How `checkValue` is compared. Always send it, normally as `EQUALS`: left out it also matches longer values (`id` matches `idx`).", "title": "MatchCodeCondition" } }, "required": [ "checkValue" ], "title": "MatchCode" }, "core.ResponseContentType_CSV": { "type": "object", "description": "Writes the mapped target tree as CSV text, in the unit's `encoding`. On unit types that have them, `csvDelim` (default `,`) and `alwaysQuote` shape it.", "properties": { "class": { "type": "string", "const": "core.ResponseContentType_CSV", "description": "The type of this object, always `core.ResponseContentType_CSV`. Required where the member it is sent in accepts several types." } }, "title": "ResponseContentType_CSV" }, "core.ResponseContentType_XML": { "type": "object", "description": "Writes the mapped target tree as XML with the platform's built-in XML writer, in the unit's `encoding`. Independent of the integration unit: for XML shaped by `core.XMLCreationIU` (e.g. its `rootName`) choose `core.ResponseContentType_IU` instead.", "properties": { "class": { "type": "string", "const": "core.ResponseContentType_XML", "description": "The type of this object, always `core.ResponseContentType_XML`. Required where the member it is sent in accepts several types." } }, "title": "ResponseContentType_XML" }, "core.ResponseContentType_NONE": { "type": "object", "description": "Sends no content at all. For units that only have to call or signal something, e.g. an HTTP GET; units that transfer a file skip the transfer when there is no content.", "properties": { "class": { "type": "string", "const": "core.ResponseContentType_NONE", "description": "The type of this object, always `core.ResponseContentType_NONE`. Required where the member it is sent in accepts several types." } }, "title": "ResponseContentType_NONE" }, "core.ResponseContentType_ORIG": { "type": "object", "description": "Sends the original input as the profile received it, unchanged. The default for a new unit of most types. An input the profile unpacks on arrival (its compression setting) is packed again into an archive of that type; the unit's `encoding` is not applied.", "properties": { "class": { "type": "string", "const": "core.ResponseContentType_ORIG", "description": "The type of this object, always `core.ResponseContentType_ORIG`. Required where the member it is sent in accepts several types." } }, "title": "ResponseContentType_ORIG" }, "core.ResponseContentType_EXCEL": { "type": "object", "description": "Writes the mapped target tree as an Excel workbook: `.xlsx` when the unit's target file name ends with `.xlsx`, otherwise the Excel 97-2003 `.xls` format. The unit's `encoding` does not apply.", "properties": { "class": { "type": "string", "const": "core.ResponseContentType_EXCEL", "description": "The type of this object, always `core.ResponseContentType_EXCEL`. Required where the member it is sent in accepts several types." } }, "title": "ResponseContentType_EXCEL" }, "core.ResponseContentType_ORIG_UNZIPPED_DIFF_CODING": { "type": "object", "description": "Sends the original input uncompressed and re-encoded: like `core.ResponseContentType_ORIG_UNZIPPED`, but the text is converted from the profile's input encoding (its `inputHandling.encoding`) into the unit's `encoding`.", "properties": { "class": { "type": "string", "const": "core.ResponseContentType_ORIG_UNZIPPED_DIFF_CODING", "description": "The type of this object, always `core.ResponseContentType_ORIG_UNZIPPED_DIFF_CODING`. Required where the member it is sent in accepts several types." } }, "title": "ResponseContentType_ORIG_UNZIPPED_DIFF_CODING" }, "core.ResponseContentType_TRIGGER": { "type": "object", "description": "Sends the value of the variable `VAR_TRIGGER_VALUE` from the last record, a short value for triggering another profile instead of a document. When it is not set, a Data Queue or SMS profile sends its original input and any other profile sends nothing.", "properties": { "class": { "type": "string", "const": "core.ResponseContentType_TRIGGER", "description": "The type of this object, always `core.ResponseContentType_TRIGGER`. Required where the member it is sent in accepts several types." } }, "title": "ResponseContentType_TRIGGER" }, "core.ResponseContentType_ORIG_UNZIPPED": { "type": "object", "description": "Sends the original input uncompressed: like `core.ResponseContentType_ORIG`, but an input the profile unpacked is not packed again, and a GZIP-compressed input is decompressed. The bytes are otherwise unchanged; the unit's `encoding` is not applied.", "properties": { "class": { "type": "string", "const": "core.ResponseContentType_ORIG_UNZIPPED", "description": "The type of this object, always `core.ResponseContentType_ORIG_UNZIPPED`. Required where the member it is sent in accepts several types." } }, "title": "ResponseContentType_ORIG_UNZIPPED" }, "core.ResponseContentType_FIX": { "type": "object", "description": "Writes the mapped target tree as fixed-length records, each field padded or cut to the length defined on its target field. For `core.SapAleProfileResponseUnit` this is the IDoc flat format.", "properties": { "class": { "type": "string", "const": "core.ResponseContentType_FIX", "description": "The type of this object, always `core.ResponseContentType_FIX`. Required where the member it is sent in accepts several types." } }, "title": "ResponseContentType_FIX" }, "core.ResponseContentType_IU": { "type": "object", "description": "Sends the output of the profile's integration unit (phase 5, `integrationSettings.unit`), e.g. the JSON written by `core.JsonCreationIU`. The output is converted into the unit's `encoding`. Without an integration unit the content is empty.", "properties": { "class": { "type": "string", "const": "core.ResponseContentType_IU", "description": "The type of this object, always `core.ResponseContentType_IU`. Required where the member it is sent in accepts several types." } }, "title": "ResponseContentType_IU" }, "core.As400ParamMode": { "type": "string", "description": "Direction of an AS/400 program parameter.\n\n- `IN`: The parameter sends `value` to the program.\n- `OUT`: The parameter reads the program's answer, `lengthReturn` bytes of it.\n- `IN_OUT`: The parameter sends `value` and reads the program's answer back over it.", "enum": [ "IN", "OUT", "IN_OUT" ], "title": "As400ParamMode" }, "core.As400ParamType": { "type": "string", "description": "Data type of an AS/400 program parameter. `PACKED_DECIMAL` and `ZONED_DECIMAL` use `lengthDigit` for the number of decimal places; the others ignore it.\n\n- `TEXT`: Text, `length` characters long.\n- `SIGNED_2_BYTE`: Signed 2-byte integer.\n- `SIGNED_4_BYTE`: Signed 4-byte integer.\n- `BYTE_ARRAY`: Fixed-length byte array, `length` bytes long.\n- `FLOAT_4`: 4-byte floating point.\n- `FLOAT_8`: 8-byte floating point.\n- `UNSIGNED_2_BYTE`: Unsigned 2-byte integer.\n- `UNSIGNED_4_BYTE`: Unsigned 4-byte integer.\n- `PACKED_DECIMAL`: Packed decimal, `length` digits with `lengthDigit` of them after the decimal point.\n- `ZONED_DECIMAL`: Zoned decimal, `length` digits with `lengthDigit` of them after the decimal point.", "enum": [ "TEXT", "SIGNED_2_BYTE", "SIGNED_4_BYTE", "BYTE_ARRAY", "FLOAT_4", "FLOAT_8", "UNSIGNED_2_BYTE", "UNSIGNED_4_BYTE", "PACKED_DECIMAL", "ZONED_DECIMAL" ], "title": "As400ParamType" }, "core.CloudStorageProvider": { "type": "string", "description": "The cloud storage service a cloud storage channel connects to (its `provider`). Required on create and fixed afterwards, since the channel's credential is stored where this provider expects it. The provider also decides what `applicationId` and `additionalParam` mean.\n\n- `DROPBOX`: Dropbox. OAuth consent is not settable through this API.\n- `S3`: Amazon S3; `applicationId` is the access key id, `additionalParam` the required AWS region. The secret access key is not settable through this API.\n- `ONEDRIVE`: Microsoft OneDrive; deprecated, prefer `ONEDRIVE_M365`.\n- `ONEDRIVE_BUSINESS`: Microsoft OneDrive Business; deprecated, prefer `ONEDRIVE_M365`.\n- `GOOGLE_DRIVE`: Google Drive. OAuth consent is not settable through this API.\n- `BOX`: Box. OAuth consent is not settable through this API.\n- `AZURE_FILE`: Microsoft Azure File Storage; with shared-key authentication (the default) `applicationId` is the storage account name. The shared key is not settable through this API.\n- `GOOGLE_CLOUD`: Google Cloud Storage; `applicationId` is the Google account e-mail of the key, `additionalParam` the required project id. The private key is not settable through this API.\n- `AZURE_BLOB`: Microsoft Azure Blob Storage; with shared-key authentication (the default) `applicationId` is the storage account name. The shared key is not settable through this API.\n- `ONEDRIVE_M365`: Microsoft 365 OneDrive / SharePoint; `additionalParam` is the Microsoft tenant, `common` when left out on create. OAuth consent is not settable through this API.", "enum": [ "DROPBOX", "S3", "ONEDRIVE", "ONEDRIVE_BUSINESS", "GOOGLE_DRIVE", "BOX", "AZURE_FILE", "GOOGLE_CLOUD", "AZURE_BLOB", "ONEDRIVE_M365" ], "title": "CloudStorageProvider" }, "core.FunctionParameter": { "type": "object", "description": "One argument of a mapping function call, one element of `functionParameters`; its position is the parameter it fills (first = `a`). `parameterType` says where the value comes from and `data` holds the constant, the reference or the result number: `{\"parameterType\": \"LINK\", \"data\": \"\"}` is the linked source value, `{\"parameterType\": \"RESULT\", \"data\": 1}` the result of the chain's first function, `{\"parameterType\": \"VALUE\", \"data\": \"-\"}` a constant, `{\"parameterType\": \"VARIABLE\", \"data\": \"VAR_JOBNR\"}` a variable.", "properties": { "class": { "type": "string", "const": "core.FunctionParameter", "description": "The type of this object, always `core.FunctionParameter`. Required where the member it is sent in accepts several types." }, "data": { "$ref": "#/components/schemas/java.lang.Object", "description": "The argument itself, read according to `parameterType`: for `VALUE` the constant as a string (numbers and booleans as text work: `\"2\"`, `\"true\"`; a `%...%` placeholder in it is resolved as a system constant; `\"@NULL@\"` is an SQL NULL); for `LINK` an empty string `\"\"`; for `RESULT` the 1-based position of an earlier function of the same chain as an integer, e.g. `1`; for `VARIABLE` the variable name without `@`, e.g. `VAR_JOBNR` or `MSG_CALL_MODE`; for `SOURCE_FIELD` and `TARGET_FIELD` the field's name in its tree.", "title": "Object" }, "parameterType": { "$ref": "#/components/schemas/core.FunctionParameterType", "default": "VALUE", "description": "Where the argument's value comes from, which also decides how `data` is read: a constant (`VALUE`), the linked source value (`LINK`), an earlier result of the chain (`RESULT`), a variable (`VARIABLE`), or a source or target field named in `data` (`SOURCE_FIELD`, `TARGET_FIELD`).", "title": "FunctionParameterType" } }, "title": "FunctionParameter" }, "core.MatchCodeCondition": { "type": "string", "description": "How a match code (`core.MatchCode`) compares its `checkValue` with the value it tests, e.g. a JSON key. All comparisons are case-sensitive.\n\n- `EQUALS`: The value equals `checkValue`.\n- `STARTS_WITH`: The value starts with `checkValue`, so `id` also matches `idx`. The default.\n- `ENDS_WITH`: The value ends with `checkValue`.\n- `CONTAINS`: The value contains `checkValue`.\n- `REGULAR_EXPRESSION`: `checkValue` is a Java regular expression that must match the whole value, e.g. `id|ID`.\n- `IS_NOT`: The value is anything but `checkValue`.\n- `DOES_NOT_START_WITH`: The value does not start with `checkValue`.", "enum": [ "EQUALS", "STARTS_WITH", "ENDS_WITH", "CONTAINS", "REGULAR_EXPRESSION", "IS_NOT", "DOES_NOT_START_WITH" ], "title": "MatchCodeCondition" }, "java.lang.Object": { "type": "object", "description": "Any JSON value; the member that holds it says which values it takes.", "properties": { "class": { "type": "string", "const": "java.lang.Object", "description": "The type of this object, always `java.lang.Object`. Required where the member it is sent in accepts several types." } }, "title": "Object" }, "core.FunctionParameterType": { "type": "string", "description": "Where a function argument (`core.FunctionParameter`) takes its value from, and so how its `data` is read. Through this API use `VALUE`, `LINK`, `RESULT`, `VARIABLE`, `SOURCE_FIELD` and `TARGET_FIELD`; `MACRO_INPUT` cannot be built through it.\n\n- `SOURCE_FIELD`: A source field named by `data`, e.g. `\"OrderId\"`. Must reference an existing source field.\n- `VALUE`: A constant: `data` is the value as text, e.g. `\"-\"`, `\"2\"` or `\"\"` for an unused parameter.\n- `RESULT`: The result of an earlier function of the same chain: `data` is its 1-based position as an integer, e.g. `1`; a position that has not run yet reads as empty.\n- `VARIABLE`: A variable: `data` is its name, e.g. `VAR_JOBNR`, or `MSG_CALL_` for a query parameter of an HTTP call. Must be declared in `mappingSettings.variables`; built-in `VAR_*` names always are.\n- `LINK`: The value of the source field linked to this target field in `mappingSettings.mappings`; `data` is `\"\"`. Without such a link the argument is empty.\n- `MACRO_INPUT`: The input parameter of a mapping macro; only meaningful inside a macro, which cannot be built through this API.\n- `TARGET_FIELD`: The last value another target field was assigned; `data` is that field's name. Must reference an existing target field.", "enum": [ "SOURCE_FIELD", "VALUE", "RESULT", "VARIABLE", "LINK", "MACRO_INPUT", "TARGET_FIELD" ], "title": "FunctionParameterType" } }, "responses": { "BadRequest": { "description": "The request could not be understood. `BAD_REQUEST` for a body that does not decode — its `message` names the property at fault — and `VALIDATION_FAILED` with one `details` entry per offending parameter for a malformed request target (an unknown query parameter or sort key). Also `BAD_REQUEST` for a response unit naming a channel this client cannot reference.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": { "code": "BAD_REQUEST", "message": "The request is invalid." } } } } }, "Unauthorized": { "description": "Authentication is required or the supplied credentials are invalid.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": { "code": "UNAUTHORIZED", "message": "Authentication is required to access this resource." } } } } }, "Forbidden": { "description": "The caller lacks the permission for this operation on this resource (`FORBIDDEN`).", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": { "code": "FORBIDDEN", "message": "Access to this resource is denied." } } } } }, "NotFound": { "description": "The requested resource does not exist. The code is resource-specific, e.g. `PARTNER_NOT_FOUND`, `PROFILE_NOT_FOUND` or `CHANNEL_NOT_FOUND`.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": { "code": "PARTNER_NOT_FOUND", "message": "Partner not found: 42" } } } } }, "ServerError": { "description": "An unexpected server error occurred.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": { "code": "INTERNAL_ERROR", "message": "An unexpected error occurred." } } } } } }, "securitySchemes": { "OAuth2": { "type": "oauth2", "description": "OAuth2 client-credentials flow for machine-to-machine access.\nExchange a client id/secret at `/dw/register/oauth/token` for a bearer token, then send it\nas `Authorization: Bearer `. Client credentials are provisioned in the\nLobster administration UI.\n\nThis is the client-credentials token endpoint of the Platform API. `/oauth/token`, the\n`token_endpoint` advertised at `/.well-known/oauth-authorization-server`, serves the authorization\ncode flow of the `OAuth2AuthorizationCode` scheme.", "flows": { "clientCredentials": { "tokenUrl": "/dw/register/oauth/token", "refreshUrl": "/dw/register/oauth/token", "scopes": {} } } }, "OAuth2AuthorizationCode": { "type": "oauth2", "description": "OAuth 2.1 authorization code flow with PKCE, for acting as a signed-in user. It works with Microsoft and other single sign-on providers: the provider only confirms the user's identity to the platform, which then issues its own token.\n\n1. `POST /oauth/register` (no authentication) with the JSON body `{\"redirect_uris\": [\"\"]}` returns a `client_id`. The user's browser has to reach the redirect URI.\n2. Open `/oauth/authorize` in the user's browser with `response_type=code`, `client_id`, `redirect_uri`, `state` and a `code_challenge` with `code_challenge_method=S256`. `state` is a fresh unguessable value per request, and `code_challenge` is the S256 hash of a `code_verifier` freshly generated per request from a cryptographically secure random source (43 to 128 characters, RFC 7636). The user signs in on the platform's login page, and the browser is redirected to the redirect URI with `code` and `state`; a callback whose `state` differs from the one sent is to be rejected.\n3. The code is valid for 30 seconds. Exchange it at `POST /oauth/token`, form-encoded, with `grant_type=authorization_code`, `code`, `redirect_uri`, `code_verifier` and `client_id`.\n4. The answer carries `access_token` (valid 30 minutes), `refresh_token` (valid 48 hours) and `expires_in` **in milliseconds**. Refresh with `grant_type=refresh_token`, `refresh_token` and `client_id`.", "flows": { "authorizationCode": { "authorizationUrl": "/oauth/authorize", "tokenUrl": "/oauth/token", "refreshUrl": "/oauth/token", "scopes": {} } } }, "SessionBearer": { "type": "http", "description": "Bearer token obtained from an authenticated browser or guest-user session.\n\n**Flow 1 — UI login:** Log in via the Lobster web UI at `/`, then call\n`GET /auth/sessionBearerToken` to exchange the session cookie for a bearer token.\n\n**Flow 2 — Guest user login token:** Append a GuestUser `loginToken` as a URL\nquery parameter to the base URL to establish a password-free session:\n```\nGET ?loginToken=\n```\nThen call `GET /auth/sessionBearerToken` to obtain the bearer token.", "scheme": "bearer" } } } } ````