{"name":"Oasis VF Interop Surface","note":"Read-only JSON projection of Oasis data shaped to ValueFlows / hREA conventions. Field names follow VF (note, agentType, primaryLocation, published, classifications) rather than Oasis internal names (description, type, createdAt). See https://www.valueflo.ws/ and https://hrea.io/ for the upstream vocabulary.","version":"0.1.0","spec":"ValueFlows (https://codeberg.org/valueflows/valueflows)","shapeInspiredBy":"hREA GraphQL schema (https://hrea.io/)","resources":{"agents":{"path":"/api/vf/agents","vfType":"Agent","sources":["User","Organization","Group","EcologicalEntity"],"note":"Union of all Oasis subject-type entities. The `agentType` field discriminates PERSON / ORGANIZATION / GROUP / ECOLOGICAL.","singleByPath":"/api/vf/agents/{id}","idScheme":"Prefix-encoded: 'user:<cuid>', 'organization:<cuid>', 'group:<cuid>', 'ecological:<cuid>'"},"proposals":{"path":"/api/vf/proposals","vfType":"Proposal","source":"Proposal (Oasis offers + requests)","note":"intent=OFFER | REQUEST. status=OPEN | MATCHED | FULFILLED | WITHDRAWN.","singleByPath":"/api/vf/proposals/{id}"},"resourceSpecifications":{"path":"/api/vf/resource-specifications","vfType":"ResourceSpecification","source":"Recipe","note":"VF's ResourceSpecification is the closest fit for Oasis Recipes — they're replicable templates. The 'recipeKind' classification preserves Oasis kind (PREPARATION / CULTIVATION / RESTORATION / ...).","singleByPath":"/api/vf/resource-specifications/{id}"},"plans":{"path":"/api/vf/plans","vfType":"Plan","source":"Project","note":"Project with optional Recipe link surfaces as Plan.basedOn (Recipe → ResourceSpecification).","singleByPath":"/api/vf/plans/{id}"},"spatialThings":{"path":"/api/vf/spatial-things","vfType":"SpatialThing","source":"Place","note":"Locations on the map. `hostedBy` is the owning Org (if any). Note this is distinct from Agents: a watershed is an Agent (subject); a farm at a coordinate is a SpatialThing (location).","singleByPath":"/api/vf/spatial-things/{id}"},"processes":{"path":"/api/vf/processes","vfType":"Process","source":"Process","note":"Coordinated sequences of action — a restoration campaign, a planting cycle, a measurement series. `inScopeOf` is the EcologicalEntity (canonical) or the Project. Filter by ?ecologicalEntity=<slug> or ?status=ACTIVE.","singleByPath":"/api/vf/processes/{id}"},"economicEvents":{"path":"/api/vf/economic-events","vfType":"EconomicEvent","source":"EconomicEvent","note":"Single observable moments — RESTORE, MEASURE, WORK, HARVEST, etc. Carries optional resourceQuantity, atLocation, inputOf (Process), and providedBy (PERSON Agent).","singleByPath":"/api/vf/economic-events/{id}"}},"pagination":{"note":"All list endpoints accept `limit` (default 50, max 200) and `cursor` (opaque). The next cursor is returned in `pageInfo.next` or null when done."},"readWrite":{"readOnly":true,"note":"This endpoint is interop-read. Writes happen through Oasis's existing surfaces (signed-in users, /api/proposals, /api/recipes, etc.). Federated writes will land with the ActivityPub Actor work — see TODO.md Phase 2 item 5."},"reference":{"repo":"https://codeberg.org/valueflows","spec":"https://www.valueflo.ws/introduction/introduction/","hREA":"https://hrea.io/","oasisInternalDocs":"/oasis-standards/REFERENCES.md (in repo)"}}