> ## Documentation Index
> Fetch the complete documentation index at: https://docs.modulex.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Bloomerang Integration for AI Agents & Workflows

> Nonprofit donor management and fundraising CRM platform

{/* Self-hosted logo — build-time vendored from modulex.json / Iconify (see scripts/lib/logo.js). */}

<img className="block dark:hidden" src="https://mintcdn.com/modulexaillc/zKB2qsP6Q61VNLfB/logos/bloomerang-light.svg?fit=max&auto=format&n=zKB2qsP6Q61VNLfB&q=85&s=0baa7b3ffa3fc233a641ba2ef8a62e59" alt="Bloomerang logo" width="72" height="72" data-path="logos/bloomerang-light.svg" />

<img className="hidden dark:block" src="https://mintcdn.com/modulexaillc/zKB2qsP6Q61VNLfB/logos/bloomerang-dark.svg?fit=max&auto=format&n=zKB2qsP6Q61VNLfB&q=85&s=dba6d2bb2106bee79a10496d58bb45f5" alt="Bloomerang logo" width="72" height="72" data-path="logos/bloomerang-dark.svg" />

## Overview

Add **Bloomerang** to any ModuleX agent or workflow. Nonprofit donor management and fundraising CRM platform integration against the Bloomerang REST API (`api.bloomerang.co/v2`).

<Info>
  **Categories**: CRM · Nonprofit · Fundraising · **Auth**: API Key · **Actions**: 3
</Info>

## Authentication

### API Key Authentication

Authenticate using your Bloomerang API key

<Steps>
  <Step title="Step 1">
    Log in to your Bloomerang account
  </Step>

  <Step title="Step 2">
    Navigate to Settings > API Keys
  </Step>

  <Step title="Step 3">
    Create a new API key or copy your existing one
  </Step>

  <Step title="Step 4">
    Paste the API key below
  </Step>
</Steps>

#### Required Credentials

| Field              | Description             | Required | Format |
| ------------------ | ----------------------- | -------- | ------ |
| Bloomerang API Key | Your Bloomerang API key | Yes      | `-`    |

## Available Actions

<AccordionGroup>
  <Accordion title="create_constituent — Creates a new constituent in Bloomerang">
    ### Parameters

    <ResponseField name="type" type="string" required>
      Constituent type. Valid values: Individual, Organization
    </ResponseField>

    <ResponseField name="first_name" type="string">
      First name of the constituent (used when type is Individual)
    </ResponseField>

    <ResponseField name="last_name" type="string">
      Last name of the constituent (used when type is Individual)
    </ResponseField>

    <ResponseField name="full_name" type="string">
      Organization name (used when type is Organization)
    </ResponseField>

    <ResponseField name="status" type="string">
      Status of the constituent. Valid values: Active, Inactive, Deceased
    </ResponseField>

    <ResponseField name="middle_name" type="string">
      Middle name of the constituent
    </ResponseField>

    <ResponseField name="prefix" type="string">
      Prefix/title. Valid values: Mr., Mrs., Ms., Mx., Dr., Rev., etc.
    </ResponseField>

    <ResponseField name="suffix" type="string">
      Suffix. Valid values: Jr., Sr., II, III, IV, V, Ph.D., M.D., Esq., etc.
    </ResponseField>

    <ResponseField name="job_title" type="string">
      Job title of the constituent
    </ResponseField>

    <ResponseField name="gender" type="string">
      Gender. Valid values: Male, Female, Other
    </ResponseField>

    <ResponseField name="birthdate" type="string">
      Birth date of the constituent (ISO format YYYY-MM-DD)
    </ResponseField>

    <ResponseField name="employer" type="string">
      Employer of the constituent
    </ResponseField>

    <ResponseField name="website" type="string">
      Website URL of the constituent
    </ResponseField>

    <ResponseField name="facebook_id" type="string">
      Facebook page URL of the constituent
    </ResponseField>

    <ResponseField name="twitter_id" type="string">
      Twitter/X handle of the constituent
    </ResponseField>

    <ResponseField name="linked_in_id" type="string">
      LinkedIn page URL of the constituent
    </ResponseField>

    <ResponseField name="preferred_communication_channel" type="string">
      Preferred communication channel. Valid values: Email, Phone, Text Message, Mail
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "id": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Id"
        },
        "first_name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "First Name"
        },
        "last_name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Last Name"
        },
        "full_name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Full Name"
        },
        "type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Type"
        }
      },
      "required": [
        "success"
      ],
      "title": "CreateConstituentOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="create_donation — Creates a new donation record in Bloomerang">
    ### Parameters

    <ResponseField name="constituent_id" type="string" required>
      ID of the constituent (donor)
    </ResponseField>

    <ResponseField name="date" type="string" required>
      Date of the donation (ISO format YYYY-MM-DD)
    </ResponseField>

    <ResponseField name="amount" type="string" required>
      Donation amount as a numeric string
    </ResponseField>

    <ResponseField name="fund_id" type="string" required>
      ID of the fund for the donation
    </ResponseField>

    <ResponseField name="payment_method" type="string" required>
      Payment method. Valid values: None, Cash, Check, CreditCard, Eft, InKind, ApplePay, GooglePay, PayPal, Venmo
    </ResponseField>

    <ResponseField name="campaign_id" type="string">
      ID of the campaign for the donation
    </ResponseField>

    <ResponseField name="appeal_id" type="string">
      ID of the appeal for the donation
    </ResponseField>

    <ResponseField name="note" type="string">
      Note for the donation
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "id": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Id"
        },
        "amount": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Amount"
        },
        "date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Date"
        }
      },
      "required": [
        "success"
      ],
      "title": "CreateDonationOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="add_interaction — Adds an interaction to an existing constituent in Bloomerang">
    ### Parameters

    <ResponseField name="constituent_id" type="string" required>
      ID of the constituent
    </ResponseField>

    <ResponseField name="date" type="string" required>
      Date of the interaction (ISO format YYYY-MM-DD)
    </ResponseField>

    <ResponseField name="subject" type="string" required>
      Subject of the interaction
    </ResponseField>

    <ResponseField name="channel" type="string" required>
      Channel of the interaction. Valid values: Email, InPerson, Mail, MassEmail, Other, Phone, SocialMedia, TextMessage, VideoCall, Webinar, Website
    </ResponseField>

    <ResponseField name="purpose" type="string" required>
      Purpose of the interaction. Valid values: Acknowledgement, ImpactCultivation, Newsletter, Receipt, Solicitation, SpecialEvent, VolunteerActivity, PledgeReminder, Welcome, Other
    </ResponseField>

    <ResponseField name="note" type="string">
      Note for the interaction
    </ResponseField>

    <ResponseField name="is_inbound" type="boolean">
      Whether the interaction was initiated by the constituent
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "id": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Id"
        },
        "subject": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Subject"
        },
        "channel": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Channel"
        }
      },
      "required": [
        "success"
      ],
      "title": "AddInteractionOutput",
      "type": "object"
    }
    ```
  </Accordion>
</AccordionGroup>

## Limits & Quotas

* No publicly documented rate limits for the Bloomerang REST API v2.
* Error model: non-2xx responses and timeouts are caught and returned as `success=False` + `error` rather than raising.

## Related integrations

<CardGroup cols={3}>
  <Card title="Clay" href="/integrations/tools/clay" />

  <Card title="Dropcontact" href="/integrations/tools/dropcontact" />

  <Card title="Google Contacts" href="/integrations/tools/google-contacts" />
</CardGroup>

## Links

* [Bloomerang](https://bloomerang.co)
