flexway
FRENTalk to an expert

Admin API: OpenAPI contract

The operations of the admin port of the Flexway v1.7.1 gateway, read from the OpenAPI contract the release publishes: parameters, bodies, responses, errors and schemas. A static page, with no try-it button.

Admin surface, not exposed to the public. This port must never be reachable from outside: open it to the orchestrator, the metrics scraper and the console only.

Contract text, in English

The operational surface of a Flexway gateway, served on its admin port (9090 by default, moved by FLEXWAY_ADMIN_ADDR): the liveness and readiness probes, the configuration in force with its secrets masked, a request simulated without its upstream, the journals of events and errors of the replica that answers, and the Prometheus metrics.

This port is never routable from outside: /config lists the issuers and the upstreams. Expose it to the orchestrator, the metrics scraper and the console only. Every error of this surface is an RFC 9457 problem document (application/problem+json).

Contract
OpenAPI 3.1.0, version 0.9.0 · Download admin.openapi.yaml
Server
http://localhost:9090 (Admin listener)
Security
No security scheme declared by the contract
Bodies
application/jsonapplication/problem+jsontext/plain
Guide
Admin API

9 operations

Operations

  • GET/healthzThe process is alive - never about its configuration200
  • GET/readyzA configuration is loaded and served; red first at shutdown200503
  • GET/configThe configuration in force, secrets masked, and what it composes to200503
  • POST/simulateWhat the gateway would do with a described request, without calling the upstream200400
  • POST/simulate/mqttWhat the MQTT device listener would do with a described packet, without the broker200400404
  • GET/eventsWhat happened on this replica - reloads, circuit breaker transitions, shedding200
  • GET/errorsThe recent errors of this replica - upstream failures, refusals, internal errors200
  • GET/sparkplug/nodesThe Sparkplug B edge nodes and host applications that cross this replica200
  • GET/metricsPrometheus exposition of the gateway's metrics200
GET

/healthz

liveness
Contract text, in English

The process is alive - never about its configuration

Parameters

None.

Responses
200
application/json LivenessAlive.
Example, generated from the contract
curl -s http://localhost:9090/healthz
GET

/readyz

readiness
Contract text, in English

A configuration is loaded and served; red first at shutdown

Parameters

None.

Responses
200
application/json ReadinessReady.
503
application/json ReadinessNot ready, with the reason - a probe's answer, not an error document.
Example, generated from the contract
curl -s http://localhost:9090/readyz
GET

/config

getEffectiveConfig
Contract text, in English

The configuration in force, secrets masked, and what it composes to

Every key of flexway.yaml as loaded, secret-looking values redacted, plus what the gateway derives from it: the catalogue of served operations and each operation's chain with its provenance, the configuration version and the last reload's outcome.

Parameters

None.

Responses
200
application/json EffectiveConfigThe effective configuration.
503
application/problem+json ProblemNo configuration loaded yet (not_ready).
Example, generated from the contract
curl -s http://localhost:9090/config
POST

/simulate

simulateRequest
Contract text, in English

What the gateway would do with a described request, without calling the upstream

The described request goes through the same decision as traffic - routing, origin, authorization against the described identity (no token is verified), whitelist, validation, policy chain - and stops before the upstream: no token exchanged, no bucket nor quota spent, nothing counted.

Parameters

None.

Request body required
Responses
200
application/json SimulationResultThe verdict, and the outbound request when served.
400
application/problem+json ProblemThe description is incomplete (malformed_request).
Example, generated from the contract
curl -s http://localhost:9090/simulate \
  -H 'Content-Type: application/json' \
  -d '{"method":"GET","host":"api.example.com","path":"/orders/42?status=open"}'
POST

/simulate/mqtt

simulateMQTTPacket
Contract text, in English

What the MQTT device listener would do with a described packet, without the broker

