Vocabulary for traceable humanitarian aid campaigns built on top of the Skyocean trading ontology and published to the OriginTrail Decentralized Knowledge Graph (DKG).
https://skyocean.io/ontology/donation/
The Donation Extension adapts the Skyocean commodity trading model to
humanitarian aid campaigns. Rather than a trade between buyer and seller, the donation
model anchors around a donation:DonationCampaign identified by a
backend-issued donation:campaignId (e.g. CMP-2026-SUD-001). A
campaign aggregates contributions from many donors across one or more funding sources
(stablecoin wallets, bank accounts, or both), funds procurement and shipping, and closes
when distribution is verified in the field.
Structurally a donation is a humanitarian supply chain: the same institutional attestations, customs readiness, and convergence-based verification that underpin a commercial trade apply, the only difference is that there is no repayment obligation to the donor. Donation flows therefore sit on the same DKG graph as trading flows and can share institutional events, documents, and payment-source records.
Every donation campaign is published as a Knowledge Asset (KA) on the OriginTrail DKG, with public assertions for accountability and private assertions for personally identifiable information (PII) of beneficiaries, KYC'd donors and detailed operational cost breakdowns.
This extension is designed for Skyocean's Sudan humanitarian pilot (2026) but applies to any campaign-based aid program where donors, procurement, logistics and distribution need to be verifiable end-to-end.
The campaign's canonical identifier is the backend-issued
donation:campaignId, never a wallet address. A campaign can be fully
off-chain (bank-only), fully on-chain, or mixed. Wallets and bank accounts are
listed as funding sources attached to the campaign, not as its anchor. No
smart contract is required to launch a campaign.
Donation classes inherit from skyocean: structures where possible
(Document, Party, Location, PaymentSource, InstitutionalAttestation,
ConvergenceRecord) so that donation flows and trading flows share the same graph
and interoperate natively.
Six classes compose the donation extension. Each is a top-level Knowledge Asset type on the DKG.
donation:DonationCampaign
A humanitarian-aid campaign identified by a backend-issued
donation:campaignId, with a packing list (kits, quantities,
specifications), a target amount, target beneficiaries, a region and one or
more funding sources (wallets and/or bank accounts). Acts as the anchor KA that
links all contributions, procurement, shipping and distribution KAs.
schema:Projectdonation:DonationContributionAn individual donation made to a campaign. Supports stablecoin (Polygon, USDC/USDT) and bank rails (Revolut, SEPA, SWIFT). All contributions are KYC'd per jurisdictional requirements, no anonymous donations.
schema:MonetaryDonationdonation:DonationDistributionA verified distribution event at a beneficiary location: families served, kits delivered, witness / partner verification, and geo-referenced signal evidence.
skyocean:Deliverydonation:DonationCampaignPrivatePrivate assertion attached to a campaign KA. Holds beneficiary PII, KYC'd donor identities and other sensitive fields that must not appear on the public graph.
skyocean:PrivateAssertiondonation:SupplyChainSignalA timestamped event on the supply chain: contribution received, procurement signed, shipment handed over, customs cleared, last-mile handover, distribution verified. Used to reconstruct the full campaign timeline.
schema:Eventdonation:DonationKitA standardized aid kit (e.g. family medical + water purification kit). Describes composition, unit cost, supplier and certification, and is referenced by procurement and distribution events.
schema:Product
Properties are qualified with the donation: namespace. Types refer to
XSD datatypes or to classes in skyocean:, schema: or
donation:. Where a suitable schema.org standard property
already exists (e.g. schema:validThrough), it is reused directly
rather than minting a bespoke donation: term, standards-first vocabulary discipline.
| Property | Domain | Range | Description |
|---|---|---|---|
donation:campaignId |
DonationCampaign |
xsd:string |
Canonical anchor identifier for the campaign, issued by the Skyocean backend (e.g. CMP-2026-SUD-001). Stable across on-chain and off-chain campaigns. |
donation:status |
DonationCampaign |
xsd:string |
Campaign state: draft, active, funded, procurement, in-transit, distributing, closed, cancelled. |
schema:validThrough |
DonationCampaign |
xsd:dateTime |
Optional. Campaign end date / funding deadline, after which the campaign no longer accepts contributions. Reused schema.org standard property (not a bespoke donation: term). Mirrors trades.valid_through in the backend per the DB-mirrors-KA invariant (doctrine #102). Populated at campaign creation from the Donation Agreement digest, or by operator input; NULL when neither is present. |
donation:targetAmount |
DonationCampaign |
schema:MonetaryAmount |
Fundraising goal for the campaign, in the stated currency (EUR/USD/USDC by default). |
donation:currentAmount |
DonationCampaign |
schema:MonetaryAmount |
Running total received from all contributions (on-chain + off-chain reconciled). |
donation:fundingSource |
DonationCampaign |
skyocean:PaymentSource |
One or more funding sources attached to the campaign, a wallet, bank account, or rail (Revolut, SEPA, SWIFT, stablecoin). A campaign may list any combination. |
donation:campaignWallet |
DonationCampaign |
xsd:string |
Optional. EVM wallet address (e.g. Polygon) when the campaign has an on-chain funding source. Not the anchor identifier, some campaigns are fully off-chain. |
donation:consignedTo |
DonationCampaign |
skyocean:Party |
Skyocean in-region entity that receives the goods on consignment (e.g. Skyocean Sudan for the Sudan pilot). |
donation:contributorCount |
DonationCampaign |
xsd:integer |
Number of unique contributions received by the campaign. |
donation:targetBeneficiaries |
DonationCampaign |
xsd:integer |
Planned number of beneficiaries (e.g. families, individuals) the campaign intends to serve. |
donation:region |
DonationCampaign |
schema:Place |
Geographic region the campaign serves (state / province level for the Sudan pilot). |
donation:packingList |
DonationCampaign |
donation:DonationKit |
The campaign's core packing list, kits, quantities and specifications. Functional analog of a trade agreement in the core trading flow. |
donation:costSummary |
DonationCampaign |
schema:MonetaryAmount |
Public. Top-level cost summary surfaced to donors (e.g. €75,000 kits, €25,000 operations). |
donation:operationalCostBreakdown |
DonationCampaignPrivate |
schema:MonetaryAmount |
Private. Detailed ops breakdown (freight, customs, insurance, last-mile logistics, platform & ops). Not published publicly to preserve negotiating position with suppliers. |
donation:campaignRef |
DonationContribution, DonationDistribution, SupplyChainSignal |
DonationCampaign |
Reference to the parent campaign, resolved by donation:campaignId and optionally the KA UAL. |
donation:method |
DonationContribution |
xsd:string |
Payment method / rail: stablecoin, revolut, sepa, swift, other. |
donation:paymentSource |
DonationContribution |
skyocean:PaymentSource |
The rail-specific payment record (provider, reference, institutional flag) reused from the core Skyocean payments module. |
donation:onChainTxHash |
DonationContribution |
xsd:string |
Transaction hash if the contribution was made on-chain. |
donation:kycRef |
DonationContribution |
xsd:string |
Reference to the KYC attestation for this donor. Required for every contribution, no anonymous donations. |
donation:deliveryStatus |
DonationDistribution |
xsd:string |
Public. Delivery outcome: delivered, partially-delivered, not-delivered, plus the recipient category (beneficiary group / partner). |
donation:familiesServed |
DonationDistribution |
xsd:integer |
Private. Number of families served in a verified distribution event (detailed counts kept internal for operational optimization). |
donation:kitsDistributed |
DonationDistribution |
xsd:integer |
Private. Number of DonationKit units delivered in the distribution event. |
donation:verifiedBy |
DonationDistribution |
skyocean:Party |
Party that verified the distribution on the ground (NGO, state partner, witness). |
donation:attestationRef |
DonationDistribution |
skyocean:InstitutionalAttestation |
Reference to an independent institutional attestation (customs, inspection, partner NGO) that feeds the convergence evaluator. |
donation:signalType |
SupplyChainSignal |
xsd:string |
Type of supply-chain signal: contribution, procurement, shipment, customs, handover, distribution. |
draft, Campaign created, not yet activeactive, Accepting contributionsfunded, Target amount reachedprocurement, Funds deployed to suppliersin-transit, Goods moving through corridordistributing, Last-mile delivery in progressclosed, Distribution verified, campaign closedcancelled, Campaign cancelled, refunds issuedcontribution, A new donation was receivedprocurement, A purchase order was signed with a suppliershipment, Goods handed to the logistics providercustoms, Customs cleared at origin / destinationhandover, Handed to in-country partnerdistribution, Verified distribution to beneficiariesThe full donation extension is published alongside the core Skyocean vocabulary in both JSON-LD and Turtle formats.