Programs
A Program in the Babele product is a Methodology: a curriculum/template made of sections and paragraphs that the projects enrolled in a community follow. Throughout the API the resource is literally named Methodology (with its content split into MethodologyContent, MethodologyTask, KpiDefinition, and KpiReport), so wherever you read "methodology" below, think "program".
Several program mutations are exposed over HTTP GET as a backend
convention — they are not REST-idiomatic and are not idempotent reads.
This applies to Create, Rename, Enable, Disable, RemoveSection,
RemoveParagraph, and KpiDefinition/Remove. Each is flagged inline below,
but treat every GET in those families as a state-changing call: do not
prefetch, cache, or retry them blindly. All endpoints on this page require an
authenticated user (in practice, a community administrator) and send the token
in the Authorization: Bearer header.
Get a community's program list
Returns the full overview for a community, including its list of programs in methodologies[], tab visibility, permissions, and DNS config. This is how the program list for a community is fetched. The response is Redis-cached per community id.
Each entry in methodologies[] is a Methodology with id, name, description, isActive, urlVideo, taskUnlockRule, areTasksMigrated, isRetroactive, communityId, and isDeleted. taskUnlockRule is the TaskUnlock enum: 0 Calendar, 1 Freestyle/FreeInput, 2 Sequential, 3 Stagegate.
Required query parameters
- Name
id- Type
- integer
- Description
The community ID. Swagger marks it optional, but the service needs it to load the overview.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
- Name
500 Internal Server Error- Description
The community could not be loaded.
Request
curl -X GET https://api.babele.co/api/Community/GetOverview?id=999 \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4" \
-H "Content-Type: application/json"
Response
{
"id": 999,
"name": "Third Derivative",
"shortDescription": "Climate tech accelerator community.",
"menuLogoImage": "/Images/Uploads/community_image/YY_LOGO_201904261232564967.png",
"logoImage": "/Images/Uploads/community_image/a_treedom_logo_202411251745189244_256x256.png",
"mainImage": "/Images/Uploads/community_image/croppedimage_202411251619594145.jpg",
"communityType": 0,
"isMember": true,
"countryId": 196,
"countryName": "United States",
"city": "New York",
"methodologyId": 1,
"projectCount": 151,
"userCount": 132,
"canViewTasks": true,
"canApproveParagraph": true,
"allowTasks": true,
"methodologies": [
{
"id": 73,
"name": "Yunus & Youth",
"description": "",
"isActive": true,
"urlVideo": null,
"taskUnlockRule": 0,
"areTasksMigrated": true,
"isRetroactive": true,
"communityId": 999,
"isDeleted": false
}
],
"isProjectsTabVisible": true,
"isApplicationsTabVisible": true,
"tabOrder": null,
"permissions": {
"permissionProjectCanCreate": true,
"permissionCanApproveParagraph": true,
"permissionCanInviteToProjects": true,
"permissionCanAccessToOverviewProject": true
},
"customDns": null
}
Get a program
Fetch a single program's metadata by id: name, description, active flag, video URL, task-unlock rule, and owning community.
This action returns the full domain Methodology (not the trimmed MethodologyDto). The embedded community may be a populated Community object in real responses. If the id is not found the controller returns 200 with an empty/null body rather than a 404.
Required query parameters
- Name
id- Type
- integer
- Description
The program (methodology) ID.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
Request
curl -X GET https://api.babele.co/api/Methodology/GetMethodology?id=73 \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4" \
-H "Content-Type: application/json"
Response
{
"id": 73,
"name": "Yunus & Youth",
"description": "",
"isActive": true,
"urlVideo": null,
"taskUnlockRule": 0,
"areTasksMigrated": true,
"isRetroactive": true,
"communityId": 999,
"community": {},
"isDeleted": false
}
Create a program
Create a new program. The action returns the created Methodology (the frontend reads .id off it).
This mutation is performed over HTTP GET — a backend convention, not
REST-idiomatic. Create alone does not associate the new program with
a community; follow it with POST /api/Methodology/UpdateCommunity to
attach it.
Required query parameters
- Name
name- Type
- string
- Description
The program name.
- Name
isActive- Type
- boolean
- Description
Optional. Whether the program is active on creation.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
- Name
400 Bad Request- Description
Invalid or duplicate name (service-dependent).
Request
curl -X GET "https://api.babele.co/api/Methodology/Create?name=Climate%20Accelerator%202026&isActive=true" \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4" \
-H "Content-Type: application/json"
Response
{
"id": 2
}
Rename a program
Rename an existing program. The controller returns Ok() with an empty body.
This mutation is performed over HTTP GET — a backend convention, not
REST-idiomatic.
Required query parameters
- Name
id- Type
- integer
- Description
The program (methodology) ID to rename.
- Name
name- Type
- string
- Description
The new name.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
Request
curl -X GET "https://api.babele.co/api/Methodology/Rename?id=73&name=Yunus%20%26%20Youth%202026" \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4" \
-H "Content-Type: application/json"
Response
{}
Enable a program
Make a program active and visible (isActive = true). The frontend wrapper toggleMethodologyVisibility(id, true) calls this endpoint. The controller returns Ok() with an empty body.
This mutation is performed over HTTP GET — a backend convention, not
REST-idiomatic.
Required query parameters
- Name
id- Type
- integer
- Description
The program (methodology) ID to enable.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
Request
curl -X GET https://api.babele.co/api/Methodology/Enable?id=73 \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4" \
-H "Content-Type: application/json"
Response
{}
Disable a program
Make a program inactive and hidden (isActive = false). The frontend wrappers toggleMethodologyVisibility(id, false) and disableMethodology(id) both call this endpoint. The controller returns Ok() with an empty body.
This mutation is performed over HTTP GET — a backend convention, not
REST-idiomatic.
Required query parameters
- Name
id- Type
- integer
- Description
The program (methodology) ID to disable.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
Request
curl -X GET https://api.babele.co/api/Methodology/Disable?id=73 \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4" \
-H "Content-Type: application/json"
Response
{}
Delete a program
Permanently delete a program from a community. This is a proper DELETE and returns 204 No Content with no body.
Note the unusual route shape {communityId}/{id} directly under /api/Methodology/ with no action segment. Both segments are required.
Path parameters
- Name
communityId- Type
- integer
- Description
The owning community ID.
- Name
id- Type
- integer
- Description
The program (methodology) ID to delete.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
Request
curl -X DELETE https://api.babele.co/api/Methodology/999/73 \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4"
Duplicate a program
Duplicate an existing program (its sections and paragraphs) into a target community. Returns the new program id as a bare integer.
Request body attributes
- Name
methodologyId- Type
- integer
- Description
The source program to copy.
- Name
communityId- Type
- integer
- Description
The target community for the copy.
- Name
onlyActive- Type
- boolean
- Description
Optional (default
true). If true, copy only active sections and paragraphs. The frontend always sendstrue.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
Request
curl -X POST https://api.babele.co/api/MethodologyContent/Duplicate \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4" \
-H "Content-Type: application/json" \
-d '{"methodologyId":73,"communityId":999,"onlyActive":true}'
Response
12
Attach a program to a community
Associate a program with a community. This is used right after Create (which does not itself attach the program to a community) and by admin tooling to move or assign a program. The controller returns Ok() with an empty body.
Request body attributes
- Name
methodologyId- Type
- integer
- Description
The program (methodology) to (re)assign.
- Name
communityId- Type
- integer
- Description
The target community ID.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
Request
curl -X POST https://api.babele.co/api/Methodology/UpdateCommunity \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4" \
-H "Content-Type: application/json" \
-d '{"methodologyId":2,"communityId":999}'
Response
{}
Get a program's content tree
Fetch the full content tree of a program — its sections, each with nested paragraphs (activities). This is the program-builder content payload, and the response is Redis-cached keyed on the program id.
A MethodologyParagraph carries task fields (hasTask, taskDateStart, taskDatePublish, taskDateEnd, taskOrder, taskSendReminder), a privacyLevel, and a methodologyContentCircleList. The PrivacyLevel enum is: 0 Undefined, 1 Public, 2 Community, 3 Team, 4 Custom, 5 TeamAndMentors, 6 SetByTeam.
Required query parameters
- Name
id- Type
- integer
- Description
The program (methodology) ID.
Request
curl -X GET https://api.babele.co/api/MethodologyContent/GetMethodology?id=656
Response
[
{
"id": 13118,
"methodologyId": 656,
"methodology": {},
"name": "Section 1",
"isActive": true,
"order": 0,
"logo": "",
"isLean": false,
"isStagegated": false,
"methodologyParagraphs": [
{
"id": 13120,
"methodologyId": 656,
"methodology": {},
"methodologySectionId": 13118,
"methodologySection": {},
"name": "Activity 1",
"isActive": true,
"order": 0,
"infoText": "",
"feedbackText": null,
"defaultContent": "",
"wikiReferences": "",
"wikiProblem": null,
"wikiLinks": null,
"inTutorial": false,
"isHillary": false,
"hasTask": true,
"taskDateStart": "2024-12-24T00:00:00Z",
"taskDatePublish": "2024-12-30T00:00:00Z",
"taskDateEnd": "2024-12-30T00:00:00Z",
"taskOrder": 1,
"taskSendReminder": true,
"privacyLevel": 6,
"methodologyContentCircleList": [],
"teamCanChoosePrivacy": true
}
]
}
]
Save a section
Create or update a program section. Create vs. update is decided by id: id == 0 (or omitted) creates a new section, a non-zero id updates the existing one. Returns the saved MethodologySection with its assigned id.
Request body attributes
- Name
id- Type
- integer
- Description
0or omitted = create; non-zero = update an existing section.
- Name
methodologyId- Type
- integer
- Description
The parent program (methodology) ID.
- Name
name- Type
- string
- Description
The section title.
- Name
isActive- Type
- boolean
- Description
Whether the section is active/visible.
- Name
order- Type
- integer
- Description
Sort order within the program.
- Name
logo- Type
- string
- Description
Logo/icon path (e.g.
/Images/Uploads/...).
- Name
isLean- Type
- boolean
- Description
Marks a "lean canvas"-style section.
- Name
isStagegated- Type
- boolean
- Description
Whether the section is stage-gated.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
- Name
400 Bad Request- Description
Validation failure.
Request
curl -X POST https://api.babele.co/api/MethodologyContent/SaveSection \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4" \
-H "Content-Type: application/json" \
-d '{"id":0,"methodologyId":656,"name":"Problem & Solution","isActive":true,"order":0,"logo":"/Images/Uploads/section_logo/problem_202506281200000000.png","isLean":false,"isStagegated":false}'
Response
{
"id": 13118,
"methodologyId": 656,
"methodology": {},
"name": "Problem & Solution",
"isActive": true,
"order": 0,
"logo": "/Images/Uploads/section_logo/problem_202506281200000000.png",
"isLean": false,
"isStagegated": false,
"methodologyParagraphs": []
}
Save a paragraph
Create or update a program paragraph (activity) within a section. Create vs. update is keyed on id (id == 0 = create). Returns the saved MethodologyParagraph with its assigned id and task fields.
The task fields (hasTask, taskDate*, taskOrder, taskSendReminder) are not part of this DTO — they exist only on the response/domain paragraph and are managed via the planner & task endpoints.
Request body attributes
- Name
id- Type
- integer
- Description
0or omitted = create; non-zero = update.
- Name
methodologyId- Type
- integer
- Description
The parent program (methodology) ID.
- Name
methodologySectionId- Type
- integer
- Description
The parent section ID.
- Name
name- Type
- string
- Description
The paragraph/activity title.
- Name
isActive- Type
- boolean
- Description
Active/visible flag.
- Name
order- Type
- integer
- Description
Sort order within the section.
- Name
infoText- Type
- string
- Description
Guidance/info HTML shown to teams.
- Name
feedbackText- Type
- string
- Description
Feedback prompt text.
- Name
defaultContent- Type
- string
- Description
Pre-filled default content.
- Name
wikiReferences- Type
- string
- Description
Wiki references HTML.
- Name
wikiProblem- Type
- string
- Description
Wiki "problem" text.
- Name
wikiLinks- Type
- string
- Description
Wiki links.
- Name
inTutorial- Type
- boolean
- Description
Include in the tutorial flow.
- Name
isHillary- Type
- boolean
- Description
Internal flag (legacy toggle).
- Name
privacyLevel- Type
- integer
- Description
Default privacy for answers (
PrivacyLevelenum0–6). Nullable.
- Name
methodologyContentCircleList- Type
- array
- Description
Custom-privacy circle assignments, each
{ id, communityCircleId, methodologyContentId }. Nullable.
- Name
teamCanChoosePrivacy- Type
- boolean
- Description
Optional (default
true). Whether the team can override the privacy level.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
- Name
400 Bad Request- Description
Validation failure.
Request
curl -X POST https://api.babele.co/api/MethodologyContent/SaveParagraph \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4" \
-H "Content-Type: application/json" \
-d '{"id":0,"methodologyId":656,"methodologySectionId":13118,"name":"Define the problem","isActive":true,"order":0,"infoText":"<p>Describe the problem you are solving.</p>","privacyLevel":6,"methodologyContentCircleList":[],"teamCanChoosePrivacy":true}'
Response
{
"id": 13120,
"methodologyId": 656,
"methodology": {},
"methodologySectionId": 13118,
"methodologySection": {},
"name": "Define the problem",
"isActive": true,
"order": 0,
"infoText": "<p>Describe the problem you are solving.</p>",
"feedbackText": null,
"defaultContent": "",
"wikiReferences": "",
"wikiProblem": null,
"wikiLinks": null,
"inTutorial": false,
"isHillary": false,
"hasTask": false,
"taskDateStart": null,
"taskDatePublish": null,
"taskDateEnd": null,
"taskOrder": 0,
"taskSendReminder": false,
"privacyLevel": 6,
"methodologyContentCircleList": [],
"teamCanChoosePrivacy": true
}
Reorder sections
Persist the new ordering of sections within a program (drag-and-drop reorder). The body is an array of { id, order } pairs. The response body is empty (the swagger declares 204, the code path returns 200 with no body).
Note the lowercase methodology segment in this route — the paragraph reorder route below uses a capital M.
Path parameters
- Name
methodologyId- Type
- integer
- Description
The program whose sections are being reordered.
Request body attributes
- Name
id- Type
- integer
- Description
The section ID.
- Name
order- Type
- integer
- Description
The new zero-based position.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
Request
curl -X POST https://api.babele.co/api/MethodologyContent/UpdateSectionsOrder/methodology/656 \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4" \
-H "Content-Type: application/json" \
-d '[{"id":13118,"order":0},{"id":13119,"order":1},{"id":13120,"order":2}]'
Reorder paragraphs
Persist the new ordering of paragraphs within a program (drag-and-drop reorder). The body is an array of { id, order } pairs where id is the paragraph id. The response body is empty (the swagger declares 204, the code path returns 200 with no body).
Note the capital Methodology segment in this route — it genuinely differs from the lowercase methodology in the section reorder route above, and the frontend client mirrors this exactly.
Path parameters
- Name
methodologyId- Type
- integer
- Description
The program whose paragraphs are being reordered.
Request body attributes
- Name
id- Type
- integer
- Description
The paragraph ID.
- Name
order- Type
- integer
- Description
The new zero-based position.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
Request
curl -X POST https://api.babele.co/api/MethodologyContent/UpdateParagraphsOrder/Methodology/656 \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4" \
-H "Content-Type: application/json" \
-d '[{"id":13120,"order":0},{"id":13121,"order":1}]'
Remove a section
Delete a program section by id. The response body is empty (the swagger declares 204, the code path returns 200 with no body).
This mutation is performed over HTTP GET — a backend convention, not
REST-idiomatic.
Required query parameters
- Name
sectionId- Type
- integer
- Description
The section ID to remove.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
Request
curl -X GET https://api.babele.co/api/MethodologyContent/RemoveSection?sectionId=13118 \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4"
Remove a paragraph
Delete a program paragraph (activity) by id. The response body is empty (the swagger declares 204, the code path returns 200 with no body).
This mutation is performed over HTTP GET — a backend convention, not
REST-idiomatic.
Required query parameters
- Name
paragraphId- Type
- integer
- Description
The paragraph ID to remove.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
Request
curl -X GET https://api.babele.co/api/MethodologyContent/RemoveParagraph?paragraphId=13120 \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4"
List a program's tasks
Return the full planner/task summary for a program — its tasks plus the planner unlock rule and the retroactive flag. The response is a MethodologyTasksSummaryDto object (not a bare array).
taskUnlockRule is the TaskUnlock enum (the frontend's PlannerType): 0 Calendar, 1 Freestyle/FreeInput, 2 Sequential, 3 Stagegate.
Required query parameters
- Name
methodologyId- Type
- integer
- Description
The program whose tasks to fetch. Omitting it sends
0and yields an empty/zeroed summary.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
- Name
403 Forbidden- Description
The authorization requirement failed.
Request
curl -X GET https://api.babele.co/api/MethodologyTask/GetAll?methodologyId=656 \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4" \
-H "Content-Type: application/json"
Response
{
"methodologyId": 656,
"taskUnlockRule": 2,
"isRetroactive": true,
"tasks": [
{
"id": 13120,
"dateStart": "2024-12-24T00:00:00Z",
"datePublish": "2024-12-30T00:00:00Z",
"dateEnd": "2025-01-15T00:00:00Z",
"order": 1,
"sendReminder": true,
"title": "Define your value proposition",
"content": "<p>Describe the core problem your venture solves.</p>",
"methodologyId": 656
},
{
"id": 13121,
"dateStart": null,
"datePublish": null,
"dateEnd": null,
"order": 2,
"sendReminder": false,
"title": "Map your stakeholders",
"content": "",
"methodologyId": 656
}
]
}
Save multiple tasks
Bulk create/update planner tasks for a program (add-or-update by id; id = 0 creates a new task). The request body is a JSON array of tasks sent directly (not wrapped in an object). Returns 200 OK with the array of saved tasks, including newly assigned ids for created rows.
Request body attributes
Each element of the array is a MethodologyTaskDto:
- Name
id- Type
- integer
- Description
Task id;
0(or omitted →0) to create a new task, an existing id to update.
- Name
dateStart- Type
- string
- Description
Optional/nullable. Task start date (date-time).
- Name
datePublish- Type
- string
- Description
Optional/nullable. Date the task becomes visible/published (date-time).
- Name
dateEnd- Type
- string
- Description
Optional/nullable. Task deadline (date-time).
- Name
order- Type
- integer
- Description
Position of the task in the planner.
- Name
sendReminder- Type
- boolean
- Description
Whether to send a reminder for this task.
- Name
title- Type
- string
- Description
Optional/nullable. Task title.
- Name
content- Type
- string
- Description
Optional/nullable. Task description/body (HTML allowed).
- Name
methodologyId- Type
- integer
- Description
The owning program (methodology) id.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
- Name
403 Forbidden- Description
The authorization requirement failed.
- Name
400 Bad Request- Description
Malformed JSON body.
Request
curl -X POST https://api.babele.co/api/MethodologyTask/SaveMultiple \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4" \
-H "Content-Type: application/json" \
-d '[{"id":0,"dateStart":"2025-02-01T00:00:00Z","datePublish":"2025-02-01T00:00:00Z","dateEnd":"2025-02-28T00:00:00Z","order":3,"sendReminder":true,"title":"Build your financial model","content":"<p>Project 12 months of revenue and costs.</p>","methodologyId":656}]'
Response
[
{
"id": 13122,
"dateStart": "2025-02-01T00:00:00Z",
"datePublish": "2025-02-01T00:00:00Z",
"dateEnd": "2025-02-28T00:00:00Z",
"order": 3,
"sendReminder": true,
"title": "Build your financial model",
"content": "<p>Project 12 months of revenue and costs.</p>",
"methodologyId": 656
}
]
Set the task unlock rule
Set the planner type / task-unlocking behavior for a program. Note this action lives on MethodologyController (not MethodologyTaskController), and the UnLock capitalization in the route matters. Returns 200 OK with no response body.
Request body attributes
- Name
methodologyId- Type
- integer
- Description
The program (methodology) to update.
- Name
taskUnlockRule- Type
- integer
- Description
The new planner rule (
TaskUnlockenum):0Calendar,1Freestyle/FreeInput,2Sequential,3Stagegate.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
- Name
403 Forbidden- Description
The authorization requirement failed.
- Name
400 Bad Request- Description
Malformed body.
Request
curl -X POST https://api.babele.co/api/Methodology/UpdateTaskUnLockRule \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4" \
-H "Content-Type: application/json" \
-d '{"methodologyId":656,"taskUnlockRule":2}'
List projects enrolled in a program
List the projects enrolled in (following) a program. Returns a 200 OK with an array of projects; the frontend coerces a null body to [].
Required query parameters
- Name
methodologyId- Type
- integer
- Description
The program (methodology) whose enrolled projects to list.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
Request
curl -X GET https://api.babele.co/api/Project/GetByMethodology?methodologyId=73 \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4" \
-H "Content-Type: application/json"
Response
[
{
"id": 1714,
"name": "Project 1"
},
{
"id": 1715,
"name": "Project 2"
}
]
Get a program's KPI definitions
List the KPI definitions configured for a program, optionally scoped to a project. Returns 200 OK with an array of KpiDefinition (or [] when there are none; the frontend coerces null → []).
KPI frequency is a plain integer = months between data points: 1 Monthly, 4 Quarterly, 12 Yearly.
Required query parameters
- Name
methodologyId- Type
- integer
- Description
The program to list KPI definitions for.
- Name
projectId- Type
- integer
- Description
Optional. If provided, narrows results to KPIs for that project.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
- Name
403 Forbidden- Description
The authorization requirement failed.
Request
curl -X GET https://api.babele.co/api/KpiDefinition/GetByMethodology?methodologyId=73 \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4" \
-H "Content-Type: application/json"
Response
[
{
"id": 274,
"methodologyId": 73,
"name": "Number of beneficiaries reached",
"frequency": 1,
"isBiggerBetter": true,
"enabled": true,
"startingYear": 2023,
"startingMonth": 6,
"isRemoved": false,
"comesFromSurvey": false,
"projectId": null,
"project": {},
"methodology": {
"id": 73,
"name": "Yunus & Youth",
"description": "",
"isActive": true,
"urlVideo": null,
"taskUnlockRule": 0,
"areTasksMigrated": true,
"isRetroactive": true,
"communityId": 999,
"community": {},
"isDeleted": false
}
}
]
Save a KPI definition
Create or update a single KPI definition. Send id: 0 (or omit) to create; an existing id to update. Per the controller, the response is a bare integer = the saved KPI definition's id.
Request body attributes
- Name
id- Type
- integer
- Description
KPI id;
0to create, an existing id to update.
- Name
methodologyId- Type
- integer
- Description
Owning program (methodology). Nullable for project-scoped KPIs.
- Name
name- Type
- string
- Description
KPI display name.
- Name
frequency- Type
- integer
- Description
Reporting cadence in months:
1Monthly,4Quarterly,12Yearly.
- Name
isBiggerBetter- Type
- boolean
- Description
Whether a higher value is a better result.
- Name
enabled- Type
- boolean
- Description
Whether the KPI is active.
- Name
startingYear- Type
- integer
- Description
First reporting year.
- Name
startingMonth- Type
- integer
- Description
First reporting month (1–12).
- Name
isRemoved- Type
- boolean
- Description
Soft-delete flag (normally
false).
- Name
projectId- Type
- integer
- Description
Optional. Set for project-level KPIs.
- Name
comesFromSurvey- Type
- boolean
- Description
Optional (default
false). True if the KPI originates from a survey.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
- Name
403 Forbidden- Description
The authorization requirement failed.
- Name
400 Bad Request- Description
Invalid body.
Request
curl -X POST https://api.babele.co/api/KpiDefinition/Save \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4" \
-H "Content-Type: application/json" \
-d '{"id":0,"methodologyId":73,"name":"Number of beneficiaries reached","frequency":1,"isBiggerBetter":true,"enabled":true,"startingYear":2023,"startingMonth":6,"isRemoved":false,"projectId":null,"comesFromSurvey":false}'
Response
274
Remove a KPI definition
Delete a KPI definition by id. The controller echoes back the deleted id as a bare integer.
This mutation is performed over HTTP GET — a backend convention, not
REST-idiomatic.
Required query parameters
- Name
id- Type
- integer
- Description
The KPI definition id to remove.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
- Name
403 Forbidden- Description
The authorization requirement failed.
Request
curl -X GET https://api.babele.co/api/KpiDefinition/Remove?id=274 \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4"
Response
274
Download the KPI report (CSV)
Download a CSV export of KPI values for a program, with projects laid out per column. This is a file download, not JSON. On success the controller returns the CSV with Content-Type: application/octet-stream and a Content-Disposition attachment filename KpiReport.csv.
If there is no data the controller returns a 200 OK with an empty body (no file) rather than a 404. A sibling endpoint GET /api/KpiReport/GetByMethodologyProjectsPerLine exists for the per-line layout.
Required query parameters
- Name
methodologyId- Type
- integer
- Description
The program whose KPI report to export.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
- Name
403 Forbidden- Description
The authorization requirement failed.
Request
curl -X GET https://api.babele.co/api/KpiReport/GetByMethodology?methodologyId=73 \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4" \
-o KpiReport.csv
Response
KPI,Project Alpha,Project Beta
Number of beneficiaries reached - 2023/06,120,80
Number of beneficiaries reached - 2023/07,135,95
