{
  "openapi": "3.1.1",
  "info": {
    "title": "Terraform Plan & Drift Explorer API",
    "version": "1.0.0",
    "summary": "Paste terraform show -json: drift, replacement reasons, attribute diffs and risky deletes.",
    "description": "Every endpoint performs the same calculation as the human page and returns inputs, result, units, assumptions, sources, warnings and computedAt. MCP endpoint: /mcp."
  },
  "servers": [
    {
      "url": "https://terraformdriftexplorer.usefulweb.site"
    }
  ],
  "paths": {
    "/api/v1/calculate": {
      "post": {
        "operationId": "calculate",
        "summary": "Paste terraform show -json: drift, replacement reasons, attribute diffs and risky deletes.",
        "description": "Paste the JSON of a saved plan (`terraform show -json tfplan`) or the `terraform plan -json` stream. You get counts per action, every resource change with Terraform's own reason (tainted, cannot update, removed from config…), attribute-level before/after diffs with sensitive values masked and \"known after apply\" marked, the drift Terraform detected outside of Terraform during refresh, and risk flags for deleting or replacing databases, buckets and other stateful resources or for opening access.\n\nMethodology:\n- Reads the documented Terraform JSON plan format: resource_changes[].change.actions ([\"delete\",\"create\"] = destroy-then-create replacement, [\"create\",\"delete\"] = create_before_destroy), action_reason, replace_paths, previous_address (moved), importing; resource_drift[] for changes made outside Terraform; output_changes.\n- Attribute diffs flatten before/after into dotted paths; after_unknown marks values \"known after apply\"; any path covered by before_sensitive/after_sensitive is replaced by \"(sensitive value)\" and never shown.\n- Drift: before = last state, after = refreshed real-world value. If the same address has an update planned, applying reverts the drift; a no-op plan means the configuration already matches (or ignore_changes).\n- Risk: delete/replace of a stateful type (databases, buckets, volumes, queues, keys, secrets, DNS zones…) is critical; other deletes high; other replacements medium; updates that open 0.0.0.0/0, grant \"*\" principals/actions, disable deletion protection, encryption, backups or S3 public-access blocks are high; force_destroy / skip_final_snapshot on deletion escalate.\n- The plan -json stream contains actions and reasons but no attribute values, so attribute diffs and value-based checks need the show -json form.",
        "tags": [
          "devcloud"
        ],
        "x-mcp-tool": "terraform_drift_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TerraformDriftExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "Database replacement, bucket deletion, drift on a security group",
                  "value": {
                    "text": "{\"format_version\":\"1.2\",\"terraform_version\":\"1.9.5\",\"resource_drift\":[{\"address\":\"aws_security_group.web\",\"mode\":\"managed\",\"type\":\"aws_security_group\",\"name\":\"web\",\"provider_name\":\"registry.terraform.io/hashicorp/aws\",\"change\":{\"actions\":[\"update\"],\"before\":{\"name\":\"web\",\"description\":\"web tier\",\"vpc_id\":\"vpc-0a1b2c3d\",\"ingress\":[{\"from_port\":443,\"to_port\":443,\"protocol\":\"tcp\",\"cidr_blocks\":[\"0.0.0.0/0\"],\"description\":\"\"}],\"tags\":{\"team\":\"web\"}},\"after\":{\"name\":\"web\",\"description\":\"web tier\",\"vpc_id\":\"vpc-0a1b2c3d\",\"ingress\":[{\"from_port\":443,\"to_port\":443,\"protocol\":\"tcp\",\"cidr_blocks\":[\"0.0.0.0/0\"],\"description\":\"\"},{\"from_port\":22,\"to_port\":22,\"protocol\":\"tcp\",\"cidr_blocks\":[\"203.0.113.7/32\"],\"description\":\"\"}],\"tags\":{\"team\":\"web\"}},\"after_unknown\":{},\"before_sensitive\":{},\"after_sensitive\":{}}},{\"address\":\"aws_s3_bucket.assets\",\"mode\":\"managed\",\"type\":\"aws_s3_bucket\",\"name\":\"assets\",\"provider_name\":\"registry.terraform.io/hashicorp/aws\",\"change\":{\"actions\":[\"update\"],\"before\":{\"bucket\":\"shop-assets\",\"tags\":{\"env\":\"prod\"},\"force_destroy\":false},\"after\":{\"bucket\":\"shop-assets\",\"tags\":{\"env\":\"prod\",\"cost-center\":\"marketing\"},\"force_destroy\":false},\"after_unknown\":{},\"before_sensitive\":{},\"after_sensitive\":{}}}],\"resource_changes\":[{\"address\":\"aws_db_instance.main\",\"mode\":\"managed\",\"type\":\"aws_db_instance\",\"name\":\"main\",\"provider_name\":\"registry.terraform.io/hashicorp/aws\",\"change\":{\"actions\":[\"delete\",\"create\"],\"before\":{\"identifier\":\"shop-prod\",\"engine\":\"postgres\",\"engine_version\":\"16.4\",\"instance_class\":\"db.r6g.large\",\"allocated_storage\":200,\"storage_encrypted\":false,\"deletion_protection\":false,\"skip_final_snapshot\":false,\"username\":\"shop\",\"password\":\"hunter2-not-real\",\"backup_retention_period\":7,\"publicly_accessible\":false,\"id\":\"db-ABCDEFGHIJKL\",\"endpoint\":\"shop-prod.c9abc.eu-west-1.rds.amazonaws.com:5432\"},\"after\":{\"identifier\":\"shop-prod\",\"engine\":\"postgres\",\"engine_version\":\"16.4\",\"instance_class\":\"db.r6g.large\",\"allocated_storage\":200,\"storage_encrypted\":true,\"deletion_protection\":false,\"skip_final_snapshot\":false,\"username\":\"shop\",\"password\":\"hunter2-not-real\",\"backup_retention_period\":7,\"publicly_accessible\":false},\"after_unknown\":{\"id\":true,\"endpoint\":true,\"arn\":true},\"before_sensitive\":{\"password\":true},\"after_sensitive\":{\"password\":true},\"replace_paths\":[[\"storage_encrypted\"]]},\"action_reason\":\"replace_because_cannot_update\"},{\"address\":\"aws_security_group.web\",\"mode\":\"managed\",\"type\":\"aws_security_group\",\"name\":\"web\",\"provider_name\":\"registry.terraform.io/hashicorp/aws\",\"change\":{\"actions\":[\"update\"],\"before\":{\"name\":\"web\",\"description\":\"web tier\",\"vpc_id\":\"vpc-0a1b2c3d\",\"ingress\":[{\"from_port\":443,\"to_port\":443,\"protocol\":\"tcp\",\"cidr_blocks\":[\"0.0.0.0/0\"],\"description\":\"\"},{\"from_port\":22,\"to_port\":22,\"protocol\":\"tcp\",\"cidr_blocks\":[\"203.0.113.7/32\"],\"description\":\"\"}],\"tags\":{\"team\":\"web\"}},\"after\":{\"name\":\"web\",\"description\":\"web tier\",\"vpc_id\":\"vpc-0a1b2c3d\",\"ingress\":[{\"from_port\":443,\"to_port\":443,\"protocol\":\"tcp\",\"cidr_blocks\":[\"0.0.0.0/0\"],\"description\":\"\"}],\"tags\":{\"team\":\"web\"}},\"after_unknown\":{},\"before_sensitive\":{},\"after_sensitive\":{}}},{\"address\":\"aws_s3_bucket.logs\",\"mode\":\"managed\",\"type\":\"aws_s3_bucket\",\"name\":\"logs\",\"provider_name\":\"registry.terraform.io/hashicorp/aws\",\"change\":{\"actions\":[\"delete\"],\"before\":{\"bucket\":\"shop-access-logs\",\"force_destroy\":true,\"tags\":{\"env\":\"prod\"}},\"after\":null,\"after_unknown\":{},\"before_sensitive\":{},\"after_sensitive\":false},\"action_reason\":\"delete_because_no_resource_config\"},{\"address\":\"aws_s3_bucket.assets\",\"mode\":\"managed\",\"type\":\"aws_s3_bucket\",\"name\":\"assets\",\"provider_name\":\"registry.terraform.io/hashicorp/aws\",\"change\":{\"actions\":[\"no-op\"],\"before\":{\"bucket\":\"shop-assets\",\"tags\":{\"env\":\"prod\",\"cost-center\":\"marketing\"}},\"after\":{\"bucket\":\"shop-assets\",\"tags\":{\"env\":\"prod\",\"cost-center\":\"marketing\"}},\"after_unknown\":{},\"before_sensitive\":{},\"after_sensitive\":{}}},{\"address\":\"aws_instance.app[0]\",\"mode\":\"managed\",\"type\":\"aws_instance\",\"name\":\"app\",\"index\":0,\"provider_name\":\"registry.terraform.io/hashicorp/aws\",\"change\":{\"actions\":[\"create\"],\"before\":null,\"after\":{\"ami\":\"ami-0c55b159cbfafe1f0\",\"instance_type\":\"t3.medium\",\"tags\":{\"Name\":\"app-0\"}},\"after_unknown\":{\"id\":true,\"arn\":true,\"private_ip\":true},\"before_sensitive\":false,\"after_sensitive\":{}}},{\"address\":\"aws_iam_role_policy.ci\",\"mode\":\"managed\",\"type\":\"aws_iam_role_policy\",\"name\":\"ci\",\"provider_name\":\"registry.terraform.io/hashicorp/aws\",\"change\":{\"actions\":[\"update\"],\"before\":{\"name\":\"ci-deploy\",\"role\":\"ci\",\"policy\":\"{\\\"Version\\\":\\\"2012-10-17\\\",\\\"Statement\\\":[{\\\"Effect\\\":\\\"Allow\\\",\\\"Action\\\":\\\"s3:PutObject\\\",\\\"Resource\\\":\\\"arn:aws:s3:::shop-assets/*\\\"}]}\"},\"after\":{\"name\":\"ci-deploy\",\"role\":\"ci\",\"policy\":\"{\\\"Version\\\":\\\"2012-10-17\\\",\\\"Statement\\\":[{\\\"Effect\\\":\\\"Allow\\\",\\\"Action\\\":\\\"*\\\",\\\"Resource\\\":\\\"*\\\"}]}\"},\"after_unknown\":{},\"before_sensitive\":{},\"after_sensitive\":{}}},{\"address\":\"module.cdn.aws_cloudfront_distribution.this\",\"module_address\":\"module.cdn\",\"mode\":\"managed\",\"type\":\"aws_cloudfront_distribution\",\"name\":\"this\",\"provider_name\":\"registry.terraform.io/hashicorp/aws\",\"previous_address\":\"aws_cloudfront_distribution.cdn\",\"change\":{\"actions\":[\"no-op\"],\"before\":{\"comment\":\"shop\"},\"after\":{\"comment\":\"shop\"},\"after_unknown\":{},\"before_sensitive\":{},\"after_sensitive\":{}}}],\"output_changes\":{\"db_endpoint\":{\"actions\":[\"update\"],\"before\":\"shop-prod.c9abc.eu-west-1.rds.amazonaws.com:5432\",\"after_unknown\":true,\"before_sensitive\":false,\"after_sensitive\":false}},\"applyable\":true,\"complete\":true,\"errored\":false}"
                  }
                },
                "example2": {
                  "summary": "terraform plan -json stream (GCP)",
                  "value": {
                    "text": "{\"@level\":\"info\",\"@message\":\"Terraform 1.9.5\",\"@module\":\"terraform.ui\",\"@timestamp\":\"2026-10-12T09:58:01.000000Z\",\"terraform\":\"1.9.5\",\"type\":\"version\",\"ui\":\"1.2\"}\n{\"@level\":\"info\",\"@message\":\"google_storage_bucket.media: Drift detected (update)\",\"@module\":\"terraform.ui\",\"@timestamp\":\"2026-10-12T09:58:04.000000Z\",\"change\":{\"resource\":{\"addr\":\"google_storage_bucket.media\",\"module\":\"\",\"resource\":\"google_storage_bucket.media\",\"implied_provider\":\"google\",\"resource_type\":\"google_storage_bucket\",\"resource_name\":\"media\",\"resource_key\":null},\"action\":\"update\"},\"type\":\"resource_drift\"}\n{\"@level\":\"info\",\"@message\":\"google_sql_database_instance.main: Plan to replace\",\"@module\":\"terraform.ui\",\"@timestamp\":\"2026-10-12T09:58:05.000000Z\",\"change\":{\"resource\":{\"addr\":\"google_sql_database_instance.main\",\"module\":\"\",\"resource\":\"google_sql_database_instance.main\",\"implied_provider\":\"google\",\"resource_type\":\"google_sql_database_instance\",\"resource_name\":\"main\",\"resource_key\":null},\"action\":\"replace\",\"reason\":\"cannot_update\"},\"type\":\"planned_change\"}\n{\"@level\":\"info\",\"@message\":\"google_compute_firewall.ssh: Plan to update\",\"@module\":\"terraform.ui\",\"@timestamp\":\"2026-10-12T09:58:05.000000Z\",\"change\":{\"resource\":{\"addr\":\"google_compute_firewall.ssh\",\"module\":\"\",\"resource\":\"google_compute_firewall.ssh\",\"implied_provider\":\"google\",\"resource_type\":\"google_compute_firewall\",\"resource_name\":\"ssh\",\"resource_key\":null},\"action\":\"update\"},\"type\":\"planned_change\"}\n{\"@level\":\"info\",\"@message\":\"google_compute_instance.worker[\\\"b\\\"]: Plan to delete\",\"@module\":\"terraform.ui\",\"@timestamp\":\"2026-10-12T09:58:05.000000Z\",\"change\":{\"resource\":{\"addr\":\"google_compute_instance.worker[\\\"b\\\"]\",\"module\":\"\",\"resource\":\"google_compute_instance.worker[\\\"b\\\"]\",\"implied_provider\":\"google\",\"resource_type\":\"google_compute_instance\",\"resource_name\":\"worker\",\"resource_key\":\"b\"},\"action\":\"delete\",\"reason\":\"delete_because_each_key\"},\"type\":\"planned_change\"}\n{\"@level\":\"info\",\"@message\":\"Plan: 1 to add, 1 to change, 2 to destroy.\",\"@module\":\"terraform.ui\",\"@timestamp\":\"2026-10-12T09:58:06.000000Z\",\"changes\":{\"add\":1,\"change\":1,\"import\":0,\"remove\":2,\"operation\":\"plan\"},\"type\":\"change_summary\"}"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TerraformDriftExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tool": {
      "get": {
        "operationId": "getToolDefinition",
        "summary": "Inputs, output schema and examples for this tool",
        "responses": {
          "200": {
            "description": "Tool definition.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Problem": {
        "type": "object",
        "description": "RFC 9457 problem details. 422 responses include per-field `errors`.",
        "required": [
          "type",
          "title",
          "status",
          "detail"
        ],
        "properties": {
          "type": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "detail": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "field",
                "message"
              ],
              "properties": {
                "field": {
                  "type": "string"
                },
                "message": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "TerraformDriftExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "text": {
            "title": "Terraform plan JSON",
            "description": "Run `terraform plan -out=tfplan && terraform show -json tfplan` (full detail) or paste `terraform plan -json` output (actions and reasons only, no attribute values).",
            "type": "string",
            "maxLength": 3000000
          },
          "file": {
            "title": "Or upload the file",
            "description": "Read in memory as UTF-8 text and not stored. Max 5 MiB. Upload as {filename, contentType?, contentBase64}. Max 5120 KiB. Accepts .json,.txt,.log.",
            "type": "object",
            "additionalProperties": false,
            "required": [
              "filename",
              "contentBase64"
            ],
            "properties": {
              "filename": {
                "type": "string"
              },
              "contentType": {
                "type": "string"
              },
              "contentBase64": {
                "type": "string"
              }
            }
          },
          "showNoOp": {
            "title": "List unchanged (no-op) resources too",
            "type": "boolean",
            "default": false
          }
        },
        "required": []
      },
      "TerraformDriftExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "format",
              "terraformVersion",
              "counts",
              "changes",
              "drift",
              "attributeDiffs",
              "outputs",
              "diagnostics",
              "applyable",
              "errored"
            ],
            "properties": {
              "format": {
                "type": "string",
                "enum": [
                  "plan-json",
                  "plan-stream"
                ]
              },
              "terraformVersion": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "applyable": {
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "errored": {
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "counts": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "create",
                  "update",
                  "delete",
                  "replace",
                  "read",
                  "noop",
                  "move",
                  "forget",
                  "import",
                  "drift",
                  "critical",
                  "high"
                ],
                "properties": {
                  "create": {
                    "type": "integer"
                  },
                  "update": {
                    "type": "integer"
                  },
                  "delete": {
                    "type": "integer"
                  },
                  "replace": {
                    "type": "integer"
                  },
                  "read": {
                    "type": "integer"
                  },
                  "noop": {
                    "type": "integer"
                  },
                  "move": {
                    "type": "integer"
                  },
                  "forget": {
                    "type": "integer"
                  },
                  "import": {
                    "type": "integer"
                  },
                  "drift": {
                    "type": "integer"
                  },
                  "critical": {
                    "type": "integer"
                  },
                  "high": {
                    "type": "integer"
                  }
                }
              },
              "changes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "address",
                    "type",
                    "provider",
                    "action",
                    "actions",
                    "reason",
                    "reasonText",
                    "risk",
                    "riskReasons",
                    "changedAttributes",
                    "replacePaths",
                    "movedFrom",
                    "importing"
                  ],
                  "properties": {
                    "address": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string"
                    },
                    "provider": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "action": {
                      "type": "string",
                      "enum": [
                        "create",
                        "update",
                        "delete",
                        "replace",
                        "read",
                        "no-op",
                        "forget",
                        "move"
                      ]
                    },
                    "actions": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "reason": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "reasonText": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "risk": {
                      "type": "string",
                      "enum": [
                        "critical",
                        "high",
                        "medium",
                        "low",
                        "none"
                      ]
                    },
                    "riskReasons": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "changedAttributes": {
                      "type": "integer"
                    },
                    "replacePaths": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "movedFrom": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "importing": {
                      "type": "boolean"
                    }
                  }
                }
              },
              "drift": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "address",
                    "type",
                    "action",
                    "attributes",
                    "planAction",
                    "interpretation"
                  ],
                  "properties": {
                    "address": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string"
                    },
                    "action": {
                      "type": "string"
                    },
                    "attributes": {
                      "type": "integer"
                    },
                    "planAction": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "interpretation": {
                      "type": "string"
                    }
                  }
                }
              },
              "attributeDiffs": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "address",
                    "section",
                    "path",
                    "before",
                    "after",
                    "note"
                  ],
                  "properties": {
                    "address": {
                      "type": "string"
                    },
                    "section": {
                      "type": "string",
                      "enum": [
                        "change",
                        "drift"
                      ]
                    },
                    "path": {
                      "type": "string"
                    },
                    "before": {
                      "type": "string"
                    },
                    "after": {
                      "type": "string"
                    },
                    "note": {
                      "type": "string"
                    }
                  }
                }
              },
              "outputs": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "name",
                    "action",
                    "sensitive"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "action": {
                      "type": "string"
                    },
                    "sensitive": {
                      "type": "boolean"
                    }
                  }
                }
              },
              "diagnostics": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "severity",
                    "summary",
                    "detail"
                  ],
                  "properties": {
                    "severity": {
                      "type": "string"
                    },
                    "summary": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      }
    }
  }
}