Files
2026-09-20 08:26:06 +02:00

6077 lines
146 KiB
JSON

{
"openapi": "3.1.1",
"info": {
"title": "PostFundManagement.Api | v1",
"version": "1.0.0"
},
"servers": [
{
"url": "http://api.ifri.khongisa.co.za/"
}
],
"paths": {
"/v1/api/users/{userId}": {
"get": {
"tags": [
"Users"
],
"description": "Gets the metadata of a single user.",
"operationId": "getuser",
"parameters": [
{
"name": "userId",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/User"
}
}
}
},
"404": {
"description": "Not Found"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/users/{page}/{pageSize}": {
"post": {
"tags": [
"Users"
],
"description": "Paginated, searchable directory of system users. Supports filtering by ActivityStatus, searching by Email, and sorting",
"operationId": "getusers",
"parameters": [
{
"name": "page",
"in": "path",
"required": true,
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": "integer",
"format": "int32",
"default": 1
}
},
{
"name": "pageSize",
"in": "path",
"required": true,
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": "integer",
"format": "int32",
"default": 100
}
}
],
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/UserFilterRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/User"
}
}
}
}
},
"404": {
"description": "Not Found"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/integration/sync": {
"post": {
"tags": [
"Users"
],
"description": "Trigger integration and data synchronization in the background",
"operationId": "syncuser",
"responses": {
"200": {
"description": "OK"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/users/{userId}/status/{status}": {
"get": {
"tags": [
"Users"
],
"description": "Changes the Activity status of the user in the system",
"operationId": "updateuserstatus",
"parameters": [
{
"name": "userId",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "status",
"in": "path",
"required": true,
"schema": {
"$ref": "#/components/schemas/ActivityStatus"
}
}
],
"responses": {
"200": {
"description": "OK"
},
"404": {
"description": "Not Found"
},
"401": {
"description": "Unauthorized"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/tools/hashid/{id64}": {
"get": {
"tags": [
"Tools"
],
"description": "Hashes an int64 identifier",
"operationId": "encodeid",
"parameters": [
{
"name": "id64",
"in": "path",
"required": true,
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": "integer",
"format": "int64"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "string"
}
}
}
},
"401": {
"description": "Unauthorized"
},
"403": {
"description": "Forbidden"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/projects/activities": {
"post": {
"tags": [
"Projects"
],
"description": "Add a new activity under project (M04)",
"operationId": "createactivity",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/CreateActivityRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized"
}
},
"security": [
{ }
]
}
},
"/v1/api/projects/programme": {
"post": {
"tags": [
"Projects"
],
"description": "Create programme",
"operationId": "createprogramme",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/CreateProgrammeRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK"
},
"404": {
"description": "Not Found"
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
},
"put": {
"tags": [
"Projects"
],
"description": "Update existing programme",
"operationId": "updateprogramme",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/UpdateProgrammeRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK"
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/projects": {
"post": {
"tags": [
"Projects"
],
"description": "Create a new project (M04)",
"operationId": "createproject",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/CreateProjectRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK"
},
"404": {
"description": "Not Found"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized"
}
},
"security": [
{ }
]
},
"get": {
"tags": [
"Projects"
],
"description": "Get a list of projects",
"operationId": "getprojects",
"parameters": [
{
"name": "page",
"in": "query",
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int32",
"default": 1
}
},
{
"name": "pageSize",
"in": "query",
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int32",
"default": 100
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Project"
}
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized"
}
},
"security": [
{ }
]
},
"put": {
"tags": [
"Projects"
],
"description": "Update project details",
"operationId": "updateproject",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/UpdateProjectRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized"
}
},
"security": [
{ }
]
}
},
"/v1/api/projects/{projectId}/activities": {
"get": {
"tags": [
"Projects"
],
"description": "Get a list of activities for a project",
"operationId": "getactivities",
"parameters": [
{
"name": "projectId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Activity"
}
}
}
}
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/projects/activities/{activityId}": {
"get": {
"tags": [
"Projects"
],
"description": "Gets a specific activity by it's id",
"operationId": "getactivity",
"parameters": [
{
"name": "activityId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/Activity"
}
}
}
},
"404": {
"description": "Not Found"
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/projects/milestones/{milestoneId}": {
"get": {
"tags": [
"Projects"
],
"description": "Gets a specific milestone",
"operationId": "getmilestone",
"parameters": [
{
"name": "milestoneId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/Milestone"
}
}
}
},
"404": {
"description": "Not Found"
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/projects/milestones/{page}/{pageSize}": {
"get": {
"tags": [
"Projects"
],
"description": "Get a list of all milestones",
"operationId": "getmilestones",
"parameters": [
{
"name": "page",
"in": "path",
"required": true,
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": "integer",
"format": "int32",
"default": 1
}
},
{
"name": "pageSize",
"in": "path",
"required": true,
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": "integer",
"format": "int32",
"default": 100
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Milestone"
}
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized"
}
},
"security": [
{ }
]
}
},
"/v1/api/projects/programme/{programmeId}": {
"get": {
"tags": [
"Projects"
],
"description": "Get specific programme",
"operationId": "getprogramme",
"parameters": [
{
"name": "programmeId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/Programme"
}
}
}
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/projects/{programmeId}/programme": {
"get": {
"tags": [
"Projects"
],
"description": "Get a list of all projects under a programme",
"operationId": "getprogrammeprojects",
"parameters": [
{
"name": "programmeId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Project"
}
}
}
}
},
"404": {
"description": "Not Found"
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/projects/programme/{page}/{pageSize}": {
"get": {
"tags": [
"Projects"
],
"description": "Get a list of all programmes",
"operationId": "getprogrammesprojects",
"parameters": [
{
"name": "page",
"in": "path",
"required": true,
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": "integer",
"format": "int32",
"default": 1
}
},
{
"name": "pageSize",
"in": "path",
"required": true,
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": "integer",
"format": "int32",
"default": 100
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Programme"
}
}
}
}
},
"404": {
"description": "Not Found"
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/projects/{projectId}": {
"get": {
"tags": [
"Projects"
],
"description": "Get project by ID",
"operationId": "getproject",
"parameters": [
{
"name": "projectId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Project"
}
}
}
}
},
"404": {
"description": "Not Found"
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/projects/indicators/project/{projectId}": {
"get": {
"tags": [
"Projects"
],
"description": "Get get a detailed list of project indicators",
"operationId": "getprojectindicators",
"parameters": [
{
"name": "projectId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Indicator"
}
}
}
}
},
"404": {
"description": "Not Found"
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/projects/{projectId}/milestones": {
"get": {
"tags": [
"Projects"
],
"description": "Get a list of milestones for a project",
"operationId": "getprojectmilestones",
"parameters": [
{
"name": "projectId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Milestone"
}
}
}
}
},
"404": {
"description": "Not Found"
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/projects/{projectId}/risks": {
"get": {
"tags": [
"Projects"
],
"description": "Get a list of risks for a project",
"operationId": "getprojectrisks",
"parameters": [
{
"name": "projectId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Risk"
}
}
}
}
},
"404": {
"description": "Not Found"
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/projects/milestone": {
"put": {
"tags": [
"Projects"
],
"description": "Update project milestone details",
"operationId": "updatemilestone",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/UpdateMilestoneRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized"
}
},
"security": [
{ }
]
}
},
"/v1/api/projects/status": {
"put": {
"tags": [
"Projects"
],
"description": "Update project status (M04)",
"operationId": "updateprojectstatus",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/UpdateProjectStatusRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK"
},
"401": {
"description": "Unauthorized"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/grants/awards": {
"post": {
"tags": [
"Grants"
],
"description": "Register an approved funding award (M01)",
"operationId": "createaward",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/CreateAwardRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK"
},
"401": {
"description": "Unauthorized"
},
"404": {
"description": "Not Found"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
},
"get": {
"tags": [
"Grants"
],
"description": "Get a list of awards",
"operationId": "getawards",
"parameters": [
{
"name": "page",
"in": "query",
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int32",
"default": 1
}
},
{
"name": "pageSize",
"in": "query",
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int32",
"default": 10
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Award"
}
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized"
}
},
"security": [
{ }
]
}
},
"/v1/api/grants/budgets": {
"post": {
"tags": [
"Grants"
],
"description": "Create a new budget line (M05)",
"operationId": "createbudget",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/CreateBudgetRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK"
},
"404": {
"description": "Not Found"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized"
}
},
"security": [
{ }
]
},
"get": {
"tags": [
"Grants"
],
"description": "Get all budgets",
"operationId": "getbudgets",
"parameters": [
{
"name": "page",
"in": "query",
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int32",
"default": 1
}
},
{
"name": "pageSize",
"in": "query",
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int32",
"default": 100
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Budget"
}
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized"
}
},
"security": [
{ }
]
}
},
"/v1/api/grants/contracts": {
"post": {
"tags": [
"Grants"
],
"description": "Create a contract record from an approved award (M02)",
"operationId": "createcontract",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/CreateContractRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized"
}
},
"security": [
{ }
]
},
"get": {
"tags": [
"Grants"
],
"description": "Get all contracts",
"operationId": "getcontracts",
"parameters": [
{
"name": "page",
"in": "query",
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int32",
"default": 1
}
},
{
"name": "pageSize",
"in": "query",
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int32",
"default": 100
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Contract"
}
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized"
}
},
"security": [
{ }
]
},
"put": {
"tags": [
"Grants"
],
"description": "Updates a specific contract",
"operationId": "updatecontract",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/UpdateContractRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK"
},
"401": {
"description": "Unauthorized"
},
"404": {
"description": "Not Found"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/grants/contracts/execute": {
"post": {
"tags": [
"Grants"
],
"description": "Execute the contract and lock the contractual version",
"operationId": "executecontract",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ExecuteContractRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized"
}
},
"security": [
{ }
]
}
},
"/v1/api/grants/awards/{awardId}": {
"get": {
"tags": [
"Grants"
],
"description": "Get award by ID",
"operationId": "getaward",
"parameters": [
{
"name": "awardId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/Award"
}
}
}
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"404": {
"description": "Not Found"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/grants/budgets/{budgetId}": {
"get": {
"tags": [
"Grants"
],
"description": "Get budget by ID",
"operationId": "getbudget",
"parameters": [
{
"name": "budgetId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/Budget"
}
}
}
},
"404": {
"description": "Not Found"
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/grants/contracts/{contractId}": {
"get": {
"tags": [
"Grants"
],
"description": "Get contract by ID",
"operationId": "getcontract",
"parameters": [
{
"name": "contractId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/Contract"
}
}
}
},
"404": {
"description": "Not Found"
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
},
"post": {
"tags": [
"Grants"
],
"description": "Uploads a contract file securely",
"operationId": "uploadcontract",
"parameters": [
{
"name": "contractId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK"
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"404": {
"description": "Not Found"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/grants/contracts/{contractId}/securelink": {
"get": {
"tags": [
"Grants"
],
"description": "Gets a secure download URL, has expiry period (default 15min)",
"operationId": "getcontracturl",
"parameters": [
{
"name": "contractId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "string"
}
}
}
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"404": {
"description": "Not Found"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/governance/organisations": {
"post": {
"tags": [
"Governance"
],
"description": "Create a new organization profile",
"operationId": "createorganisation",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/CreateOrganisationRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized"
}
},
"security": [
{ }
]
},
"get": {
"tags": [
"Governance"
],
"description": "Get a paginated directory of organizations",
"operationId": "getorganisations",
"parameters": [
{
"name": "page",
"in": "query",
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int32",
"default": 1
}
},
{
"name": "pageSize",
"in": "query",
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int32",
"default": 100
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Organisation"
}
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized"
}
},
"security": [
{ }
]
},
"put": {
"tags": [
"Governance"
],
"description": "Update an existing organization profile",
"operationId": "updateorganisation",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/UpdateOrganisationRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK"
},
"404": {
"description": "Not Found"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized"
}
},
"security": [
{ }
]
}
},
"/v1/api/governance/organisations/portfolio": {
"post": {
"tags": [
"Governance"
],
"description": "Create a new organization portfolio",
"operationId": "createportfolio",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/CreatePortfolioRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK"
},
"403": {
"description": "Forbidden"
},
"404": {
"description": "Not Found",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized"
}
},
"security": [
{ }
]
},
"put": {
"tags": [
"Governance"
],
"description": "Update an existing organization portfolio",
"operationId": "updateportfolio",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/UpdatePortfolioRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK"
},
"404": {
"description": "Not Found"
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/governance/dashboard": {
"get": {
"tags": [
"Governance"
],
"description": "Get executive portfolio dashboard metrics and KPIs",
"operationId": "dashboard",
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/Dashboard"
}
}
}
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/governance/instruments/{programmeId}": {
"get": {
"tags": [
"Governance"
],
"description": "Get all funding instruments",
"operationId": "getinstruments",
"parameters": [
{
"name": "programmeId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Instrument"
}
}
}
}
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/governance/organisations/{organisationId}": {
"get": {
"tags": [
"Governance"
],
"description": "Get organization profile by ID",
"operationId": "getorganisation",
"parameters": [
{
"name": "organisationId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/Organisation"
}
}
}
},
"404": {
"description": "Not Found"
},
"401": {
"description": "Unauthorized"
},
"403": {
"description": "Forbidden"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/governance/portfolios/{portfolioId}": {
"get": {
"tags": [
"Governance"
],
"description": "Get a specific portfolios",
"operationId": "getportfolio",
"parameters": [
{
"name": "portfolioId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Portfolio"
}
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Portfolio"
}
}
}
}
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/governance/portfolios/{portfolioId}/programmes": {
"get": {
"tags": [
"Governance"
],
"description": "Get a programme's portfolios",
"operationId": "getportfolioprogrammes",
"parameters": [
{
"name": "portfolioId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Programme"
}
}
}
}
},
"404": {
"description": "Not Found"
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/governance/organisations/{organisationId}/portfolio": {
"get": {
"tags": [
"Governance"
],
"description": "Get all portfolios",
"operationId": "getportfolios",
"parameters": [
{
"name": "organisationId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Portfolio"
}
}
}
}
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/governance/programmes/{portfolioId}": {
"get": {
"tags": [
"Governance"
],
"description": "Get all programmes",
"operationId": "getprogrammes",
"parameters": [
{
"name": "portfolioId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Programme"
}
}
}
}
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/execution/disbursements/{disbursementId}/approve": {
"post": {
"tags": [
"Execution"
],
"description": "Approve disbursement and release payment (M06)",
"operationId": "approvedisbursement",
"parameters": [
{
"name": "disbursementId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK"
},
"401": {
"description": "Unauthorized"
},
"403": {
"description": "Forbidden"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/execution/disbursements": {
"post": {
"tags": [
"Execution"
],
"description": "Create a new disbursement schedule (M06)",
"operationId": "createdisbursement",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/CreateDisbursementRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK"
},
"404": {
"description": "Not Found"
},
"401": {
"description": "Unauthorized"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
},
"get": {
"tags": [
"Execution"
],
"description": "Get a list of disbursements",
"operationId": "getdisbursements",
"parameters": [
{
"name": "page",
"in": "query",
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int32",
"default": 1
}
},
{
"name": "pageSize",
"in": "query",
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int32",
"default": 10
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Disbursement"
}
}
}
}
},
"401": {
"description": "Unauthorized"
},
"404": {
"description": "Not Found"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
},
"put": {
"tags": [
"Execution"
],
"description": "Update the details of a specific disbursement",
"operationId": "updatedisbursement",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/UpdateDisbursementRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized"
}
},
"security": [
{ }
]
}
},
"/v1/api/execution/risks": {
"post": {
"tags": [
"Execution"
],
"description": "Add risk to risk register (M09)",
"operationId": "createrisk",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/CreateRiskRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK"
},
"404": {
"description": "Not Found"
},
"401": {
"description": "Unauthorized"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
},
"get": {
"tags": [
"Execution"
],
"description": "Get a list of all risks",
"operationId": "getrisks",
"parameters": [
{
"name": "page",
"in": "query",
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int32",
"default": 1
}
},
{
"name": "pageSize",
"in": "query",
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int32",
"default": 100
}
}
],
"responses": {
"200": {
"description": "OK"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
},
"put": {
"tags": [
"Execution"
],
"description": "Update the details of a specific risk",
"operationId": "updaterisk",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/UpdateRiskRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK"
},
"401": {
"description": "Unauthorized"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/execution/disbursements/{disbursementId}": {
"get": {
"tags": [
"Execution"
],
"description": "Get a specific disbursement",
"operationId": "getdisbursement",
"parameters": [
{
"name": "disbursementId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/Disbursement"
}
}
}
},
"404": {
"description": "Not Found"
},
"401": {
"description": "Unauthorized"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/execution/risks/{riskId}": {
"get": {
"tags": [
"Execution"
],
"description": "Get a specific risk",
"operationId": "getrisk",
"parameters": [
{
"name": "riskId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/Risk"
}
}
}
},
"404": {
"description": "Not Found"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/evidence/file": {
"put": {
"tags": [
"Evidence & M&E"
],
"description": "Upload supporting evidence file to S3 and register metadata (M14)",
"operationId": "createevidence",
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized"
}
},
"security": [
{ }
]
}
},
"/v1/api/evidence/indicators": {
"post": {
"tags": [
"Evidence & M&E"
],
"description": "Define indicators and baselines/targets (M08)",
"operationId": "createindicator",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/CreateIndicatorRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK"
},
"404": {
"description": "Not Found"
},
"401": {
"description": "Unauthorized"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/evidence/milestones": {
"post": {
"tags": [
"Evidence & M&E"
],
"description": "Define contractual milestones (M07)",
"operationId": "createmilestonerequest",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/CreateMilestoneRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK"
},
"401": {
"description": "Unauthorized"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/evidence/{evidenceId}": {
"get": {
"tags": [
"Evidence & M&E"
],
"description": "Get a specific evidence record and assiciated file URLs",
"operationId": "getevidence",
"parameters": [
{
"name": "evidenceId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/Evidence"
}
}
}
},
"404": {
"description": "Not Found"
},
"401": {
"description": "Unauthorized"
},
"403": {
"description": "Forbidden"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/evidence/files/{page}/{pageSize}": {
"get": {
"tags": [
"Evidence & M&E"
],
"description": "Get a list of all uploaded evidence files metadata",
"operationId": "getevidencefiles",
"parameters": [
{
"name": "page",
"in": "path",
"required": true,
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": "integer",
"format": "int32",
"default": 1
}
},
{
"name": "pageSize",
"in": "path",
"required": true,
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": "integer",
"format": "int32",
"default": 100
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Evidence"
}
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized"
}
},
"security": [
{ }
]
}
},
"/v1/api/evidence/{evidenceId}/securelink": {
"get": {
"tags": [
"Grants"
],
"description": "Gets a secure download URL of the evidence file, URL expires (default: 15min)",
"operationId": "getevidenceurl",
"parameters": [
{
"name": "evidenceId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "string"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"application/json; version=1": {
"schema": {
"type": "string"
}
}
}
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/evidence/indicators/{indicatorId}": {
"get": {
"tags": [
"Evidence & M&E"
],
"description": "Get a specific indicator.",
"operationId": "getindicator",
"parameters": [
{
"name": "indicatorId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/Indicator"
}
}
}
},
"404": {
"description": "Not Found"
},
"401": {
"description": "Unauthorized"
},
"403": {
"description": "Forbidden"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/evidence/indicators/{page}/{pageSize}": {
"get": {
"tags": [
"Evidence & M&E"
],
"description": "Get a list of indicators",
"operationId": "getindicators",
"parameters": [
{
"name": "page",
"in": "path",
"required": true,
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": "integer",
"format": "int32",
"default": 1
}
},
{
"name": "pageSize",
"in": "path",
"required": true,
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": "integer",
"format": "int32",
"default": 100
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Indicator"
}
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized"
}
},
"security": [
{ }
]
}
},
"/v1/api/evidence/milestone/{milestoneId}": {
"get": {
"tags": [
"Evidence & M&E"
],
"description": "Get a list of all uploaded evidence metadata for a specific mliestone",
"operationId": "getmilestoneevidence",
"parameters": [
{
"name": "milestoneId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Evidence"
}
}
}
}
},
"404": {
"description": "Not Found"
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/evidence/{projectId}": {
"get": {
"tags": [
"Evidence & M&E"
],
"description": "Get a list of all uploaded evidence metadata for a specific project",
"operationId": "getprojectevidence",
"parameters": [
{
"name": "projectId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Evidence"
}
}
}
}
},
"404": {
"description": "Not Found"
},
"401": {
"description": "Unauthorized"
},
"403": {
"description": "Forbidden"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/evidence/indicators/{indicatorId}/actuals/{actualAmount}": {
"post": {
"tags": [
"Evidence & M&E"
],
"description": "Record actual values for indicators (M08)",
"operationId": "recordindicatoramount",
"parameters": [
{
"name": "indicatorId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "actualAmount",
"in": "path",
"required": true,
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
"type": "number",
"format": "double"
}
}
],
"responses": {
"200": {
"description": "OK"
},
"401": {
"description": "Unauthorized"
},
"403": {
"description": "Forbidden"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/evidence": {
"put": {
"tags": [
"Evidence & M&E"
],
"description": "Updates a specific evidence record metadata",
"operationId": "updateevidence",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/UpdateEvidenceRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK"
},
"404": {
"description": "Not Found"
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/communications/invites/applicant/{applicantUserId}": {
"get": {
"tags": [
"Communications"
],
"description": "Gets an applicant's invite",
"operationId": "getapplicantinvite",
"parameters": [
{
"name": "applicantUserId",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/Invite"
}
}
}
},
"404": {
"description": "Not Found"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/communications/invites/{applicantUserId}": {
"get": {
"tags": [
"Communications"
],
"description": "Gets an applicant's invite list",
"operationId": "getapplicantinvites",
"parameters": [
{
"name": "applicantUserId",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Invite"
}
}
}
}
},
"404": {
"description": "Not Found"
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/communications/invites/{page}/{pageSize}": {
"get": {
"tags": [
"Communications"
],
"description": "Get a list of sent invitations",
"operationId": "getinvites",
"parameters": [
{
"name": "page",
"in": "path",
"required": true,
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": "integer",
"format": "int32",
"default": 1
}
},
{
"name": "pageSize",
"in": "path",
"required": true,
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": "integer",
"format": "int32",
"default": 100
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Invite"
}
}
}
}
},
"401": {
"description": "Unauthorized"
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{ }
]
}
},
"/v1/api/communications/invite": {
"post": {
"tags": [
"Communications"
],
"description": "Trigger an invite to an organization or candidate (specifying NotificationPlatform)",
"operationId": "sendinvite",
"requestBody": {
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/InviteRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/Invite"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json; version=1": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized"
}
},
"security": [
{ }
]
}
}
},
"components": {
"schemas": {
"Activity": {
"type": "object",
"properties": {
"id": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"projectId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"null",
"integer",
"string"
],
"format": "int64"
},
"milestoneId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"null",
"integer",
"string"
],
"format": "int64"
},
"createdBy": {
"type": "string",
"format": "uuid"
},
"updatedBy": {
"type": [
"null",
"string"
],
"format": "uuid"
},
"approvedBy": {
"type": [
"null",
"string"
],
"format": "uuid"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"updatedAt": {
"type": [
"null",
"string"
],
"format": "date-time"
},
"category": {
"type": [
"null",
"string"
]
},
"status": {
"$ref": "#/components/schemas/ApprovalStatus"
},
"amount": {
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
"type": [
"number",
"string"
],
"format": "double"
},
"title": {
"type": [
"null",
"string"
]
},
"description": {
"type": [
"null",
"string"
]
},
"performedAt": {
"type": [
"null",
"string"
],
"format": "date-time"
}
}
},
"ActivityStatus": {
"type": "integer"
},
"ApprovalStatus": {
"type": "integer"
},
"Award": {
"type": "object",
"properties": {
"id": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"organisationId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"programmeId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"projectId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"null",
"integer",
"string"
],
"format": "int64"
},
"createdBy": {
"type": "string",
"format": "uuid"
},
"updatedBy": {
"type": [
"null",
"string"
],
"format": "uuid"
},
"approvedBy": {
"type": [
"null",
"string"
],
"format": "uuid"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"updatedAt": {
"type": [
"null",
"string"
],
"format": "date-time"
},
"status": {
"$ref": "#/components/schemas/ApprovalStatus"
},
"amount": {
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
"type": [
"number",
"string"
],
"format": "double"
}
}
},
"Budget": {
"type": "object",
"properties": {
"id": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"projectId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"createdBy": {
"type": "string",
"format": "uuid"
},
"approvedBy": {
"type": [
"null",
"string"
],
"format": "uuid"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"updatedAt": {
"type": [
"null",
"string"
],
"format": "date-time"
},
"name": {
"type": [
"null",
"string"
]
},
"amount": {
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
"type": [
"number",
"string"
],
"format": "double"
}
}
},
"Contract": {
"type": "object",
"properties": {
"id": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"awardId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"externalSignatureId": {
"type": [
"null",
"string"
]
},
"signedDocumentUrl": {
"type": [
"null",
"string"
]
},
"effectiveAt": {
"type": [
"null",
"string"
],
"format": "date-time"
},
"expiresAt": {
"type": [
"null",
"string"
],
"format": "date-time"
},
"totalValue": {
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
"type": [
"number",
"string"
],
"format": "double"
},
"status": {
"$ref": "#/components/schemas/ContractStatus"
},
"createdBy": {
"type": "string",
"format": "uuid"
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
},
"ContractStatus": {
"type": "integer"
},
"CreateActivityRequest": {
"required": [
"projectId",
"milestoneId",
"category",
"amount",
"title",
"description",
"performedAt"
],
"type": "object",
"properties": {
"projectId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"milestoneId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"null",
"integer",
"string"
],
"format": "int64"
},
"category": {
"type": "string"
},
"amount": {
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
"type": [
"number",
"string"
],
"format": "double"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"performedAt": {
"type": [
"null",
"string"
],
"format": "date-time"
}
}
},
"CreateAwardRequest": {
"required": [
"organisationId",
"programmeId",
"amount"
],
"type": "object",
"properties": {
"organisationId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"programmeId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"amount": {
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
"type": [
"number",
"string"
],
"format": "double"
}
}
},
"CreateBudgetRequest": {
"required": [
"projectId",
"name",
"amount"
],
"type": "object",
"properties": {
"projectId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"name": {
"type": "string"
},
"amount": {
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
"type": [
"number",
"string"
],
"format": "double"
}
}
},
"CreateContractRequest": {
"required": [
"awardId",
"totalValue",
"effectiveAt",
"expiresAt"
],
"type": "object",
"properties": {
"awardId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"totalValue": {
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
"type": [
"number",
"string"
],
"format": "double"
},
"effectiveAt": {
"type": "string",
"format": "date-time"
},
"expiresAt": {
"type": "string",
"format": "date-time"
}
}
},
"CreateDisbursementRequest": {
"required": [
"projectId",
"milestoneId",
"amount"
],
"type": "object",
"properties": {
"projectId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"milestoneId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"null",
"integer",
"string"
],
"format": "int64"
},
"amount": {
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
"type": [
"number",
"string"
],
"format": "double"
}
}
},
"CreateIndicatorRequest": {
"required": [
"projectId",
"name",
"unitOfMeasure",
"baselineAmount",
"targetAmount"
],
"type": "object",
"properties": {
"projectId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"name": {
"type": "string"
},
"unitOfMeasure": {
"$ref": "#/components/schemas/UnitOfMeasure"
},
"baselineAmount": {
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
"type": [
"number",
"string"
],
"format": "double"
},
"targetAmount": {
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
"type": [
"number",
"string"
],
"format": "double"
}
}
},
"CreateMilestoneRequest": {
"required": [
"projectId",
"dueAt",
"name",
"priority"
],
"type": "object",
"properties": {
"projectId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"dueAt": {
"type": "string",
"format": "date-time"
},
"name": {
"type": "string"
},
"priority": {
"$ref": "#/components/schemas/Priority"
}
}
},
"CreateOrganisationRequest": {
"required": [
"name",
"registrationNo",
"email"
],
"type": "object",
"properties": {
"name": {
"type": "string"
},
"registrationNo": {
"type": "string"
},
"email": {
"type": "string"
},
"type": {
"$ref": "#/components/schemas/OrganisationType"
}
}
},
"CreatePortfolioRequest": {
"required": [
"name",
"description",
"organisationId",
"ownerId"
],
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"organisationId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"ownerId": {
"type": "string",
"format": "uuid"
}
}
},
"CreateProgrammeRequest": {
"required": [
"portfolioId",
"name",
"ownerId"
],
"type": "object",
"properties": {
"portfolioId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"name": {
"type": "string"
},
"ownerId": {
"type": "string",
"format": "uuid"
}
}
},
"CreateProjectRequest": {
"required": [
"programmeId",
"name",
"description",
"sector",
"projectType"
],
"type": "object",
"properties": {
"programmeId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"sector": {
"$ref": "#/components/schemas/IndustrySector"
},
"projectType": {
"$ref": "#/components/schemas/ProjectType"
}
}
},
"CreateRiskRequest": {
"required": [
"projectId",
"likelihood",
"impact",
"name",
"description"
],
"type": "object",
"properties": {
"projectId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"likelihood": {
"$ref": "#/components/schemas/RiskLikelihood"
},
"impact": {
"$ref": "#/components/schemas/RiskImpact"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
}
}
},
"Dashboard": {
"required": [
"portfolioValue",
"activeAwards",
"disbursed",
"onTrackPercentage",
"atRiskCount",
"beneficiariesReached"
],
"type": "object",
"properties": {
"portfolioValue": {
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
"type": [
"number",
"string"
],
"format": "double"
},
"activeAwards": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int32"
},
"disbursed": {
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
"type": [
"number",
"string"
],
"format": "double"
},
"onTrackPercentage": {
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
"type": [
"number",
"string"
],
"format": "double"
},
"atRiskCount": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int32"
},
"beneficiariesReached": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int32"
}
}
},
"Disbursement": {
"type": "object",
"properties": {
"id": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"projectId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"milestoneId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"null",
"integer",
"string"
],
"format": "int64"
},
"createdBy": {
"type": "string",
"format": "uuid"
},
"updatedBy": {
"type": [
"null",
"string"
],
"format": "uuid"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"updatedAt": {
"type": [
"null",
"string"
],
"format": "date-time"
},
"amount": {
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
"type": [
"number",
"string"
],
"format": "double"
},
"status": {
"$ref": "#/components/schemas/ApprovalStatus"
}
}
},
"Evidence": {
"type": "object",
"properties": {
"id": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"projectId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"milestoneId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"indicatorId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"activityId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"createdBy": {
"type": "string",
"format": "uuid"
},
"updatedBy": {
"type": [
"null",
"string"
],
"format": "uuid"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"updatedAt": {
"type": [
"null",
"string"
],
"format": "date-time"
},
"version": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int32"
},
"type": {
"$ref": "#/components/schemas/EvidenceType"
},
"documentUrl": {
"type": [
"null",
"string"
]
},
"status": {
"$ref": "#/components/schemas/ApprovalStatus"
}
}
},
"EvidenceType": {
"type": "integer"
},
"ExecuteContractRequest": {
"required": [
"contractId",
"externalSignatureId",
"signedDocumentUrl"
],
"type": "object",
"properties": {
"contractId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"externalSignatureId": {
"type": "string"
},
"signedDocumentUrl": {
"type": "string"
}
}
},
"Indicator": {
"type": "object",
"properties": {
"id": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"projectId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"createdBy": {
"type": "string",
"format": "uuid"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"name": {
"type": [
"null",
"string"
]
},
"unitOfMeasure": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/UnitOfMeasure"
}
]
},
"baselineAmount": {
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
"type": [
"number",
"string"
],
"format": "double"
},
"targetAmount": {
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
"type": [
"number",
"string"
],
"format": "double"
},
"actualAmount": {
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
"type": [
"number",
"string"
],
"format": "double"
}
}
},
"IndustrySector": {
"type": "integer"
},
"Instrument": {
"type": "object",
"properties": {
"id": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"programmeId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"code": {
"type": [
"null",
"string"
]
},
"name": {
"type": [
"null",
"string"
]
},
"description": {
"type": [
"null",
"string"
]
},
"status": {
"$ref": "#/components/schemas/ActivityStatus"
},
"createdBy": {
"type": "string",
"format": "uuid"
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
},
"Invite": {
"type": "object",
"properties": {
"id": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"organisationId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"invitedOrganisationId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"awardId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"contractId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"recipient": {
"type": "string",
"format": "uuid"
},
"createdBy": {
"type": "string",
"format": "uuid"
},
"updatedBy": {
"type": [
"null",
"string"
],
"format": "uuid"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"updatedAt": {
"type": [
"null",
"string"
],
"format": "date-time"
}
}
},
"InviteRequest": {
"required": [
"organisationId",
"invitedOrganisationId",
"awardId",
"contractId",
"recipient",
"message",
"platform"
],
"type": "object",
"properties": {
"organisationId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"invitedOrganisationId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"awardId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"contractId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"recipient": {
"type": "string",
"format": "uuid"
},
"message": {
"type": "string"
},
"platform": {
"$ref": "#/components/schemas/NotificationPlatform"
}
}
},
"Milestone": {
"type": "object",
"properties": {
"id": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"projectId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"createdBy": {
"type": "string",
"format": "uuid"
},
"updatedBy": {
"type": [
"null",
"string"
],
"format": "uuid"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"updatedAt": {
"type": [
"null",
"string"
],
"format": "date-time"
},
"dueAt": {
"type": "string",
"format": "date-time"
},
"name": {
"type": [
"null",
"string"
]
},
"status": {
"$ref": "#/components/schemas/ApprovalStatus"
},
"priority": {
"$ref": "#/components/schemas/Priority"
}
}
},
"NotificationPlatform": {
"type": "integer"
},
"Organisation": {
"type": "object",
"properties": {
"id": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"createdBy": {
"type": "string",
"format": "uuid"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"registrationNo": {
"type": [
"null",
"string"
]
},
"name": {
"type": [
"null",
"string"
]
},
"email": {
"type": [
"null",
"string"
]
},
"type": {
"$ref": "#/components/schemas/OrganisationType"
},
"status": {
"$ref": "#/components/schemas/ActivityStatus"
}
}
},
"OrganisationType": {
"type": "integer",
"default": 5
},
"Portfolio": {
"type": "object",
"properties": {
"id": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"organisationId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"ownedBy": {
"type": "string",
"format": "uuid"
},
"createdBy": {
"type": "string",
"format": "uuid"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"name": {
"type": [
"null",
"string"
]
},
"description": {
"type": [
"null",
"string"
]
}
}
},
"Priority": {
"type": "integer"
},
"ProblemDetails": {
"type": "object",
"properties": {
"type": {
"type": [
"null",
"string"
]
},
"title": {
"type": [
"null",
"string"
]
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"null",
"integer",
"string"
],
"format": "int32"
},
"detail": {
"type": [
"null",
"string"
]
},
"instance": {
"type": [
"null",
"string"
]
}
}
},
"Programme": {
"type": "object",
"properties": {
"id": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"portfolioId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"ownedBy": {
"type": "string",
"format": "uuid"
},
"createdBy": {
"type": "string",
"format": "uuid"
},
"updatedBy": {
"type": [
"null",
"string"
],
"format": "uuid"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"updatedAt": {
"type": [
"null",
"string"
],
"format": "date-time"
},
"name": {
"type": [
"null",
"string"
]
},
"status": {
"$ref": "#/components/schemas/ApprovalStatus"
}
}
},
"Project": {
"type": "object",
"properties": {
"id": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"programmeId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"createdBy": {
"type": "string",
"format": "uuid"
},
"updatedBy": {
"type": [
"null",
"string"
],
"format": "uuid"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"updatedAt": {
"type": [
"null",
"string"
],
"format": "date-time"
},
"startedAt": {
"type": [
"null",
"string"
],
"format": "date-time"
},
"endedAt": {
"type": [
"null",
"string"
],
"format": "date-time"
},
"sector": {
"$ref": "#/components/schemas/IndustrySector"
},
"projectType": {
"$ref": "#/components/schemas/ProjectType"
},
"name": {
"type": [
"null",
"string"
]
},
"description": {
"type": [
"null",
"string"
]
},
"status": {
"$ref": "#/components/schemas/ApprovalStatus"
}
}
},
"ProjectType": {
"type": "integer"
},
"Risk": {
"type": "object",
"properties": {
"id": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"projectId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"createdBy": {
"type": "string",
"format": "uuid"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"likelihood": {
"$ref": "#/components/schemas/RiskLikelihood"
},
"impact": {
"$ref": "#/components/schemas/RiskImpact"
},
"name": {
"type": [
"null",
"string"
]
},
"description": {
"type": [
"null",
"string"
]
}
}
},
"RiskImpact": {
"type": "integer"
},
"RiskLikelihood": {
"type": "integer"
},
"UnitOfMeasure": {
"type": "integer"
},
"UpdateContractRequest": {
"required": [
"contractId",
"status"
],
"type": "object",
"properties": {
"contractId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"status": {
"$ref": "#/components/schemas/ContractStatus"
}
}
},
"UpdateDisbursementRequest": {
"required": [
"disbursementId",
"milestoneId",
"amount"
],
"type": "object",
"properties": {
"disbursementId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"milestoneId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"null",
"integer",
"string"
],
"format": "int64"
},
"amount": {
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
"type": [
"number",
"string"
],
"format": "double"
}
}
},
"UpdateEvidenceRequest": {
"required": [
"evidenceId",
"version",
"evidenceType",
"status"
],
"type": "object",
"properties": {
"evidenceId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"version": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int32"
},
"evidenceType": {
"$ref": "#/components/schemas/EvidenceType"
},
"status": {
"$ref": "#/components/schemas/ApprovalStatus"
}
}
},
"UpdateMilestoneRequest": {
"required": [
"milestoneId",
"dueAt",
"name",
"priority",
"status"
],
"type": "object",
"properties": {
"milestoneId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"dueAt": {
"type": "string",
"format": "date-time"
},
"name": {
"type": "string"
},
"priority": {
"$ref": "#/components/schemas/Priority"
},
"status": {
"$ref": "#/components/schemas/ApprovalStatus"
}
}
},
"UpdateOrganisationRequest": {
"required": [
"organisationId",
"name",
"registrationNo",
"email",
"type"
],
"type": "object",
"properties": {
"organisationId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"name": {
"type": "string"
},
"registrationNo": {
"type": "string"
},
"email": {
"type": "string"
},
"type": {
"$ref": "#/components/schemas/OrganisationType"
}
}
},
"UpdatePortfolioRequest": {
"required": [
"portfolioId",
"name",
"description",
"ownerId"
],
"type": "object",
"properties": {
"portfolioId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"ownerId": {
"type": "string",
"format": "uuid"
}
}
},
"UpdateProgrammeRequest": {
"required": [
"programmeId",
"name",
"ownerId",
"status"
],
"type": "object",
"properties": {
"programmeId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"name": {
"type": "string"
},
"ownerId": {
"type": "string",
"format": "uuid"
},
"status": {
"$ref": "#/components/schemas/ApprovalStatus"
}
}
},
"UpdateProjectRequest": {
"required": [
"projectId",
"name",
"description",
"startedAt",
"endedAt",
"sector",
"projectType"
],
"type": "object",
"properties": {
"projectId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"startedAt": {
"type": [
"null",
"string"
],
"format": "date-time"
},
"endedAt": {
"type": [
"null",
"string"
],
"format": "date-time"
},
"sector": {
"$ref": "#/components/schemas/IndustrySector"
},
"projectType": {
"$ref": "#/components/schemas/ProjectType"
}
}
},
"UpdateProjectStatusRequest": {
"required": [
"projectId",
"status"
],
"type": "object",
"properties": {
"projectId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"status": {
"$ref": "#/components/schemas/ApprovalStatus"
}
}
},
"UpdateRiskRequest": {
"required": [
"riskId",
"likelihood",
"impact",
"name",
"description"
],
"type": "object",
"properties": {
"riskId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int64"
},
"likelihood": {
"$ref": "#/components/schemas/RiskLikelihood"
},
"impact": {
"$ref": "#/components/schemas/RiskImpact"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
}
}
},
"User": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"lastLoginAt": {
"type": [
"null",
"string"
],
"format": "date-time"
},
"email": {
"type": [
"null",
"string"
]
},
"status": {
"$ref": "#/components/schemas/ActivityStatus"
}
}
},
"UserFilterRequest": {
"type": "object",
"properties": {
"status": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/ActivityStatus"
}
]
},
"email": {
"type": [
"null",
"string"
]
},
"sortBy": {
"type": [
"null",
"string"
]
},
"sortDescending": {
"type": "boolean",
"default": false
}
}
}
},
"securitySchemes": {
"Bearer": {
"type": "http",
"description": "JWT Authorization header using the Bearer scheme",
"scheme": "bearer"
},
"OAuth2": {
"type": "oauth2",
"description": "Interactive OAuth2 flow for authentication and authorization",
"flows": {
"authorizationCode": {
"authorizationUrl": "https://sts.security.khongisa.co.za/connect/authorize",
"tokenUrl": "https://sts.security.khongisa.co.za/connect/token",
"scopes": {
"openid": "OpenID Connect",
"profile": "User Profile",
"roles": "User Roles",
"email": "User Email",
"address": "User Address",
"pfm-api-dev": "PFM API Scope"
}
}
}
}
}
},
"tags": [
{
"name": "Users"
},
{
"name": "Tools"
},
{
"name": "Projects"
},
{
"name": "Grants"
},
{
"name": "Governance"
},
{
"name": "Execution"
},
{
"name": "Evidence & M&E"
},
{
"name": "Communications"
}
]
}