Skip to content

Gateway Function Reference

Fluxy Free 0.2.0.20260714 declares 28 authenticated Gateway functions. All 28 are available on Ignition 8.3; 26 are available on Ignition 8.1 because historian metadata requires 8.3. The route prefix, authorization implementation, and underlying version adapters differ, but supported operations retain the same JSON contract and Python names.

All functions use HTTP POST.

GatewayRoute prefixCredential
Ignition 8.3.4+/data/fluxyComplete Ignition Gateway API key in X-Ignition-API-Token
Ignition 8.1.50+/main/data/fluxyFluxy token whose SHA-256 hash is configured on the Gateway

JSON routes accept Content-Type: application/json, reject request bodies larger than 1 MiB, and reject ordinary JSON responses larger than 4 MiB. Collection requests accept at most 1,000 items. Every route returns X-Fluxy-Request-Id and X-Fluxy-Run-Id response headers. Clients may supply:

  • X-Fluxy-Request-Id: unique operation correlation ID.
  • X-Fluxy-Run-Id: stable script or batch correlation ID.
  • X-Fluxy-Script: optional script name.

Ignition 8.3 authorization uses the Gateway API Read or Write permission shown below. Ignition 8.1 uses the configured read token or write token; the write token can call both access levels.

Every Write operation emits a mutation audit record when the Gateway audit profile is configured. Audit records contain operation and target identifiers, but never imported tag definitions, tag or historian values, annotation data, metadata values, API credentials, or complete request bodies.

Python APIGateway routeAccessUnderlying Ignition API
fx.util.get_version()util/getVersionReadsystem.util.getVersion
Current client sourceutil/getCapabilitiesReadShared native route manifest
fx.util.get_modules()util/getModulesReadsystem.util.getModules
fx.util.query_audit_log(...)util/queryAuditLogReadsystem.util.queryAuditLog
fx.tag.read_blocking(...)tag/readBlockingReadsystem.tag.readBlocking
fx.tag.browse(...)tag/browseReadsystem.tag.browse
fx.tag.get_configuration(...)tag/getConfigurationReadsystem.tag.getConfiguration
fx.tag.export_tags(...)tag/exportTagsReadsystem.tag.exportTags
fx.tag.query(...)tag/queryTagsReadsystem.tag.query
fx.tag.configure(...)tag/configureWritesystem.tag.configure
fx.tag.write_blocking(...)tag/writeBlockingWritesystem.tag.writeBlocking
fx.tag.delete_tags(...)tag/deleteTagsWritesystem.tag.deleteTags
fx.tag.copy(...)tag/copyWritesystem.tag.copy
fx.tag.move(...)tag/moveWritesystem.tag.move
fx.tag.rename(...)tag/renameWritesystem.tag.rename
fx.tag.import_tags(...)tag/importTagsWritesystem.tag.importTags
fx.historian.browse(...)historian/browseRead8.3 system.historian.browse; 8.1 system.tag.browseHistoricalTags
fx.historian.query_raw_points(...)historian/queryRawPointsRead8.3 system.historian.queryRawPoints; 8.1 system.tag.queryTagHistory
Client helper in current sourcehistorian/queryRawPointsStreamReadJava TagHistoryManager.queryHistory
fx.historian.query_aggregated_points(...)historian/queryAggregatedPointsRead8.3 system.historian.queryAggregatedPoints; 8.1 history/calculation adapters
fx.historian.query_annotations(...)historian/queryAnnotationsRead8.3 system.historian.queryAnnotations; 8.1 system.tag.queryAnnotations
fx.historian.query_metadata(...)historian/queryMetadataRead8.3 only: system.historian.queryMetadata
fx.historian.store_data_points(...)historian/storeDataPointsWrite8.3 system.historian.storeDataPoints; 8.1 system.tag.storeTagHistory
fx.historian.store_annotations(...)historian/storeAnnotationsWrite8.3 system.historian.storeAnnotations; 8.1 system.tag.storeAnnotations
fx.historian.delete_annotations(...)historian/deleteAnnotationsWrite8.3 system.historian.deleteAnnotations; 8.1 system.tag.deleteAnnotations
fx.historian.store_metadata(...)historian/storeMetadataWrite8.3 only: system.historian.storeMetadata
fx.project.request_scan()project/requestScanReadJava ProjectManager.requestScan
fx.project.get_project_names()project/getProjectNamesReadsystem.project.getProjectNames

Routes below are relative to /data/fluxy/ on 8.3 or /main/data/fluxy/ on 8.1.

