{
  "service": "ecologi",
  "displayName": "Ecologi",
  "categories": [
    "Finance",
    "Data"
  ],
  "authTypes": [
    "api_key"
  ],
  "auth": [
    {
      "type": "api_key",
      "label": "API Key",
      "placeholder": "ECOLOGI_API_KEY",
      "description": "Ecologi API key sent as a Bearer token. Find your key on the official Impact API page: https://ecologi.com/impact-api."
    }
  ],
  "homepageUrl": "https://ecologi.com",
  "actions": [
    {
      "id": "ecologi.get_carbon_offset_totals",
      "service": "ecologi",
      "name": "get_carbon_offset_totals",
      "description": "Get the confirmed and pending tonnes of carbon emissions avoided by an Ecologi user.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "description": "The Ecologi username used by the public reporting API."
          }
        },
        "additionalProperties": false,
        "required": [
          "username"
        ],
        "description": "The Ecologi public reporting request."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "total": {
            "type": "number",
            "description": "The confirmed impact total."
          },
          "pending": {
            "type": "number",
            "description": "The impact total that is still pending payment."
          }
        },
        "additionalProperties": true,
        "description": "The Ecologi public impact totals."
      }
    },
    {
      "id": "ecologi.get_carbon_removal_totals",
      "service": "ecologi",
      "name": "get_carbon_removal_totals",
      "description": "Get the confirmed and pending tonnes of carbon removed by an Ecologi user.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "description": "The Ecologi username used by the public reporting API."
          }
        },
        "additionalProperties": false,
        "required": [
          "username"
        ],
        "description": "The Ecologi public reporting request."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "total": {
            "type": "number",
            "description": "The confirmed impact total."
          },
          "pending": {
            "type": "number",
            "description": "The impact total that is still pending payment."
          }
        },
        "additionalProperties": true,
        "description": "The Ecologi public impact totals."
      }
    },
    {
      "id": "ecologi.get_habitat_restoration_totals",
      "service": "ecologi",
      "name": "get_habitat_restoration_totals",
      "description": "Get the confirmed and pending square metres of habitat restored by an Ecologi user.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "description": "The Ecologi username used by the public reporting API."
          }
        },
        "additionalProperties": false,
        "required": [
          "username"
        ],
        "description": "The Ecologi public reporting request."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "total": {
            "type": "number",
            "description": "The confirmed impact total."
          },
          "pending": {
            "type": "number",
            "description": "The impact total that is still pending payment."
          }
        },
        "additionalProperties": true,
        "description": "The Ecologi public impact totals."
      }
    },
    {
      "id": "ecologi.get_total_impact",
      "service": "ecologi",
      "name": "get_total_impact",
      "description": "Get a combined view of an Ecologi user's confirmed and pending impact totals.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "description": "The Ecologi username used by the public reporting API."
          }
        },
        "additionalProperties": false,
        "required": [
          "username"
        ],
        "description": "The Ecologi combined public reporting request."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "trees": {
            "type": "number",
            "description": "The confirmed number of trees funded."
          },
          "carbonOffset": {
            "type": "number",
            "description": "The confirmed tonnes of carbon emissions avoided."
          },
          "carbonRemoval": {
            "type": "number",
            "description": "The confirmed tonnes of carbon removed."
          },
          "habitatRestoration": {
            "type": "number",
            "description": "The confirmed square metres of habitat restored."
          },
          "pending": {
            "type": "object",
            "properties": {
              "trees": {
                "type": "number",
                "description": "The pending number of trees funded."
              },
              "carbonOffset": {
                "type": "number",
                "description": "The pending tonnes of carbon emissions avoided."
              },
              "carbonRemoval": {
                "type": "number",
                "description": "The pending tonnes of carbon removed."
              },
              "habitatRestoration": {
                "type": "number",
                "description": "The pending square metres of habitat restored."
              }
            },
            "additionalProperties": true,
            "description": "The pending Ecologi impact totals."
          }
        },
        "additionalProperties": true,
        "description": "The Ecologi combined public impact response."
      }
    },
    {
      "id": "ecologi.get_tree_totals",
      "service": "ecologi",
      "name": "get_tree_totals",
      "description": "Get the confirmed and pending number of trees funded by an Ecologi user.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "description": "The Ecologi username used by the public reporting API."
          }
        },
        "additionalProperties": false,
        "required": [
          "username"
        ],
        "description": "The Ecologi public reporting request."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "total": {
            "type": "number",
            "description": "The confirmed impact total."
          },
          "pending": {
            "type": "number",
            "description": "The impact total that is still pending payment."
          }
        },
        "additionalProperties": true,
        "description": "The Ecologi public impact totals."
      }
    },
    {
      "id": "ecologi.purchase_carbon_avoidance",
      "service": "ecologi",
      "name": "purchase_carbon_avoidance",
      "description": "Purchase Ecologi carbon avoidance by kilograms or tonnes.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "number": {
            "type": "number",
            "exclusiveMinimum": 0,
            "description": "The number of carbon avoidance units to purchase."
          },
          "units": {
            "type": "string",
            "enum": [
              "KG",
              "Tonnes"
            ],
            "description": "The unit used for the carbon avoidance purchase."
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "An optional funded-by name shown on the Ecologi profile. If the profile is public, obtain permission before sending personally identifiable information or use a non-identifying label."
          },
          "test": {
            "type": "boolean",
            "description": "Whether to simulate the purchase without charging or publishing impact."
          },
          "recipientEmail": {
            "type": "string",
            "description": "An optional third-party recipient email for an Ecologi impact notification. The account-gated feature returns 403 when disabled; test mode validates and echoes the address without sending email.",
            "format": "email"
          },
          "idempotencyKey": {
            "type": "string",
            "minLength": 1,
            "description": "An optional Idempotency-Key header value used to retry a purchase safely."
          }
        },
        "additionalProperties": false,
        "required": [
          "number",
          "units"
        ],
        "description": "The Ecologi carbon avoidance purchase request."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "amount": {
            "type": "number",
            "description": "The purchase amount charged or simulated by Ecologi."
          },
          "currency": {
            "type": "string",
            "description": "The ISO currency code returned by Ecologi."
          },
          "name": {
            "type": "string",
            "description": "The funded-by name returned by Ecologi."
          },
          "recipientEmail": {
            "type": "string",
            "description": "The recipient email echoed by Ecologi.",
            "format": "email"
          },
          "projectDetails": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "The project name."
                },
                "projectUrl": {
                  "type": "string",
                  "description": "The official Ecologi project URL.",
                  "format": "uri"
                },
                "quantity": {
                  "type": "number",
                  "description": "The quantity allocated to this project."
                },
                "splitPercentage": {
                  "type": "number",
                  "description": "The percentage of the purchase allocated to this project."
                },
                "splitAmountTrees": {
                  "type": "number",
                  "description": "The number of trees allocated to this project."
                },
                "splitAmountTonnes": {
                  "type": "number",
                  "description": "The tonnes of carbon allocated to this project."
                }
              },
              "additionalProperties": true,
              "description": "One Ecologi project allocation returned for the purchase."
            },
            "description": "The Ecologi projects funded by this purchase."
          },
          "number": {
            "type": "number",
            "description": "The number of units purchased."
          },
          "units": {
            "type": "string",
            "enum": [
              "KG",
              "Tonnes"
            ],
            "description": "The unit used for the purchase."
          },
          "numberInTonnes": {
            "type": "number",
            "description": "The purchased amount normalized to tonnes."
          }
        },
        "additionalProperties": true,
        "required": [
          "amount",
          "currency",
          "projectDetails",
          "number",
          "units",
          "numberInTonnes"
        ],
        "description": "The Ecologi carbon avoidance purchase response."
      }
    },
    {
      "id": "ecologi.purchase_carbon_removal",
      "service": "ecologi",
      "name": "purchase_carbon_removal",
      "description": "Purchase permanent Ecologi carbon removal measured in kilograms.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "number": {
            "type": "number",
            "minimum": 1,
            "description": "The kilograms of carbon removal to purchase."
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "An optional funded-by name shown on the Ecologi profile. If the profile is public, obtain permission before sending personally identifiable information or use a non-identifying label."
          },
          "test": {
            "type": "boolean",
            "description": "Whether to simulate the purchase without charging or publishing impact."
          },
          "recipientEmail": {
            "type": "string",
            "description": "An optional third-party recipient email for an Ecologi impact notification. The account-gated feature returns 403 when disabled; test mode validates and echoes the address without sending email.",
            "format": "email"
          },
          "idempotencyKey": {
            "type": "string",
            "minLength": 1,
            "description": "An optional Idempotency-Key header value used to retry a purchase safely."
          }
        },
        "additionalProperties": false,
        "required": [
          "number"
        ],
        "description": "The Ecologi carbon removal purchase request."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "amount": {
            "type": "number",
            "description": "The purchase amount charged or simulated by Ecologi."
          },
          "currency": {
            "type": "string",
            "description": "The ISO currency code returned by Ecologi."
          },
          "name": {
            "type": "string",
            "description": "The funded-by name returned by Ecologi."
          },
          "recipientEmail": {
            "type": "string",
            "description": "The recipient email echoed by Ecologi.",
            "format": "email"
          },
          "projectDetails": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "The project name."
                },
                "projectUrl": {
                  "type": "string",
                  "description": "The official Ecologi project URL.",
                  "format": "uri"
                },
                "quantity": {
                  "type": "number",
                  "description": "The quantity allocated to this project."
                },
                "splitPercentage": {
                  "type": "number",
                  "description": "The percentage of the purchase allocated to this project."
                },
                "splitAmountTrees": {
                  "type": "number",
                  "description": "The number of trees allocated to this project."
                },
                "splitAmountTonnes": {
                  "type": "number",
                  "description": "The tonnes of carbon allocated to this project."
                }
              },
              "additionalProperties": true,
              "description": "One Ecologi project allocation returned for the purchase."
            },
            "description": "The Ecologi projects funded by this purchase."
          },
          "tileUrl": {
            "type": "string",
            "description": "The Ecologi URL for the purchased impact tile.",
            "format": "uri"
          }
        },
        "additionalProperties": true,
        "required": [
          "amount",
          "currency",
          "projectDetails",
          "tileUrl"
        ],
        "description": "The Ecologi impact tile purchase response."
      }
    },
    {
      "id": "ecologi.purchase_habitat_restoration",
      "service": "ecologi",
      "name": "purchase_habitat_restoration",
      "description": "Purchase Ecologi habitat restoration measured in square metres.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "number": {
            "type": "number",
            "minimum": 0.1,
            "description": "The square metres of habitat to restore, with one decimal place."
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "An optional funded-by name shown on the Ecologi profile. If the profile is public, obtain permission before sending personally identifiable information or use a non-identifying label."
          },
          "test": {
            "type": "boolean",
            "description": "Whether to simulate the purchase without charging or publishing impact."
          },
          "recipientEmail": {
            "type": "string",
            "description": "An optional third-party recipient email for an Ecologi impact notification. The account-gated feature returns 403 when disabled; test mode validates and echoes the address without sending email.",
            "format": "email"
          },
          "idempotencyKey": {
            "type": "string",
            "minLength": 1,
            "description": "An optional Idempotency-Key header value used to retry a purchase safely."
          }
        },
        "additionalProperties": false,
        "required": [
          "number"
        ],
        "description": "The Ecologi habitat restoration purchase request."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "amount": {
            "type": "number",
            "description": "The purchase amount charged or simulated by Ecologi."
          },
          "currency": {
            "type": "string",
            "description": "The ISO currency code returned by Ecologi."
          },
          "name": {
            "type": "string",
            "description": "The funded-by name returned by Ecologi."
          },
          "recipientEmail": {
            "type": "string",
            "description": "The recipient email echoed by Ecologi.",
            "format": "email"
          },
          "projectDetails": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "The project name."
                },
                "projectUrl": {
                  "type": "string",
                  "description": "The official Ecologi project URL.",
                  "format": "uri"
                },
                "quantity": {
                  "type": "number",
                  "description": "The quantity allocated to this project."
                },
                "splitPercentage": {
                  "type": "number",
                  "description": "The percentage of the purchase allocated to this project."
                },
                "splitAmountTrees": {
                  "type": "number",
                  "description": "The number of trees allocated to this project."
                },
                "splitAmountTonnes": {
                  "type": "number",
                  "description": "The tonnes of carbon allocated to this project."
                }
              },
              "additionalProperties": true,
              "description": "One Ecologi project allocation returned for the purchase."
            },
            "description": "The Ecologi projects funded by this purchase."
          },
          "tileUrl": {
            "type": "string",
            "description": "The Ecologi URL for the purchased impact tile.",
            "format": "uri"
          }
        },
        "additionalProperties": true,
        "required": [
          "amount",
          "currency",
          "projectDetails",
          "tileUrl"
        ],
        "description": "The Ecologi impact tile purchase response."
      }
    },
    {
      "id": "ecologi.purchase_local_trees",
      "service": "ecologi",
      "name": "purchase_local_trees",
      "description": "Purchase Ecologi tree planting in the UK, US, Australia, or Brazil.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "number": {
            "type": "integer",
            "minimum": 1,
            "description": "The number of local trees to purchase."
          },
          "country": {
            "type": "string",
            "enum": [
              "UK",
              "US",
              "AU",
              "BR"
            ],
            "description": "The country where Ecologi should plant the trees."
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "An optional funded-by name shown on the Ecologi profile. If the profile is public, obtain permission before sending personally identifiable information or use a non-identifying label."
          },
          "test": {
            "type": "boolean",
            "description": "Whether to simulate the purchase without charging or publishing impact."
          },
          "recipientEmail": {
            "type": "string",
            "description": "An optional third-party recipient email for an Ecologi impact notification. The account-gated feature returns 403 when disabled; test mode validates and echoes the address without sending email.",
            "format": "email"
          },
          "idempotencyKey": {
            "type": "string",
            "minLength": 1,
            "description": "An optional Idempotency-Key header value used to retry a purchase safely."
          }
        },
        "additionalProperties": false,
        "required": [
          "number",
          "country"
        ],
        "description": "The Ecologi local tree purchase request."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "amount": {
            "type": "number",
            "description": "The purchase amount charged or simulated by Ecologi."
          },
          "currency": {
            "type": "string",
            "description": "The ISO currency code returned by Ecologi."
          },
          "name": {
            "type": "string",
            "description": "The funded-by name returned by Ecologi."
          },
          "recipientEmail": {
            "type": "string",
            "description": "The recipient email echoed by Ecologi.",
            "format": "email"
          },
          "projectDetails": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "The project name."
                },
                "projectUrl": {
                  "type": "string",
                  "description": "The official Ecologi project URL.",
                  "format": "uri"
                },
                "quantity": {
                  "type": "number",
                  "description": "The quantity allocated to this project."
                },
                "splitPercentage": {
                  "type": "number",
                  "description": "The percentage of the purchase allocated to this project."
                },
                "splitAmountTrees": {
                  "type": "number",
                  "description": "The number of trees allocated to this project."
                },
                "splitAmountTonnes": {
                  "type": "number",
                  "description": "The tonnes of carbon allocated to this project."
                }
              },
              "additionalProperties": true,
              "description": "One Ecologi project allocation returned for the purchase."
            },
            "description": "The Ecologi projects funded by this purchase."
          },
          "treeUrl": {
            "type": "string",
            "description": "The Ecologi URL for the purchased tree impact.",
            "format": "uri"
          }
        },
        "additionalProperties": true,
        "required": [
          "amount",
          "currency",
          "projectDetails",
          "treeUrl"
        ],
        "description": "The Ecologi tree purchase response."
      }
    },
    {
      "id": "ecologi.purchase_trees",
      "service": "ecologi",
      "name": "purchase_trees",
      "description": "Purchase Ecologi tree planting with optional test mode, attribution, notification, and idempotency.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "number": {
            "type": "integer",
            "minimum": 1,
            "maximum": 250000,
            "description": "The number of trees to purchase, from 1 through 250000."
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "An optional funded-by name shown on the Ecologi profile. If the profile is public, obtain permission before sending personally identifiable information or use a non-identifying label."
          },
          "test": {
            "type": "boolean",
            "description": "Whether to simulate the purchase without charging or publishing impact."
          },
          "recipientEmail": {
            "type": "string",
            "description": "An optional third-party recipient email for an Ecologi impact notification. The account-gated feature returns 403 when disabled; test mode validates and echoes the address without sending email.",
            "format": "email"
          },
          "idempotencyKey": {
            "type": "string",
            "minLength": 1,
            "description": "An optional Idempotency-Key header value used to retry a purchase safely."
          }
        },
        "additionalProperties": false,
        "required": [
          "number"
        ],
        "description": "The Ecologi tree purchase request."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "amount": {
            "type": "number",
            "description": "The purchase amount charged or simulated by Ecologi."
          },
          "currency": {
            "type": "string",
            "description": "The ISO currency code returned by Ecologi."
          },
          "name": {
            "type": "string",
            "description": "The funded-by name returned by Ecologi."
          },
          "recipientEmail": {
            "type": "string",
            "description": "The recipient email echoed by Ecologi.",
            "format": "email"
          },
          "projectDetails": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "The project name."
                },
                "projectUrl": {
                  "type": "string",
                  "description": "The official Ecologi project URL.",
                  "format": "uri"
                },
                "quantity": {
                  "type": "number",
                  "description": "The quantity allocated to this project."
                },
                "splitPercentage": {
                  "type": "number",
                  "description": "The percentage of the purchase allocated to this project."
                },
                "splitAmountTrees": {
                  "type": "number",
                  "description": "The number of trees allocated to this project."
                },
                "splitAmountTonnes": {
                  "type": "number",
                  "description": "The tonnes of carbon allocated to this project."
                }
              },
              "additionalProperties": true,
              "description": "One Ecologi project allocation returned for the purchase."
            },
            "description": "The Ecologi projects funded by this purchase."
          },
          "treeUrl": {
            "type": "string",
            "description": "The Ecologi URL for the purchased tree impact.",
            "format": "uri"
          }
        },
        "additionalProperties": true,
        "required": [
          "amount",
          "currency",
          "projectDetails",
          "treeUrl"
        ],
        "description": "The Ecologi tree purchase response."
      }
    }
  ]
}
