{
  "id": "catalog.api",
  "kind": "app",
  "name": "api",
  "label": "Catalog API",
  "owner": null,
  "operator": null,
  "site": null,
  "system": "catalog",
  "incomplete": true,
  "missing": [
    "missing attribute on",
    "no owner, neither written nor inherited"
  ],
  "declared": "systems.ca:38:7",
  "virtual": false,
  "description": null,
  "parent": "catalog",
  "path": [
    "catalog"
  ],
  "module": null,
  "attributes": {
    "label": "Catalog API",
    "runtime": "java"
  },
  "references": {},
  "children": [],
  "hosts": [],
  "members": [],
  "runs_here": [],
  "failures": [
    "hoster-a-dc",
    "hoster-a-dc.filehub",
    "kafka-cloud",
    "keycloak",
    "directory",
    "catalog.db",
    "logistics",
    "sales-transfer"
  ],
  "failure_pairs": [],
  "questions": [],
  "outgoing": [
    {
      "with": "hoster-a-dc.filehub",
      "port": "http",
      "layers": [
        "flow"
      ],
      "carries": [
        "product-files"
      ],
      "through": [],
      "through_steps": [],
      "through_deduced": false,
      "attributes": {
        "exchange": "pull",
        "carries": [
          "product-files"
        ],
        "confidence": "assumed"
      },
      "declared": "systems.ca:41:5"
    },
    {
      "with": "catalog.db",
      "port": "jdbc",
      "layers": [
        "flow"
      ],
      "carries": [],
      "through": [],
      "through_steps": [],
      "through_deduced": false,
      "attributes": {
        "exchange": "both"
      },
      "declared": "systems.ca:42:5"
    },
    {
      "with": "kafka-cloud",
      "port": "kafka/9092",
      "layers": [
        "flow"
      ],
      "carries": [],
      "through": [],
      "through_steps": [],
      "through_deduced": false,
      "attributes": {
        "exchange": "pull",
        "channel": "prices"
      },
      "declared": "systems.ca:43:5"
    },
    {
      "with": "logistics",
      "port": "http",
      "layers": [
        "flow"
      ],
      "carries": [],
      "through": [],
      "through_steps": [],
      "through_deduced": false,
      "attributes": {
        "confidence": "assumed",
        "question": "Flow direction: does the API call logistics, or the other way round?"
      },
      "declared": "systems.ca:44:5"
    },
    {
      "with": "sales-transfer",
      "port": "http",
      "layers": [
        "flow"
      ],
      "carries": [],
      "through": [],
      "through_steps": [],
      "through_deduced": false,
      "attributes": {
        "confidence": "assumed"
      },
      "declared": "systems.ca:48:5"
    },
    {
      "with": "keycloak",
      "port": "http",
      "layers": [
        "auth"
      ],
      "carries": [],
      "through": [],
      "through_steps": [],
      "through_deduced": false,
      "attributes": {},
      "declared": "systems.ca:49:5"
    },
    {
      "with": "directory",
      "port": "ldap",
      "layers": [
        "auth"
      ],
      "carries": [],
      "through": [],
      "through_steps": [],
      "through_deduced": false,
      "attributes": {},
      "declared": "systems.ca:50:5"
    }
  ],
  "incoming": [
    {
      "with": "labels.label-server",
      "port": "http",
      "layers": [
        "flow"
      ],
      "carries": [],
      "through": [],
      "through_steps": [],
      "through_deduced": false,
      "attributes": {
        "exchange": "pull",
        "confidence": "assumed"
      },
      "declared": "systems.ca:109:5"
    },
    {
      "with": "indexer",
      "port": "http",
      "layers": [
        "flow"
      ],
      "carries": [],
      "through": [],
      "through_steps": [],
      "through_deduced": false,
      "attributes": {
        "confidence": "assumed"
      },
      "declared": "systems.ca:148:3"
    }
  ]
}
