Universal Giving Protocol¶
The Universal Giving Protocol (UGP) is the giving vertical of the
Universal Commerce Protocol (UCP). It reuses UCP's discovery,
profile, capability, service, and HTTP-signing primitives unchanged, and adds a
small set of giving-specific schemas under the dev.ugp.giving namespace.
- Authority domain:
ugp.dev - Protocol version:
2026-06-25
UGP lets a grantmaker or giving platform — a donor-advised fund, private or community foundation, crowdfunding site, workplace-giving provider, or IRA qualified-charitable-distribution processor — discover a nonprofit, batch the donations it has collected, and remit them over a supported rail (ACH, RTP, FedNow, wire, or paper check).
What UGP standardizes¶
UGP standardizes two things:
- Nonprofit profiles. A machine-readable description of a nonprofit — display
and legal name, EINs, tax-deductible status, mission, branding, and contact
metadata — carried by the
dev.ugp.giving.profilecapability inside the organization's UCP discovery profile. - Donation remittance over supported rails. A batch workflow
(
dev.ugp.giving.donations) for a platform to declare the donations it has already collected, receive payment instructions, push funds over a supported rail, and reconcile the settled deposit.
UGP does not tokenize or charge a donor's payment instrument. The platform
already holds the funds; UGP only standardizes the remittance of those funds
to the nonprofit. Because of this, payment_handlers is always empty in a UGP
profile and the supported rails live in the donations capability instead.
The hosting split¶
UGP mirrors how UCP separates who advertises a capability from who serves it:
- The nonprofit hosts
/.well-known/ucpon its own domain (e.g.https://eastsideshelter.org/.well-known/ucp). This makes the nonprofit independently discoverable and lets it own its identity and signing keys. - A provider hosts the giving endpoints. The profile's
services["dev.ugp.giving"][].endpointpoints at the provider, not the nonprofit — for examplehttps://giving-provider.example.com/api/ugp/v1/orgs/eastside-shelter. The provider implements/profile,/donation-batches, batch status, and reconciliation, so the nonprofit never has to run a payments backend.
Read Core Concepts for the full role model, the hosting split, and how money moves over bank rails.
Specification & schemas¶
The normative specification and the raw JSON Schema / OpenAPI artifacts are
served at versioned URLs under /2026-06-25/.
Raw artifacts¶
| Artifact | URL |
|---|---|
| Giving service (REST OpenAPI) | /2026-06-25/services/giving/rest.openapi.json |
| Profile schema | /2026-06-25/schemas/giving/profile.json |
| Donations schema | /2026-06-25/schemas/giving/donations.json |
Schema $ids and $refs in the served artifacts are absolute and version-pinned
(https://ugp.dev/2026-06-25/schemas/...), so a JSON Schema or OpenAPI tool can
resolve the full reference graph directly from these URLs.