POST util/getVersion

  • Python: fx.util.get_version()
  • Access: Read
  • Request: empty JSON object.
  • Response: version, major, minor, transport, and contractVersion.
{}

POST util/getCapabilities

  • Python: fx.util.get_capabilities() in current client source. PyPI fluxy-ign 0.1.1 can call the raw route directly but does not include this helper.
  • Access: Read
  • Request: empty JSON object.
  • Response: transport, contract version, module version, Ignition family, and all 28 declared operations with access and version-specific available fields.
{}

Use capability discovery before optional operations. Ignition 8.1 reports historian/queryMetadata and historian/storeMetadata with available: false; those routes are not mounted on 8.1.

POST util/getModules

  • Python: fx.util.get_modules()
  • Access: Read
  • Request: empty JSON object.
  • Response: the installed module inventory as columns and rows; the Python client converts it to row mappings.
{}

POST util/queryAuditLog

  • Python: fx.util.query_audit_log(...)
  • Access: Read
  • Required: auditProfileName string.
  • Optional: startDate, endDate as epoch milliseconds; actorFilter, actionFilter, targetFilter, valueFilter, systemFilter, and contextFilter.
  • Response: an Ignition Dataset serialized as columns and rows; the Python client converts it to row mappings.
{
"auditProfileName": "Fluxy Audit",
"actionFilter": "Fluxy.tag/writeBlocking",
"targetFilter": "[default]Area/Setpoint"
}

POST tag/readBlocking

  • Python: fx.tag.read_blocking(tag_paths, timeout_ms=None)
  • Access: Read
  • Required: tagPaths list.
  • Optional: timeoutMs; default 45000.
  • Response: one entry per path with tagPath, JSON-compatible value, quality, and ISO timestamp.
{
"tagPaths": ["[default]Area/Temperature"],
"timeoutMs": 45000
}

POST tag/browse

  • Python: fx.tag.browse(path, tag_filter=None)
  • Access: Read
  • Required: path string.
  • Optional: filter object using Ignition tag browse filters.
  • Response: entries containing available name, fullPath, tagType, dataType, and hasChildren fields.
{
"path": "[default]Area",
"filter": {"tagType": "AtomicTag"}
}

POST tag/getConfiguration

  • Python: fx.tag.get_configuration(path, recursive=False)
  • Access: Read
  • Required: one path string or a paths list.
  • Optional: recursive; default false.
  • Response: normalized tag configuration objects, including nested tags when requested.
{
"path": "[default]Area/Temperature",
"recursive": false
}

POST tag/exportTags

  • Python: fx.tag.export_tags(tag_paths, recursive=True)
  • Access: Read
  • Required: tagPaths list.
  • Optional: recursive; default true.
  • Response: decoded tags plus the original Ignition rawJson export.
{
"tagPaths": ["[default]Area"],
"recursive": true
}

POST tag/queryTags

  • Python: fx.tag.query(provider, query=None, limit=None, continuation=None)
  • Access: Read
  • Required: provider string.
  • Optional: Ignition tag-report query object, limit, and continuation point.
  • Limits: omitted limit defaults to 1000; accepted range is 1 through 10000.
  • Response: requested tag properties and continuationPoint. JSON-compatible property types are preserved.
{
"provider": "default",
"query": {
"condition": {"path": "Area/*", "tagType": "AtomicTag"},
"returnProperties": ["path", "tagType", "valueSource"]
},
"limit": 100
}

POST tag/configure

  • Python: fx.tag.configure(tags, base_path=..., collision_policy="o")
  • Access: Write
  • Required: basePath string and tags list.
  • Optional: collisionPolicy; default o for overwrite.
  • Response: quality and name for each submitted tag.
  • Audit: successful mutations are written to the configured Gateway audit profile.
{
"basePath": "[default]",
"collisionPolicy": "o",
"tags": [
{
"name": "fluxy",
"tagType": "AtomicTag",
"valueSource": "memory",
"dataType": "String",
"value": "Hello World"
}
]
}

POST tag/writeBlocking

  • Python: fx.tag.write_blocking(tag_paths, values, timeout_ms=None)
  • Access: Write
  • Required: equally sized tagPaths and values lists.
  • Optional: timeoutMs; default 45000.
  • Response: quality and path for every write.
  • Audit: successful mutations are written to the configured Gateway audit profile. Values are not logged or audited.
{
"tagPaths": ["[default]fluxy"],
"values": ["Hello World"],
"timeoutMs": 45000
}

