Applications
An application is a single service hosted by a connector: an HTTP server, an SSH target, a database, and so on.
Each application has one or more addresses: each address describes where traffic is intercepted (listenAddress /
listenPort) and where it is forwarded.
Forwarding for both address and port is independently controlled by a boolean flag plus the destination it implies:
forwardAddress: false(default): Forward to a fixedtargetAddress. The flag goes with a single string destination.forwardAddress: true: Pass the listened-on address through to the host, constrained to a non-emptyallowedAddresseslist (IPs, CIDR blocks, or hostnames). The list is required in this mode; an empty list is rejected.forwardPort: false(default): Forward to a fixedtargetPort(integer).forwardPort: true: Pass the listened-on port through, constrained to a non-emptyallowedPortslist (ports or port ranges). The list is required in this mode; an empty list is rejected.
Fields
| Field | Description | Example |
|---|---|---|
id | Application id | e2f3a4b5-6c7d-4e8f-9012-3456789abcde |
name | Application name | east-web-server |
zitiId | Ziti service id of the primary service backing this application. Response-only; null while the application is disabled (not materialized) | 681gcYytKz4VDia793pOkN |
zitiName | Unique ziti name. Response-only; never accepted as input | 8b14d4f9-...|f1e2d3c4-...|east-web-server |
type | Application type — must be a standard catalog name or the value custom | HTTP |
protocol | TCP, UDP, or TCP/UDP | TCP |
enabled | Whether the application is materialized into a Ziti service. Defaults to true. When false, the definition is persisted but no Ziti services exist. Required on PUT; optional on PATCH (omit to leave unchanged) | true |
connectorId | Parent connector | f1e2d3c4-b5a6-4789-9012-3456789abcde |
providerId | Denormalized from the connector's provider | 8b14d4f9-3a52-4b91-8e7c-d3e44b5c1f2a |
connectorModelId | Non-null when the application was inherited from a Connector model | 9a8b7c6d-5e4f-4321-9876-543210fedcba |
addresses | A list of entries, each with listenAddress, listenPort, the forwardAddress / forwardPort flags, the corresponding targetAddress / targetPort (when forwarding is off) or allowedAddresses / allowedPorts (when forwarding is on), and zitiId (response-only Ziti service id) | |
Validated, not free-form
typemust be either a standard application type name (e.g.HTTP,HTTPS,SSH; case-insensitive, including disabled catalog rows) or the valuecustom. Anything else is rejected at the API boundary.namemust be unique among the explicit applications on the same connector. On update, the application being edited is excluded so re-saving the same name is a no-op.- When the connector has a model attached, a non-inherited application cannot take a name that collides with one of the Model's inherited applications.
Inherited vs. explicit
- Explicit applications are created directly via
POST /connectors/{id}/applications.connectorModelIdisnull. - Inherited applications are materialized when a model is attached to the connector. They carry
connectorModelId = <model uuid>and are immutable via the application endpoints. Edit the model to change them.
Neither kind survives a change of model attachment. Attaching, switching, and detaching all clear the connector outright — every application goes, explicit ones included — and the incoming model's are materialized in their place (or none at all, on a detach). An inherited application is never converted into an explicit one either, so if you need an application to outlive a model change, recreate it afterwards. See Attaching a model.
Discovery
The /providers/{providerId}/application-types endpoint returns both the standard catalog and a row for every
non-inherited application on the provider's connectors whose type is custom. The custom boolean on each row
distinguishes the two. That lets a provider see, at a glance, every non-standard connectivity offering in use.