Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add Demerzels-lab/elsamultiskillagent --skill fundraiseupgit clone --depth 1 https://github.com/Demerzels-lab/elsamultiskillagentWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/demerzels-lab/elsamultiskillagent/fundraiseup)<a href="https://agentmods.dev/skills/demerzels-lab/elsamultiskillagent/fundraiseup"><img src="https://agentmods.dev/badge/skills/demerzels-lab/elsamultiskillagent/fundraiseup/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/demerzels-lab/elsamultiskillagent/fundraiseup"><img src="https://agentmods.dev/badge/skills/demerzels-lab/elsamultiskillagent/fundraiseup.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00044 | $0.05765 |
| Opus 5 | $0.00022 | $0.02882 |
| Sonnet 5 | $0.00009 | $0.01153 |
| Haiku 4.5 | $0.00004 | $0.00577 |
Grade A, and why
fundraiseup scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 8d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
curl --request GET \ How it starts
The opening of the file, as written. The whole thing — 836 lines — stays where its author put it; the contents beside it link to each section on GitHub.
FundraiseUp API Skill
Overview
This skill enables Claude to interact with the FundraiseUp REST API for processing donations, managing recurring plans, retrieving supporter data, and accessing fundraising analytics. FundraiseUp is a digital fundraising platform that allows nonprofits to process donations from various channels.
Configuration
Required environment variables:
FUNDRAISEUP_API_KEY - API Key (e.g., ABEDDDD_XSSSHwzZc98KR53CWQeWeclA)
Base URL
https://api.fundraiseup.com/v1
Authentication
API Key Generation
- Go to Dashboard > Settings > API keys
- Click "Create API key"
- Enter a descriptive name
- Select data mode:
- Live data: For production use
- Test data: For testing (keys have
test_prefix)
- Select permissions:
- Retrieve donation data
- Create new donations
- Generate Donor Portal access links
- Save the API key securely (shown only once)
Authentication Header
All API requests must include the Authorization header with Bearer token:
Authorization: Bearer YOUR_API_KEY
Important Notes
- API keys are scoped to specific accounts/subaccounts
- Parent account API keys cannot create donations for subaccounts
- Only Organization Administrators can create API keys
- Never expose API keys publicly
Rate Limits
- 8 requests per second
- 128 requests per minute
- Implement retry logic with exponential backoff for rate limit handling
Required Headers
Content-Type: application/json
Accept: application/json
Authorization: Bearer YOUR_API_KEY
API Endpoints
1. Donations
List Donations
Endpoint: GET /donations
Description: Retrieve all donations with cursor-based pagination.
Query Parameters:
limit(optional): Number of records per page (1-100, default: 10)starting_after(optional): Cursor for pagination (donation ID)ending_before(optional): Cursor for backward pagination (donation ID)- Note:
starting_afterandending_beforeare mutually exclusive
Example Request:
curl --request GET \
--url 'https://api.fundraiseup.com/v1/donations?limit=50' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {{FUNDRAISEUP_API_KEY}}'
Response Fields:
id: Donation identifiercreated_at: ISO 8601 timestamplivemode: Boolean (true for live, false for test)amount: Donation amount in selected currencyamount_in_default_currency: Amount in organization's default currencycurrency: Three-letter ISO code (lowercase)status: Donation status (e.g., succeeded, pending, failed)campaign: Campaign details (id, code, name)supporter: Supporter informationrecurring_plan: Recurring plan details (if applicable)designation: Fund/program designationtribute: Tribute information (if provided)custom_fields: Array of custom field valuesprocessing_fee: Processing fee detailsplatform_fee: Platform fee detailsfees_covered: Amount of fees covered by donor
Get Single Donation
Endpoint: GET /donations/{id}
Description: Retrieve details of a specific donation.
Path Parameters:
id(required): Donation ID
Example Request:
curl --request GET \
--url 'https://api.fundraiseup.com/v1/donations/DFQLCFEP' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {{FUNDRAISEUP_API_KEY}}'
Create Donation
Endpoint: POST /donations
Description: Create a one-time or recurring donation. API-created donations will have "API" as the donation source.
Prerequisites:
- Stripe account connected to FundraiseUp and activated
- Active campaign with money-based payment method
- API key with "create new donations" permission
- Stripe Payment Method ID (created via Stripe API)
- PCI compliance requirements met
Request Body:
{
"campaign_id": "FUNCPJTZZQR",
"amount": "25.00",
"currency": "usd",
"payment_method_id": "pm_1234567890abcdef",
"supporter": {
"first_name": "John",
"last_name": "Doe",
"email": "[email protected]",
"phone": "+1234567890",
"mailing_address": {
"line1": "123 Main St",
"line2": "Apt 4B",
"city": "New York",
"region": "NY",
"postal_code": "10001",
"country": "us"
}
},
"recurring_plan": {
"frequency": "monthly"
},
"designation": [
{
"id": "EHHJ9R36"
}
],
"tribute": {
"type": "in_honor_of",
"honoree": "Jane Smith"
},
"comment": "Monthly donation for general fund",
"anonymous": false,
"custom_fields": [
{
"name": "referral_source",
"value": "Email Campaign"
}
]
}
Required Fields:
campaign_id: Must belong to the account and be activeamount: Decimal string (e.g., "9.99" for USD, "200" for JPY), minimum $1 or equivalentcurrency: Three-letter ISO code (lowercase)payment_method_id: Stripe Payment Method IDsupporter.first_name: Up to 256 characterssupporter.last_name: Up to 256 characterssupporter.email: Valid email address (not verified by API)supporter.phone: Up to 20 characters (required if campaign requires it)supporter.mailing_address: Required if campaign requires it
Optional Fields:
recurring_plan.frequency: Creates recurring plan ("monthly", "weekly", "quarterly", "yearly", "daily")designation: Array of designation IDstribute.type: "in_honor_of" or "in_memory_of"tribute.honoree: Name of person being honoredcomment: Donation commentanonymous: Boolean (default: false)custom_fields: Array of custom field objects
Example Request:
curl --request POST \
--url 'https://api.fundraiseup.com/v1/donations' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {{FUNDRAISEUP_API_KEY}}' \
--header 'Content-Type: application/json' \
--data '{
"campaign_id": "FUNCPJTZZQR",
"amount": "50.00",
"currency": "usd",
"payment_method_id": "pm_1234567890",
"supporter": {
"first_name": "Jane",
"last_name": "Smith",
"email": "[email protected]"
}
}'
Important Notes:
- All string parameters are trimmed; empty strings converted to null
- Addresses and emails are not formatted or verified
- Only credit card payments are currently supported
- Fees may show as 0 initially until Stripe finalizes (use Events endpoint for finalized fees)
Update Donation
Endpoint: PATCH /donations/{id}
Description: Update a donation. Updates only allowed within 24 hours of creation and only for API-created donations.
Path Parameters:
id(required): Donation ID
Limitations:
- Only API-created donations can be updated
- Updates must occur within 24 hours of creation
- No bulk updates supported
2. Recurring Plans
List Recurring Plans
Endpoint: GET /recurring_plans
Description: Retrieve all recurring donation plans.
Query Parameters:
limit(optional): Number of records per page (1-100)starting_after(optional): Cursor for paginationending_before(optional): Cursor for backward pagination
Example Request:
curl --request GET \
--url 'https://api.fundraiseup.com/v1/recurring_plans?limit=50' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {{FUNDRAISEUP_API_KEY}}'
Response Fields:
id: Recurring plan identifiercreated_at: ISO 8601 timestampfrequency: "monthly", "weekly", "quarterly", "yearly", or "daily"amount: Recurring donation amountcurrency: Three-letter ISO codestatus: Plan status (active, paused, canceled)next_installment_at: Next scheduled donation dateended_at: End date (if set)campaign: Associated campaign detailssupporter: Supporter information
Get Single Recurring Plan
Endpoint: GET /recurring_plans/{id}
Description: Retrieve details of a specific recurring plan.
Path Parameters:
id(required): Recurring plan ID
Example Request:
curl --request GET \
--url 'https://api.fundraiseup.com/v1/recurring_plans/RVSHJNPJ' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {{FUNDRAISEUP_API_KEY}}'
Update Recurring Plan
Endpoint: PATCH /recurring_plans/{id}
Description: Update a recurring plan. Updates only allowed within 24 hours of creation and only for API-created plans.
3. Supporters
List Supporters
Endpoint: GET /supporters
Description: Retrieve all supporters/donors.
Query Parameters:
limit(optional): Number of records per page (1-100)starting_after(optional): Cursor for paginationending_before(optional): Cursor for backward pagination
Example Request:
curl --request GET \
--url 'https://api.fundraiseup.com/v1/supporters?limit=50' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {{FUNDRAISEUP_API_KEY}}'
Response Fields:
id: Supporter identifiercreated_at: ISO 8601 timestampemail: Email addressfirst_name: First namelast_name: Last namephone: Phone numbermailing_address: Address detailsmailing_list_subscribed: Booleananonymous: Booleanemployer: Employer name (if provided)
Get Single Supporter
Endpoint: GET /supporters/{id}
Description: Retrieve details of a specific supporter.
Path Parameters:
id(required): Supporter ID
Example Request:
curl --request GET \
--url 'https://api.fundraiseup.com/v1/supporters/SXXXXXXX' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {{FUNDRAISEUP_API_KEY}}'
4. Events
List Events
Endpoint: GET /events
Description: Retrieve audit log events for donations, recurring plans, and supporters.
Query Parameters:
limit(optional): Number of records per page (1-100)starting_after(optional): Cursor for paginationending_before(optional): Cursor for backward pagination
Example Request:
curl --request GET \
--url 'https://api.fundraiseup.com/v1/events?limit=50' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {{FUNDRAISEUP_API_KEY}}'
Use Cases:
- Track when fees are finalized (look for
donation.successevent) - Monitor status changes
- Audit trail for compliance
- Integration debugging
5. Campaigns
List Campaigns
Endpoint: GET /campaigns
Description: Retrieve all campaigns.
Query Parameters:
limit(optional): Number of records per page (1-100)starting_after(optional): Cursor for paginationending_before(optional): Cursor for backward pagination
Example Request:
curl --request GET \
--url 'https://api.fundraiseup.com/v1/campaigns' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {{FUNDRAISEUP_API_KEY}}'
Response Fields:
id: Campaign identifiercode: Campaign codename: Campaign namestatus: Campaign status
Get Single Campaign
Endpoint: GET /campaigns/{id}
Path Parameters:
id(required): Campaign ID
6. Designations
List Designations
Endpoint: GET /designations
Description: Retrieve all fund/program designations.
Example Request:
curl --request GET \
--url 'https://api.fundraiseup.com/v1/designations' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {{FUNDRAISEUP_API_KEY}}'
7. Donor Portal Access
Generate Supporter Portal Link
Endpoint: POST /donor_portal/access_links/supporters/{id}
Description: Generate a secure link for a supporter to access their Donor Portal without logging in.
Path Parameters:
id(required): Supporter ID
Prerequisites:
- API key with "Generate Donor Portal access links" permission enabled
Example Request:
curl --request POST \
--url 'https://api.fundraiseup.com/v1/donor_portal/access_links/supporters/64b0ba9d9a19ea001fa3516a' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {{FUNDRAISEUP_API_KEY}}'
Response:
{
"url": "https://yourorg.org/login/?auth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Important Security Notes:
- Links are valid for 1 minute only
- Should only be used within Donor Portal context
- Never share via email, SMS, or public channels
- Provides access to sensitive data (payment methods, donation history, receipts)
- Validate supporter ownership before generating links
- Implement automatic redirect (do not require manual action)
Generate Recurring Plan Portal Link
Endpoint: POST /donor_portal/access_links/recurring_plans/{id}
Description: Generate a link for a supporter to access a specific recurring plan in the Donor Portal.
Path Parameters:
id(required): Recurring plan ID
Optional Query Parameters:
return_url(optional): URL to return to after managing the recurring plan
Example Request:
curl --request POST \
--url 'https://api.fundraiseup.com/v1/donor_portal/access_links/recurring_plans/RVSHJNPJ' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {{FUNDRAISEUP_API_KEY}}'
Response:
{
"url": "https://yourorg.org/login/?auth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Pagination Best Practices
All list endpoints use cursor-based pagination:
- Initial Request: Set
limitparameter (1-100) - Next Page: Use the last item's
idinstarting_after - Previous Page: Use the first item's
idinending_before - Sorting: Records sorted by creation date (newest first), then by ID (Z to A)
Example Pagination Flow:
What ships with it
2 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 8d ago First seen · 836 lines · 44 tokens per session scan A 851846e1d512
fundraiseup is a skill published in the GitHub repository Demerzels-lab/elsamultiskillagent (10 stars, last pushed 4mo ago), licensed MIT. It adds 44 tokens to every session and 5,765 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-03.
Other skills, from other repositories
sector-rotation
An analysis framework for comparing industries in the Chinese A-share stock market, using business conditions, price momentum, valuation, and money flows. It produces rankings and higher- or lower-allocation suggestions.
strategy-pivot-designer
Detect backtest iteration stagnation and generate structurally different strategy pivot proposals when parameter tuning reaches a local optimum.
twitter-reader
Read Twitter/X for financial research using opencli (read-only). Use this skill whenever the user wants to read their Twitter feed, search for financial tweets, view bookmarks, look up user profiles, or gather market sentiment from Twitter/X. Triggers include: "check my feed", "search Twitter for", "show my…
chenhao-limit-up
A framework for judging Chinese A-share stocks that have reached the daily price-rise limit, using market mood, sector leadership, and trading momentum.
trading-risk-gate
Unified pre-trade safety gate: Ruin check (Law #1), ergodicity audit, and win-rate dominance validation. Absorbs: ergodicity-check, law-of-ruin, win-rate-dominance.
furusato
A Japanese hometown-tax donation manager for furusato nozei, a system where donations to municipalities can qualify for an income-tax or local-tax deduction. It reads donation receipts, stores donation records, and calculates deduction limits.