POST tag/deleteTags

  • Python: fx.tag.delete_tags(tag_paths)
  • Access: Write
  • Required: tagPaths list.
  • Response: quality and path for every deletion.
  • Audit: successful mutations are written to the configured Gateway audit profile.
{
"tagPaths": ["[default]TemporaryTag"]
}

POST tag/copy

  • Python: fx.tag.copy(tag_paths, destination_path, collision_policy="o")
  • Access: Write
  • Required: tagPaths list and destinationPath string.
  • Optional: collisionPolicy; default o.
  • Response: source, destination, and quality for every copied tag.
{
"tagPaths": ["[default]Area/Source"],
"destinationPath": "[default]Area/Copies",
"collisionPolicy": "o"
}

POST tag/move

  • Python: fx.tag.move(source_path, destination_path)
  • Access: Write
  • Required: sourcePath and destination-folder destinationPath strings.
  • Response: source, destination, and quality.
{
"sourcePath": "[default]Area/Source",
"destinationPath": "[default]Area/Moved"
}

POST tag/rename

  • Python: fx.tag.rename(tag_path, new_name)
  • Access: Write
  • Required: tagPath and newName strings.
  • Response: original path, new name, and quality.
{
"tagPath": "[default]Area/OldName",
"newName": "NewName"
}

POST tag/importTags

  • Python: fx.tag.import_tags(tags, base_path=..., collision_policy="o")
  • Access: Write
  • Required: tags as decoded tag-export JSON or a raw JSON string, plus basePath.
  • Optional: collisionPolicy; default o.
  • Response: one quality per imported root tag.
{
"basePath": "[default]",
"collisionPolicy": "o",
"tags": {
"name": "ImportedFolder",
"tagType": "Folder"
}
}

Historian functions require an enabled, licensed or active-trial historian module and a configured provider.

POST historian/browse

  • Python: fx.historian.browse(path, continuation_point=None)
  • Access: Read
  • Required: path string.
  • Optional: continuationPoint returned by a previous browse response.
  • Response: historical paths, display paths, child state, type, metadata, continuation point, and result quality.
{
"path": "histprov:Core Historian:/"
}

POST historian/queryRawPoints

  • Python: fx.historian.query_raw_points(paths, start_time, end_time, return_size=100)
  • Access: Read
  • Required: paths list, startTime, and endTime as epoch milliseconds.
  • Optional: returnSize; default 100.
  • Response: an Ignition Dataset serialized as columns and rows, converted to row mappings by the Python client.
{
"paths": ["histprov:Core Historian:/sys:gateway:/prov:default:/tag:Area/Temperature"],
"startTime": 1783987200000,
"endTime": 1783990800000,
"returnSize": 100
}

POST historian/queryAggregatedPoints

  • Python: fx.historian.query_aggregated_points(...)
  • Access: Read
  • Required: paths list, startTime, and endTime as epoch milliseconds.
  • Optional: aggregates, fillModes, columnNames, returnFormat, returnSize, includeBounds, and excludeObservations.
  • Limits: returnSize defaults to 1 and accepts 1 through 100000.
  • Response: an Ignition Dataset serialized as columns and rows.
{
"paths": ["histprov:Core Historian:/sys:gateway:/prov:default:/tag:Area/Temperature"],
"startTime": 1783987200000,
"endTime": 1784073600000,
"aggregates": ["Maximum"],
"fillModes": ["NONE"],
"columnNames": ["Maximum"],
"returnFormat": "CALCULATION",
"returnSize": 1,
"includeBounds": false,
"excludeObservations": false
}

On Ignition 8.1, CALCULATION uses system.tag.queryTagCalculations; WIDE and TALL use system.tag.queryTagHistory. The 8.1 adapter supports a consistent DERIVED or NONE fill mode for all paths and rejects other fill modes or excludeObservations: true rather than silently changing semantics.

POST historian/queryRawPointsStream

  • Python: fx.historian.stream_raw_points(...) in current client source. PyPI fluxy-ign 0.1.1 can call the raw route directly but does not yet include this helper.
  • Access: Read
  • Content type: application/x-ndjson.
  • Required: paths list, startTime, and endTime as epoch milliseconds.
  • Optional: blockRows; default 1000, range 1 through 5000.
  • Limits: 1-128 paths, one history provider per request, 4 MiB maximum encoded block, 1 GiB maximum stream, and 30-minute maximum duration.
  • Events: schema, zero or more block events, then end; failures use an error event when the response is already streaming.
  • Headers: also returns X-Fluxy-Query-Id and X-Fluxy-Stream-Version.
{
"paths": ["histprov:Core Historian:/sys:gateway:/prov:default:/tag:Area/Temperature"],
"startTime": 1783987200000,
"endTime": 1784073600000,
"blockRows": 1000
}

