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. Endpoints on this page are called as
an authenticated user (in practice, a community administrator), sending 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. Responses are cached per community id.
Each entry in methodologies[] is a Methodology object, described under the methodologies array items below. Deleted programs are filtered out of this list, so isDeleted is always false here.
Required query parameters
- Name
id- Type
- integer
- Description
The community ID. Swagger marks it optional, but it is required in practice. Omitting it resolves to no community and fails with a
500.
Response attributes
The response carries the community's full overview. Only the fields shown in the example are listed here; the response also includes further per-tab visibility and permission flags.
- Name
id- Type
- integer
- Description
The community ID. Same value as the
idquery parameter.
- Name
name- Type
- string
- Description
The community name.
- Name
shortDescription- Type
- string
- Description
A one-line summary of the community.
- Name
menuLogoImage- Type
- string
- Description
Path to the small logo shown in the navigation menu.
- Name
logoImage- Type
- string
- Description
Path to the community logo.
- Name
mainImage- Type
- string
- Description
Path to the community cover image.
- Name
communityType- Type
- integer
- Description
The
CommunityTypeenum:0Public,1Private,2Hybrid.
- Name
isMember- Type
- boolean
- Description
Whether the calling user is an approved member of the community.
- Name
countryId- Type
- integer
- Description
The country ID of the community, or
nullwhen unset.
- Name
countryName- Type
- string
- Description
The country name.
- Name
city- Type
- string
- Description
The community's city.
- Name
methodologyId- Type
- integer
- Description
The community's default program (methodology) ID.
- Name
projectCount- Type
- integer
- Description
Number of projects in the community.
- Name
userCount- Type
- integer
- Description
Number of users in the community.
- Name
canViewTasks- Type
- boolean
- Description
Whether the caller may see the program task list. Requires the community to allow tasks and the caller to be an approved community admin.
- Name
canApproveParagraph- Type
- boolean
- Description
Whether the caller's circle grants paragraph approval.
- Name
allowTasks- Type
- boolean
- Description
Whether the planner/task feature is enabled for the community.
- Name
methodologies- Type
- array
- Description
The community's programs (methodologies), excluding deleted ones. See the
methodologiesarray items below.
- Name
isProjectsTabVisible- Type
- boolean
- Description
Whether the Projects tab is shown.
nullmeans "use the platform default".
- Name
isApplicationsTabVisible- Type
- boolean
- Description
Whether the Applications tab is shown.
nullmeans "use the platform default".
- Name
tabOrder- Type
- string
- Description
A stored ordering string for the community tabs, or
nullwhen the default order applies. This is a plain string, not an object.
- Name
permissions- Type
- object
- Description
The permissions granted to the caller by their community circle.
nullwhen the caller has no circle in this community. See thepermissionsobject below.
- Name
customDns- Type
- object
- Description
The community's custom-DNS configuration, or
nullwhen none is configured. See thecustomDnsobject below.
- Name
communitySkillCategories- Type
- array
- Description
The skill categories enabled for this community, sorted by name. See the
communitySkillCategoriesarray items below.
methodologies array items
- Name
id- Type
- integer
- Description
The program (methodology) ID.
- Name
name- Type
- string
- Description
The program name.
- Name
description- Type
- string
- Description
The program description. An empty string when unset.
- Name
isActive- Type
- boolean
- Description
Whether the program is active and visible.
- Name
urlVideo- Type
- string
- Description
URL of the program's intro video, or
null.
- Name
taskUnlockRule- Type
- integer
- Description
The
TaskUnlockenum controlling how planner tasks unlock:0Calendar,1Freestyle,2Sequential,3Stagegate.
- Name
areTasksMigrated- Type
- boolean
- Description
trueonce legacy community tasks have been folded into the program's paragraphs.
- Name
isRetroactive- Type
- boolean
- Description
Whether edits to this program are applied retroactively to projects already following it.
- Name
communityId- Type
- integer
- Description
The community that owns the program.
- Name
community- Type
- object
- Description
The owning
Community. It is always the same community identified by theidquery parameter, so its fields repeat the community settings returned at the root of this response. See themethodologies[].communityobject below.
- Name
isDeleted- Type
- boolean
- Description
Soft-delete flag. Always
falsehere — deleted programs are filtered out of this list.
methodologies[].community object
The Community object. Its tags, custom-DNS record, invite links and methodology list are omitted from the payload; the remaining members are:
- Name
id- Type
- integer
- Description
The community ID. Always equal to the
idat the root of this response.
- Name
name- Type
- string
- Description
The community name.
- Name
shortDescription- Type
- string
- Description
One-line summary.
- Name
description- Type
- string
- Description
Long description / about text.
- Name
menuLogoImage- Type
- string
- Description
Menu logo path.
- Name
logoImage- Type
- string
- Description
Logo path.
- Name
mainImage- Type
- string
- Description
Cover image path.
- Name
signupImage- Type
- string
- Description
Sign-up page image path.
- Name
countryId- Type
- integer
- Description
Country ID.
- Name
country- Type
- object
- Description
The country object. Always
nullhere.
- Name
city- Type
- string
- Description
City.
- Name
creationDate- Type
- string
- Description
ISO-8601 date-time the community was created.
- Name
canProjectsCreateAditionalCirclesToCustomizePrivacy- Type
- boolean
- Description
Whether projects may create extra privacy circles.
- Name
canProjectsInviteMembersAndMentorsFromOutside- Type
- boolean
- Description
Whether projects may invite people from outside the platform.
- Name
canProjectsInviteMembersAndMentorsFromPlatform- Type
- boolean
- Description
Whether projects may invite existing platform users.
- Name
projectsUserInvitationPolicy- Type
- integer
- Description
The
UserInvitationPolicyenum:0Undefined,1Anyone,2OnlyPlatformUsers,3OnlyCommunityUsers,4None.
- Name
userJoinCommunitySetting- Type
- integer
- Description
The
UserJoinCommunitySettingenum:0JoinWithoutApproval,1JoinWithApproval,2JoinWithInvitation.
- Name
hideParagraphsUntilDate- Type
- boolean
- Description
Whether paragraphs stay hidden until their task start date.
- Name
allowTasks- Type
- boolean
- Description
Whether the planner/task feature is enabled.
- Name
taskUnlockRule_ToBeRemoved- Type
- integer
- Description
Legacy community-level
TaskUnlockvalue, superseded by the per-programtaskUnlockRule.
- Name
deadline- Type
- string
- Description
ISO-8601 community-wide deadline, or
null.
- Name
hasLockTags- Type
- boolean
- Description
Whether project tags are locked.
- Name
projectsTabLiteral- Type
- string
- Description
Custom label for the Projects tab.
- Name
businessModelTabLiteral- Type
- string
- Description
Custom label for the business-model tab.
- Name
isHomeTabVisible- Type
- boolean
- Description
Whether the Home tab is shown;
null= platform default.
- Name
isProjectsTabVisible- Type
- boolean
- Description
Whether the Projects tab is shown;
null= platform default.
- Name
isForumTabVisible- Type
- boolean
- Description
Whether the Forum tab is shown;
null= platform default.
- Name
isRequestsTabVisible- Type
- boolean
- Description
Whether the Requests tab is shown;
null= platform default.
- Name
isMembersTabVisible- Type
- boolean
- Description
Whether the Members tab is shown;
null= platform default.
- Name
isEventsTabVisible- Type
- boolean
- Description
Whether the Events tab is shown;
null= platform default.
- Name
isAboutTabVisible- Type
- boolean
- Description
Whether the About tab is shown;
null= platform default.
- Name
isResourcesTabVisible- Type
- boolean
- Description
Whether the Resources tab is shown;
null= platform default.
- Name
isDnsTabVisible- Type
- boolean
- Description
Whether the DNS settings tab is shown;
null= platform default.
- Name
isApplicationsTabVisible- Type
- boolean
- Description
Whether the Applications tab is shown;
null= platform default.
- Name
tabOrder- Type
- string
- Description
Stored tab ordering string.
- Name
isSDGsVisible- Type
- boolean
- Description
Whether project SDGs are shown.
- Name
isWebSiteUrlVisible- Type
- boolean
- Description
Whether the website URL field is shown.
- Name
isFacebookUrlVisible- Type
- boolean
- Description
Whether the Facebook URL field is shown.
- Name
isLinkedinUrlVisible- Type
- boolean
- Description
Whether the LinkedIn URL field is shown.
- Name
isDevelopmentStageVisible- Type
- boolean
- Description
Whether the development-stage field is shown.
- Name
isUserSDGsVisible- Type
- boolean
- Description
Whether user SDGs are shown.
- Name
isProjectHomeVisible- Type
- boolean
- Description
Whether the project Home tab is shown.
- Name
isProjectProgramVisible- Type
- boolean
- Description
Whether the project Program tab is shown.
- Name
isProjectCoachingVisible- Type
- boolean
- Description
Whether the project Coaching tab is shown.
- Name
isProjectKpiVisible- Type
- boolean
- Description
Whether the project KPI tab is shown.
- Name
isProjectDiscussionsVisible- Type
- boolean
- Description
Whether the project Discussions tab is shown.
- Name
isProjectResourcesVisible- Type
- boolean
- Description
Whether the project Resources tab is shown.
- Name
isProjectNetworkVisible- Type
- boolean
- Description
Whether the project Network tab is shown.
- Name
isProjectInviteToMeetingVisible- Type
- boolean
- Description
Whether "invite to meeting" is shown on projects.
- Name
isProjectScheduleMeetingVisible- Type
- boolean
- Description
Whether "schedule meeting" is shown on projects.
- Name
isMapVisible- Type
- boolean
- Description
Whether the community map is shown.
- Name
projectCount- Type
- integer
- Description
Cached number of projects.
- Name
userCount- Type
- integer
- Description
Cached number of users.
- Name
resourceCount- Type
- integer
- Description
Cached number of resources.
- Name
isCreateProjectsLocked- Type
- boolean
- Description
Whether project creation is locked.
- Name
signUpMail- Type
- string
- Description
Address used as the sender for sign-up mail.
- Name
externalInvitedMail- Type
- string
- Description
Address used as the sender for external invitations.
- Name
googleCalendarId- Type
- string
- Description
The linked Google Calendar ID.
- Name
isCalendarSynchronized- Type
- boolean
- Description
Whether a calendar integration is connected.
- Name
hasMeetingProvider- Type
- boolean
- Description
Whether a meeting provider is connected.
- Name
termsAndConditionLink- Type
- string
- Description
URL of the community terms and conditions.
- Name
hasLandingPage- Type
- boolean
- Description
Whether the community has a public landing page.
- Name
isNewFrontendEnabled- Type
- boolean
- Description
Whether the community is served by the new frontend.
- Name
communityProjects- Type
- array
- Description
The
CommunityProjectenrolment rows. Alwaysnullhere.
- Name
defaultProjectFilterTag- Type
- string
- Description
Tag pre-selected in the project filter.
- Name
developmentStageType- Type
- integer
- Description
The
DevelopmentStageTypesenum:0None,1Default,2CustomType.
- Name
hasSurveysEnabled- Type
- boolean
- Description
Whether the surveys feature is enabled.
- Name
surveys- Type
- array
- Description
The community's surveys. Always
nullhere.
- Name
methodologyIds- Type
- array
- Description
Computed. The IDs of every program owned by the community, including deleted ones.
- Name
hasToDisplayMenuLogo- Type
- boolean
- Description
Computed.
truewhenmenuLogoImageis set.
permissions object
Members of the community's admin circle get every flag set to true regardless of the stored circle values. When the caller has no circle in the community the whole object is null.
- Name
permissionRequestCanViewAllAndInviteAdvisor- Type
- boolean
- Description
Whether the caller may see all mentorship requests and invite advisors.
nullwhen the circle leaves it unset.
- Name
permissionProjectCanCreate- Type
- boolean
- Description
Whether the caller may create projects in this community.
- Name
permissionCanApproveParagraph- Type
- boolean
- Description
Whether the caller may approve project paragraphs.
- Name
permissionCanInviteToProjects- Type
- boolean
- Description
Whether the caller may invite users to projects.
- Name
permissionCanAccessToOverviewProject- Type
- boolean
- Description
Whether the caller may open the admin project overview.
- Name
permissionCanBeInvitedAsCoach- Type
- boolean
- Description
Whether the caller can be invited as a coach.
- Name
permissionCanCoachTeamMembers- Type
- boolean
- Description
Whether the caller may coach team members.
- Name
permissionCanPostOnHome- Type
- boolean
- Description
Whether the caller may post on the community home feed.
- Name
permissionCanCreateForumDiscussion- Type
- boolean
- Description
Whether the caller may start forum discussions.
- Name
permissionCanUploadResources- Type
- boolean
- Description
Whether the caller may upload community resources.
- Name
permissionCanOrganiseEvents- Type
- boolean
- Description
Whether the caller may create community events.
customDns object
- Name
id- Type
- integer
- Description
The custom-DNS record ID.
- Name
communityId- Type
- integer
- Description
The community the record belongs to.
- Name
host- Type
- string
- Description
The custom host serving the legacy frontend, for example
community.example.org.
- Name
mailAddress- Type
- string
- Description
The From address used for mail sent from this custom domain.
- Name
newFrontendHost- Type
- string
- Description
The custom host serving the new frontend, or
nullwhen the new frontend is not mapped.
communitySkillCategories array items
- Name
id- Type
- integer
- Description
The community-skill-category link ID.
- Name
communityId- Type
- integer
- Description
The community the category is enabled for.
- Name
skillCategoryId- Type
- integer
- Description
The platform skill-category ID.
- Name
name- Type
- string
- Description
The skill category name. An empty string when the underlying category has no name.
- Name
isVisible- Type
- boolean
- Description
Whether the category is shown in this community.
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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-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": 73,
"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,
"community": {
"id": 999,
"name": "Third Derivative",
"shortDescription": "Climate tech accelerator community.",
"description": "<p>Third Derivative connects climate tech startups with corporates and investors.</p>",
"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",
"signupImage": null,
"countryId": 196,
"country": null,
"city": "New York",
"creationDate": "2019-04-26T12:32:56Z",
"canProjectsCreateAditionalCirclesToCustomizePrivacy": true,
"canProjectsInviteMembersAndMentorsFromOutside": true,
"canProjectsInviteMembersAndMentorsFromPlatform": true,
"projectsUserInvitationPolicy": 1,
"userJoinCommunitySetting": 1,
"hideParagraphsUntilDate": false,
"allowTasks": true,
"taskUnlockRule_ToBeRemoved": 0,
"deadline": null,
"hasLockTags": false,
"projectsTabLiteral": null,
"businessModelTabLiteral": null,
"isHomeTabVisible": true,
"isProjectsTabVisible": true,
"isForumTabVisible": true,
"isRequestsTabVisible": true,
"isMembersTabVisible": true,
"isEventsTabVisible": true,
"isAboutTabVisible": true,
"isResourcesTabVisible": true,
"isDnsTabVisible": false,
"isApplicationsTabVisible": true,
"tabOrder": null,
"isSDGsVisible": true,
"isWebSiteUrlVisible": true,
"isFacebookUrlVisible": false,
"isLinkedinUrlVisible": true,
"isDevelopmentStageVisible": true,
"isUserSDGsVisible": true,
"isProjectHomeVisible": true,
"isProjectProgramVisible": true,
"isProjectCoachingVisible": true,
"isProjectKpiVisible": true,
"isProjectDiscussionsVisible": true,
"isProjectResourcesVisible": true,
"isProjectNetworkVisible": true,
"isProjectInviteToMeetingVisible": true,
"isProjectScheduleMeetingVisible": true,
"isMapVisible": true,
"projectCount": 151,
"userCount": 132,
"resourceCount": 47,
"isCreateProjectsLocked": false,
"signUpMail": "hello@thirdderivative.org",
"externalInvitedMail": "invites@thirdderivative.org",
"googleCalendarId": null,
"isCalendarSynchronized": false,
"hasMeetingProvider": false,
"termsAndConditionLink": "https://thirdderivative.org/terms",
"hasLandingPage": true,
"isNewFrontendEnabled": true,
"communityProjects": null,
"defaultProjectFilterTag": null,
"developmentStageType": 1,
"hasSurveysEnabled": true,
"surveys": null,
"methodologyIds": [
73
],
"hasToDisplayMenuLogo": true
},
"isDeleted": false
}
],
"isProjectsTabVisible": true,
"isApplicationsTabVisible": true,
"tabOrder": null,
"permissions": {
"permissionRequestCanViewAllAndInviteAdvisor": true,
"permissionProjectCanCreate": true,
"permissionCanApproveParagraph": true,
"permissionCanInviteToProjects": true,
"permissionCanAccessToOverviewProject": true,
"permissionCanBeInvitedAsCoach": true,
"permissionCanCoachTeamMembers": true,
"permissionCanPostOnHome": true,
"permissionCanCreateForumDiscussion": true,
"permissionCanUploadResources": true,
"permissionCanOrganiseEvents": true
},
"customDns": {
"id": 14,
"communityId": 999,
"host": "community.thirdderivative.org",
"mailAddress": "no-reply@thirdderivative.org",
"newFrontendHost": "app.thirdderivative.org"
},
"communitySkillCategories": [
{
"id": 88,
"communityId": 999,
"skillCategoryId": 12,
"name": "Climate & Energy",
"isVisible": true
},
{
"id": 89,
"communityId": 999,
"skillCategoryId": 19,
"name": "Fundraising",
"isVisible": true
}
]
}
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 Methodology (not the trimmed MethodologyDto). Programs are looked up by id alone; communityId appears only in the response. If the id is not found the response is 200 with an empty/null body rather than a 404.
Required query parameters
- Name
id- Type
- integer
- Description
The program (methodology) ID.
Response attributes
The response is a Methodology object — the same shape as the methodologies array items described under Get a community's program list above. Two values differ on this endpoint:
- Name
community- Type
- object
- Description
The owning
Community. Alwaysnullhere. UsecommunityIdwithGET /api/Community/GetOverviewto fetch the community.
- Name
isDeleted- Type
- boolean
- Description
Soft-delete flag. Unlike the community program list, this endpoint does not filter soft-deleted programs, so
trueis possible.
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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-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": null,
"isDeleted": false
}
Create a program
Create a new program. The action returns a trimmed ProjectFrameworkDto carrying only id and name — not the full Methodology. The other fields are set server-side to their defaults: description is "", taskUnlockRule is 0 (Calendar), and areTasksMigrated and isRetroactive are both true.
This mutation is performed over HTTP GET — a backend convention, not
REST-idiomatic. Create does not attach the new program to the
community you are working in. Follow it with POST /api/Methodology/UpdateCommunity to move it to the community that should
own it — that call is refused once projects already use the program.
Required query parameters
- Name
name- Type
- string
- Description
The program name.
Optional query parameters
- Name
isActive- Type
- boolean
- Description
Whether the program is active on creation. Defaults to
truewhen omitted.
Response attributes
- Name
id- Type
- integer
- Description
The ID assigned to the newly created program.
- Name
name- Type
- string
- Description
The program name, echoed back from the
namequery parameter.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
- Name
400 Bad Request- Description
Invalid or duplicate name.
Request
curl -X GET "https://api.babele.co/api/Methodology/Create?name=Climate%20Accelerator%202026&isActive=true" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-H "Content-Type: application/json"
Response
{
"id": 2,
"name": "Climate Accelerator 2026"
}
Rename a program
Rename an existing program. Returns 200 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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-H "Content-Type: application/json"
Response
{}
Enable a program
Make a program active and visible (isActive = true). Returns 200 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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-H "Content-Type: application/json"
Response
{}
Disable a program
Make a program inactive and hidden (isActive = false). Returns 200 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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-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.
The route is {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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN"
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.
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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-H "Content-Type: application/json" \
-d '{"methodologyId":73,"communityId":999,"onlyActive":true}'
Response
12
Attach a program to a community
Reassign a program to a community. Use it after Create to attach the new program to the community that should own it, or to move an existing program to a different community. The move is refused once projects already follow the program. Returns 200 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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-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 responses are cached per 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.
Only active sections are returned, and each carries only its active paragraphs. Sections are not returned in a guaranteed order, so sort client-side on order.
Required query parameters
- Name
id- Type
- integer
- Description
The program (methodology) ID.
Response attributes
The response is a JSON array of MethodologySection objects.
- Name
id- Type
- integer
- Description
The section ID.
- Name
methodologyId- Type
- integer
- Description
The program this section belongs to.
- Name
methodology- Type
- object
- Description
The owning program. Always
nullon this endpoint. Fetch it withGET /api/Methodology/GetMethodology?id={methodologyId}.
- Name
name- Type
- string
- Description
The section title.
- Name
isActive- Type
- boolean
- Description
Whether the section is active. Always
truehere — inactive sections are filtered out.
- Name
order- Type
- integer
- Description
Zero-based sort position of the section within the program.
- Name
logo- Type
- string
- Description
Path to the section icon, or an empty string when none is set.
- Name
isLean- Type
- boolean
- Description
Whether this is a "lean canvas"-style section. Creating one auto-creates a single matching paragraph.
- Name
isStagegated- Type
- boolean
- Description
Whether the section is stage-gated.
- Name
methodologyParagraphs- Type
- array
- Description
The section's active paragraphs (activities), ordered as stored. See the
methodologyParagraphsarray items below.
methodologyParagraphs array items
A paragraph also declares a methodologySection back-reference to its parent section. It is never returned, so use methodologySectionId instead.
- Name
id- Type
- integer
- Description
The paragraph (activity) ID.
- Name
methodologyId- Type
- integer
- Description
The program this paragraph belongs to.
- Name
methodology- Type
- object
- Description
The owning program. Always
nullon this endpoint.
- Name
name- Type
- string
- Description
The paragraph/activity title.
- Name
isActive- Type
- boolean
- Description
Whether the paragraph is active. Always
truehere — inactive paragraphs are filtered out.
- Name
order- Type
- integer
- Description
Zero-based sort position within the section.
- Name
methodologySectionId- Type
- integer
- Description
The parent section ID.
- Name
infoText- Type
- string
- Description
Guidance HTML shown to teams working on this activity.
- Name
feedbackText- Type
- string
- Description
Feedback prompt text, or
null.
- Name
defaultContent- Type
- string
- Description
Content pre-filled into a project's answer for this paragraph. Also surfaced as
contentby the planner endpoints.
- Name
wikiReferences- Type
- string
- Description
Wiki references HTML.
- Name
wikiProblem- Type
- string
- Description
Wiki "problem" text, or
null.
- Name
wikiLinks- Type
- string
- Description
Wiki links, or
null.
- Name
inTutorial- Type
- boolean
- Description
Whether the paragraph is part of the guided tutorial flow.
- Name
isHillary- Type
- boolean
- Description
Legacy toggle.
- Name
hasTask- Type
- boolean
- Description
Whether a planner task is attached to this paragraph.
- Name
taskDateStart- Type
- string
- Description
ISO-8601 date-time the task starts, or
null.
- Name
taskDatePublish- Type
- string
- Description
ISO-8601 date-time the task becomes visible, or
null.
- Name
taskDateEnd- Type
- string
- Description
ISO-8601 task deadline, or
null.
- Name
taskOrder- Type
- integer
- Description
Position of the task in the planner.
0when there is no task.
- Name
taskSendReminder- Type
- boolean
- Description
Whether a reminder is sent for the task.
- Name
privacyLevel- Type
- integer
- Description
The
PrivacyLevelenum for answers to this paragraph, ornullwhen unset.
- Name
methodologyContentCircleList- Type
- array
- Description
The community circles that may see answers when
privacyLevelis4(Custom). See themethodologyParagraphs[].methodologyContentCircleListarray items below.
- Name
teamCanChoosePrivacy- Type
- boolean
- Description
Whether a project team may override
privacyLevelfor its own answer.
methodologyParagraphs[].methodologyContentCircleList array items
Each element also declares a methodologyParagraph back-reference to the enclosing paragraph; it is never returned, so use methodologyParagraphId.
- Name
id- Type
- integer
- Description
The circle-assignment ID.
- Name
methodologyParagraphId- Type
- integer
- Description
The paragraph the assignment belongs to.
- Name
communityCircleId- Type
- integer
- Description
The community circle allowed to see answers to this paragraph.
nullwhen the row is unassigned.
- Name
communityCircle- Type
- object
- Description
The
CommunityCircleitself. Alwaysnullon this endpoint.
This is a different shape from the request-side
methodologyContentCircleList documented under Save a paragraph below. The
response uses methodologyParagraphId; the request uses
methodologyContentId.
Request
curl -X GET https://api.babele.co/api/MethodologyContent/GetMethodology?id=656 \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-H "Content-Type: application/json"
Response
[
{
"id": 13118,
"methodologyId": 656,
"methodology": null,
"name": "Section 1",
"isActive": true,
"order": 0,
"logo": "",
"isLean": false,
"isStagegated": false,
"methodologyParagraphs": [
{
"id": 13120,
"methodologyId": 656,
"methodology": null,
"name": "Activity 1",
"isActive": true,
"order": 0,
"methodologySectionId": 13118,
"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": [
{
"id": 907,
"methodologyParagraphId": 13120,
"communityCircleId": 4041,
"communityCircle": null
},
{
"id": 908,
"methodologyParagraphId": 13120,
"communityCircleId": 4042,
"communityCircle": null
}
],
"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.
The community is never sent — it is derived server-side from methodologyId. The caller must be an administrator of the community that owns the program.
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
Accepted but ignored — the section is always saved with
true. UseRemoveSectionto deactivate a section.
- 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. Creating one with
isLean: truealso auto-creates a single matching paragraph, which comes back inmethodologyParagraphs.
- Name
isStagegated- Type
- boolean
- Description
Whether the section is stage-gated.
Response attributes
The response is a MethodologySection — the same shape as the content-tree array items described under Get a program's content tree above. Two members are not part of the request body:
- Name
methodology- Type
- object
- Description
The owning program. Not part of the request body and not guaranteed to be populated; rely on
methodologyId.
- Name
methodologyParagraphs- Type
- array
- Description
The section's paragraphs.
nullfor a newly created section, except whenisLeanistrue— one matching paragraph is then auto-created and returned here.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
- Name
400 Bad Request- Description
Validation failure.
- Name
500 Internal Server Error- Description
The caller is not an administrator of the program's community. The body carries
error: "MethodologyCannotBeEditedException".
Request
curl -X POST https://api.babele.co/api/MethodologyContent/SaveSection \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-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": null,
"name": "Problem & Solution",
"isActive": true,
"order": 0,
"logo": "/Images/Uploads/section_logo/problem_202506281200000000.png",
"isLean": false,
"isStagegated": false,
"methodologyParagraphs": null
}
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 appear only on the returned paragraph and are managed via the planner & task endpoints.
The community is never sent — it is derived server-side from methodologyId, and the caller must be an administrator of the community that owns the program.
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
Accepted but ignored — the paragraph is always saved with
true. UseRemoveParagraphto deactivate a paragraph.
- 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
Legacy toggle.
- Name
privacyLevel- Type
- integer
- Description
Default privacy for answers (
PrivacyLevelenum0–6). Nullable. Circle assignments only take effect for4(Custom).
- Name
methodologyContentCircleList- Type
- array
- Description
Custom-privacy circle assignments. Nullable — when
nullthe block is skipped entirely and existing assignments are left untouched. When supplied, it replaces every existing assignment for the paragraph. See themethodologyContentCircleListarray items (request) below.
- Name
teamCanChoosePrivacy- Type
- boolean
- Description
Optional (default
true). Whether the team can override the privacy level.
methodologyContentCircleList array items (request)
- Name
id- Type
- integer
- Description
The circle-assignment ID. Ignored on write — every existing assignment for the paragraph is deleted and the submitted list is re-inserted. Send
0for new entries.
- Name
communityCircleId- Type
- integer
- Description
The community circle allowed to see answers to this paragraph. Entries with a
nullcommunityCircleIdare skipped and never persisted.
- Name
methodologyContentId- Type
- integer
- Description
The paragraph the assignment belongs to. Ignored on write — the assignment always attaches to the paragraph being saved.
Response attributes
The response is a MethodologyParagraph — the same shape as the methodologyParagraphs array items described under Get a program's content tree above. Members that exist on the response but not in the request DTO:
- Name
methodology- Type
- object
- Description
The owning program. Not part of the request body and not guaranteed to be populated; rely on
methodologyId.
- Name
hasTask- Type
- boolean
- Description
Whether a planner task is attached. Managed by the planner endpoints, not by this call.
- Name
taskDateStart- Type
- string
- Description
ISO-8601 task start, or
null.
- Name
taskDatePublish- Type
- string
- Description
ISO-8601 task publish date, or
null.
- Name
taskDateEnd- Type
- string
- Description
ISO-8601 task deadline, or
null.
- Name
taskOrder- Type
- integer
- Description
Task position in the planner;
0when there is no task.
- Name
taskSendReminder- Type
- boolean
- Description
Whether a reminder is sent for the task.
The response also declares a methodologySection back-reference to the parent section. It is not part of the request body and is not returned as a populated object — rely on methodologySectionId.
The response's methodologyContentCircleList uses a different element
shape from the request. Each returned element is
{ id, methodologyParagraphId, communityCircleId, communityCircle } — see
the methodologyParagraphs[].methodologyContentCircleList array items under
Get a program's content tree above. Note methodologyParagraphId on the way
out versus methodologyContentId on the way in.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
- Name
400 Bad Request- Description
Validation failure.
- Name
500 Internal Server Error- Description
The caller is not an administrator of the program's community. The body carries
error: "MethodologyCannotBeEditedException".
Request
curl -X POST https://api.babele.co/api/MethodologyContent/SaveParagraph \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-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":4,"methodologyContentCircleList":[{"id":0,"communityCircleId":4041,"methodologyContentId":13120},{"id":0,"communityCircleId":4042,"methodologyContentId":13120}],"teamCanChoosePrivacy":true}'
Response
{
"id": 13120,
"methodologyId": 656,
"methodology": null,
"name": "Define the problem",
"isActive": true,
"order": 0,
"methodologySectionId": 13118,
"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": 4,
"methodologyContentCircleList": [
{
"id": 907,
"methodologyParagraphId": 13120,
"communityCircleId": 4041,
"communityCircle": null
},
{
"id": 908,
"methodologyParagraphId": 13120,
"communityCircleId": 4042,
"communityCircle": null
}
],
"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 (swagger declares 204; the response is 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
The body is a JSON array sent directly (not wrapped in an object). Each element is an OrderBaseDto:
- Name
id- Type
- integer
- Description
The section ID.
- Name
order- Type
- integer
- Description
The new zero-based position.
The new order is applied only to the active sections of the program whose id appears in the array. Sections you leave out keep their current order, and ids that do not belong to the program are silently ignored. When the program is isRetroactive, the reorder is propagated to every project already following it.
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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-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 (swagger declares 204; the response is 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.
Path parameters
- Name
methodologyId- Type
- integer
- Description
The program whose paragraphs are being reordered.
Request body attributes
The body is a JSON array sent directly (not wrapped in an object). Each element is an OrderBaseDto:
- Name
id- Type
- integer
- Description
The paragraph ID.
- Name
order- Type
- integer
- Description
The new zero-based position.
The reorder covers every active paragraph of the whole program, not just one section, so a single call can reorder paragraphs across every section. Only ids present in the array are touched. When the program is isRetroactive, the new order is pushed to projects already following it.
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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-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 (swagger declares 204; the response is 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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN"
Remove a paragraph
Delete a program paragraph (activity) by id. The response body is empty (swagger declares 204; the response is 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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN"
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: 0 Calendar, 1 Freestyle/FreeInput, 2 Sequential, 3 Stagegate.
Required query parameters
- Name
methodologyId- Type
- integer
- Description
The program whose tasks to fetch. Required — omitting it (or sending
0) makes the request fail with a500.
Response attributes
- Name
methodologyId- Type
- integer
- Description
The program the summary belongs to. Echoes the query parameter.
- Name
tasks- Type
- array
- Description
The program's planner tasks, sorted by
order. Only paragraphs with a task attached appear here; a program with no tasks returns[]. See thetasksarray items below.
- Name
taskUnlockRule- Type
- integer
- Description
The
TaskUnlockenum controlling how tasks unlock:0Calendar,1Freestyle,2Sequential,3Stagegate.
- Name
isRetroactive- Type
- boolean
- Description
Whether task edits are applied retroactively to projects already following the program.
tasks array items
- Name
id- Type
- integer
- Description
The task ID. This is the ID of the underlying program paragraph (activity).
- Name
dateStart- Type
- string
- Description
ISO-8601 date-time the task starts, or
null.
- Name
datePublish- Type
- string
- Description
ISO-8601 date-time the task becomes visible to teams, or
null.
- Name
dateEnd- Type
- string
- Description
ISO-8601 task deadline, or
null.
- Name
order- Type
- integer
- Description
Position of the task in the planner.
- Name
sendReminder- Type
- boolean
- Description
Whether a reminder is sent for this task.
- Name
title- Type
- string
- Description
The task title. Taken from the paragraph's
name.
- Name
content- Type
- string
- Description
The task description (HTML allowed). Taken from the paragraph's
defaultContent.
- Name
methodologyId- Type
- integer
- Description
The owning program ID.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
- Name
403 Forbidden- Description
The authorization requirement failed.
- Name
500 Internal Server Error- Description
methodologyIdwas omitted, sent as0, or names a program that does not exist. The body carrieserror: "NullReferenceException".
Request
curl -X GET https://api.babele.co/api/MethodologyTask/GetAll?methodologyId=656 \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-H "Content-Type: application/json"
Response
{
"methodologyId": 656,
"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
}
],
"taskUnlockRule": 2,
"isRetroactive": true
}
Save multiple tasks
Attach or update planner task data on program paragraphs in bulk. The request body is a JSON array of tasks sent directly (not wrapped in an object). The community is never sent — the scope is derived from methodologyId, and the caller must be an administrator of that program's community.
This endpoint cannot create paragraphs. It walks the program's existing
active paragraphs and updates only those whose id matches a submitted
element — setting hasTask to true on any it touches — so an element with
id: 0, or any id that is not an active paragraph of the program, is a
silent no-op. Every element must carry the same methodologyId.
Request body attributes
Each element of the array is a MethodologyTaskDto — the same shape as the tasks array items described under List a program's tasks above.
Only id, dateStart, datePublish, dateEnd, order and sendReminder are read on write. title and content are accepted but ignored: they are echoed back from the paragraph's existing name and defaultContent, and this call cannot change them — use POST /api/MethodologyContent/SaveParagraph for that.
Response attributes
The response is a JSON array whose elements have the same shape as the request elements.
It is not "the tasks you saved": the response carries every active paragraph of the program, including paragraphs with no task attached — so the array is normally longer than the one you sent, and it is not sorted by order.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
- Name
403 Forbidden- Description
The caller is not an administrator of the program's community.
- Name
400 Bad Request- Description
Malformed JSON body.
- Name
500 Internal Server Error- Description
The array mixes more than one
methodologyId(error: "MethodologyTaskInvalidMethodologyIdsException"), repeats a non-zeroorder(error: "MethodologyTaskInvalidOrderException"), or is empty (error: "InvalidOperationException").
Request
curl -X POST https://api.babele.co/api/MethodologyTask/SaveMultiple \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-H "Content-Type: application/json" \
-d '[{"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}]'
Response
[
{
"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": 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 the UnLock capitalization in the route — it 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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-H "Content-Type: application/json" \
-d '{"methodologyId":656,"taskUnlockRule":2}'
List projects enrolled in a program
List the projects enrolled in (following) a program within one community. Returns a 200 OK with an array of projects; treat a null body as an empty list.
The list covers the community's enrolments only, so it also excludes disabled enrolments, disabled projects, and projects that have not been fully created yet — drafts and pending applications never appear.
communityId is required, but omitting it does not produce an error. A
missing value is treated as 0, matches no enrolment, and the endpoint
returns 200 OK with an empty array. An unexpectedly empty list is almost
always a missing communityId.
Required query parameters
- Name
methodologyId- Type
- integer
- Description
The program (methodology) whose enrolled projects to list.
- Name
communityId- Type
- integer
- Description
The community whose enrolment of the program to list. Required — omitting it matches no enrolments and returns an empty array rather than an error.
Response attributes
The response is a JSON array of projects.
- Name
id- Type
- integer
- Description
The global project id. Combine it with the
communityIdyou queried to address the project inside this community.
- Name
name- Type
- string
- Description
The project's name.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
Request
curl -X GET "https://api.babele.co/api/Project/GetByMethodology?methodologyId=73&communityId=999" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-H "Content-Type: application/json"
Response
[
{
"id": 1714,
"name": "Clean Water Initiative"
},
{
"id": 1715,
"name": "Solar for Schools"
}
]
Get a program's KPI definitions
List the KPI definitions configured for a program, optionally extended with one project's own definitions. Returns 200 OK with an array of KpiDefinition (or [] when there are none; treat a null body as an empty list).
KPI frequency is a plain integer = months between data points: 1 Monthly, 4 Quarterly, 12 Yearly.
The program's template definitions come first, then the project's definitions are appended when projectId is supplied. Soft-deleted definitions are filtered out of every read, so isRemoved is always false here.
communityId is required by the signature, but what it does depends on
projectId. Omit projectId and communityId has no effect at all —
the program's definitions are authorized against the program's own
community, and the response is identical with or without it. Supply
projectId and communityId becomes load-bearing: the caller must be an
administrator of that community's copy of the project, and only
community-project-scoped definitions belonging to that communityId are
appended. Always send communityId alongside projectId: omitting it
fails the administrator check with a 403.
Required query parameters
- Name
methodologyId- Type
- integer
- Description
The program to list KPI definitions for.
- Name
communityId- Type
- integer
- Description
The community the program belongs to. Required by the signature. It is used to scope the
projectIdlookup below; whenprojectIdis omitted it has no effect on the result.
Optional query parameters
- Name
projectId- Type
- integer
- Description
When supplied, the project's own KPI definitions are appended to the program's. Supplying it also makes
communityIdload-bearing: the caller must be an administrator of that community for the project, and only community-project-scoped definitions belonging tocommunityIdare returned.
Response attributes
The response is a JSON array of KpiDefinition objects.
- Name
id- Type
- integer
- Description
The KPI definition's id.
- Name
methodologyId- Type
- integer
- Description
The program this KPI belongs to.
nullfor definitions scoped to a single project instead of a program.
- Name
name- Type
- string
- Description
The KPI's display name.
- Name
frequency- Type
- integer
- Description
Reporting cadence in months:
1monthly,4quarterly,12yearly.
- Name
isBiggerBetter- Type
- boolean
- Description
Whether a higher reported value is the better result.
- Name
enabled- Type
- boolean
- Description
Whether the KPI is currently collected.
- 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. Always
falsehere — removed definitions are filtered out of every read.
- Name
communityProjectId- Type
- integer
- Description
The community-project enrolment this KPI is scoped to.
nullfor program-level definitions. Mutually exclusive withprojectId.
- Name
communityProject- Type
- object
- Description
The community-project enrolment identified by
communityProjectId. Populated on this endpoint;nullfor program-level definitions. See thecommunityProjectobject below.
- Name
projectId- Type
- integer
- Description
Legacy project-level scope.
nullunless the definition belongs to a single standalone project. Mutually exclusive withcommunityProjectId.
- Name
project- Type
- object
- Description
Always
nullon this endpoint. UseprojectIdand fetch the project separately.
- Name
methodology- Type
- object
- Description
Always
nullon this endpoint. UsemethodologyIdand fetch the program separately.
- Name
comesFromSurvey- Type
- boolean
- Description
Whether the KPI originates from a survey. Always
falseon reads — the field is accepted on write but never persisted.
- Name
isProjectScoped- Type
- boolean
- Description
Read-only.
truewhen the definition is scoped to a legacy standalone project (projectIdset,communityProjectIdnot).
- Name
isCommunityProjectScoped- Type
- boolean
- Description
Read-only.
truewhen the definition is scoped to a community-project enrolment (communityProjectIdset,projectIdnot).
- Name
isMethodologyTemplate- Type
- boolean
- Description
Read-only.
truewhen the definition is a program-level template (neitherprojectIdnorcommunityProjectIdset).
communityProject object
The CommunityProject enrolment row. Its scalar members are populated; every nested object and collection on it is null.
- Name
id- Type
- integer
- Description
The community-project enrolment id — the same value as the KPI's
communityProjectId.
- Name
communityId- Type
- integer
- Description
The community the project is enrolled in.
- Name
community- Type
- object
- Description
Always
nullhere. UsecommunityId.
- Name
projectId- Type
- integer
- Description
The global project id of the enrolled project.
- Name
project- Type
- object
- Description
Always
nullhere. UseprojectId.
- Name
isApproved- Type
- boolean
- Description
Whether the project's membership of the community has been approved.
- Name
isDisabled- Type
- boolean
- Description
Whether the enrolment has been disabled.
- Name
privacyLevel- Type
- integer
- Description
The enrolment's privacy level:
0Open,1InviteOnly,2Private.
- Name
projectForm- Type
- object
- Description
Always
nullhere. UseprojectFormId.
- Name
projectFormId- Type
- integer
- Description
The application form the project was admitted through, when there is one.
- Name
projectMethodologies- Type
- array
- Description
Always
nullhere — the project's program enrolments are not returned.
- Name
projectCommunityCircleList- Type
- array
- Description
Always
nullhere — the project's community circles are not returned.
- Name
projectCommunityUserCircleTagList- Type
- array
- Description
Always
nullhere — the project's circle tags are not returned.
- Name
surveyKPIs- Type
- array
- Description
Always
nullhere — the enrolment's survey-backed KPIs are not returned. Note the casing:surveyKPIs, notsurveyKpis.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
- Name
403 Forbidden- Description
The caller is not an administrator of the program's community, or — when
projectIdis supplied — of that community's copy of the project.
Request
curl -X GET "https://api.babele.co/api/KpiDefinition/GetByMethodology?methodologyId=73&communityId=999&projectId=1714" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-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,
"communityProjectId": null,
"communityProject": null,
"projectId": null,
"project": null,
"methodology": null,
"comesFromSurvey": false,
"isProjectScoped": false,
"isCommunityProjectScoped": false,
"isMethodologyTemplate": true
},
{
"id": 275,
"methodologyId": null,
"name": "Litres of safe water delivered",
"frequency": 4,
"isBiggerBetter": true,
"enabled": true,
"startingYear": 2026,
"startingMonth": 1,
"isRemoved": false,
"communityProjectId": 5821,
"communityProject": {
"id": 5821,
"communityId": 999,
"community": null,
"projectId": 1714,
"project": null,
"isApproved": true,
"isDisabled": false,
"privacyLevel": 0,
"projectForm": null,
"projectFormId": 312,
"projectMethodologies": null,
"projectCommunityCircleList": null,
"projectCommunityUserCircleTagList": null,
"surveyKPIs": null
},
"projectId": null,
"project": null,
"methodology": null,
"comesFromSurvey": false,
"isProjectScoped": false,
"isCommunityProjectScoped": true,
"isMethodologyTemplate": false
}
]
Save a KPI definition
Create or update a single KPI definition. Send id: 0 (or omit) to create; an existing id to update. The response is a bare integer — the saved KPI definition's id.
A KPI definition has exactly one scope, and the scope decides which fields you send. For a program template, send methodologyId greater than 0 with projectId and communityProjectId both null. For a community-project KPI, send communityProjectId and the nested communityProject object with projectId: null (methodologyId may be null or a program id). For a legacy standalone project KPI, send projectId with methodologyId and communityProjectId both null. Any other combination is rejected.
Save is a full overwrite, not a patch. Every property of the body is
written to the stored definition, so a field you omit is saved as its JSON
default (null / 0 / false). Always send the complete definition when
updating.
Send "projectId": null, never "projectId": 0, for a program-level KPI.
Validation treats projectId as present whenever the key appears at all, so
0 marks the definition project-scoped and collides with a non-zero
methodologyId. methodologyId, by contrast, only counts as present when
it is greater than 0.
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).
nullfor 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
Legacy standalone-project scope. Send
nullunless the KPI belongs to a single project outside any community enrolment. Mutually exclusive withcommunityProjectId.
- Name
communityProjectId- Type
- integer
- Description
The community-project enrolment this KPI is scoped to. Set it — together with the
communityProjectobject below — for a KPI that belongs to one project inside one community. Sendnullfor a program-level KPI. Mutually exclusive withprojectId.
- Name
communityProject- Type
- object
- Description
Required whenever
communityProjectIdis set. Send the enrolment'scommunityIdandprojectIdin it — those values scope and authorize the save. Omit it (or sendnull) for program-level and legacy project-level KPIs. See thecommunityProjectobject (request) below.
- Name
comesFromSurvey- Type
- boolean
- Description
Optional (default
false). Accepted but never stored — the field is not persisted, and reads always returnfalse.
communityProject object (request)
- Name
id- Type
- integer
- Description
The community-project enrolment id. Send the same value as
communityProjectId.
- Name
communityId- Type
- integer
- Description
The community the project is enrolled in. Used to authorize the save.
- Name
projectId- Type
- integer
- Description
The global project id of the enrolled project. Used to authorize the save.
The request body also accepts project and methodology objects. Do not send them — use projectId and methodologyId instead.
Response attributes
The response body is a bare JSON integer — the saved KPI definition's id. On a create this is the newly generated id, not the 0 you sent; on an update it is the id you sent.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
- Name
403 Forbidden- Description
The caller is not an administrator of the program's community (or, for a community-project-scoped KPI, of that community's copy of the project).
- Name
400 Bad Request- Description
Malformed JSON body.
- Name
500 Internal Server Error- Description
The scope is invalid —
projectIdandcommunityProjectIdwere both set, a project-scoped definition was given amethodologyId, or none ofmethodologyId,projectIdandcommunityProjectIdwas supplied. The body carrieserror: "InvalidKpiDefinitionScopeException"orerror: "BadHttpRequestException". Also returned whencommunityProjectIdis set but thecommunityProjectobject is omitted.
Request
curl -X POST https://api.babele.co/api/KpiDefinition/Save \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-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,"communityProjectId":null,"comesFromSurvey":false}'
Response
274
Remove a KPI definition
Delete a KPI definition by id. Returns 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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN"
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 CSV is returned with Content-Type: application/octet-stream and a Content-Disposition attachment filename KpiReport.csv.
If there is no data the response is 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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-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
