FMI WMS Connector Guide

The FMI WMS connector lets Tealfabric workflows request weather map layers from the Finnish Meteorological Institute Open Data service. It is useful when your process needs map imagery for operational dashboards, alerting, or weather-aware automation.

Document information
FieldValue
Canonical URL/docs/04_connecting-systems/connectors/f/fmi-wms
Version (published date)2026-05-08
Tagsconnectors, reference, fmi-wms
Connector IDfmi-wms-1.0.0

FMI WMS connector flow showing capabilities discovery, weather layer map rendering, and workflow-driven geospatial weather automation.

Configure the connector

Set base_url to the FMI WMS endpoint, which defaults to https://opendata.fmi.fi/wms. If your deployment uses authenticated routing, add api_key; otherwise you can keep it empty for open-access use cases.

Use default_crs, default_image_format, and timeout_seconds to align rendering output with your downstream consumers. This helps keep map requests consistent across workflows and avoids avoidable format mismatches.

Discover layers with get_capabilities

Use get_capabilities before production map requests so your workflow can verify available layers and metadata. This reduces runtime errors caused by typos or outdated layer names.

const baseUrl = "https://api.example.com/api/v1";
const tenantId = "<TENANT_ID>";
const apiKey = "<API_KEY>";

async function getCapabilities(integrationId: string) {
  const response = await fetch(`${baseUrl}/integrations/${encodeURIComponent(integrationId)}/execute`, {
    method: "POST",
    headers: {
      "X-API-Key": apiKey,
      "X-Tenant-ID": tenantId,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      operation: "get_capabilities"
    }),
  });
  if (!response.ok) throw new Error(`Request failed: ${response.status}`);
  return response.json();
}
curl -X POST "https://api.example.com/api/v1/integrations/<ENTITY_ID>/execute" \
  -H "X-API-Key: <API_KEY>" \
  -H "X-Tenant-ID: <TENANT_ID>" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "get_capabilities"
  }'
{
  "success": true,
  "message_count": 48,
  "metadata": {
    "http_code": 200,
    "content_type": "text/xml"
  },
  "data": {
    "layer_count": 48,
    "layers": [
      {
        "name": "fmi:radar",
        "title": "Radar",
        "abstract": "",
        "keywords": []
      }
    ]
  },
  "raw_xml": "<WMS_Capabilities>...</WMS_Capabilities>"
}

list_capabilities is an alias for get_capabilities. list_layers returns the same parsed layers array with message_count and raw_xml, but omits metadata.layer_count.

Render a weather map with get_map

Use get_map to request a concrete image for selected weather layers and bounding box coordinates. The receive alias is supported for the same behavior when your workflows use normalized read-operation naming.

const baseUrl = "https://api.example.com/api/v1";
const tenantId = "<TENANT_ID>";
const apiKey = "<API_KEY>";

async function getWeatherMap(integrationId: string) {
  const response = await fetch(`${baseUrl}/integrations/${encodeURIComponent(integrationId)}/execute`, {
    method: "POST",
    headers: {
      "X-API-Key": apiKey,
      "X-Tenant-ID": tenantId,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      operation: "get_map",
      layers: ["fmi:radar"],
      bbox: "19.0,59.0,32.0,71.5",
      crs: "EPSG:4326",
      width: 1024,
      height: 768,
      format: "image/png",
      transparent: true
    }),
  });
  if (!response.ok) throw new Error(`Request failed: ${response.status}`);
  return response.json();
}
curl -X POST "https://api.example.com/api/v1/integrations/<ENTITY_ID>/execute" \
  -H "X-API-Key: <API_KEY>" \
  -H "X-Tenant-ID: <TENANT_ID>" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "get_map",
    "layers": ["fmi:radar"],
    "bbox": "19.0,59.0,32.0,71.5",
    "crs": "EPSG:4326",
    "width": 1024,
    "height": 768,
    "format": "image/png",
    "transparent": true
  }'
{
  "success": true,
  "message_count": 1,
  "data": {
    "mime_type": "image/png",
    "image_base64": "iVBORw0KGgoAAAANSUhEUgAA...",
    "image_size_bytes": 234112,
    "request": {
      "layers": "fmi:radar",
      "bbox": "19.0,59.0,32.0,71.5",
      "width": 1024,
      "height": 768,
      "format": "image/png",
      "crs": "EPSG:4326",
      "version": "1.3.0"
    }
  }
}

On failure, the connector returns a legacy flat envelope with success: false and a plain-text error field (for example Missing 'layers' parameter for GetMap or FMI WMS HTTP error 404).

Test connectivity with test

Use test to validate base_url and reachability via WMS GetCapabilities. Configuration validation runs only for test; other operations validate config at dispatch time.

{
  "success": true,
  "message": "FMI WMS connection test successful",
  "details": {
    "base_url": "https://opendata.fmi.fi/wms",
    "http_code": 200,
    "content_type": "text/xml"
  }
}

Reliability guidance

Most request failures come from invalid layer names, coordinate-system mismatches, or malformed bounding boxes. If a response fails, re-check capabilities output first, then confirm that map parameters match supported WMS values.

For production workflows, cache stable layer metadata and use bounded map dimensions to control payload size. This improves throughput and keeps weather-driven automation responsive.

Additional resources