Projects
On this page, we'll dive into the different projects endpoints you can use to fetch projects programmatically, and to update a project's profile and its answers to the community's project form.
List projects
This endpoint allows you to retrieve a paginated list of all your community's projects, together with the permission flags that describe what the calling user may do with them and the filter facets you can build a project browser from.
communityId is required. Every query this endpoint runs is scoped to that
one community and the caller must be able to access it — there is no
"all communities" mode. Omitting it deserializes to 0, which resolves to
no community and fails the access check instead of returning a
cross-community listing.
Request body attributes
- Name
communityId- Type
- integer
- Description
Required. The ID of the community whose projects you want to list. The caller must be an approved member of that community.
- Name
skip- Type
- integer
- Description
The number of projects to skip. Defaults to
0. Pending projects are only returned whenskipis0.
- Name
take- Type
- integer
- Description
The maximum number of projects to return.
0— the default — returns every match. The filter also acceptspageSizeas an alias, which is only applied whentakeis absent or0.
- Name
concept- Type
- string
- Description
Free-text search across the project name and intro text. When it is set, full-text ranking replaces
orderBy.
- Name
orderBy- Type
- integer
- Description
Sort order, sent as an integer:
0name A→Z,1most recently created,2most viewed,3most commented,4most members,5most recently updated. Ignored whenconceptis set.
- Name
countryFilter- Type
- object
- Description
Restricts the list by country. Described under
countryFilterobject below.
- Name
sdgFilter- Type
- object
- Description
Restricts the list by UN Sustainable Development Goal. Same shape as
countryFilter, withvaluesholding goal IDs.
- Name
industryFilter- Type
- object
- Description
Restricts the list by industry category. Same shape as
countryFilter, withvaluesholding category IDs.
- Name
programFilter- Type
- object
- Description
Restricts the list by program (methodology). Same shape as
countryFilter, withvaluesholding program IDs.
- Name
developmentStageFilter- Type
- object
- Description
Restricts the list by development stage. Same shape as
countryFilter, exceptvaluesis an array of stage key strings.
- Name
tagFilter- Type
- object
- Description
Restricts the list by project tag. Same shape as
countryFilter, exceptvaluesis an array of tag names.
- Name
filters- Type
- array
- Description
Restricts the list by the answers projects gave on the community's project form. Described under
filtersarray items below.
The filter object also carries followedProjectIds and
approvedProjectsIdsInFollowedCommunities. Neither is honoured here: the
server overwrites followedProjectIds with the projects the calling user
actually follows, and approvedProjectsIdsInFollowedCommunities is only
read by the sibling cross-community project list. There is no need to send
them.
countryFilter object
The same two fields back countryFilter, sdgFilter, industryFilter, programFilter, developmentStageFilter and tagFilter. Each filter is ignored when its values array is absent or empty.
- Name
filterType- Type
- integer
- Description
How to apply
values, sent as an integer:0keeps projects matching any of the values,1excludes projects matching any of them.
- Name
values- Type
- array of integer
- Description
The IDs to match.
developmentStageFilterandtagFiltertake an array of strings here instead — stage keys and tag names respectively.
filters array items
- Name
filterType- Type
- integer
- Description
0keeps projects whose answer is any ofanswers,1excludes them.
- Name
question- Type
- string
- Description
The exact question text from the community's project form, as returned in
projectFilters.filters[].question.
- Name
answers- Type
- array of string
- Description
The answer values to match, as returned in
projectFilters.filters[].answers.
Response attributes
- Name
canCreateProjects- Type
- boolean
- Description
Whether the calling user may create a project in this community.
truefor an approved community member whose community circle grants the create-project permission.
- Name
canInviteToProjects- Type
- boolean
- Description
Whether the calling user may invite other people to projects in this community.
- Name
canApproveParagraph- Type
- boolean
- Description
Whether the calling user may approve project paragraphs submitted for review in this community.
- Name
isCreateProjectsLocked- Type
- boolean
- Description
Whether project creation is currently locked at community level. When
true, nobody can create a project even ifcanCreateProjectsistrue.
- Name
canAccessToOverviewProject- Type
- boolean
- Description
Whether the calling user may open the community's project-overview (tracking) screens.
- Name
pendingProjects- Type
- array
- Description
Projects awaiting approval into this community. Only returned to community administrators, and only on the first page — a
skipof0. An empty array otherwise. Described underpendingProjectsarray items below.
- Name
projects- Type
- object
- Description
The paginated result set of approved projects. Described under
projectsobject below.
- Name
projectFilters- Type
- object
- Description
The filter facets available for this community's project list, derived from every project that matched the request rather than from the current page. Described under
projectFiltersobject below.
pendingProjects array items
The elements of pendingProjects and of projects.list share this shape.
- Name
isFollowing- Type
- boolean
- Description
Whether the calling user follows this project — that is, holds an approved project membership in any circle.
- Name
canEditProjectInfo- Type
- boolean
- Description
Whether the calling user may edit this project's information. Equivalent to being an approved member of the project's Team circle.
- Name
projectTags- Type
- array of string
- Description
The project's tag names, de-duplicated. Empty when the project has no tags.
- Name
projectSustainableDevelopmentGoals- Type
- array
- Description
The UN Sustainable Development Goals linked to the project. Described under
projectSustainableDevelopmentGoalsarray items below. Always empty forpendingProjects.
- Name
isProjectTeamMember- Type
- boolean
- Description
Whether the calling user is an approved member of the project's Team circle. Always mirrors
canEditProjectInfo.
- Name
id- Type
- integer
- Description
The ID of the project.
- Name
name- Type
- string
- Description
The project name.
- Name
description- Type
- string
- Description
The project's short description.
- Name
logoImage- Type
- string
- Description
Server-relative path to the project logo image.
- Name
isVideo- Type
- boolean
- Description
Whether
mainImageOrVideopoints at a video rather than an image.
- Name
websiteUrl- Type
- string
- Description
The project's external website, or an empty string when none is set.
- Name
mainImageOrVideo- Type
- string
- Description
Server-relative path to the project's hero image, or the video URL when
isVideoistrue. An empty string when none is set.
- Name
countryName- Type
- string
- Description
The name of the project's country.
- Name
city- Type
- string
- Description
The project's city.
- Name
latitude- Type
- number | null
- Description
The project's latitude in decimal degrees.
nullwhen the project has no map position.
- Name
longitude- Type
- number | null
- Description
The project's longitude in decimal degrees.
nullwhen the project has no map position.
- Name
categoryName- Type
- string
- Description
The name of the project's industry category.
- Name
developmentStage- Type
- string
- Description
The project's development-stage key, for example
default_development_stage_idea. An empty string when the project has no stage set. Translate it through your locale files for display.
- Name
unGoalName- Type
- string | null
- Description
The name of the project's legacy UN goal. Always
nullon this endpoint.
- Name
viewCount- Type
- integer
- Description
Reserved. Always
0on this endpoint.
- Name
commentCount- Type
- integer
- Description
Reserved. Always
0on this endpoint.
- Name
loveCount- Type
- integer
- Description
Reserved. Always
0on this endpoint.
- Name
canInviteMembersAndMentorsFromOutside- Type
- boolean
- Description
Whether the project may invite members and mentors from outside the community.
projectSustainableDevelopmentGoals array items
- Name
projectId- Type
- integer
- Description
The ID of the project the goal is linked to. Always matches the enclosing element's
id.
- Name
sustainableDevelopmentGoalId- Type
- integer
- Description
The ID of the UN Sustainable Development Goal. Resolve its name through
projectFilters.sustainableDevelopmentGoals.
projects object
- Name
count- Type
- integer
- Description
The total number of projects matching the filter, before
skipandtakeare applied. Use it to drive pagination.
- Name
list- Type
- array
- Description
The current page of projects. Same shape as the
pendingProjectsarray items above.
- Name
filters- Type
- null
- Description
Always
nullon this endpoint. The available filter facets are returned inprojectFiltersinstead.
projectFilters object
- Name
countries- Type
- array
- Description
The distinct countries of the matched projects, sorted by name. Described under
projectFilters.countriesarray items below.
- Name
sustainableDevelopmentGoals- Type
- array
- Description
The distinct UN Sustainable Development Goals of the matched projects, sorted by name. Described under
projectFilters.sustainableDevelopmentGoalsarray items below.
- Name
developmentStages- Type
- array of string
- Description
The distinct development-stage keys of the matched projects, sorted alphabetically. An empty string appears when some projects have no stage set.
- Name
industries- Type
- array
- Description
The distinct industry categories of the matched projects, sorted by name. Described under
projectFilters.industriesarray items below.
- Name
tags- Type
- array of string
- Description
The distinct tag names across the matched projects, sorted alphabetically.
- Name
filters- Type
- array
- Description
The community's filterable project-form questions and the answers currently in use. Described under
projectFilters.filtersarray items below. Empty when the community has no project form, or when no question is marked filterable.
- Name
programs- Type
- array
- Description
The programs (methodologies) the matched projects run in this community, sorted by name. Only returned when the community has more than one program; an empty array otherwise. Described under
projectFilters.programsarray items below.
projectFilters.countries array items
- Name
name- Type
- string
- Description
The country name.
- Name
code- Type
- string
- Description
The ISO 3166-1 alpha-2 country code.
- Name
timezone- Type
- string
- Description
The country's default IANA time-zone name.
- Name
id- Type
- integer
- Description
The ID of the country. This is what you send in
countryFilter.values.
projectFilters.sustainableDevelopmentGoals array items
- Name
name- Type
- string
- Description
The goal's name.
- Name
iconName- Type
- string
- Description
The base file name of the goal's official icon asset.
- Name
id- Type
- integer
- Description
The ID of the goal. It matches
projectSustainableDevelopmentGoals[].sustainableDevelopmentGoalIdand is what you send insdgFilter.values.
projectFilters.industries array items
- Name
name- Type
- string
- Description
The industry name.
- Name
isAddedByUser- Type
- boolean
- Description
Whether the industry was created by a user rather than shipped as a platform default.
- Name
id- Type
- integer
- Description
The ID of the industry. This is what you send in
industryFilter.values.
projectFilters.filters array items
- Name
question- Type
- string
- Description
The text of a filterable question on the community's project form.
- Name
answers- Type
- array of string
- Description
The distinct answer values available for that question. For choice questions these are the options at least one project selected, for country questions it is the full country list, and otherwise it is the distinct free-text answers.
projectFilters.programs array items
- Name
id- Type
- integer
- Description
The ID of the program (methodology). This is what you send in
programFilter.values.
- Name
name- Type
- string
- Description
The program name.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
- Name
500 Internal Server Error- Description
The caller may not access the requested community, or the bearer token no longer resolves to a user. The body carries an
errordiscriminator —CannotAccessToCommunityExceptionorUserOauthExpiredException— alongsideerrorCodeandmessage.
Request
curl -X POST https://api.babele.co/api/Project/GetByCommunity \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"communityId": 999,
"skip": 0,
"take": 50,
"concept": "water",
"orderBy": 5,
"countryFilter": { "filterType": 0, "values": [173, 196] },
"sdgFilter": { "filterType": 0, "values": [6, 7] },
"industryFilter": { "filterType": 1, "values": [1365] },
"programFilter": { "filterType": 0, "values": [542] },
"developmentStageFilter": { "filterType": 0, "values": ["default_development_stage_idea"] },
"tagFilter": { "filterType": 0, "values": ["cohort2021"] },
"filters": [
{
"filterType": 0,
"question": "Which stage is your venture in?",
"answers": ["Idea", "Prototype"]
}
]
}'
Response
{
"canCreateProjects": true,
"canInviteToProjects": true,
"canApproveParagraph": true,
"isCreateProjectsLocked": false,
"canAccessToOverviewProject": true,
"pendingProjects": [
{
"isFollowing": false,
"canEditProjectInfo": false,
"projectTags": [
"water",
"cohort2026"
],
"projectSustainableDevelopmentGoals": [],
"isProjectTeamMember": false,
"id": 8340,
"name": "Rainwater Harvesting Co-op",
"description": "Community-managed rainwater capture for smallholder farms.",
"logoImage": "/Images/Uploads/businessplan_logo/logo_202402091139399770_256x256.png",
"isVideo": false,
"websiteUrl": "",
"mainImageOrVideo": "",
"countryName": "Romania",
"city": "Cluj-Napoca",
"latitude": 46.7712,
"longitude": 23.6236,
"categoryName": "Environment",
"developmentStage": "default_development_stage_idea",
"unGoalName": null,
"viewCount": 0,
"commentCount": 0,
"loveCount": 0,
"canInviteMembersAndMentorsFromOutside": true
}
],
"projects": {
"count": 168,
"list": [
{
"isFollowing": false,
"canEditProjectInfo": false,
"projectTags": [],
"projectSustainableDevelopmentGoals": [],
"isProjectTeamMember": false,
"id": 8464,
"name": "Applied Startup",
"description": "Applied Startup",
"logoImage": "/Images/Uploads/businessplan_logo/croppedlogo_202503260943413072_256x256.png",
"isVideo": false,
"websiteUrl": "",
"mainImageOrVideo": "/Images/Uploads/businessplan_logo/istockphotox_202409160831118642_1024x1024.jpg",
"countryName": "United States",
"city": "Austin",
"latitude": 30.2672,
"longitude": -97.7431,
"categoryName": "Ad Tech",
"developmentStage": "default_development_stage_idea",
"unGoalName": null,
"viewCount": 0,
"commentCount": 0,
"loveCount": 0,
"canInviteMembersAndMentorsFromOutside": true
},
{
"isFollowing": false,
"canEditProjectInfo": false,
"projectTags": [],
"projectSustainableDevelopmentGoals": [
{
"projectId": 8087,
"sustainableDevelopmentGoalId": 7
}
],
"isProjectTeamMember": false,
"id": 8087,
"name": "Solar Pump Pilot",
"description": "Testing solar-driven pumps on three village wells.",
"logoImage": "/Images/Uploads/businessplan_logo/croppedlogo_202502171548010668_256x256.png",
"isVideo": false,
"websiteUrl": "",
"mainImageOrVideo": "/Images/Uploads/businessplan_logo/croppedimage_202502171547466637_1024x1024.jpg",
"countryName": "Romania",
"city": "Iasi",
"latitude": null,
"longitude": null,
"categoryName": "Environment",
"developmentStage": "",
"unGoalName": null,
"viewCount": 0,
"commentCount": 0,
"loveCount": 0,
"canInviteMembersAndMentorsFromOutside": true
},
{
"isFollowing": false,
"canEditProjectInfo": false,
"projectTags": [
"appendTag1",
"appendTag2",
"cohort2021",
"old_17"
],
"projectSustainableDevelopmentGoals": [
{
"projectId": 7898,
"sustainableDevelopmentGoalId": 6
},
{
"projectId": 7898,
"sustainableDevelopmentGoalId": 7
}
],
"isProjectTeamMember": false,
"id": 7898,
"name": "Village Water Kiosks",
"description": "Pay-as-you-go safe water kiosks run by local operators.",
"logoImage": "/Images/Uploads/businessplan_logo/croppedlogo_202412110951571948_256x256.png",
"isVideo": false,
"websiteUrl": "https://waterkiosks.example.org",
"mainImageOrVideo": "/Images/Uploads/businessplan_logo/croppedimage_202412101338193888_1024x1024.jpg",
"countryName": "Romania",
"city": "Bucharest",
"latitude": 44.4268,
"longitude": 26.1025,
"categoryName": "Environment",
"developmentStage": "default_development_stage_scaling",
"unGoalName": null,
"viewCount": 0,
"commentCount": 0,
"loveCount": 0,
"canInviteMembersAndMentorsFromOutside": true
}
],
"filters": null
},
"projectFilters": {
"countries": [
{
"name": "Romania",
"code": "RO",
"timezone": "Europe/Bucharest",
"id": 173
},
{
"name": "United States",
"code": "US",
"timezone": "America/New_York",
"id": 196
}
],
"sustainableDevelopmentGoals": [
{
"name": "Affordable And Clean Energy",
"iconName": "goals_icons-individual-rgb-07",
"id": 7
},
{
"name": "Clean Water and Sanitation",
"iconName": "goals_icons-individual-rgb-06",
"id": 6
}
],
"developmentStages": [
"",
"default_development_stage_idea",
"default_development_stage_prototype",
"default_development_stage_scaling",
"default_development_stage_start_up"
],
"industries": [
{
"name": "Ad Tech",
"isAddedByUser": false,
"id": 1365
},
{
"name": "Environment",
"isAddedByUser": false,
"id": 1402
}
],
"tags": [
"appendTag1",
"appendTag2",
"cohort2021",
"old_17",
"water"
],
"filters": [
{
"question": "Which stage is your venture in?",
"answers": [
"Idea",
"Prototype",
"Scaling"
]
}
],
"programs": [
{
"id": 542,
"name": "Impact Accelerator 2026"
},
{
"id": 611,
"name": "Water Innovators Track"
}
]
}
}
Get projects overview
This endpoint allows you to get an overview of a project's progress, details and team members. It returns a JSON array with one element per project in the community, ordered by creation date, newest first.
communityId is required and is the only scoping input. Supplying it
checks that the caller belongs to an approved community circle carrying
the "access project overview" permission, and then scopes the project
set, the members, the paragraphs, the KPI values and the circles to that
community. Omitting it binds communityId to 0, which resolves to no
community and fails the permission check — there is no "all communities"
mode.
Required query parameters
- Name
communityId- Type
- integer
- Description
The ID of the community whose projects you want to track.
Optional query parameters
- Name
concept- Type
- string
- Description
Free-text search over the project name.
- Name
countryId- Type
- integer
- Description
Only return projects based in this country.
- Name
categoryId- Type
- integer
- Description
Only return projects in this industry category.
- Name
tags- Type
- array of string
- Description
Only return projects carrying these tags. Repeat the parameter once per tag.
- Name
sustainableDevelopmentGoalsIds- Type
- array of integer
- Description
Only return projects linked to these UN Sustainable Development Goals. Repeat the parameter once per ID.
- Name
skip- Type
- integer
- Description
The number of projects to skip. Defaults to
0.
- Name
take- Type
- integer
- Description
The maximum number of projects to return.
0— the default — returns every match.
Response attributes
The payload is a JSON array. Each element describes one project:
- Name
projectId- Type
- integer
- Description
The ID of the project.
- Name
projectName- Type
- string
- Description
The project name.
- Name
logoImage- Type
- string
- Description
Server-relative path to the project logo image.
- Name
progress- Type
- integer
- Description
The project's average completion across its active programs, as a whole-number percentage from
0to100.
- Name
tags- Type
- array of string
- Description
The project's tag names.
- Name
projectCircles- Type
- array
- Description
The project's circles in this community. Described under
projectCirclesarray items below.
- Name
projectUsers- Type
- array
- Description
The project's members in this community, including pending invitations and applications. Described under
projectUsersarray items below.
- Name
lastUpdate- Type
- string | null
- Description
ISO-8601 UTC timestamp of the most recently published paragraph across the project's programs.
nullwhen the project has published nothing yet, or has no program attached.
- Name
stage- Type
- string
- Description
The name of the program section the project most recently published into. An empty string when nothing has been published.
- Name
coachingSessions- Type
- integer
- Description
The number of mentoring requests recorded against the project.
- Name
kpi- Type
- integer
- Description
The share of the project's KPI values that are still unset — recorded as
0— as a whole-number percentage from0to100.
projectCircles array items
communityProject and project are always null on this endpoint. Exactly one of projectId and communityProjectId is set on any circle.
- Name
communityProjectId- Type
- integer | null
- Description
The ID of the community-project link the circle belongs to.
nullfor project-scoped circles such asTeam.
- Name
communityProject- Type
- null
- Description
Always
nullon this endpoint.
- Name
projectId- Type
- integer | null
- Description
The ID of the project the circle belongs to.
nullfor circles scoped to a community-project link.
- Name
project- Type
- null
- Description
Always
nullon this endpoint.
- Name
communityId- Type
- null
- Description
Always
nullon this endpoint. It is a write-only helper used when creating a circle.
- Name
name- Type
- string
- Description
The circle name, for example
Team,MentorsorFollowers.
- Name
isTeamCircle- Type
- boolean
- Description
Read-only.
truewhennameisTeam.
- Name
isMentorsCircle- Type
- boolean
- Description
Read-only.
truewhennameisMentors.
- Name
isSpecialCircle- Type
- boolean
- Description
Read-only.
truewhennameis one of the three built-in circlesTeam,MentorsorFollowers.
- Name
isProjectScoped- Type
- boolean
- Description
Read-only.
truewhen the circle belongs to the project itself rather than to a community-project link.
- Name
effectiveProjectId- Type
- integer | null
- Description
Read-only. The circle's project ID. Always equals
projectIdon this endpoint.
- Name
id- Type
- integer
- Description
The ID of the circle. It matches
projectUsers[].projectCircleId.
projectUsers array items
- Name
projectCircleId- Type
- integer
- Description
The ID of the project circle the member belongs to. It matches an
idinprojectCircles.
- Name
isPendingByUser- Type
- boolean
- Description
truewhen the person asked to join the project and the team has not answered yet.
- Name
isPendingByTeam- Type
- boolean
- Description
truewhen the team invited the person and they have not answered yet.
- Name
requestedProjectCircleId- Type
- integer | null
- Description
The circle the person asked to be moved into, when a circle-change request is open.
nullotherwise.
- Name
id- Type
- integer
- Description
The ID of the user.
- Name
firstName- Type
- string
- Description
The user's first name.
- Name
lastName- Type
- string
- Description
The user's last name.
- Name
mail- Type
- string
- Description
The user's email address.
- Name
photo- Type
- string
- Description
Server-relative path to the stored profile picture.
- Name
occupation- Type
- string
- Description
The user's job title.
- Name
biography- Type
- string
- Description
The user's biography, as HTML.
- Name
commentCount- Type
- integer
- Description
Reserved. Always
0on this endpoint.
- Name
likeCount- Type
- integer
- Description
Reserved. Always
0on this endpoint.
- Name
followedUsersCount- Type
- integer
- Description
Reserved. Always
0on this endpoint.
- Name
activationCode- Type
- string | null
- Description
The pending account-activation code, when the user has not activated their account yet.
- Name
activationCodeSent- Type
- boolean | null
- Description
Whether the activation code has been emailed.
- Name
isProfileWizardDone- Type
- boolean
- Description
Whether the user finished the profile-setup wizard.
- Name
countryId- Type
- integer | null
- Description
The ID of the user's country.
- Name
country- Type
- object | null
- Description
The user's country. Described under
projectUsers[].countryobject below.nullwhen the user has no country set.
- Name
city- Type
- string
- Description
The user's city.
- Name
latitude- Type
- number | null
- Description
The user's latitude in decimal degrees.
nullwhen unknown.
- Name
longitude- Type
- number | null
- Description
The user's longitude in decimal degrees.
nullwhen unknown.
- Name
company- Type
- string
- Description
The user's company.
- Name
isBanned- Type
- boolean
- Description
Whether the user is banned from the platform.
- Name
isActive- Type
- boolean
- Description
Whether the user's account is active.
- Name
invitationUrl- Type
- string | null
- Description
The URL the user is redirected to after their first log-in, when they were invited.
- Name
language- Type
- string
- Description
The user's interface language tag, for example
en-EN.
- Name
registrationDate- Type
- string | null
- Description
ISO-8601 UTC timestamp of when the user registered.
- Name
lastLoginDate- Type
- string | null
- Description
ISO-8601 UTC timestamp of the user's last log-in.
- Name
notificationEnabled- Type
- boolean
- Description
Whether the user receives notification emails.
- Name
primaryCommunityId- Type
- integer | null
- Description
The ID of the user's primary community.
- Name
primaryCommunityName- Type
- string | null
- Description
The name of the user's primary community. Always
nullon this endpoint.
- Name
hasPendingRequests- Type
- boolean | null
- Description
Whether the user has open mentoring requests.
- Name
userInterests- Type
- array | null
- Description
Always
nullon this endpoint. Interests are returned by the user-profile endpoints.
- Name
userSkills- Type
- array | null
- Description
Always
nullon this endpoint. Skills are returned by the user-profile endpoints.
- Name
userSocial- Type
- array | null
- Description
Always
nullon this endpoint. Linked social accounts are returned by the user-profile endpoints.
- Name
userMarketsExpertises- Type
- array | null
- Description
Always
nullon this endpoint. Market expertise is returned by the user-profile endpoints.
- Name
userSustainableDevelopmentsGoals- Type
- array | null
- Description
Always
nullon this endpoint.
- Name
tags- Type
- array | null
- Description
Always
nullon this endpoint.
- Name
userTags- Type
- array of string | null
- Description
Always
nullon this endpoint.
- Name
termsAndConditionsVersion- Type
- integer
- Description
The version of the terms and conditions the user accepted.
- Name
photoUrl- Type
- string | null
- Description
The profile picture to display. The same as
photowhen one is uploaded, andnullotherwise on this endpoint.
- Name
facebookUrl- Type
- string | null
- Description
Always
nullon this endpoint.
- Name
twitterUrl- Type
- string | null
- Description
Always
nullon this endpoint.
- Name
googleUrl- Type
- string | null
- Description
Always
nullon this endpoint.
- Name
linkedInUrl- Type
- string | null
- Description
Always
nullon this endpoint.
- Name
isFollowedByMe- Type
- boolean
- Description
Always
falseon this endpoint.
projectUsers[].country object
- Name
name- Type
- string
- Description
The country name.
- Name
code- Type
- string
- Description
The ISO 3166-1 alpha-2 country code.
- Name
timezone- Type
- string
- Description
The country's default IANA time-zone name.
- Name
id- Type
- integer
- Description
The ID of the country. It matches the member's
countryId.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
- Name
403 Forbidden- Description
The caller does not belong to an approved community circle carrying the "access project overview" permission in the requested community.
Request
curl -X GET "https://api.babele.co/api/ProjectTracking/SearchOverview?communityId=999&concept=water&take=25" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-H "Content-Type: application/json"
Response
[
{
"projectId": 9309,
"projectName": "Clean Water Initiative",
"logoImage": "/Images/Uploads/logo.png",
"progress": 50,
"tags": [
"water",
"sanitation",
"cohort2026"
],
"projectCircles": [
{
"communityProjectId": null,
"communityProject": null,
"projectId": 9309,
"project": null,
"communityId": null,
"name": "Team",
"isTeamCircle": true,
"isMentorsCircle": false,
"isSpecialCircle": true,
"isProjectScoped": true,
"effectiveProjectId": 9309,
"id": 20046
},
{
"communityProjectId": 3312,
"communityProject": null,
"projectId": null,
"project": null,
"communityId": null,
"name": "Mentors",
"isTeamCircle": false,
"isMentorsCircle": true,
"isSpecialCircle": true,
"isProjectScoped": false,
"effectiveProjectId": null,
"id": 20047
}
],
"projectUsers": [
{
"projectCircleId": 20046,
"isPendingByUser": false,
"isPendingByTeam": false,
"requestedProjectCircleId": 20047,
"id": 12,
"firstName": "Jane",
"lastName": "Doe",
"mail": "jane.doe@babele.co",
"photo": "/Images/Uploads/profile_picture/croppedimage_202412191310431332_256x256.jpg",
"occupation": "Project Manager",
"biography": "<p>Project manager.</p>",
"commentCount": 0,
"likeCount": 0,
"followedUsersCount": 0,
"activationCode": null,
"activationCodeSent": null,
"isProfileWizardDone": true,
"countryId": 173,
"country": {
"name": "Romania",
"code": "RO",
"timezone": "Europe/Bucharest",
"id": 173
},
"city": "Bucharest",
"latitude": 44.4268,
"longitude": 26.1025,
"company": "Babele",
"isBanned": false,
"isActive": true,
"invitationUrl": null,
"language": "en-EN",
"registrationDate": "2024-03-11T09:20:14Z",
"lastLoginDate": "2025-01-09T10:54:35Z",
"notificationEnabled": true,
"primaryCommunityId": 999,
"primaryCommunityName": null,
"hasPendingRequests": null,
"userInterests": null,
"userSkills": null,
"userSocial": null,
"userMarketsExpertises": null,
"userSustainableDevelopmentsGoals": null,
"tags": null,
"userTags": null,
"termsAndConditionsVersion": 2,
"photoUrl": "/Images/Uploads/profile_picture/croppedimage_202412191310431332_256x256.jpg",
"facebookUrl": null,
"twitterUrl": null,
"googleUrl": null,
"linkedInUrl": null,
"isFollowedByMe": false
}
],
"lastUpdate": "2024-12-19T11:37:09Z",
"stage": "Section 1",
"coachingSessions": 23,
"kpi": 5
}
]
Get projects KPI progress
This endpoint allows you to retrieve the KPI progress of every project in your community. It returns a JSON array with one entry per project, each holding one series per KPI definition.
communityId is required and is the only scoping input. Supplying it
restricts the report to the community's projects that are approved,
enabled, public and marked finished, and pulls the KPI values and programs
for that community only. Omitting it binds communityId to 0, which
resolves to no community and fails the permission check — there is no
"all communities" mode.
Required query parameters
- Name
communityId- Type
- integer
- Description
The ID of the community whose KPI progress you want to retrieve.
Response attributes
The payload is a JSON array. Each element describes one project, and the array is empty when the community has no qualifying projects.
- Name
projectId- Type
- integer
- Description
The ID of the project the KPI series belong to.
- Name
kpiChartReport- Type
- array
- Description
The KPI series for this project — one entry per KPI definition, combining the definitions inherited from the project's programs (methodologies) with the project's own definitions. Empty when the project has no KPI definitions. Described under
kpiChartReportarray items below.
kpiChartReport array items
- Name
kpiDefinitionAndProjectName- Type
- string | null
- Description
The KPI definition name and the project name joined with
" - ", ready to use as a chart series label.
- Name
kpiDefinitionStartYear- Type
- integer
- Description
The first year the KPI is tracked from.
- Name
kpiDefinitionStartMonth- Type
- integer
- Description
The first month the KPI is tracked from,
1to12.
- Name
kpiDefinitionId- Type
- integer
- Description
The ID of the KPI definition this series belongs to.
- Name
frequency- Type
- integer
- Description
The reporting interval in months:
1monthly,3quarterly,6half-yearly,12yearly. The reported months are derived by stepping fromkpiDefinitionStartMonthin increments of this value.
- Name
kpiValues- Type
- array
- Description
The recorded values for this KPI, ordered by the ID of the underlying entry and de-duplicated so that only the most recent entry per year and month survives. Empty when nothing has been reported yet. Described under
kpiChartReport[].kpiValuesarray items below.
- Name
methodologyId- Type
- integer | null
- Description
The ID of the program (methodology) the KPI definition belongs to, or
nullwhen the definition is scoped directly to the project instead of to a program.
- Name
isSurveyKPI- Type
- boolean
- Description
Whether the KPI is derived from a survey question. Always
falseon this endpoint.
kpiChartReport[].kpiValues array items
- Name
id- Type
- integer
- Description
The ID of the KPI value entry. When several entries exist for the same year and month, the one with the highest ID wins.
- Name
year- Type
- integer
- Description
The year the value was reported for.
- Name
month- Type
- integer
- Description
The month the value was reported for,
1to12.
- Name
value- Type
- number | null
- Description
The reported value.
nullwhen the period was opened for reporting but no figure was entered.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
- Name
403 Forbidden- Description
The caller does not belong to an approved community circle carrying the "access project overview" permission in the requested community.
Request
curl -X GET https://api.babele.co/api/KPIReport/GetKpiChartReportsForOverview?communityId=999 \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-H "Content-Type: application/json"
Response
[
{
"projectId": 1714,
"kpiChartReport": [
{
"kpiDefinitionAndProjectName": "Litres of safe water delivered - Clean Water Initiative",
"kpiDefinitionStartYear": 2025,
"kpiDefinitionStartMonth": 1,
"kpiDefinitionId": 274,
"frequency": 1,
"kpiValues": [
{
"id": 1757,
"year": 2026,
"month": 4,
"value": 128000.0
},
{
"id": 1758,
"year": 2026,
"month": 5,
"value": 141500.0
},
{
"id": 1759,
"year": 2026,
"month": 6,
"value": null
}
],
"methodologyId": 73,
"isSurveyKPI": false
},
{
"kpiDefinitionAndProjectName": "Villages served - Clean Water Initiative",
"kpiDefinitionStartYear": 2025,
"kpiDefinitionStartMonth": 1,
"kpiDefinitionId": 430,
"frequency": 12,
"kpiValues": [
{
"id": 1801,
"year": 2025,
"month": 12,
"value": 18.0
}
],
"methodologyId": null,
"isSurveyKPI": false
}
]
},
{
"projectId": 1715,
"kpiChartReport": []
}
]
Get a project overview
This endpoint returns the full overview payload for a single project — its descriptive content, media, social links, location, engagement counters, the team, pending paragraphs, tags, SDGs, KPI definitions and community-circle configuration. It also includes the calling user's permission flags (isCommunityAdmin, canEditProjectInfo, canEditProjectTeam, canEditCircles, canViewTasks) computed for that project. It backs the project overview/landing screen and the admin project view.
communityId is optional, and it changes the payload substantially.
Omit it and you get the standalone project view. The caller must hold
a membership of the project itself, and every community-scoped field
comes back empty: pendingParagraphs and openDiscussions are [],
form, answers and kpiDefinitions are null, discussionCount,
resourceCount and networkCount are 0, isCommunityAdmin and
canEditCircles are false, userInvitationPolicy is 4 (None),
communityIds is [] and mainCommunityId is null.
communities is still populated, with every community the project is
publicly visible in.
Supply it and you get the project as it exists inside that one
community: its open discussions, its pending paragraphs, the community's
project form and the project's answers to it, the applicable KPI
definitions, and the community-scoped permission flags. Note that
communityIds then holds only the requested community — use communities
for the full list.
The example response below is the community-scoped view, as returned by
?id=1714&communityId=999.
This is a large, expensive payload — it bundles the team, discussions, KPIs and form answers.
Required query parameters
- Name
id- Type
- integer
- Description
The ID of the project to retrieve.
Optional query parameters
- Name
communityId- Type
- integer
- Description
The ID of the community to scope the overview to. Omit it for the standalone project view, or supply it for the project as seen inside that community. See the note above for exactly which fields change.
Response attributes
- Name
id- Type
- integer
- Description
The ID of the project.
- Name
name- Type
- string | null
- Description
The project name.
- Name
description- Type
- string | null
- Description
The short project description.
- Name
logoImage- Type
- string | null
- Description
Server-relative path to the project logo.
- Name
isVideo- Type
- boolean
- Description
Whether
mainImageOrVideopoints at a video rather than an image.
- Name
websiteUrl- Type
- string | null
- Description
The project's own website.
- Name
mainImageOrVideo- Type
- string | null
- Description
Server-relative path to the project cover image, or the video URL when
isVideoistrue.
- Name
countryName- Type
- string | null
- Description
The display name of the project's country.
nullon the standalone path.
- Name
city- Type
- string | null
- Description
The project's city.
- Name
latitude- Type
- number | null
- Description
The project's latitude in decimal degrees.
- Name
longitude- Type
- number | null
- Description
The project's longitude in decimal degrees.
- Name
categoryName- Type
- string | null
- Description
The display name of the project's industry category.
- Name
developmentStage- Type
- string | null
- Description
The project's development stage, as free text.
- Name
unGoalName- Type
- string | null
- Description
The display name of the project's primary UN goal.
nullwhen the project has none, and on the standalone path.
- Name
viewCount- Type
- integer
- Description
Reserved. Always
0on this endpoint.
- Name
commentCount- Type
- integer
- Description
Reserved. Always
0on this endpoint.
- Name
loveCount- Type
- integer
- Description
Reserved. Always
0on this endpoint.
- Name
canInviteMembersAndMentorsFromOutside- Type
- boolean
- Description
Whether the caller may invite people who are not yet platform users. Depends on the project setting and the caller's community membership.
- Name
isCommunityAdmin- Type
- boolean
- Description
Whether the caller administers the community the overview is scoped to. Always
falsewhencommunityIdis omitted.
- Name
canEditProjectInfo- Type
- boolean
- Description
Whether the caller may edit the project's descriptive content.
truefor project team members, and for community administrators when the project belongs to a single community.
- Name
canEditProjectTeam- Type
- boolean
- Description
Whether the caller may add or remove team members.
- Name
canEditCircles- Type
- boolean
- Description
Whether the caller may create extra project circles for privacy. Requires the caller to be a team member and at least one of the project's communities to allow it. Always
falsewhencommunityIdis omitted.
- Name
canViewTasks- Type
- boolean
- Description
Whether the caller may see the project's tasks.
- Name
isFollowing- Type
- boolean
- Description
Whether the caller follows the project.
- Name
isProjectTeamMember- Type
- boolean
- Description
Whether the caller is an approved member of the project.
- Name
isPendingByTeam- Type
- boolean
- Description
Whether the caller has been invited by the team and has not yet accepted.
- Name
isPendingByUser- Type
- boolean
- Description
Whether the caller has asked to join and the team has not yet accepted.
- Name
twitterUrl- Type
- string | null
- Description
The full Twitter URL, or
nullwhen no handle is set.
- Name
facebookUrl- Type
- string | null
- Description
The full Facebook URL, or
null.
- Name
googleUrl- Type
- string | null
- Description
The full Google URL, or
null.
- Name
linkedInUrl- Type
- string | null
- Description
The full LinkedIn URL, or
null.
- Name
flickrUrl- Type
- string | null
- Description
The full Flickr URL, or
null.
- Name
twitterUrlSuffix- Type
- string | null
- Description
Just the handle or path portion of
twitterUrl.
- Name
facebookUrlSuffix- Type
- string | null
- Description
Just the handle or path portion of
facebookUrl.
- Name
googleUrlSuffix- Type
- string | null
- Description
Just the handle or path portion of
googleUrl.
- Name
linkedInUrlSuffix- Type
- string | null
- Description
Just the handle or path portion of
linkedInUrl.
- Name
flickrUrlSuffix- Type
- string | null
- Description
Just the handle or path portion of
flickrUrl.
- Name
discussionCount- Type
- integer
- Description
The number of discussions the caller may see in this community.
0whencommunityIdis omitted.
- Name
resourceCount- Type
- integer
- Description
The number of resources the caller may see in this community.
0whencommunityIdis omitted.
- Name
networkCount- Type
- integer
- Description
The number of people connected to the project in this community.
0whencommunityIdis omitted.
- Name
methodologyId- Type
- integer
- Description
Always
0on this endpoint — usekpiDefinitions[].methodologyIdor the programs endpoints instead.
- Name
problemSolved- Type
- string | null
- Description
The "problem solved" section of the project profile.
- Name
ourSolution- Type
- string | null
- Description
The "our solution" section of the project profile.
- Name
measureImpact- Type
- string | null
- Description
The "how we measure impact" section of the project profile.
- Name
lastUpdated- Type
- string
- Description
Always
"0001-01-01T00:00:00Z"on this endpoint, on both paths. Nevernull.
- Name
userInvitationPolicy- Type
- integer
- Description
Who may invite people to the project, as the strictest policy across the communities in scope:
0Undefined,1Anyone,2OnlyPlatformUsers,3OnlyCommunityUsers,4None (community administrators only).4whencommunityIdis omitted, because no community policy applies.
- Name
hideParagraphsUntilDate- Type
- boolean
- Description
Whether program paragraphs stay hidden until their scheduled date.
- Name
countryId- Type
- integer
- Description
The ID of the project's country.
- Name
categoryId- Type
- integer
- Description
The ID of the project's industry category.
- Name
unGoalId- Type
- integer | null
- Description
The ID of the project's primary UN goal, or
null.
- Name
projectModel- Type
- string | null
- Description
The project's business model, as free text.
- Name
pendingParagraphs- Type
- array
- Description
Up to three program paragraphs that still have no content, ordered by section. Empty unless the caller is a project team member, and always empty when
communityIdis omitted. Described underpendingParagraphsarray items below.
- Name
team- Type
- array
- Description
The project's approved team members. Described under
teamarray items below.
- Name
openDiscussions- Type
- array
- Description
Up to five active, non-archived discussions on the project, newest first. Always empty when
communityIdis omitted. Described underopenDiscussionsarray items below.
- Name
projectTags- Type
- array of string
- Description
The project's tags, de-duplicated. Always
[]whencommunityIdis supplied. Only the standalone path returns them, and there it is[]when the project has none.
- Name
projectSustainableDevelopmentGoals- Type
- array
- Description
The Sustainable Development Goals the project is aligned with. Same shape as the
projectSustainableDevelopmentGoalsarray items documented under List projects above —projectIdandsustainableDevelopmentGoalId.
- Name
communityIds- Type
- array of integer
- Description
The community the overview is scoped to, as a single-element array — not every community the project belongs to.
[]whencommunityIdis omitted, and[]when the requested community project is not approved, is disabled, or is not public. Usecommunitiesfor the full list.
- Name
mainCommunityId- Type
- integer | null
- Description
The community the overview is scoped to, or
nullwhencommunityIdis omitted, or when the community project is not approved or not public.
- Name
communities- Type
- array
- Description
Every community the project is publicly visible in. On the standalone path this is the project's full public community list; when
communityIdis supplied it is narrowed to the communities the caller can see — team members see all of them. Described undercommunitiesarray items below.
- Name
form- Type
- object | null
- Description
The community's project form — the extra questions this community asks its projects.
nullwhen the community has no project form, and alwaysnullwhencommunityIdis omitted. Described underformobject below.
- Name
answers- Type
- array | null
- Description
The project's answers to the community project form, across every round.
nullwhencommunityIdis omitted, and[]when the project has not answered anything. Described underanswersarray items below.
- Name
kpiDefinitions- Type
- array | null
- Description
The KPI definitions that apply to the project — those inherited from its programs plus its own.
nullwhencommunityIdis omitted. Described underkpiDefinitionsarray items below.
- Name
projectCommunityCircleList- Type
- array | null
- Description
Always
nullon this endpoint. Where populated, each element carriesid,communityProjectId,communityCircleId,communityCircleandcommunityProject.
- Name
projectCommunityUserCircleTagList- Type
- array of string
- Description
Always
[]on this endpoint. Where populated, it holds community-circle tag names.
communities array items
- Name
id- Type
- integer
- Description
The ID of the community.
- Name
name- Type
- string | null
- Description
The community name.
- Name
logoImageUrl- Type
- string | null
- Description
Server-relative path to the community logo.
pendingParagraphs array items
- Name
id- Type
- integer
- Description
The ID of the project's paragraph record.
- Name
name- Type
- string | null
- Description
The title of the program paragraph that is still empty.
- Name
methodologySectionId- Type
- integer
- Description
The ID of the program section the paragraph belongs to.
team array items
Same shape as the projectUsers array items documented under Get projects overview above, with a few differences on this endpoint. Only approved, active members of the project's Team circle are returned, so isPendingByUser and isPendingByTeam are always false and isActive is always true. country is always null here, while facebookUrl, twitterUrl, googleUrl and linkedInUrl are populated.
openDiscussions array items
- Name
paragraphId- Type
- integer | null
- Description
The program paragraph the discussion is attached to, or
nullfor free-standing discussions.
- Name
discussionUserFollows- Type
- array | null
- Description
Always
nullon this endpoint. Where populated, it holds up to five followers, each withid,firstName,lastNameandphoto.
- Name
followersCount- Type
- integer
- Description
The total number of followers. Always
0on this endpoint.
- Name
id- Type
- integer
- Description
The ID of the discussion.
- Name
name- Type
- string | null
- Description
The discussion title.
- Name
commentCount- Type
- integer
- Description
The number of comments on the discussion.
- Name
image- Type
- string | null
- Description
Server-relative path to the discussion's cover image.
- Name
postDate- Type
- string
- Description
ISO-8601 UTC timestamp of when the discussion was opened.
- Name
lastUpdated- Type
- string
- Description
ISO-8601 UTC timestamp of when the discussion was last edited.
- Name
deadlineDate- Type
- string | null
- Description
The computed deadline, derived from
postDateanddeadline.nullwhen no deadline is set.
- Name
deadline- Type
- integer | null
- Description
The deadline window:
0Undefined,1Day,2Week,3Month,4Year,5Never.nullwhen no deadline is set.
- Name
daysLeft- Type
- integer | null
- Description
Whole days between now and
deadlineDate. Negative once the deadline has passed, andnullwhen there is no deadline.
- Name
isActive- Type
- boolean
- Description
Whether the discussion is open. Always
truehere — closed discussions are filtered out.
- Name
userId- Type
- integer
- Description
The ID of the user who opened the discussion.
- Name
authorName- Type
- string | null
- Description
The author's full name. Always
nullon this endpoint.
- Name
authorPhoto- Type
- string | null
- Description
The author's avatar path. Always
nullon this endpoint.
- Name
authorOccupation- Type
- string | null
- Description
The author's job title. Always
nullon this endpoint.
- Name
discussionTags- Type
- array of string
- Description
The discussion's tags, de-duplicated.
- Name
circleTags- Type
- array of string | null
- Description
The circles the discussion is shared with, by name. Always
nullon this endpoint — only the discussion-list endpoints populate it.
- Name
discussionSkillCategories- Type
- array of string | null
- Description
The skill categories the discussion asks for help in. Always
nullon this endpoint — only the discussion-detail endpoint populates it.
- Name
isArchived- Type
- boolean
- Description
Whether the discussion has been archived. Always
falsehere — archived discussions are filtered out.
- Name
isLockedCommentDiscussions- Type
- boolean
- Description
Whether commenting is locked. Always
falseon this endpoint — only the discussion-detail endpoint sets it.
- Name
privacyLevel- Type
- integer
- Description
Who can see the discussion:
0Undefined,1Public,2Community,3Team,4Custom,5TeamAndMentors,6SetByTeam. Always0(Undefined) on this endpoint.
- Name
isFollowedByMe- Type
- boolean
- Description
Whether the caller follows the discussion.
- Name
viewCount- Type
- integer
- Description
The number of times the discussion has been opened.
form object
- Name
id- Type
- integer
- Description
The ID of the form.
- Name
name- Type
- string | null
- Description
The form name.
- Name
description- Type
- string | null
- Description
The form description.
- Name
communityId- Type
- integer
- Description
The ID of the community that owns the form.
- Name
type- Type
- integer
- Description
The form family:
0Undefined,1ApplicationDefinition,2Tab,3Evaluation. Always0for project forms.
- Name
creationDate- Type
- string | null
- Description
ISO-8601 UTC timestamp of when the form was created.
- Name
lastEditionDate- Type
- string | null
- Description
ISO-8601 UTC timestamp of when the form was last edited.
- Name
userCreatorId- Type
- integer
- Description
Always
0on this endpoint.
- Name
questions- Type
- array
- Description
The form's questions. On this endpoint the list is not the raw form definition: it is the union of the community's default project form and any question from earlier rounds the project answered, with project-field questions removed, custom questions kept only when they belong to the default form or are flagged for the project profile, and per-round copies of default questions dropped. Described under
form.questionsarray items below.
- Name
sections- Type
- array
- Description
The form's sections, ordered. Always
[]on this endpoint. Where populated, each section carriesid,title,descriptionandorder.
- Name
includeInLandingPage- Type
- boolean
- Description
Whether the form's answers are shown on the community landing page.
- Name
isDefaultCommunityProjectForm- Type
- boolean
- Description
Whether this is the community's default project form.
form.questions array items
- Name
id- Type
- integer
- Description
The ID of the question.
- Name
title- Type
- string | null
- Description
The question's short title.
- Name
description- Type
- string | null
- Description
Helper text shown under the question.
- Name
question- Type
- string | null
- Description
The question text itself.
- Name
questionOrder- Type
- integer
- Description
The question's position in the form.
- Name
mandatoryAnswer- Type
- boolean
- Description
Whether an answer is required.
- Name
editableAnswer- Type
- boolean
- Description
Whether the answer can be changed after it has been submitted.
- Name
answerType- Type
- integer
- Description
The input type:
0RadioChoice,1CheckBoxChoice,2DropDownChoice,3MultipleChoice,4AccountMoney,5Calendar,7ShortText,8LongText,9File,10Scale,11Country,12Table,13Numeric. Negative values map the question onto a built-in project field and are filtered out of this endpoint's response.
- Name
isProjectField- Type
- boolean
- Description
Whether the question writes to a built-in project field instead of the answers table. Read-only, computed from
answerType. Alwaysfalseon this endpoint — such questions are filtered out.
- Name
allowMultipleAnswer- Type
- boolean
- Description
Whether more than one option may be selected.
- Name
questionLinks- Type
- array
- Description
Reference links shown alongside the question. Described under
form.questions[].questionLinksarray items below.
- Name
questionOptions- Type
- array
- Description
The selectable options, ordered by
questionOptionOrder— or alphabetically by label whenanswerTypeis11(Country). Described underform.questions[].questionOptionsarray items below.
- Name
isFilterable- Type
- boolean | null
- Description
Whether answers to this question can be used as a project-list filter. Filterable questions are the ones returned in
projectFilters.filtersby List projects.
- Name
privacyLevel- Type
- integer
- Description
Who can see the answer:
0Undefined,1Public,2Community,3Team,4Custom,5TeamAndMentors,6SetByTeam.
- Name
privacyCirclesIds- Type
- array of integer | null
- Description
The IDs of the community circles allowed to see the answer when
privacyLevelis4(Custom).nullwhen the question has no privacy-circle records.
- Name
conditionalLogicType- Type
- integer
- Description
How the entries in
formQuestionConditionalLogicListcombine:0None,1AnyConditional,2AllConditionals.
- Name
formQuestionConditionalLogicList- Type
- array | null
- Description
The conditions that must hold for this question to be shown.
nullwhen the question has no conditions. Described underform.questions[].formQuestionConditionalLogicListarray items below.
- Name
fromApplication- Type
- boolean
- Description
Whether the question originated in an application form. Always
falsefor project forms.
- Name
hasWeightedAverage- Type
- boolean
- Description
Whether the question carries an evaluation weight. Read-only, derived from
weightedAverage. Alwaysfalsefor project forms.
- Name
weightedAverage- Type
- number | null
- Description
The evaluation weight. Always
nullfor project forms.
- Name
convertToKpi- Type
- boolean
- Description
Whether numeric answers are turned into a KPI. Always
falsefor project forms.
- Name
changePermissionPrivacyLevel- Type
- integer
- Description
Which circle may change the question's privacy. Always
0(Undefined) for project forms.
- Name
questionType- Type
- integer
- Description
When the question is asked:
0ProjectTemplate — part of the project profile — or1AfterProjectApproval.
- Name
includeInProjectProfile- Type
- boolean
- Description
Whether the question is shown on the project profile.
- Name
hasLimit- Type
- boolean
- Description
Whether the answer length is capped.
- Name
limitType- Type
- integer | null
- Description
The unit the cap is expressed in:
1Characters,2Words.nullwhenhasLimitisfalse.
- Name
limitValue- Type
- integer | null
- Description
The cap itself, in the unit given by
limitType.
- Name
defaultProjectFormQuestionId- Type
- integer | null
- Description
The ID of the community default-form question this one was copied from. Always
nullon this endpoint — per-round copies are filtered out.
- Name
sectionId- Type
- integer | null
- Description
The ID of the form section the question belongs to, or
nullwhen it is not sectioned.
form.questions[].questionLinks array items
- Name
questionLink- Type
- string | null
- Description
A reference URL shown with the question.
form.questions[].questionOptions array items
- Name
id- Type
- integer
- Description
The ID of the option. This is what answers reference.
- Name
questionOption- Type
- string | null
- Description
The option label.
- Name
questionOptionOrder- Type
- integer
- Description
The option's position in the list.
form.questions[].formQuestionConditionalLogicList array items
- Name
id- Type
- integer
- Description
The ID of the condition.
- Name
conditionFormQuestionId- Type
- integer
- Description
The ID of the question whose answer the condition tests.
- Name
formQuestionOptionId- Type
- integer | null
- Description
The option the condition tests against, for choice questions.
nullwhen the condition usescustomValueinstead.
- Name
customValue- Type
- string | null
- Description
The literal value the condition tests against, for free-text and numeric questions.
- Name
conditionLogic- Type
- integer
- Description
The comparison:
1Equal,2NotEqual,3GreaterThen,4LessThen,5Contains,6DoesNotContain,7IsEmpty,8NotEmpty.
answers array items
- Name
id- Type
- integer
- Description
The ID of the answer.
- Name
formId- Type
- integer
- Description
The ID of the project form the answer was submitted against. Answers from earlier rounds keep their own form ID.
- Name
formQuestionId- Type
- integer
- Description
The ID of the form question being answered.
- Name
userId- Type
- integer
- Description
The ID of the user who submitted the answer.
- Name
lastSubmitedTime- Type
- string | null
- Description
ISO-8601 UTC timestamp of when the answer was last saved.
- Name
applicationId- Type
- integer
- Description
Only used by application-form answers. Always
0here.
- Name
tabEntityId- Type
- integer
- Description
Only used by tab-form answers. Always
0here.
- Name
projectId- Type
- integer
- Description
Always
0here — project form answers are keyed by community project, not by project. Use the top-levelidfor the project.
- Name
answer- Type
- string | null
- Description
The answer payload. Free text for text questions, the selected option's ID as a string for choice questions, and a file path for file questions.
- Name
optionAnswerOrder- Type
- integer
- Description
The position of this answer within a multi-select or table question.
0for single answers.
- Name
optionRowAnswerOrder- Type
- integer
- Description
The row index for table questions.
0otherwise.
kpiDefinitions array items
- Name
methodologyId- Type
- integer | null
- Description
The ID of the program the KPI definition belongs to, or
nullfor definitions scoped directly to the project.
- Name
name- Type
- string | null
- Description
The KPI name.
- Name
frequency- Type
- integer
- Description
The reporting interval in months:
1monthly,3quarterly,6half-yearly,12yearly.
- Name
isBiggerBetter- Type
- boolean
- Description
Whether a higher value is the desired direction.
- Name
enabled- Type
- boolean
- Description
Whether the KPI is currently collected.
- Name
startingYear- Type
- integer
- Description
The first year the KPI is tracked from.
- Name
startingMonth- Type
- integer
- Description
The first month the KPI is tracked from,
1to12.
- Name
isRemoved- Type
- boolean
- Description
Whether the definition has been soft-deleted. Always
falsehere — removed definitions are filtered out.
- Name
communityProjectId- Type
- integer | null
- Description
The community project the definition is scoped to, or
nullfor project-scoped and program-template definitions.
- Name
communityProject- Type
- object | null
- Description
The community project the definition is scoped to.
nullfor project-scoped and program-template definitions. Described underkpiDefinitions[].communityProjectobject below.
- Name
projectId- Type
- integer | null
- Description
The project the definition is scoped to, or
nullfor community-project-scoped and program-template definitions.
- Name
project- Type
- null
- Description
Always
nullhere.
- Name
methodology- Type
- null
- Description
Always
nullhere.
- Name
comesFromSurvey- Type
- boolean
- Description
Whether the definition was generated from a survey question.
- Name
isProjectScoped- Type
- boolean
- Description
Read-only.
truewhen the definition travels with the project across every community — that is, whenprojectIdis set andcommunityProjectIdis not.
- Name
isCommunityProjectScoped- Type
- boolean
- Description
Read-only.
truewhen the definition is confined to one community — that is, whencommunityProjectIdis set andprojectIdis not.
- Name
isMethodologyTemplate- Type
- boolean
- Description
Read-only.
truewhen the definition is the program's template row rather than a per-project copy — that is, when neitherprojectIdnorcommunityProjectIdis set.
- Name
id- Type
- integer
- Description
The ID of the KPI definition. It matches
kpiChartReport[].kpiDefinitionIdon Get projects KPI progress.
kpiDefinitions[].communityProject object
- Name
communityId- Type
- integer
- Description
The community side of the link.
- Name
community- Type
- null
- Description
The community record. Always
nullhere.
- Name
projectId- Type
- integer
- Description
The project side of the link.
- Name
project- Type
- null
- Description
The project record. Always
nullhere.
- Name
isApproved- Type
- boolean
- Description
Whether the community has approved the project.
- Name
isDisabled- Type
- boolean
- Description
Whether the link has been disabled.
- Name
privacyLevel- Type
- integer
- Description
Who may see the project inside the community:
0Open,1InviteOnly,2Private.
- Name
projectForm- Type
- null
- Description
The community's project form. Always
nullhere.
- Name
projectFormId- Type
- integer | null
- Description
The ID of the community's project form. It matches the top-level
form.id.
- Name
projectMethodologies- Type
- null
- Description
The programs the project runs in this community. Always
nullhere.
- Name
projectCommunityCircleList- Type
- null
- Description
The community circles wired to this community project. Always
nullhere.
- Name
projectCommunityUserCircleTagList- Type
- null
- Description
The circle tags on this community project. Always
nullhere.
- Name
surveyKPIs- Type
- null
- Description
The survey-derived KPIs for this community project. Always
nullhere.
- Name
id- Type
- integer
- Description
The ID of the community-project link row.
Possible errors
- Name
401 Unauthorized- Description
The request is not authenticated.
- Name
500 Internal Server Error- Description
The project does not exist, is not in the requested community, has been disabled, or the caller may not see it — and the bearer token no longer resolving to a user lands here too. The body carries an
errordiscriminator:ProjectNotFoundException,ProjectIsDisabledException,CannotAccessToProjectExceptionorUserOauthExpiredException, alongsideerrorCodeandmessage. Branch onerrorrather than on the status code.
Request
curl -X GET "https://api.babele.co/api/Project/GetOverview?id=1714&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",
"description": "Bringing safe drinking water to rural communities.",
"logoImage": "/Images/Uploads/project_logo/clean-water.png",
"isVideo": false,
"websiteUrl": "https://cleanwater.example.org",
"mainImageOrVideo": "/Images/Uploads/project_main/clean-water-hero.jpg",
"countryName": "Romania",
"city": "Bucharest",
"latitude": 44.4268,
"longitude": 26.1025,
"categoryName": "Environment",
"developmentStage": "MVP",
"unGoalName": "Clean Water and Sanitation",
"viewCount": 0,
"commentCount": 0,
"loveCount": 0,
"canInviteMembersAndMentorsFromOutside": true,
"isCommunityAdmin": true,
"canEditProjectInfo": true,
"canEditProjectTeam": true,
"canEditCircles": true,
"canViewTasks": true,
"isFollowing": false,
"isProjectTeamMember": true,
"isPendingByTeam": false,
"isPendingByUser": false,
"twitterUrl": "https://twitter.com/cleanwater",
"facebookUrl": "https://facebook.com/cleanwater",
"googleUrl": null,
"linkedInUrl": "https://linkedin.com/company/cleanwater",
"flickrUrl": null,
"twitterUrlSuffix": "cleanwater",
"facebookUrlSuffix": "cleanwater",
"googleUrlSuffix": null,
"linkedInUrlSuffix": "company/cleanwater",
"flickrUrlSuffix": null,
"discussionCount": 12,
"resourceCount": 8,
"networkCount": 5,
"methodologyId": 0,
"problemSolved": "Lack of access to safe drinking water.",
"ourSolution": "Low-cost solar water purification units.",
"measureImpact": "Litres of safe water delivered per month.",
"lastUpdated": "0001-01-01T00:00:00Z",
"userInvitationPolicy": 1,
"hideParagraphsUntilDate": false,
"countryId": 173,
"categoryId": 7,
"unGoalId": 6,
"projectModel": "Non-profit",
"pendingParagraphs": [
{
"id": 88301,
"name": "Impact measurement plan",
"methodologySectionId": 412
},
{
"id": 88307,
"name": "Distribution partners",
"methodologySectionId": 413
}
],
"team": [
{
"id": 1,
"firstName": "John",
"lastName": "Doe",
"mail": "john.doe@example.com",
"photo": "/Images/Uploads/profile_picture/test.jpg",
"occupation": "Founder",
"biography": "Water engineer, 12 years in rural infrastructure.",
"commentCount": 0,
"likeCount": 0,
"followedUsersCount": 0,
"activationCode": null,
"activationCodeSent": true,
"isProfileWizardDone": true,
"countryId": 173,
"country": null,
"city": "Bucharest",
"latitude": 44.4268,
"longitude": 26.1025,
"company": "Clean Water Initiative",
"isBanned": false,
"isActive": true,
"invitationUrl": null,
"language": "en",
"registrationDate": "2024-03-11T09:20:00Z",
"lastLoginDate": "2026-06-19T07:45:00Z",
"notificationEnabled": true,
"primaryCommunityId": 999,
"primaryCommunityName": null,
"hasPendingRequests": false,
"userInterests": null,
"userSkills": null,
"userSocial": null,
"userMarketsExpertises": null,
"userSustainableDevelopmentsGoals": null,
"tags": null,
"userTags": null,
"termsAndConditionsVersion": 3,
"photoUrl": "/Images/Uploads/profile_picture/test.jpg",
"facebookUrl": null,
"twitterUrl": null,
"googleUrl": null,
"linkedInUrl": "https://linkedin.com/in/johndoe",
"isFollowedByMe": false,
"projectCircleId": 1,
"isPendingByUser": false,
"isPendingByTeam": false,
"requestedProjectCircleId": null
}
],
"openDiscussions": [
{
"paragraphId": 88301,
"discussionUserFollows": null,
"followersCount": 0,
"id": 5521,
"name": "Which filtration membrane should we standardise on?",
"commentCount": 7,
"image": "/Images/Uploads/discussion/membrane.jpg",
"postDate": "2026-06-12T08:30:00Z",
"lastUpdated": "2026-06-19T16:10:00Z",
"deadlineDate": "2026-07-12T08:30:00Z",
"deadline": 3,
"daysLeft": 15,
"isActive": true,
"userId": 1,
"authorName": null,
"authorPhoto": null,
"authorOccupation": null,
"discussionTags": [
"filtration",
"procurement"
],
"circleTags": null,
"discussionSkillCategories": null,
"isArchived": false,
"isLockedCommentDiscussions": false,
"privacyLevel": 0,
"isFollowedByMe": true,
"viewCount": 143
}
],
"projectTags": [],
"projectSustainableDevelopmentGoals": [
{
"projectId": 1714,
"sustainableDevelopmentGoalId": 6
}
],
"communityIds": [
999
],
"mainCommunityId": 999,
"communities": [
{
"id": 999,
"name": "Water for All",
"logoImageUrl": "/Images/Uploads/community_logo/water-for-all.png"
},
{
"id": 1042,
"name": "Green Impact Accelerator",
"logoImageUrl": "/Images/Uploads/community_logo/green-impact.png"
}
],
"form": {
"id": 640,
"name": "Clean water project profile",
"description": "Extra questions asked of every project in this community.",
"communityId": 999,
"type": 0,
"creationDate": "2025-11-02T10:00:00Z",
"lastEditionDate": "2026-05-14T11:22:00Z",
"userCreatorId": 0,
"questions": [
{
"id": 9101,
"title": "Water source",
"description": "Pick the primary source your units draw from.",
"question": "What is the primary water source?",
"questionOrder": 1,
"mandatoryAnswer": true,
"editableAnswer": true,
"answerType": 2,
"isProjectField": false,
"allowMultipleAnswer": false,
"questionLinks": [
{
"questionLink": "https://cleanwater.example.org/sources"
}
],
"questionOptions": [
{
"id": 4401,
"questionOption": "Borehole",
"questionOptionOrder": 1
},
{
"id": 4402,
"questionOption": "Surface water",
"questionOptionOrder": 2
}
],
"isFilterable": true,
"privacyLevel": 2,
"privacyCirclesIds": null,
"conditionalLogicType": 0,
"formQuestionConditionalLogicList": [],
"fromApplication": false,
"hasWeightedAverage": false,
"weightedAverage": null,
"convertToKpi": false,
"changePermissionPrivacyLevel": 0,
"questionType": 0,
"includeInProjectProfile": true,
"hasLimit": false,
"limitType": null,
"limitValue": null,
"defaultProjectFormQuestionId": null,
"sectionId": null
},
{
"id": 9102,
"title": "Treatment detail",
"description": null,
"question": "Describe the treatment steps applied to surface water.",
"questionOrder": 2,
"mandatoryAnswer": false,
"editableAnswer": true,
"answerType": 8,
"isProjectField": false,
"allowMultipleAnswer": false,
"questionLinks": [],
"questionOptions": [],
"isFilterable": false,
"privacyLevel": 4,
"privacyCirclesIds": [
21,
22
],
"conditionalLogicType": 1,
"formQuestionConditionalLogicList": [
{
"id": 771,
"conditionFormQuestionId": 9101,
"formQuestionOptionId": 4402,
"customValue": null,
"conditionLogic": 1
}
],
"fromApplication": false,
"hasWeightedAverage": false,
"weightedAverage": null,
"convertToKpi": false,
"changePermissionPrivacyLevel": 0,
"questionType": 0,
"includeInProjectProfile": true,
"hasLimit": true,
"limitType": 2,
"limitValue": 250,
"defaultProjectFormQuestionId": null,
"sectionId": null
}
],
"sections": [],
"includeInLandingPage": true,
"isDefaultCommunityProjectForm": true
},
"answers": [
{
"id": 30211,
"formId": 640,
"formQuestionId": 9101,
"userId": 1,
"lastSubmitedTime": "2026-06-18T09:12:00Z",
"applicationId": 0,
"tabEntityId": 0,
"projectId": 0,
"answer": "4402",
"optionAnswerOrder": 0,
"optionRowAnswerOrder": 0
},
{
"id": 30212,
"formId": 640,
"formQuestionId": 9102,
"userId": 1,
"lastSubmitedTime": "2026-06-18T09:14:00Z",
"applicationId": 0,
"tabEntityId": 0,
"projectId": 0,
"answer": "Sedimentation, sand filtration, then UV disinfection.",
"optionAnswerOrder": 0,
"optionRowAnswerOrder": 0
}
],
"kpiDefinitions": [
{
"methodologyId": 73,
"name": "Litres of safe water delivered",
"frequency": 1,
"isBiggerBetter": true,
"enabled": true,
"startingYear": 2025,
"startingMonth": 1,
"isRemoved": false,
"communityProjectId": 5120,
"communityProject": {
"communityId": 999,
"community": null,
"projectId": 1714,
"project": null,
"isApproved": true,
"isDisabled": false,
"privacyLevel": 0,
"projectForm": null,
"projectFormId": 640,
"projectMethodologies": null,
"projectCommunityCircleList": null,
"projectCommunityUserCircleTagList": null,
"surveyKPIs": null,
"id": 5120
},
"projectId": null,
"project": null,
"methodology": null,
"comesFromSurvey": false,
"isProjectScoped": false,
"isCommunityProjectScoped": true,
"isMethodologyTemplate": false,
"id": 274
},
{
"methodologyId": null,
"name": "Villages served",
"frequency": 12,
"isBiggerBetter": true,
"enabled": true,
"startingYear": 2025,
"startingMonth": 1,
"isRemoved": false,
"communityProjectId": null,
"communityProject": null,
"projectId": 1714,
"project": null,
"methodology": null,
"comesFromSurvey": false,
"isProjectScoped": true,
"isCommunityProjectScoped": false,
"isMethodologyTemplate": false,
"id": 430
}
],
"projectCommunityCircleList": null,
"projectCommunityUserCircleTagList": []
}
Get a project for editing
This endpoint allows you to retrieve a project's editable profile fields, in the exact shape the update endpoint expects them back. Use it as the read half of a read-modify-write.
answers is part of this response's shape but is always returned empty —
this endpoint does not read a project's project form answers. To edit
answers, read them from GET /api/Project/GetOverview?id={id}&communityId={communityId}
above, whose form holds the community's questions and whose answers
holds the project's current answers to them.
Query parameters
- Name
id- Type
- integer
- Description
Required. The ID of the project.
- Name
communityId- Type
- integer
- Description
The community to read the project in. Omit it for the standalone view.
Response attributes
- Name
id- Type
- integer
- Description
The ID of the project.
- Name
name- Type
- string | null
- Description
The project name.
- Name
description- Type
- string | null
- Description
The project's short description.
- Name
city- Type
- string | null
- Description
The project's city.
- Name
latitude- Type
- number | null
- Description
The project's latitude.
- Name
longitude- Type
- number | null
- Description
The project's longitude.
- Name
countryId- Type
- integer
- Description
The ID of the project's country.
- Name
categoryId- Type
- integer
- Description
The ID of the project's industry category.
- Name
unGoalId- Type
- integer | null
- Description
The ID of the project's primary UN goal.
- Name
developmentStage- Type
- string | null
- Description
The project's development stage.
- Name
projectModel- Type
- string | null
- Description
The project's business model.
- Name
logoImage- Type
- string | null
- Description
The URL of the project's logo.
- Name
mainImageOrVideo- Type
- string | null
- Description
The URL of the project's cover image or video.
- Name
websiteUrl- Type
- string | null
- Description
The project's website.
- Name
twitterUrlSuffix- Type
- string | null
- Description
The project's Twitter handle — the handle alone, not the full URL.
facebookUrlSuffix,googleUrlSuffix,linkedInUrlSuffixandflickrUrlSuffixwork the same way.
- Name
communityId- Type
- integer
- Description
Echoes the
communityIdyou asked for.
- Name
projectTags- Type
- array of string
- Description
The project's tag names.
- Name
projectSustainableDevelopmentGoals- Type
- array of integer
- Description
The IDs of the UN Sustainable Development Goals linked to the project.
- Name
tags- Type
- array of string
- Description
The same tag names as
projectTags. Read-only.
- Name
answers- Type
- array
- Description
Always empty here. See the note above.
Request
curl -X GET "https://api.babele.co/api/Project/GetEditInfoOverview?id=1714&communityId=999" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-H "Content-Type: application/json"
Response
{
"id": 1714,
"name": "SolarKit",
"description": "Modular off-grid solar kits for rural clinics.",
"city": "Nairobi",
"latitude": -1.2921,
"longitude": 36.8219,
"countryId": 110,
"categoryId": 6,
"unGoalId": 7,
"logoImage": "project_files/solarkit-logo.png",
"mainImageOrVideo": "project_files/solarkit-cover.jpg",
"websiteUrl": "https://solarkit.example.com",
"twitterUrlSuffix": "solarkit",
"facebookUrlSuffix": "",
"googleUrlSuffix": "",
"linkedInUrlSuffix": "solarkit-inc",
"flickrUrlSuffix": "",
"developmentStage": "Growth",
"projectModel": "For-profit",
"communityId": 999,
"projectTags": ["energy", "healthcare"],
"projectSustainableDevelopmentGoals": [7, 13],
"tags": ["energy", "healthcare"],
"answers": []
}
Update a project
This endpoint allows you to update a project's profile and, in the same call, its answers to the community's project form. It responds with the project's overview — the same shape as GET /api/Project/GetOverview above.
Members of the project's team can call it. So can administrators of the community, while the project belongs to that one community only.
This is a snapshot write, not a patch. Every profile field you leave out is
written as empty — there is no "leave this one alone" signal. Read the
project with GET /api/Project/GetEditInfoOverview first, change what you
need, and send the whole object back.
Request body attributes
Takes the same fields as the response of GET /api/Project/GetEditInfoOverview above, sent back modified. The ones that need care:
- Name
id- Type
- integer
- Description
Required. The ID of the project to update.
- Name
communityId- Type
- integer
- Description
The community whose form answers you are writing. Required to save
answers— with0or nothing, the profile fields are still saved but answers are left alone in every community.
- Name
countryId- Type
- integer
- Description
The ID of the project's country.
0means "not set".
- Name
categoryId- Type
- integer
- Description
The ID of the project's industry category.
0means "not set".
- Name
unGoalId- Type
- integer | null
- Description
The project's primary UN goal.
nullor0clears it.
- Name
projectTags- Type
- array of string
- Description
Replaces the project's tags wholesale. Omitting it or sending an empty array clears them all.
- Name
projectSustainableDevelopmentGoals- Type
- array of integer
- Description
Replaces the project's SDGs wholesale, with the same caveat.
- Name
answers- Type
- array
- Description
The project's answers to the community's project form. Described under
answersarray items below.
problemSolved, ourSolution and measureImpact are not part of this
payload, and calling this endpoint does not clear them. They are written
one at a time through POST /api/Project/SaveFieldEditInfo below.
answers array items
Leaving answers out — or sending an empty array — leaves the project's existing answers untouched. Send a non-empty array and it replaces the answer set for that community: entries are created or updated, and any stored answer you leave out is deleted.
- Name
id- Type
- integer
- Description
0for a new answer. To update an answer in place, send back theidyou read fromGET /api/Project/GetOverview.
- Name
formQuestionId- Type
- integer
- Description
Required. The ID of the project form question being answered.
- Name
formId- Type
- integer
- Description
The ID of the form the question belongs to. Resolved from
formQuestionId, so0is fine.
- Name
answer- Type
- string | null
- Description
The answer value, for the answer types that carry one.
- Name
optionAnswerOrder- Type
- integer
- Description
The selected option's
questionOptionOrder, for the choice types.
- Name
optionRowAnswerOrder- Type
- integer
- Description
The row index, for table questions.
0otherwise.
Answer shapes by question type
- Name
Short text, long text, numeric, money- Description
One entry, with the value in
answer.
- Name
Calendar- Description
One entry, with an ISO 8601 date-time in
answer.
- Name
Radio choice, dropdown choice, scale- Description
One entry, with the chosen option's order in
optionAnswerOrder.
- Name
Checkbox choice, multiple choice- Description
One entry per selected option — several entries sharing a
formQuestionId, each with its ownoptionAnswerOrder.
- Name
Country- Description
One entry, with the country's ID in
optionAnswerOrder.
- Name
Table- Description
One entry per cell: the column in
optionAnswerOrder, the zero-based row inoptionRowAnswerOrder, and the cell's value inanswer.
Two things the server does for you. An answer to a question that is restricted to a circle you cannot edit is kept, not deleted, when you leave it out — so a client that never rendered the question cannot wipe it. And an answer whose formQuestionId is not on that community's form is ignored rather than failing the whole save.
Answers are held per community. A project in three communities keeps three independent sets, so a save with one communityId never touches the others.
Possible errors
- Name
401 Unauthorized- Description
The request is missing valid authentication.
- Name
403 Forbidden- Description
You may not edit this project.
Request
curl -X POST https://api.babele.co/api/Project/SaveEditInfoOverview \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-H "Content-Type: application/json" \
-d '{"id":1714,"name":"SolarKit","description":"Modular off-grid solar kits for rural clinics.","city":"Nairobi","latitude":-1.2921,"longitude":36.8219,"countryId":110,"categoryId":6,"unGoalId":7,"logoImage":"project_files/solarkit-logo.png","mainImageOrVideo":"project_files/solarkit-cover.jpg","websiteUrl":"https://solarkit.example.com","twitterUrlSuffix":"solarkit","facebookUrlSuffix":"","googleUrlSuffix":"","linkedInUrlSuffix":"solarkit-inc","flickrUrlSuffix":"","developmentStage":"Growth","projectModel":"For-profit","communityId":999,"projectTags":["energy","healthcare"],"projectSustainableDevelopmentGoals":[7,13],"answers":[{"id":9012,"formId":0,"formQuestionId":781,"answer":"Off-grid clinics across East Africa.","optionAnswerOrder":0,"optionRowAnswerOrder":0},{"id":0,"formId":0,"formQuestionId":782,"answer":null,"optionAnswerOrder":2,"optionRowAnswerOrder":0}]}'
Response
{
"id": 1714,
"name": "SolarKit",
"description": "Modular off-grid solar kits for rural clinics.",
"city": "Nairobi",
"countryId": 110,
"countryName": "Kenya",
"categoryId": 6,
"categoryName": "Energy",
"unGoalId": 7,
"unGoalName": "Affordable and Clean Energy",
"developmentStage": "Growth",
"projectModel": "For-profit",
"websiteUrl": "https://solarkit.example.com",
"canEditProjectInfo": true,
"isProjectTeamMember": true,
"lastUpdated": "2026-08-07T11:02:18.443091Z"
}
Update a single project field
This endpoint allows you to write one named profile field and leave everything else alone. It is the only way to set the project's problem, solution and impact statements, which are not part of the update payload above. It echoes your request back.
Request body attributes
- Name
id- Type
- integer
- Description
Required. The ID of the project.
- Name
communityId- Type
- integer
- Description
The community you are editing the project in. Send
0outside a community.
- Name
projectFieldEditInfoType- Type
- integer
- Description
Required. Which field to write:
1name,2description,3city,4problem solved,5our solution,6how we measure impact,7website.0is undefined and writes nothing.
- Name
fieldValue- Type
- string | null
- Description
The new value for that field.
Possible errors
- Name
403 Forbidden- Description
You may not edit this project.
Request
curl -X POST https://api.babele.co/api/Project/SaveFieldEditInfo \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-H "Content-Type: application/json" \
-d '{"id":1714,"communityId":999,"projectFieldEditInfoType":4,"fieldValue":"Rural clinics lack reliable power for refrigeration and equipment."}'
Response
{
"id": 1714,
"communityId": 999,
"projectFieldEditInfoType": 4,
"fieldValue": "Rural clinics lack reliable power for refrigeration and equipment."
}
Update a project's tags
This endpoint allows you to replace a project's tags without touching any other field. It responds with 200 OK and an empty body.
Tags belong to the project, not to one community — a change here is visible in every community the project belongs to, whatever communityId you send.
Request body attributes
- Name
projectId- Type
- integer
- Description
Required. The ID of the project.
- Name
communityId- Type
- integer
- Description
The community you are working in.
- Name
projectTags- Type
- array of string
- Description
The complete set of tag names. Anything you leave out is removed; an empty array clears them all.
Request
curl -X POST https://api.babele.co/api/Project/SaveTags \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlIiwiZXhwIjoxNzQzODY1MjA3fQ.DEMO_SIGNATURE_NOT_A_REAL_TOKEN" \
-H "Content-Type: application/json" \
-d '{"projectId":1714,"communityId":999,"projectTags":["energy","healthcare","climate"]}'
Response
200 OK
