Skip to main content

12. Appendix A: Generic resource catalogue

Path segment is the value after /api/v1/. Mode: crud (read, create and update), read-only (read only; writes return 403 or 501), gated (not available; returns 501). "Any" read means any active role in the tenant. "FR" is the finance read set: PSA, CSA, PA, SCA, IA, FEO, FA, AC, EDV, IV.

Write roles below are the domain write permissions (WRITE_PERMISSIONS) that apply to the resource's kind. PSA can always write.

Path segmentModeRead rolesCreate or update roles (domain)Notes
organizationscrudAnyCSA
programmescrudAnyCSA, PA
sapzscrudAnyCSA, PA, SCA
institutionscrudAnyCSA, PA, SCA, IA
commoditiescrudAnyCSA, PA, SCAKind reference_data
value-chainscrudAnyCSA, PA, SCAKind reference_data
risk-assessmentscrudAnyCSA, PA, SCA, IA, MACreate forces status DRAFT; records assessedBy
indicatorscrudAnyCSA, PA, SCA, MA
reportscrudAnyCSA, PA, SCA, IA, MAReport definitions, not exports
benchmarksgatedn/an/a501 FEATURE_UNAVAILABLE
transactionsread-onlyFRn/aUse /finance/transactions to create
disbursementsread-onlyFRn/aFiltered to type DISBURSEMENT
reversalsread-onlyFRn/aFiltered to type REVERSAL
approvalsread-onlyFRn/a
reconciliationread-onlyFRn/a
investmentsread-onlyFRn/aFunding records, kind INVESTMENT
loansread-onlyFRn/aFunding records, kind LOAN
grantsread-onlyFRn/aFunding records, kind GRANT
exportsread-onlyAny (own rows only)n/aRequester's own report jobs
notificationsread-onlyAny (own rows only)n/aRecipient's own notifications
integrationsread-onlyPSA, CSA, SUPPORT, ACn/aIntegration jobs; input, output, error redacted
admin/providersread-onlyPSA, CSAConfigure: CSA (or PSA). Route-level write returns 501 after authorizationSecrets rejected; only id, activeProvider, reason, version, expectedVersion accepted
audit-eventsread-onlyPSA, CSA, ACn/aExcludes integrity rows; hash fields redacted
facilitiesread-onlyFRn/aAuthoritative facility register
facility-versionsread-onlyFRn/a
facility-windowsread-onlyFRn/a
facility-allocationsread-onlyFRn/a
finance-applicationsread-only (route has its own POST and GET)FR, with application scopen/aUse the dedicated routes
financing-casesread-only (dedicated routes)FR, with case scopen/aUse the dedicated routes
conditions-precedentread-onlyFR, case scopen/a
collateralread-onlyFR, case scopen/a
insuranceread-onlyFR, case scopen/a
insurance-claimsread-onlyFR, policy scopen/a
disbursement-schedulesread-onlyFR, case scopen/a
repayment-schedulesread-onlyFR, case scopen/a
warehousesread-onlyFRn/a
warehouse-receiptsread-onlyFR, warehouse scopen/a
inventoryread-onlyFRn/aInventory lots
warehouse-inspectionsread-onlyFRn/a
inventory-movementsread-onlyFRn/a
offtake-agreementsread-onlyFR, case scopen/a
delivery-obligationsread-onlyFR, agreement scopen/a
projectsread-onlyFR, project scopen/a
spvsread-onlyFR, project scopen/aSpecial purpose vehicles
pppsread-onlyFR, project scopen/a
project-milestonesread-onlyFR, project scopen/a
project-preparationread-onlyFR, case scopen/a
equity-investmentsread-onlyFR, case scopen/a
guaranteesread-onlyFR, case scopen/a
restructuringsread-onlyFR, case scopen/a
recoveriesread-onlyFR, case scopen/a
beneficiary-profilesread-onlyFR, case scopen/a

Field rules for the nine crud resources (create fields; * marks required):

ResourceCreate fieldsUpdate fields (plus id)
organizationsparentId (UUID, nullable), name* (string 240), type* (string 80), registrationNumber (string 120, nullable), status (enum), metadata (JSON)parentId, name, type, registrationNumber, status, metadata
programmescode* (code), name* (string 240), description (string 5,000, nullable), startsOn (date, nullable), endsOn (date, nullable), status (enum)code, name, description, startsOn, endsOn, status
sapzsprogrammeId* (UUID), stateId* (UUID), code* (code), name* (string 240), status (enum)programmeId, stateId, code, name, status
institutionsorganizationId (UUID, nullable), type* (string 80), name* (string 240), licenseNumber (string 120, nullable), status (enum)organizationId, type, name, licenseNumber, status
commoditiescode* (code), name* (string 160), unit (string 60, nullable)code, name, unit
value-chainscommodityId (UUID, nullable), name* (string 160), stage (string 80, nullable)commodityId, name, stage
risk-assessmentssubjectType* (PROGRAMME, STATE, SAPZ, INSTITUTION, BENEFICIARY), subjectId* (UUID), score (integer 0 to 100), rating (string 60, nullable), status (enum; forced to DRAFT), factors (JSON), assessedAt (datetime, nullable)score, rating, status, factors, assessedAt
indicatorscode* (code), name* (string 200), unit* (string 80), dimensions (JSON)code, name, unit, dimensions
reportscode* (code), name* (string 200), format* (PDF, XLSX, CSV), querySpec* (JSON), schedule (string 120, nullable), active (boolean)code, name, format, querySpec, schedule, active

Example response from a read-only resource when the actor lacks a role (for example GET /api/v1/disbursements as MONITORING_ANALYST):

{
"data": null,
"error": { "code": "FORBIDDEN", "message": "You are not permitted to access this resource" },
"requestId": "<request-id>"
}