create-project-with-grant
Create Project with Grant
Create a new project and attach a grant in a single on-chain transaction. This creates 4 attestations: Project + ProjectDetails + Grant + GrantDetails.
Use this instead of separate create-project + create-grant when the user wants to set up a project with its funding in one step.
See Agent API Reference for auth, base URL, and error handling.
Prerequisite
If KARMA_API_KEY is not set in the environment, invoke the /setup-agent skill first, then continue with this skill.
Required Information
Project fields:
| Field | Required | Description |
|---|---|---|
chainId |
Yes | Which blockchain |
title |
Yes | Project name (1-200 chars) |
description |
Yes | Project description (1-5000 chars) |
imageURL |
No | Project logo/image URL |
links |
No | Array of { type, url } |
tags |
No | Array of tag strings (max 20) |
communityUID |
Yes | The community/program UID that funded the project |
Grant fields (nested under grant):
| Field | Required | Description |
|---|---|---|
grant.title |
Yes | Grant title (1-200 chars) |
grant.description |
No | Grant description (max 5000 chars) |
grant.amount |
No | Funding amount as string |
grant.proposalURL |
No | Link to proposal |
grant.programId |
No | Program identifier (see below) |
Finding the programId
If the user provides a program/track name but not a programId, look it up after finding the community UID:
# Accepts community slug (e.g., "optimism") or UID (0x...)
curl -s "${BASE_URL}/communities/${COMMUNITY_SLUG_OR_UID}/programs" | python3 -c "
import sys, json
data = json.load(sys.stdin)
programs = data if isinstance(data, list) else data.get('payload', data.get('data', []))
for p in programs:
print(f'Name: {p.get(\"metadata\", {}).get(\"title\", \"N/A\")} | ID: {p[\"programId\"]}')
"
Use the matching programId value in the grant params.
Finding the Community UID
curl -s "${BASE_URL}/v2/communities/?limit=10&page=1" | python3 -c "
import sys, json
data = json.load(sys.stdin)
for c in data if isinstance(data, list) else data.get('payload', data.get('data', [])):
d = c.get('details', {})
name = d.get('name', 'N/A') if isinstance(d, dict) else 'N/A'
print(f'Name: {name} | Chain: {c.get(\"chainID\", \"?\")} | UID: {c[\"uid\"]}')
"
Natural Language Mapping
| User says | Action |
|---|---|
| "create a project with a grant from the Offchain Super Chain program" | Look up community UID + programId, ask for project/grant details |
| "create a project with a grant from Optimism" | Look up community UID, ask if it's a specific program or generic grant |
| "new project X funded by Y for $50K" | title: X, community: Y, amount: "50000" |
| "create project and grant together" | Ask for all details |
| "set up project X with Arbitrum grant" | Look up community, ask for remaining details |
Making the Request
BASE_URL="${KARMA_API_URL:-https://gapapi.karmahq.xyz}"
curl -s -X POST "${BASE_URL}/v2/agent/execute" \
-H "Content-Type: application/json" \
-H "x-api-key: ${KARMA_API_KEY}" \
-d '{
"action": "createProjectWithGrant",
"params": {
"chainId": 10,
"title": "DeFi Protocol",
"description": "A decentralized lending protocol",
"links": [{ "type": "github", "url": "https://github.com/defi-protocol" }],
"tags": ["defi", "lending"],
"communityUID": "0xcommunity...uid",
"grant": {
"title": "Optimism Builder Grant",
"description": "Funding for protocol development",
"amount": "50000",
"proposalURL": "https://gov.optimism.io/proposal/123"
}
}
}'
After Success
Display the result. Note this created 4 attestations in one tx:
Project + Grant created successfully!
Transaction: 0x...
Chain: Optimism (10)
Smart Account: 0x...
Attestations: Project, ProjectDetails, Grant, GrantDetails (4 in 1 tx)
The project and grant will be automatically indexed by the system.
Edge Cases
| Scenario | Response |
|---|---|
| Community name given instead of UID | Look up the UID via communities API |
| Community not found | "Could not find that community. Provide the UID directly." |
| User wants separate creation | Suggest using create-project then create-grant instead |
| Amount with currency symbol | Strip symbol and convert ("$50K" → "50000") |
More from show-karma/skills
find-funding-opportunities
Search the Karma Funding Map for funding programs (grants, hackathons, bounties, accelerators, VC funds, RFPs) via the public API. Use when user says "find grants", "search hackathons", "look for bounties", "explore funding", "programs on Optimism", "what can I apply to", "funding opportunities", or asks about programs over or under a budget.
30setup-agent
Set up or log in to Karma. Use when user says "set up agent", "configure API key", "connect to Karma", "login to Karma", "log in", or before first use of any Karma skill.
25skill-creator
Create new Claude Code skills for the Karma ecosystem. Use when user says "create a skill", "build a new skill", "scaffold a skill", or "design a skill". Guides through intent capture, SKILL.md writing, validation, and packaging.
23project-manager
Manage projects, grants, milestones, and updates on the Karma protocol. Use when user says "create a project", "new project", "add a grant", "record funding", "add milestone", "complete milestone", "post an update", "project progress", "grant update", "update project", "edit project", "edit grant", "complete grant", "add roadmap milestone", "report impact", "endorse project", "add team member", "set up agent", "configure API key", "check payouts", "payout status", "payout history", "total disbursed", "view invoices", "download invoice", or any project management action.
19find-opportunities
Search the Karma Funding Map for funding programs (grants, hackathons, bounties, accelerators, VC funds, RFPs) via the public API. Use when user says "find grants", "search hackathons", "look for bounties", "explore funding", "programs on Optimism", "what can I apply to", "funding opportunities", or asks about programs over or under a budget.
8funding-program-manager
Create and manage funding programs on Karma — create programs in the registry, configure intake forms, apply to programs, manage reviewers, applications, milestones, payouts, grant agreements, and AI evaluation. Use when user says "create a program", "new funding program", "set up grants program", "configure intake form", "add form fields", "apply to program", "submit application", "apply for grant", "manage program", "list reviewers", "add reviewer", "remove reviewer", "review applications", "approve application", "reject application", "application status", "list applications", "milestone completions", "pending milestones", "create payout", "disbursement", "payout history", "grant agreement", "sign agreement", "evaluate application", "AI score", "application comment", "enable applications", "update program", or any funding program administration action.
7