Metadata-Version: 2.4
Name: makeimpact
Version: 1.3.0
Summary: Python SDK for 1ClickImpact API
Home-page: https://github.com/1ClickImpact/makeimpact-py
Author: 1ClickImpact
Author-email: contact@1clickimpact.com
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown
Requires-Dist: requests>=2.0.0
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

# 🌱 MakeImpact Python SDK

[![PyPI version](https://img.shields.io/pypi/v/makeimpact.svg)](https://pypi.org/project/makeimpact/)
[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)
[![Python](https://img.shields.io/badge/Python-3.6%2B-blue)](https://www.python.org/)

> Official Python SDK for 1ClickImpact - Easily integrate impact actions into your Python applications

## 📦 Installation

```bash
pip install makeimpact
# or
poetry add makeimpact
```

## 🚀 Getting Started

You'll need an API key to use this SDK. You can get your API key from the [1ClickImpact Account API Keys page](https://1clickimpact.com/account/api-keys).

```python
from makeimpact import OneClickImpact, Environment

# Initialize the SDK with your API key (production environment by default)
sdk = OneClickImpact("your_api_key")

# Create environmental impact with just a few lines of code
sdk.plant_tree(amount=1)
sdk.clean_ocean(amount=5)
sdk.capture_carbon(amount=2)
```

## 🌍 Environmental Impact Actions

### 🌳 Plant Trees

Help combat deforestation and climate change by planting trees.

```python
from makeimpact import OneClickImpact

sdk = OneClickImpact("your_api_key")

# Plant a single tree
sdk.plant_tree(amount=1)

# Plant trees with a specific category
sdk.plant_tree(amount=10, category="food")

# Plant trees with customer tracking
sdk.plant_tree(
    amount=5,
    customer_email="customer@example.com",
    customer_name="John Doe"
)
```

### 🌊 Clean Ocean Plastic

Remove plastic waste from our oceans to protect marine life.

```python
from makeimpact import OneClickImpact

sdk = OneClickImpact("your_api_key")

# Clean 5 pounds of ocean plastic
sdk.clean_ocean(amount=5)

# Clean ocean plastic with customer tracking
sdk.clean_ocean(
    amount=10,
    customer_email="customer@example.com",
    customer_name="John Doe"
)
```

### ♻️ Capture Carbon

Reduce greenhouse gas emissions by capturing carbon.

```python
from makeimpact import OneClickImpact

sdk = OneClickImpact("your_api_key")

# Capture 2 pounds of carbon
sdk.capture_carbon(amount=2)

# Capture carbon with customer tracking
sdk.capture_carbon(
    amount=5,
    customer_email="customer@example.com",
    customer_name="John Doe"
)
```

### 💰 Donate Money

Support any cause through direct monetary donations.

```python
from makeimpact import OneClickImpact

sdk = OneClickImpact("your_api_key")

# Donate $1.00 (amount in cents)
sdk.donate_money(amount=100)

# Donate with customer tracking
sdk.donate_money(
    amount=500,  # $5.00
    customer_email="customer@example.com",
    customer_name="John Doe"
)
```

> **Note**: To set up a custom cause for donations, please contact 1ClickImpact directly.
> All causes must be vetted and approved to ensure they meet their standards for transparency and impact.

## 📊 Data Access & Reporting

### Get Records

Retrieve impact records with optional filtering.

```python
from makeimpact import OneClickImpact

sdk = OneClickImpact("your_api_key")

# Get all records
records = sdk.get_records()

# Filter records by type
tree_records = sdk.get_records(filter_by="tree_planted")

# Filter records by date range
recent_records = sdk.get_records(
    start_date="2023-01-01",
    end_date="2023-12-31"
)

# Pagination
paginated_records = sdk.get_records(
    cursor="cursor_from_previous_response",
    limit=10
)
```

### Get Customer Records

Retrieve records for specific customers.

```python
from makeimpact import OneClickImpact

sdk = OneClickImpact("your_api_key")

# Get records for a specific customer
customer_records = sdk.get_customer_records(
    customer_email="customer@example.com"
)

# Filter customer records by type
customer_tree_records = sdk.get_customer_records(
    customer_email="customer@example.com",
    filter_by="tree_planted"
)
```

### Get Customers

Retrieve customer information.

```python
from makeimpact import OneClickImpact

sdk = OneClickImpact("your_api_key")

# Get all customers (default limit is 10)
customers = sdk.get_customers()

# Get customers with filtering and pagination
filtered_customers = sdk.get_customers(
    customer_email="example@email.com",  # Optional: Filter by email
    limit=50,  # Optional: Limit results (1-1000)
    cursor="cursor_from_previous_response"  # Optional: For pagination
)
```

### 🔍 Track Impact

Track the complete lifecycle and current status of a specific impact, including project location, assigned agents, completion status, and documentation.

```python
from makeimpact import OneClickImpact

sdk = OneClickImpact("your_api_key")

# First create an impact
response = sdk.plant_tree(amount=1)

# Then track its progress
tracking_info = sdk.track(
    user_id=response.user_id,
    time_utc=response.time_utc
)

print(f"Tracking ID: {tracking_info.tracking_id}")
print(f"Impact Initiated: {tracking_info.impact_initiated}")
if tracking_info.project_location:
    print(f"Project Location: {tracking_info.project_location}")
if tracking_info.assigned_agent:
    print(f"Assigned Agent: {tracking_info.assigned_agent}")
if tracking_info.impact_completed:
    print(f"Impact Completed: {tracking_info.impact_completed}")
```

You can also track impacts from historical records:

```python
# Get records and track a specific impact
records = sdk.get_records(limit=1)
if records.user_records:
    record = records.user_records[0]
    tracking_info = sdk.track(
        user_id=record.user_id,
        time_utc=record.time_utc
    )
    print("Tracking Info:", tracking_info)
```

**Track Response Fields:**

- `tracking_id`: Unique identifier for this impact (format: `user_id-time_utc`)
- `impact_initiated`: UTC timestamp when the impact was created
- `tree_planted`, `waste_removed`, `carbon_captured`, `money_donated`: Impact metrics (optional)
- `category`: Impact category (e.g., "food" for food-bearing trees)
- `donation_available`: When the donation became available for the project
- `donation_sent`: When the donation was sent to the non-profit
- `assigned_agent`: Name of the agent or organization executing the impact
- `project_location`: Detailed description of project location and partners
- `location_map`: Google Maps embed URL for the project location
- `impact_completed`: When the impact was completed
- `donation_category`: Type of impact funded (for donations)
- `certificate`: Certificate URL for the impact (only present in production)
- `impact_video`: URL to video recording or live session
- `live_session_date`: Scheduled live session timestamp
- `project_id`: ID of the project assigned to this impact (when available)
- `is_test_transaction`: Whether this was a test transaction
- `is_bonus_impact`: Whether this was a bonus impact from subscription plans

### Get Projects

Retrieve available environmental impact projects.

```python
from makeimpact import OneClickImpact

sdk = OneClickImpact("your_api_key")

# Get all projects
projects = sdk.get_projects()

# Filter by impact type
tree_projects = sdk.get_projects(type="trees")
ocean_projects = sdk.get_projects(type="ocean")
carbon_projects = sdk.get_projects(type="carbon")

# Get projects in a specific language
german_projects = sdk.get_projects(locale="de")

for project in projects.projects:
    print(f"{project.project_id}: {project.name} ({project.location})")
```

### Get Project by ID

Retrieve full details for a specific project.

```python
from makeimpact import OneClickImpact

sdk = OneClickImpact("your_api_key")

project = sdk.get_project_by_id("PROJECT_ID")

print(f"Name: {project.name}")
print(f"Type: {project.type}")
print(f"Location: {project.location}")
print(f"Organization: {project.organization}")
print(f"Available: {project.available}")

# SDG alignments
for sdg in project.sdgs:
    print(f"SDG {sdg.number}: {sdg.title}")

# Get project in a specific language
project_es = sdk.get_project_by_id("PROJECT_ID", locale="es")
```

**Project Fields:**

- `project_id`: Unique project identifier
- `name`: Project name
- `type`: Impact type (`"trees"`, `"ocean"`, or `"carbon"`)
- `location`: Project location name
- `description`: Short project description
- `about`: Detailed project information
- `country_code`: ISO country code
- `organization`: Executing organization name
- `sdgs`: List of UN Sustainable Development Goals this project aligns with
- `image_urls`: List of project image URLs
- `latitude`, `longitude`: Project coordinates
- `available`: Whether the project is currently active

### Get Impact

Get aggregated lifetime impact statistics with breakdown between direct impact and customer impact.

```python
from makeimpact import OneClickImpact

sdk = OneClickImpact("your_api_key")

# Get overall impact statistics for your organization
impact = sdk.get_impact()

# Total impact (user + customer)
print(f"Total trees planted: {impact.tree_planted}")
print(f"Total ocean waste removed: {impact.waste_removed} lbs")
print(f"Total carbon captured: {impact.carbon_captured} lbs")
print(f"Total money donated: ${impact.money_donated / 100}")

# Direct impact by your organization
print(f"\nDirect impact trees: {impact.user_impact.tree_planted}")
print(f"Direct impact waste removed: {impact.user_impact.waste_removed} lbs")

# Impact on behalf of customers
print(f"\nCustomer impact trees: {impact.customer_impact.tree_planted}")
print(f"Customer impact waste removed: {impact.customer_impact.waste_removed} lbs")
```

### Get Daily Impact

Get time-series daily impact data with optional date range filtering.

```python
from makeimpact import OneClickImpact

sdk = OneClickImpact("your_api_key")

# Get all daily impact data
daily_impact = sdk.get_daily_impact()

for day in daily_impact.daily_impact:
    print(f"Date: {day.date}")
    print(f"  Trees: {day.tree_planted}")
    print(f"  Waste removed: {day.waste_removed} lbs")
    print(f"  Carbon captured: {day.carbon_captured} lbs")
    print(f"  Donated: ${day.money_donated / 100}")

# Get daily impact for specific date range
filtered_impact = sdk.get_daily_impact(
    start_date="2025-01-01",
    end_date="2025-12-31"
)
```

### Who Am I

Verify your API key and get account information.

```python
from makeimpact import OneClickImpact

sdk = OneClickImpact("your_api_key")

# Verify API key and get account information
account_info = sdk.who_am_i()
```

## ⚙️ Configuration

### Environments

The SDK supports two environments:

- **Production** (default): Uses the live API at `https://api.1clickimpact.com`
- **Sandbox**: Uses the testing API at `https://sandbox.1clickimpact.com`

To use the sandbox environment for testing:

```python
from makeimpact import OneClickImpact, Environment

# Initialize with sandbox environment
sdk = OneClickImpact("your_test_api_key", Environment.SANDBOX)
```

## 🔗 Additional Resources

- [1ClickImpact API Documentation](https://docs.1clickimpact.com/plant-trees)
- [1ClickImpact Website](https://www.1clickimpact.com)
- [Pricing & API Keys](https://www.1clickimpact.com/pricing)

## 📄 License

MIT