POST historian/storeDataPoints

  • Python: fx.historian.store_data_points(paths, values, timestamps, qualities=None)
  • Access: Write
  • Required: equally sized paths, values, and epoch-millisecond timestamps lists.
  • Optional: qualities; defaults to 192 (Good) for every path.
  • Response: one quality string per submitted point.
  • Audit: successful mutations are written to the configured Gateway audit profile. Values are not logged or audited.
{
"paths": ["histprov:Core Historian:/sys:gateway:/prov:default:/tag:Area/Temperature"],
"values": [72.5],
"timestamps": [1783987200000],
"qualities": [192]
}

POST historian/storeAnnotations

  • Python: fx.historian.store_annotations(...)
  • Access: Write
  • Required: equally sized paths and epoch-millisecond startTimes lists.
  • Optional: equally sized endTimes, types, data, storageIds, and deleted lists.
  • Response: one quality string per annotation.
{
"paths": ["histprov:Core Historian:/sys:gateway:/prov:default:/tag:Area/Temperature"],
"startTimes": [1783987200000],
"endTimes": [1783987260000],
"types": ["note"],
"data": ["Operator check"]
}

POST historian/queryAnnotations

  • Python: fx.historian.query_annotations(paths, start_date, end_date=None, allowed_types=None)
  • Access: Read
  • Required: paths list and epoch-millisecond startDate.
  • Optional: epoch-millisecond endDate and allowedTypes list.
  • Response: storage ID, path, time range, type, data, and available author/deleted fields.
{
"paths": ["histprov:Core Historian:/sys:gateway:/prov:default:/tag:Area/Temperature"],
"startDate": 1783987200000,
"endDate": 1784073600000,
"allowedTypes": ["note"]
}

POST historian/deleteAnnotations

  • Python: fx.historian.delete_annotations(paths, storage_ids)
  • Access: Write
  • Required: equally sized paths and storageIds lists.
  • Response: one quality string per deletion.
{
"paths": ["histprov:Core Historian:/sys:gateway:/prov:default:/tag:Area/Temperature"],
"storageIds": ["annotation-storage-id"]
}

POST historian/storeMetadata

  • Python: fx.historian.store_metadata(paths, timestamps, properties)
  • Availability: Ignition 8.3 only.
  • Access: Write
  • Required: equally sized paths and epoch-millisecond timestamps lists plus a properties object.
  • Response: one quality string per path.
{
"paths": ["histprov:Core Historian:/sys:gateway:/prov:default:/tag:Area/Temperature"],
"timestamps": [1783987200000],
"properties": {"documentation": "Commissioned", "engUnit": "degF"}
}

POST historian/queryMetadata

  • Python: fx.historian.query_metadata(paths, start_date=None, end_date=None)
  • Availability: Ignition 8.3 only.
  • Access: Read
  • Required: paths list.
  • Optional: epoch-millisecond startDate and endDate; an end date requires a start date.
  • Response: path, timestamp, quality, and metadata properties.
{
"paths": ["histprov:Core Historian:/sys:gateway:/prov:default:/tag:Area/Temperature"],
"startDate": 1783987200000,
"endDate": 1784073600000
}

POST project/requestScan

  • Python: fx.project.request_scan(); current client source also accepts timeout_seconds.
  • Access: Read.
  • Optional: timeoutSeconds; default 10, range 1 through 300.
  • Response: ok, completion message, and durationMillis.
{
"timeoutSeconds": 30
}

A timeout stops only the HTTP request from waiting. It does not cancel the project scan. Use this function after changing files under data/projects/; do not restart the Gateway merely to load project changes.

POST project/getProjectNames

  • Python: fx.project.get_project_names()
  • Access: Read
  • Request: empty JSON object.
  • Response: projectNames list.
{}
Terminal window
curl --request POST \
--header 'Content-Type: application/json' \
--header 'X-Ignition-API-Token: fluxy-service:replace-with-your-secret' \
--data '{"tagPaths":["[default]fluxy"]}' \
'https://your-gateway.example/data/fluxy/tag/readBlocking'

The native module intentionally does not expose arbitrary scripting or the broader WebDev function catalog. The following fluxy-ign namespaces are not currently module routes:

  • Database and named-query operations.
  • Device and OPC management.
  • Alarm operations.
  • Reporting.
  • User, role, schedule, and holiday management.
  • OPC UA connection management.
  • Arbitrary script or function execution.

Use only functions in this reference when the client base URL targets the Fluxy Free Gateway module.