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. 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 id query 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 CommunityType enum: 0 Public, 1 Private, 2 Hybrid.

  • 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 null when 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 methodologies array items below.

  • Name
    isProjectsTabVisible
    Type
    boolean
    Description

    Whether the Projects tab is shown. null means "use the platform default".

  • Name
    isApplicationsTabVisible
    Type
    boolean
    Description

    Whether the Applications tab is shown. null means "use the platform default".

  • Name
    tabOrder
    Type
    string
    Description

    A stored ordering string for the community tabs, or null when 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. null when the caller has no circle in this community. See the permissions object below.

  • Name
    customDns
    Type
    object
    Description

    The community's custom-DNS configuration, or null when none is configured. See the customDns object below.

  • Name
    communitySkillCategories
    Type
    array
    Description

    The skill categories enabled for this community, sorted by name. See the communitySkillCategories array 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 TaskUnlock enum controlling how planner tasks unlock: 0 Calendar, 1 Freestyle, 2 Sequential, 3 Stagegate.

  • Name
    areTasksMigrated
    Type
    boolean
    Description

    true once 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 the id query parameter, so its fields repeat the community settings returned at the root of this response. See the methodologies[].community object below.

  • Name
    isDeleted
    Type
    boolean
    Description

    Soft-delete flag. Always false here — 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 id at 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 null here.

  • 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 UserInvitationPolicy enum: 0 Undefined, 1 Anyone, 2 OnlyPlatformUsers, 3 OnlyCommunityUsers, 4 None.

  • Name
    userJoinCommunitySetting
    Type
    integer
    Description

    The UserJoinCommunitySetting enum: 0 JoinWithoutApproval, 1 JoinWithApproval, 2 JoinWithInvitation.

  • 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 TaskUnlock value, superseded by the per-program taskUnlockRule.

  • 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 CommunityProject enrolment rows. Always null here.

  • Name
    defaultProjectFilterTag
    Type
    string
    Description

    Tag pre-selected in the project filter.

  • Name
    developmentStageType
    Type
    integer
    Description

    The DevelopmentStageTypes enum: 0 None, 1 Default, 2 CustomType.

  • Name
    hasSurveysEnabled
    Type
    boolean
    Description

    Whether the surveys feature is enabled.

  • Name
    surveys
    Type
    array
    Description

    The community's surveys. Always null here.

  • Name
    methodologyIds
    Type
    array
    Description

    Computed. The IDs of every program owned by the community, including deleted ones.

  • Name
    hasToDisplayMenuLogo
    Type
    boolean
    Description

    Computed. true when menuLogoImage is 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. null when 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 null when 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

GET
/api/Community/GetOverview?id={id}
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/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 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. Always null here. Use communityId with GET /api/Community/GetOverview to 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 true is possible.

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

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

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.

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 true when 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 name query parameter.

Possible errors

  • Name
    401 Unauthorized
    Description

    The request is not authenticated.

  • Name
    400 Bad Request
    Description

    Invalid or duplicate name.

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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-H "Content-Type: application/json"

Response

{
"id": 2,
"name": "Climate Accelerator 2026"
}

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

Rename a program

Rename an existing program. Returns 200 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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-H "Content-Type: application/json"

Response

{}

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

Enable a program

Make a program active and visible (isActive = true). Returns 200 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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-H "Content-Type: application/json"

Response

{}

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

Disable a program

Make a program inactive and hidden (isActive = false). Returns 200 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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-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.

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

DELETE
/api/Methodology/{communityId}/{id}
curl -X DELETE https://api.babele.co/api/Methodology/999/73 \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN"

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.

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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-H "Content-Type: application/json" \
-d '{"methodologyId":73,"communityId":999,"onlyActive":true}'

Response

12

POST/api/Methodology/UpdateCommunity

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

POST
/api/Methodology/UpdateCommunity
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/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 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 null on this endpoint. Fetch it with GET /api/Methodology/GetMethodology?id={methodologyId}.

  • Name
    name
    Type
    string
    Description

    The section title.

  • Name
    isActive
    Type
    boolean
    Description

    Whether the section is active. Always true here — 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 methodologyParagraphs array 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 null on this endpoint.

  • Name
    name
    Type
    string
    Description

    The paragraph/activity title.

  • Name
    isActive
    Type
    boolean
    Description

    Whether the paragraph is active. Always true here — 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 content by 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. 0 when there is no task.

  • Name
    taskSendReminder
    Type
    boolean
    Description

    Whether a reminder is sent for the task.

  • Name
    privacyLevel
    Type
    integer
    Description

    The PrivacyLevel enum for answers to this paragraph, or null when unset.

  • Name
    methodologyContentCircleList
    Type
    array
    Description

    The community circles that may see answers when privacyLevel is 4 (Custom). See the methodologyParagraphs[].methodologyContentCircleList array items below.

  • Name
    teamCanChoosePrivacy
    Type
    boolean
    Description

    Whether a project team may override privacyLevel for 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. null when the row is unassigned.

  • Name
    communityCircle
    Type
    object
    Description

    The CommunityCircle itself. Always null on this endpoint.

Request

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

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.

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

    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

    Accepted but ignored — the section is always saved with true. Use RemoveSection to 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: true also auto-creates a single matching paragraph, which comes back in methodologyParagraphs.

  • 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. null for a newly created section, except when isLean is true — 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

POST
/api/MethodologyContent/SaveSection
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
}

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

    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

    Accepted but ignored — the paragraph is always saved with true. Use RemoveParagraph to 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 (PrivacyLevel enum 06). Nullable. Circle assignments only take effect for 4 (Custom).

  • Name
    methodologyContentCircleList
    Type
    array
    Description

    Custom-privacy circle assignments. Nullable — when null the block is skipped entirely and existing assignments are left untouched. When supplied, it replaces every existing assignment for the paragraph. See the methodologyContentCircleList array 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 0 for new entries.

  • Name
    communityCircleId
    Type
    integer
    Description

    The community circle allowed to see answers to this paragraph. Entries with a null communityCircleId are 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; 0 when 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.

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