A described PUBLISH, SUBSCRIBE or will (a CONNECT's) of a described device goes through the listener's decision - the operations its identity satisfies, its channels with the bound values written, wildcards contained, $share/ groups, QoS, Response Topic - and stops before the broker: nothing dialled, no rate nor quota spent, nothing counted. Absent without listeners.mqtt (404).

Parameters

None.

Request body required
Responses
200
application/json MQTTSimulationResultThe verdict, the operation, and the topic or filter as written toward the broker when served.
400
application/problem+json ProblemThe description is incomplete (malformed_request).
404
application/problem+json Problemlisteners.mqtt is not set (not_found).
Example, generated from the contract
curl -s -X POST http://localhost:9090/simulate/mqtt

The body is not generated: a required field has no example in the contract. See the schema.

GET

/events

listEvents
Contract text, in English

What happened on this replica - reloads, circuit breaker transitions, shedding

A journal in memory: the last 128 events of each kind, newest first, lost at a restart - per replica, the one that answers. Never a tenant nor anything a caller sent: upstream names come from the configuration, versions and causes from the reloader (the text of /config's last_reload).

Parameters

None.

Responses
200
application/json EventLogThe journal.
Example, generated from the contract
curl -s http://localhost:9090/events
GET

/errors

listErrors
Contract text, in English

The recent errors of this replica - upstream failures, refusals, internal errors

A journal in memory: three rings of 256 (upstream, refused, internal), newest first, lost at a restart - per replica, the one that answers. Written on the error path only, without an allocation, at most 20 per second and per kind: past it, an error is counted in its kind's dropped and not detailed. Every field is a name from the configuration, the verified tenant, or a member of a closed set; never a subject, an address, the path received, the request, its headers or body, nor an upstream's or the network's text. A 4xx an upstream answered is its business, not an error of the gateway.

Parameters

None.

Responses
200
application/json ErrorLogThe journal.
Example, generated from the contract
curl -s http://localhost:9090/errors
GET

/sparkplug/nodes

listSparkplugNodes
Contract text, in English

The Sparkplug B edge nodes and host applications that cross this replica

The table each replica keeps: an edge node is online from its NBIRTH on this replica, offline from its NDEATH or the end of its connection with its will, moved when this replica handed its connection over to another (a tombstone, never offline), unknown when only its admitted commands crossed here. Bounded by observability.sparkplug (max_nodes, max_nodes_per_tenant, offline_retention, max_devices_per_node); lost at a restart. The listing carries each node's device counts, never its devices: an answer is at most max_nodes entries of bounded fields (an id is 255 bytes at most). With node (and tenant), the one node with its devices. The console reads it on every replica and keeps, per node, the entry with the latest birth. Names are the ones the topics carry - the tenant's group, the node's and its devices' ids; never a metric value, a payload, an address or a certificate. Absent (404) when the gateway has no MQTT listener.

Parameters
tenantquerystring
Only this tenant's nodes and host applications.Bounds : length ≤ 128
nodequerystring
Only this edge node, with its devices - given with tenant.Bounds : length ≤ 255
Responses
200
application/json SparkplugNodesThe table.
Example, generated from the contract
curl -s http://localhost:9090/sparkplug/nodes
GET

/metrics

getMetrics
Contract text, in English

Prometheus exposition of the gateway's metrics

Names and dimensions are a frozen surface.

Parameters

None.

Responses
200
text/plain stringPrometheus text exposition.
Example, generated from the contract
curl -s http://localhost:9090/metrics

Errors

Every error of this API is a problem document, application/problem+json. The codes below are the ones the contract's responses cite.

Problem

object

RFC 9457 problem details - every error of the admin surface (the inference surface answers in OpenAI's envelope, ErrorResponse). code is what a client switches on.

typerequiredstring
Format : uri
titlerequiredstring
statusrequiredinteger
detailstring
instancestring
coderequiredstring
Example : not_found
request_idstring
trace_idstring
errorslist<FieldError>
invalid_request only - each field that broke the contract, and the rule it broke.

Cited by : GET /configPOST /simulatePOST /simulate/mqtt

Codes cited by the responses
  • 503 not_ready GET /config
  • 400 malformed_request POST /simulate · POST /simulate/mqtt
  • 404 not_found POST /simulate/mqtt

38 schemas

Schemas

Each schema once, with its anchor: the operations link to it, and a schema that cites another links it.

SimulationRequest

object
methodrequiredstring
Example : GET
hostrequiredstring
Example : api.example.com
pathrequiredstring
With its query, as a client would send it.Example : /orders/42?status=open
headersmap<string>

Cited by : POST /simulate

SimulatedIdentity

object

Who the caller is supposed to be - what a valid token would have proved. Nothing is verified.

issuerrequiredstring
subjectrequiredstring
tenantstring
scopeslist<string>
roleslist<string>

Cited by : SimulationRequest

MQTTSimulationRequest

object
packetrequiredstring
will: a CONNECT's will, judged as a PUBLISH.Values : publish subscribe will
topicrequiredstring
A topic name (publish, will) or a filter (subscribe), $share/<group>/ included.
qosinteger
Bounds : value ≥ 0, ≤ 2Default : 0
response_topicstring
An MQTT 5 Response Topic
identityrequiredMQTTSimulatedIdentity

Cited by : POST /simulate/mqtt

MQTTSimulatedIdentity

object

Who the device is supposed to be - nothing is verified. A key or a certificate is found by its id in the configuration in force.

kindrequiredstring
Values : token api_key certificate
idstring
api_key: the key's id; certificate: the auth.mtls client's id.
issuerstring
subjectstring
tenantstring
token: its tenant claim; a key's or a certificate's is the configuration's.
scopeslist<string>
claimsmap<string>
token: the claims a claim:<name> binding reads.
certificateobject
certificate: the fields a cert:<field> binding reads - cn, serial, fingerprint, ou, o, san.dns, san.uri, san.ip, san.email (lists for the multi-valued ones).

Cited by : MQTTSimulationRequest

MQTTSimulationResult

object
verdictrequiredstring
Values : served refused
reason_codeinteger
The MQTT 5 reason code a refusal answers (0x87 = 135...).
causestring
The refusal's cause - the label of flexway.mqtt.packets.Values : authentication not_authorized binding wildcard payload_invalid quota packet_too_large upstream_unavailable
operationstring
upstreamstring
writtenstring
The topic or filter as written toward the broker - a $share/ group in the tenant's name.
qosinteger
The QoS the broker sees - a subscription's granted at the operation's qos_max at most.
client_idstring
The client id the broker sees for this identity.

Cited by : POST /simulate/mqtt

SimulationResult

object
verdictrequiredstring
Values : served refused
statusrequiredinteger
codestring
The refusal's problem code.
operationstring
upstreamstring
chainlist<string>
appliedlist<string>
outboundOutbound

Cited by : POST /simulate

Outbound

object

The request the upstream would receive, before the token exchange and the relay; credentials masked.

pathrequiredstring
querystring
headersrequiredmap<list<string>>

Cited by : SimulationResult

Readiness

object
statusrequiredstring
Values : ready not ready
operationsinteger
Operations served, when ready.
reasonstring
Why not, when not ready.

Cited by : GET /readyz

GRPCStatus

object

upstream_status only - the google.rpc.Status a gRPC upstream answered to a call translated from REST (1.1.0): the upstream's own answer, as it gave it. The HTTP status is the one google.rpc.Code maps the code to.

coderequiredinteger
Example : 5
statusrequiredstring
The code's name - what a client switches on.Example : NOT_FOUND
messagestring
detailslist<object>
The status details in the proto3 JSON mapping; a type the gateway does not know keeps only its "@type".

Cited by : Problem

FieldError

object
fieldrequiredstring
Example : query.limit
rulerequiredstring
For a human.
coderequiredstring
The JSON Schema keyword broken, or the operator's name for it (errors.field_codes).

Cited by : Problem

KafkaOperation

object

An AsyncAPI operation served to Kafka clients (x-flexway-kafka-proxy).

operationrequiredstring
identitiesrequiredlist<object>
The alternatives of its security - token (with its scopes), apikey, certificate.
transactionsboolean
A send operation that opens the transactional producer.
admin_scopestring
The scope a token carries to administer the topic.
decrypt_scopestring
A receive operation's scope a token carries to read the topic's encrypted fields in clear.

EffectiveConfig

object
versionrequiredinteger
The configuration schema's version - not the gateway's, see build.
buildrequiredBuildInfo
config_versionrequiredstring
Short digest of the bytes served.
config_digeststring
Short semantic digest of the configuration served: the decoded flexway.yaml in a canonical form and each contract under the path flexway.yaml writes, the API key store excluded. The same whatever the mount path or the chart's rendering - what flexway validate prints, and what a pipeline or the console expects to see served after a merge.
last_reloadobject
catalogrequiredlist<CatalogEntry>
fragmentslist<PolicyFragment>
The policy fragments imported, in the order policies.fragments writes them; empty without one. Their definitions are also under policies.definitions, as <import>/<name>.
agentsobject
The agents section as loaded, when one is configured: mcp (path, resources, servers and clients) and delegation (max_depth, max_age, introspection).
kafkaobject
The Kafka listener's virtual clusters (1.6.0), read from the AsyncAPI contract in force; absent without listeners.kafka. Its bounds and quotas are under listeners.kafka, its signals' settings under observability.kafka. Never a key, a certificate, a tenant's name.
devicesobject
The MQTT device listener's operations (1.7.0), read from the AsyncAPI contract in force; absent without listeners.mqtt. Its bounds are under listeners.mqtt, its signals' settings under observability.mqtt. Never a key, a certificate, a tenant's name.
kmsobject
The KMS of field-level encryption on the Kafka listener (1.6.0), as loaded: its kind, host and key name - per_tenant_key when the name holds {tenant} -, the previous keys records may still name (previous_keys, read only), timeout, rotation, cache and tenant_calls bounds, and its kind's section with references (${VAR}, file:/path) and mounted file paths - never a secret, never a key. The epochs in use and the keys cached are runtime state, in the metrics flexway.kafka.dek.epoch and flexway.kafka.dek.cached.
listenersobject
The listeners beside HTTP, as loaded: kafka - its addresses, bounds (max_connections, max_connections_per_tenant, max_tenant_in_flight_bytes, on_tenant_budget_exceeded...) and, when declared, quotas (client and tenant producer_byte_rate, consumer_byte_rate, request_rate; window, max_throttle, quota) - what the console shows as the bounds in force; mqtt - its address, TLS files, websocket, advertised_address, every bound (max_connections, max_connections_per_ip, max_connection_rate_per_tenant, topic_alias_maximum...), device and tenant rates, the tenant's quota policy, failover (mode, reason, server_reference, redirect_above, handover_timeout, drain_spread).
mcp_federationmap<FederationState>
Live, not the configuration: each federated MCP server's last discovery, by server name - read at each GET /config, since discovery moves on its own.
a2aobject
The governed A2A agents (1.2.0): what each serves and how - from the configuration in force, read at each GET /config. Absent when no agent is declared. Never a key, never a token.
chainsrequiredmap<map<ChainDetail>>
By host ("*" for every host without contracts of its own), then by operationId.
effective_chainsmap<list<string>>
The chain's policy names alone, by operationId, on hosts not configured otherwise.
policiesobject
The policies section as loaded - definitions and chains, secret-looking values masked.
aiobject
The ai section as loaded, when one is configured: budget (monthly_tokens, daily_tokens, monthly_eur, soft), overrides (match, backend, caps) and backends - the quotas the console compares a tenant's consumption with.

Cited by : GET /config

EventLog

object
replicarequiredstring
The answering process's host name - the pod's name.
capacityrequiredinteger
Events kept per kind.
eventsrequiredlist<Event>

Cited by : GET /events

Event

object

One event. reload - result, version, and cause when rejected; breaker - upstream, from and to; shedding - state, and cause (latency of the shedder, in_flight_limit of the adaptive in-flight limit); delegation - a refused chain of agents: reason, client, tenant, actors, depth and age against the bounds in force, operation or tool, the token's declared scopes. Never a subject, never a token; a tenant on the kind delegation only.

atrequiredstring
Format : date-time
kindrequiredstring
Values : reload breaker shedding delegation
reasonstring
Delegation - why the chain was refused.Values : depth age revoked widened unverifiable
clientstring
Delegation - the agent's client: a declared client_id, _undeclared, none or _other.
tenantstring
Delegation - the tenant, bounded as on the metrics.
actorslist<string>
Delegation - the agents of act, the current one first; at most max_depth + 1, 256 characters each.
depthinteger
Delegation - the chain's measured depth.
age_secondsinteger
Delegation - the chain's measured age; -1 when the token carries no time it started.Format : int64
max_depthinteger
Delegation - the depth bound in force for the operation.
max_age_secondsinteger
Delegation - the age bound in force for the operation.Format : int64
operationstring
Delegation - the operation (REST or a tool's replay); absent at the MCP connection.
toolstring
Delegation - the tool; absent for a REST request and at the MCP connection.
scopeslist<string>
Delegation - the presented token's scopes that a contract or a federated server declares.
resultstring
Values : loaded applied rejected unchanged
versionstring
causestring
upstreamstring
fromstring
Values : closed half_open open
tostring
Values : closed half_open open
statestring
Values : started stopped

Cited by : EventLog

SparkplugNodes

object
replicarequiredstring
The answering process's host name - the pod's name.
capacityrequiredinteger
observability.sparkplug.max_nodes.
offline_retention_secondsrequiredinteger
observability.sparkplug.offline_retention
droppedrequiredinteger
Nodes and host applications not kept since the start - the table was full of online nodes.Format : int64
nodesrequiredlist<SparkplugNode>
hostsrequiredlist<SparkplugHost>

Cited by : GET /sparkplug/nodes

SparkplugNode

object
tenantrequiredstring
The node's group - the tenant it is bound to.
edge_noderequiredstring
staterequiredstring
Values : online offline moved unknown
sincerequiredstring
When the node took its state on this replica.Format : date-time
bd_seqinteger
The bdSeq of its last NBIRTH here; absent when none was read.Format : int64
will_bd_seqinteger
The bdSeq of the will (NDEATH) its connection registered; absent when none was read.Format : int64
seq_gapsrequiredinteger
Messages whose seq was not the next since its birth here.Format : int64
bd_seq_gapsrequiredinteger
Births whose bdSeq was not their will's.Format : int64
protocol_versionrequiredstring
5 or 3.1.1; empty for an unknown node.
authrequiredstring
The mode of identity of its connection - certificate, token, api_key; empty for an unknown node.
devices_onlinerequiredinteger
Its devices online (DBIRTH without a later DDEATH) since its birth.
devices_totalrequiredinteger
Its devices kept since its birth.
devicesrequiredlist<SparkplugDevice>
Its devices (DBIRTH, DDEATH) since its birth, sorted by id - listed only when the node is asked for (node); empty otherwise.Bounds : items ≤ 100000
devices_truncatedrequiredboolean
Past observability.sparkplug.max_devices_per_node
commandsrequiredSparkplugCommands

Cited by : SparkplugNodes

SparkplugCommands

object

The commands (NCMD, DCMD) to the node that crossed this replica, admitted and refused.

admittedrequiredinteger
Format : int64
refusedrequiredinteger
Format : int64

Cited by : SparkplugNode

SparkplugHost

object

A host application, read from its STATE (spBv1.0/STATE/{host_id}, the host id bound to the tenant).

tenantrequiredstring
host_idrequiredstring
staterequiredstring
Values : online offline
sincerequiredstring
Format : date-time

Cited by : SparkplugNodes

ErrorLog

object
replicarequiredstring
The answering process's host name - the pod's name.
capacityrequiredinteger
Errors kept per kind.
write_limitrequiredinteger
Errors detailed per second and per kind; past it they are counted in dropped.
kindsrequiredlist<ErrorKindCount>
Each kind's count of the errors it could not detail since the start.
errorsrequiredlist<GatewayError>

Cited by : GET /errors

ErrorKindCount

object
kindrequiredErrorKind
droppedrequiredinteger
Errors past the write limit since the start.Format : int64
last_dropped_atstring
The last of them; absent when none was dropped.Format : date-time

Cited by : ErrorLog

ErrorKind

string

upstream - an answer written for an upstream that failed (502, 503, 504), or an upstream's 5xx relayed; refused - a refusal the gateway wrote (a 4xx, or the 503 of its shedding); internal - the gateway failing.

Values : upstream refused internal

Cited by : ErrorKindCountGatewayError

GatewayError

object

One error. Its fields are a closed list: no subject, address, received path, request, header, body, nor an upstream's or the network's text.

atrequiredstring
Format : date-time
kindrequiredErrorKind
operationrequiredstring
The operationId; _unmatched when no route matched.
upstreamstring
The upstream's name in the configuration; absent when the request never reached one.
tenantstring
The verified identity's tenant; absent for an anonymous caller. A tenant longer than 128 characters is never truncated: it is written sha256:<hex digest of the whole tenant>.Bounds : length ≤ 128
statusrequiredinteger
The HTTP status answered - for a refusal answered in gRPC's status, the one its code maps to.
coderequiredstring
The problem code the gateway wrote; upstream_status for an upstream's 5xx relayed as is - never a code or a text of the upstream.
stagerequiredstring
Where the error was written, derived from its code.Values : routing identity authorization policies validation protection upstream response internal
causestring
Upstream errors only - why the upstream failed, a closed set; never the network's text.Values : dial_refused dns tls timeout reset circuit_open bulkhead buffer_full rejected status other
duration_msrequirednumber
Time from the request's arrival to its answer.Format : double
trace_idstring
The request's trace when it was sampled.Pattern : ^[0-9a-f]{32}$

Cited by : ErrorLog

BuildInfo

object

The binary serving, written at build time: the release tag for a release ("v1.0.0"), "dev" for any other build, and the commit it was built from.

versionrequiredstring
Example : v1.0.0
commitrequiredstring
Short commit; empty when the build did not say.Example : 9438ab3

Cited by : EffectiveConfig

CatalogEntry

object
operation_idrequiredstring
methodrequiredstring
pathrequiredstring
The path template, never a concrete URL.
hostsrequiredlist<string>
"*" stands for every host without contracts of its own.
upstreamrequiredstring
summarystring
tagslist<string>
deprecatedrequiredboolean
securityrequiredlist<list<string>>
The alternatives, each the schemes it combines; an empty one is anonymous access.
rate_classstring
toolstring
The tool name when offered to agents (x-flexway-tool).
tool_unattendedboolean
Present only with tool: false when the tool is kept for agents a person supervises (x-flexway-tool with unattended false), true otherwise.
builtinrequiredboolean
An operation the gateway declares itself (ai.*).
protocolstring
grpc for a method of a Protobuf service (1.1.0): path is its gRPC path. Absent: HTTP.Values : grpc
restlist<CatalogRoute>
The REST routes of a gRPC method (google.api.http), the same operation translated.
cachelist<CatalogCache>
The operation's response cache (1.2.0), one entry per distinct rule - from its x-flexway-cache, or a cache policy attached around it. Absent: nothing of it is cached.
timeout_msrequiredinteger
The operation's total budget in milliseconds: its x-flexway-timeout, otherwise its upstream's timeout. An external-call of the request phase consumes it; the upstream gets what is left.Format : int64
sunsetstring
The date a deprecated operation is withdrawn (x-flexway-sunset), YYYY-MM-DD.Pattern : ^[0-9]{4}-[0-9]{2}-[0-9]{2}$
streamstring
How the operation answers when it is not one response - a text/event-stream, a protocol switch (101), a streaming gRPC method. The vocabulary of flexway.streams.open. Absent: one response.Values : sse websocket grpc
security_detailrequiredlist<CatalogAlternative>
The alternatives of security, in the same order, with each scheme's kind and what it requires.
effective_rate_classrequiredstring
The rate-limit class the operation counts against: rate_class when declared, read for a gRPC method without side effects, otherwise by method.
contractstring
The contract file that declares it, as flexway.yaml writes the path; absent for the gateway's own operations.
prioritystring
x-flexway-priority when declared.Values : critical normal sheddable
validationstring
x-flexway-validation when declared; absent - the host's.Values : full params off
delegationobject
x-flexway-delegation when declared; a bound absent is the configuration's.
added_scopeslist<string>
The scopes x-flexway-scopes adds to every token alternative (already in security_detail).
paramsrequiredlist<CatalogParam>
The parameters in short - never a schema nor an example.
bodyobject
The request body in short; absent - none declared.
responsesrequiredlist<CatalogResponse>
The declared responses in short - status as written ("200", "2XX", "default") and media types.

Cited by : EffectiveConfig

CatalogOwner

object

The team that answers for an operation (x-flexway-owner) - a team's channel, never a person.

teamrequiredstring
Bounds : length ≤ 128
contactstring
Bounds : length ≤ 128

Cited by : CatalogEntry

CatalogAlternative

object
anonymousrequiredboolean
The empty alternative {}: no identity needed.
schemesrequiredlist<object>
scopeslist<string>
roleslist<string>

Cited by : CatalogEntry

CatalogParam

object
namerequiredstring
inrequiredstring
Values : path query header
requiredrequiredboolean
typestring
The schema's type; "a|b" for a list of types.
formatstring

Cited by : CatalogEntry

A2AAgent

object
agentrequiredstring
The agent's name in operation ids (a2a.<agent>.<Method>) and metrics.
cardrequiredstring
The declared card, as flexway.yaml writes its path.
upstreamrequiredstring
bindingsrequiredmap<string>
The bindings served (JSONRPC, HTTP+JSON), each with the gateway's address.
methodsrequiredmap<string>
The methods served, each with its rate class - free debits nothing.
verifyrequiredstring
How the upstream's own card is verified - none until card verification is built.Values : none
streamingrequiredboolean
max_streamsinteger
The streams one caller may hold open to the agent, per replica.
max_task_durationstring
The longest a stream of the agent runs, as a Go duration.
card_pathrequiredstring
Where the gateway publishes the agent's card.

FederationState

object
statusrequiredobject
toolsrequiredlist<string>
The tools discovered, under their names on the surface.
descriptionsmap<string>
What each tool says of itself, by name, 512 characters at most - a third party's text.
not_servedlist<string>
Tools announced and not served, their name taken: "<name> (taken by <who>)".

Cited by : EffectiveConfig

CatalogCache

object
ttl_secondsrequiredinteger
The longest a response is kept; the upstream's Cache-Control may shorten it.Format : int64
scoperequiredstring
public: anonymous callers; subject: keyed by tenant and subject.Values : public subject
policystring
The cache policy it comes from; absent for the contract's x-flexway-cache.
hostsrequiredlist<string>
The hosts it applies on; "*" alone: every host.

Cited by : CatalogEntry

Attachment

object
levelrequiredstring
Values : global host route operation
sourcestring
The host, the route motif, x-flexway-policies, or policies.fragments for the enforced head of the chain.

Cited by : ChainDetail

FragmentOrigin

object

The fragment an imported policy comes from; absent for a local definition.

importrequiredstring
The import name flexway.yaml gives it - the prefix of its definitions.
fragmentrequiredstring
The fragment's own name.
versionrequiredstring
The fragment's semantic version - informative; the digest says what runs.
enforcedrequiredboolean
At the head of every chain: never removed, never replaced.

PolicyFragment

object

One imported policy fragment.

importrequiredstring
fragmentrequiredstring
versionrequiredstring
digestrequiredstring
sha256:<hex>, the digest pinned - equal to the file's.
pathrequiredstring
The file
signaturerequiredstring
How the file was proven beyond its digest: none in this version.Values : none
requires_uncheckedrequiredboolean
true when the fragment requires a gateway version and a development build (dev) loaded it without comparing - said here and in the log, never refused.
requiresrequiredobject
definitionsrequiredlist<string>
The imported names, <import>/<name>.
enforcedrequiredlist<string>
The enforced definitions
unusedrequiredlist<string>
The imported definitions no chain names - never an error.

Cited by : EffectiveConfig