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".

GET/api/Community/GetOverview?id={id}

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

GET
/api/Community/GetOverview?id={id}

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/api/Methodology/GetMethodology?id={id}

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

GET
/api/Methodology/GetMethodology?id={id}

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
}

GET/api/Methodology/Create?name={name}

Create a program

Create a new program. The action returns the created Methodology (the frontend reads .id off 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

GET
/api/Methodology/Create?name={name}

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
}

GET/api/Methodology/Rename?id={id}&name={name}

Rename a program

Rename an existing program. The controller returns Ok() with an empty body.

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

GET
/api/Methodology/Rename?id={id}&name={name}

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


{}

GET/api/Methodology/Enable?id={id}

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.

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

GET
/api/Methodology/Enable?id={id}

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


{}

GET/api/Methodology/Disable?id={id}

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.

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

GET
/api/Methodology/Disable?id={id}

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/api/Methodology/{communityId}/{id}

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

DELETE
/api/Methodology/{communityId}/{id}

curl -X DELETE https://api.babele.co/api/Methodology/999/73 \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4"


POST/api/MethodologyContent/Duplicate

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 sends true.

Possible errors

  • Name
    401 Unauthorized
    Description

    The request is not authenticated.

Request

POST
/api/MethodologyContent/Duplicate

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


POST/api/Methodology/UpdateCommunity

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

POST
/api/Methodology/UpdateCommunity

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/api/MethodologyContent/GetMethodology?id={id}

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

GET
/api/MethodologyContent/GetMethodology?id={id}

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
}
]
}
]


POST/api/MethodologyContent/SaveSection

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

    0 or 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

POST
/api/MethodologyContent/SaveSection

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": []
}


POST/api/MethodologyContent/SaveParagraph

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

    0 or 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 (PrivacyLevel enum 06). 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

POST
/api/MethodologyContent/SaveParagraph

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
}


POST/api/MethodologyContent/UpdateSectionsOrder/methodology/{methodologyId}

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

POST
/api/MethodologyContent/UpdateSectionsOrder/methodology/{methodologyId}

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}]'

POST/api/MethodologyContent/UpdateParagraphsOrder/Methodology/{methodologyId}

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

POST
/api/MethodologyContent/UpdateParagraphsOrder/Methodology/{methodologyId}

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}]'


GET/api/MethodologyContent/RemoveSection?sectionId={sectionId}

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).

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

GET
/api/MethodologyContent/RemoveSection?sectionId={sectionId}

curl -X GET https://api.babele.co/api/MethodologyContent/RemoveSection?sectionId=13118 \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4"

GET/api/MethodologyContent/RemoveParagraph?paragraphId={paragraphId}

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).

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

GET
/api/MethodologyContent/RemoveParagraph?paragraphId={paragraphId}

curl -X GET https://api.babele.co/api/MethodologyContent/RemoveParagraph?paragraphId=13120 \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4"


GET/api/MethodologyTask/GetAll?methodologyId={methodologyId}

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 0 and 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

GET
/api/MethodologyTask/GetAll?methodologyId={methodologyId}

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
}
]
}


POST/api/MethodologyTask/SaveMultiple

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

POST
/api/MethodologyTask/SaveMultiple

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
}
]


POST/api/Methodology/UpdateTaskUnLockRule

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 (TaskUnlock enum): 0 Calendar, 1 Freestyle/FreeInput, 2 Sequential, 3 Stagegate.

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

POST
/api/Methodology/UpdateTaskUnLockRule

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}'

GET/api/Project/GetByMethodology?methodologyId={methodologyId}

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

GET
/api/Project/GetByMethodology?methodologyId={methodologyId}

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/api/KpiDefinition/GetByMethodology?methodologyId={methodologyId}

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

GET
/api/KpiDefinition/GetByMethodology?methodologyId={methodologyId}

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
}
}
]

POST/api/KpiDefinition/Save

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; 0 to 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: 1 Monthly, 4 Quarterly, 12 Yearly.

  • 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

POST
/api/KpiDefinition/Save

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

GET/api/KpiDefinition/Remove?id={id}

Remove a KPI definition

Delete a KPI definition by id. The controller echoes back the deleted id as a bare integer.

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

GET
/api/KpiDefinition/Remove?id={id}

curl -X GET https://api.babele.co/api/KpiDefinition/Remove?id=274 \
-H "Authorization: Bearer eyJhbGcgwgwe7gfwgwZZVCJ9.eyJTdWJqZWN0IjoiN2ZkMjc4YmUtMzA1Zi00ZWExLWJmODItNTQ5Yjg0NDBiM2E5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiYjE5ZDE0NWYtZDZiZC00Y2U5LTljYTQtYjFlOTgzNmRhODlhIiwidXBuIjoiNDAxMTQ0IiwiaHR0cDovL2JhYmVsZS5jby9jbGFpbXMvcGxhdGZvcm1hZG1pbmNsYWltIjoiRmFsc2UiLCJodHRwOi8vYmFiZWxlLmNvL2NsYWltcy9sb2dpbnJlcXFWFWGFQFsc2UiLCJuYmYiOjE3NDMyNjA0MDcsImV4cCI6MTc0Mzg2NTIwNywiaWF0IjoxNzQzMjYwNDA3fQ.K34301vGXSvFQC-5ypvDbfEr-L-uX57zw6GBjNa3sT4"

Response


274

GET/api/KpiReport/GetByMethodology?methodologyId={methodologyId}

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

GET
/api/KpiReport/GetByMethodology?methodologyId={methodologyId}

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