Skip to content

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 on donors' behalf, and remit them over bank rails (ACH, RTP, FedNow, wire).

What UGP standardizes

UGP standardizes two things, and intentionally nothing more:

  1. 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.profile capability inside the organization's UCP discovery profile.
  2. Donation remittance over bank rails. A batch workflow (dev.ugp.giving.donations) for a platform to declare the donations it has already collected, receive bank 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 has already collected the money; 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/ucp on 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"][].endpoint points at the provider, not the nonprofit — for example https://chariot.app/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.