POST
/api/MethodologyContent/SaveParagraph
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
}

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 (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

POST
/api/MethodologyContent/UpdateSectionsOrder/methodology/{methodologyId}
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}]'

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 (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

POST
/api/MethodologyContent/UpdateParagraphsOrder/Methodology/{methodologyId}
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}]'

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

Remove a section

Delete a program section by id. The response body is empty (swagger declares 204; the response is 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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN"

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

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

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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN"

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: 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 a 500.

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 the tasks array items below.

  • Name
    taskUnlockRule
    Type
    integer
    Description

    The TaskUnlock enum controlling how tasks unlock: 0 Calendar, 1 Freestyle, 2 Sequential, 3 Stagegate.

  • 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

    methodologyId was omitted, sent as 0, or names a program that does not exist. The body carries error: "NullReferenceException".

Request

GET
/api/MethodologyTask/GetAll?methodologyId={methodologyId}
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
}

POST/api/MethodologyTask/SaveMultiple

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.

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-zero order (error: "MethodologyTaskInvalidOrderException"), or is empty (error: "InvalidOperationException").

Request

POST
/api/MethodologyTask/SaveMultiple
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
}
]

POST/api/Methodology/UpdateTaskUnLockRule

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 (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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-H "Content-Type: application/json" \
-d '{"methodologyId":656,"taskUnlockRule":2}'

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

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.

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 communityId you 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

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

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.

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 projectId lookup below; when projectId is 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 communityId load-bearing: the caller must be an administrator of that community for the project, and only community-project-scoped definitions belonging to communityId are 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. null for 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: 1 monthly, 4 quarterly, 12 yearly.

  • 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 false here — removed definitions are filtered out of every read.

  • Name
    communityProjectId
    Type
    integer
    Description

    The community-project enrolment this KPI is scoped to. null for program-level definitions. Mutually exclusive with projectId.

  • Name
    communityProject
    Type
    object
    Description

    The community-project enrolment identified by communityProjectId. Populated on this endpoint; null for program-level definitions. See the communityProject object below.

  • Name
    projectId
    Type
    integer
    Description

    Legacy project-level scope. null unless the definition belongs to a single standalone project. Mutually exclusive with communityProjectId.

  • Name
    project
    Type
    object
    Description

    Always null on this endpoint. Use projectId and fetch the project separately.

  • Name
    methodology
    Type
    object
    Description

    Always null on this endpoint. Use methodologyId and fetch the program separately.

  • Name
    comesFromSurvey
    Type
    boolean
    Description

    Whether the KPI originates from a survey. Always false on reads — the field is accepted on write but never persisted.

  • Name
    isProjectScoped
    Type
    boolean
    Description

    Read-only. true when the definition is scoped to a legacy standalone project (projectId set, communityProjectId not).

  • Name
    isCommunityProjectScoped
    Type
    boolean
    Description

    Read-only. true when the definition is scoped to a community-project enrolment (communityProjectId set, projectId not).

  • Name
    isMethodologyTemplate
    Type
    boolean
    Description

    Read-only. true when the definition is a program-level template (neither projectId nor communityProjectId set).

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 null here. Use communityId.

  • Name
    projectId
    Type
    integer
    Description

    The global project id of the enrolled project.

  • Name
    project
    Type
    object
    Description

    Always null here. Use projectId.

  • 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: 0 Open, 1 InviteOnly, 2 Private.

  • Name
    projectForm
    Type
    object
    Description

    Always null here. Use projectFormId.

  • Name
    projectFormId
    Type
    integer
    Description

    The application form the project was admitted through, when there is one.

  • Name
    projectMethodologies
    Type
    array
    Description

    Always null here — the project's program enrolments are not returned.

  • Name
    projectCommunityCircleList
    Type
    array
    Description

    Always null here — the project's community circles are not returned.

  • Name
    projectCommunityUserCircleTagList
    Type
    array
    Description

    Always null here — the project's circle tags are not returned.

  • Name
    surveyKPIs
    Type
    array
    Description

    Always null here — the enrolment's survey-backed KPIs are not returned. Note the casing: surveyKPIs, not surveyKpis.

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 projectId is supplied — of that community's copy of the project.

Request

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

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

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

    Legacy standalone-project scope. Send null unless the KPI belongs to a single project outside any community enrolment. Mutually exclusive with communityProjectId.

  • Name
    communityProjectId
    Type
    integer
    Description

    The community-project enrolment this KPI is scoped to. Set it — together with the communityProject object below — for a KPI that belongs to one project inside one community. Send null for a program-level KPI. Mutually exclusive with projectId.

  • Name
    communityProject
    Type
    object
    Description

    Required whenever communityProjectId is set. Send the enrolment's communityId and projectId in it — those values scope and authorize the save. Omit it (or send null) for program-level and legacy project-level KPIs. See the communityProject object (request) below.

  • Name
    comesFromSurvey
    Type
    boolean
    Description

    Optional (default false). Accepted but never stored — the field is not persisted, and reads always return false.

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 — projectId and communityProjectId were both set, a project-scoped definition was given a methodologyId, or none of methodologyId, projectId and communityProjectId was supplied. The body carries error: "InvalidKpiDefinitionScopeException" or error: "BadHttpRequestException". Also returned when communityProjectId is set but the communityProject object is omitted.

Request

POST
/api/KpiDefinition/Save
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

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

Remove a KPI definition

Delete a KPI definition by id. Returns 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 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN"

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

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