Makerble API
The Makerble API gives you programmatic access to your CRM and impact measurement data — contacts, projects, surveys, cases, outcomes, and more.
| Property | Value |
|---|---|
| Base URL | https://makerble.com/api/v2 |
| Staging URL | https://staging.makerble.com/api/v2 |
| Mock URL | {{HOST}}/mock |
| Protocol | HTTPS · JSON · REST |
| Auth | Token-based headers — X-User-Email + X-User-Token |
| Spec | openapi.yaml · OpenAPI 3.0.3 |
Authentication
Obtain a token by calling POST /users/sign_in. Tokens are long-lived and do not expire — each user has one fixed token.
Pass both headers on every authenticated request:
| Header | Value |
|---|---|
| X-User-Email | Your Makerble account email address |
| X-User-Token | Your authentication token from POST /users/sign_in |
Submit your email and password to receive your authentication token. Use this token in the X-User-Token header on all subsequent requests.
| Field | Type | Description | |
|---|---|---|---|
| user[email] | string | required | Your Makerble email address |
| user[password] | string | required | Your Makerble password |
user_id, email, and authentication_tokenPagination
All list endpoints support cursor-free offset pagination. The maximum per_page is 200.
| Parameter | Type | Default | Max | Description |
|---|---|---|---|---|
| page | integer | 1 | — | Page number |
| per_page | integer | 10 | 200 | Records per page |
| last_sync_datetime | string | — | — | ISO 8601 datetime — return only records updated after this value. Useful for incremental sync. |
{ page, page_size, page_count, total_count, data: [] }
Terminology
Makerble uses different terms in the front-end UI and the API. The API uses the back-end terms listed below.
| Front-end (UI) | API (back-end) |
|---|---|
| Organisation | Charity |
| Contact | Beneficiary |
| Contact Bio Form | Beneficiary Category |
| Survey | Story Category |
| Survey Campaign | Project Story Category |
| Survey Response / Timeline Update | Story |
| Activity / Engagement tracker | Change (stage: activity / participation) |
| Achievement / Choice / Numerical tracker | Indicator (type: binary / scale / value) |
| Dropdown / List field | Ratio Set |
| Answer Choice | Sub Ratio |
| Case Form | Custom Field Category |
Mock server
A Prism-powered mock server is running alongside these docs. It reads the OpenAPI spec and returns realistic example responses — safe to call without touching any real Makerble data.
X-User-Email and X-User-Token to receive 200 responses rather than 401s.
curl {{HOST}}/mock/beneficiary_types -H "X-User-Email: test@example.com" -H "X-User-Token: mock-token"
Organisations
Organisations (called Charities in the API) are the top-level entity. Each Organisation owns one or more Projects, and all data ultimately belongs to an Organisation.
| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Organisation ID |
Projects
Every Story and Case on Makerble belongs to a Project. A Project belongs to a single Organisation. Users hold one of three roles per Project: Editor (Manager), Reporter (Changemaker), or Observer (Analyst).
| Name | Type | Description | |
|---|---|---|---|
| page query |
integer | Page number (default 1) | |
| per_page query |
integer | Records per page (default 10, max 200) | |
| last_sync_datetime query |
string | ISO 8601 — return only records updated after this |
| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Project ID |
role_data[].editor_ids, reporter_ids, or observer_ids.times_recorded and contacts; Achievement trackers (Binary Indicators) give times_recorded and contacts_achieved; Choice trackers (Scale Indicators) give answers with a count and contacts per Sub Ratio; Numerical trackers (Value Indicators) give total and average_per_contact. times_recorded counts records, not people; contacts counts distinct Contacts tagged. anonymous_count is what was recorded with no Contact tagged. target, target_deadline and percent_of_target appear when the Project has a target.| Name | Type | Description | |
|---|---|---|---|
| project_ids query |
integer[] | Projects to include, as project_ids[]=619 or a JSON array string. Defaults to every Project you can view |
|
| start_date query |
string | First Story date to include, YYYY-MM-DD. Omit both dates for all time | |
| end_date query |
string | Last Story date to include, YYYY-MM-DD | |
| tracker_types query |
string[] | Any of activity, engagement, achievement, choice, numerical, as an array or comma-separated list. Defaults to all |
|
| group_by query |
string | project or month: adds a groups array to each tracker (empty months included) |
|
| page query |
integer | Page number (default 1) | |
| per_page query |
integer | Trackers per page (default 10, max 200) |
Users
Platform users with login credentials. Creating users requires a separate API Key — request one at api-key-request@makerble.com.
| Name | Type | Description | |
|---|---|---|---|
| page query |
integer | Page number | |
| per_page query |
integer | Records per page | |
| last_sync_datetime query |
string | ISO 8601 incremental sync |
| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | User ID |
auth_code API Key. Password must be 8+ chars with at least one number, special character, and capital letter.Contacts
Contacts (Beneficiaries in the API) are the people your organisation works with. Each Contact belongs to an Organisation and can be enrolled in multiple Projects. Custom fields are defined per Contact Bio Form.
GET /beneficiary_types to get the beneficiary_type_id (1=Person, 2=Object, 3=Organisation, 4=Animal) and GET /custom_fields to discover custom field IDs before creating a Contact.
| Name | Type | Description | |
|---|---|---|---|
| page query |
integer | Page number | |
| per_page query |
integer | Records per page | |
| charity_id query |
integer | Filter to Contacts in this Organisation | |
| project_id query |
integer | Filter to Contacts enrolled in this Project | |
| last_sync_datetime query |
string | ISO 8601 incremental sync |
| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Contact ID |
beneficiary.name, beneficiary.owner_id (User ID of the record owner). Submit custom field values as custom_fields: {"field_id": "value"}.| Name | Type | Description | |
|---|---|---|---|
| page query |
integer | Page number | |
| per_page query |
integer | Records per page |
| Name | Type | Description | |
|---|---|---|---|
| project_ids query |
integer[] | Only include these projects (project_ids[]=12&project_ids[]=34, or a JSON array string). Never widens access beyond the projects you can see. | |
| page query |
integer | Page number | |
| per_page query |
integer | Records per page |
Contact Bio Forms
Contact Bio Forms (Beneficiary Categories in the API) define the custom fields available when creating or editing a Contact. Use these endpoints to discover field IDs before calling POST /beneficiaries.
| Name | Type | Description | |
|---|---|---|---|
| page query |
integer | Page number | |
| per_page query |
integer | Records per page |
| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Form ID |
| Name | Type | Description | |
|---|---|---|---|
| beneficiary_category_ids[] query |
integer | Filter by Contact Bio Form ID (repeat for multiple) | |
| page query |
integer | Page number | |
| per_page query |
integer | Records per page |
Cases
Cases are structured records for a specific Contact within a Project. Each Case has a Case Owner (creator) and optional Case Workers. Case fields are defined by a Case Form (Custom Field Category).
GET /custom_field_categories to discover field definition IDs before creating a Case.
| Name | Type | Description | |
|---|---|---|---|
| page query |
integer | Page number | |
| per_page query |
integer | Records per page | |
| last_sync_datetime query |
string | ISO 8601 incremental sync |
project_id, beneficiary_id. Submit case form values in custom_field_categories_definition: {field_definition_id: value}.| Name | Type | Description | |
|---|---|---|---|
| page query |
integer | Page number | |
| per_page query |
integer | Records per page |
| Name | Type | Description | |
|---|---|---|---|
| page query |
integer | Page number |
Surveys
Surveys (Story Categories in the API) are the form templates used to create Stories. A Survey must be deployed as a Survey Campaign (Project Story Category) before Stories can be created with it in a Project.
GET /story_categories/:id before posting a Story. It returns the survey's fields, Indicator IDs, Outcome IDs, and valid Sub Ratio IDs — all of which are required in the Story payload.
| Name | Type | Description | |
|---|---|---|---|
| page query |
integer | Page number | |
| per_page query |
integer | Records per page |
current_fields), the choice type (single/multiple) for each Scale Indicator (scale_indicator_choices), and scoring bands (verdict_data).| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Survey ID |
| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Survey ID |
| project_id query |
integer | required | Project the Survey Campaign belongs to |
| page query |
integer | Page number |
| Name | Type | Description | |
|---|---|---|---|
| page query |
integer | Page number | |
| per_page query |
integer | Records per page |
id as send_survey_wave_id when generating survey links.| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Survey Campaign (Project Story Category) ID |
| page query |
integer | Page number | |
| per_page query |
integer | Records per page (max 200) |
survey_url yourself. At most 200 contacts and email addresses per request. A use_once link stops working after one response; an evergreen link stays active.| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Survey Campaign (Project Story Category) ID |
| beneficiary_ids body |
integer[] | Contacts in the Survey Campaign's Project | |
| emails body |
string[] | Email addresses, matched to an existing Contact of the organisation or creating one. No email is sent. | |
| send_survey_wave_id body |
integer | Wave, from the Waves endpoint | |
| link_expiry body |
string | use_once (default) or evergreen |
|
| is_anonymised body |
boolean | Default false |
send_survey_id and data: one link per Contact with survey_url, survey_token, link_expiry, expiredinvalid_beneficiary_ids), over 200 recipients, no recipients, or an unavailable Waveuse_once link that has been answered has expired: true.| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Survey Campaign (Project Story Category) ID |
| beneficiary_id query |
integer | Only this Contact's links | |
| send_survey_wave_id query |
integer | Only links for this Wave | |
| page query |
integer | Page number | |
| per_page query |
integer | Records per page (max 200) | |
| last_sync_datetime query |
string | ISO 8601 incremental sync |
Stories
Stories are the primary content format on Makerble — they capture text, media, and progress towards Changes and Indicators, and can be tagged to Contacts. Every Story belongs to a Project and is created using a Survey.
Story timestamps: actual_created_at = Date Posted (database time) · created_at = Date Happened (user-selected, can be backdated) · updated_at = Date Edited.
| Name | Type | Description | |
|---|---|---|---|
| page query |
integer | Page number | |
| per_page query |
integer | Records per page | |
| last_sync_datetime query |
string | ISO 8601 incremental sync |
| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Story ID |
story.project_id, story.story_category_id, story.story_group: "change_created", story.story_format: "old".
Use
story_indicator_beneficiaries for indicator responses, story_changes for metric totals, and custom_fields for survey text/date/time fields.
For binary indicators: include
binray_indicator_value: "on" if ticked — omit the record entirely if not ticked. Activity Changes cannot be tagged to individual Contacts.POST /stories when a person should check the response first.
Send
story.project_id, story.story_category_id and story.text, plus optional story.event_id, beneficiaries (Contact IDs), story_privacy and custom_fields.
Allowed for the Project's editors, reporters and observers, the organisation's editors and reporters, and the workers and managers of
story.event_id when that Event belongs to the Project. Anyone else gets 403, as does a story.charity_id that isn't the Project's organisation.draft_story_id| Name | Type | Description | |
|---|---|---|---|
| story_category_id query |
integer | Filter by Survey | |
| project_ids[] query |
integer | Filter by Project ID (repeat for multiple) | |
| start_date query |
string | YYYY-MM-DD — stories on or after this date | |
| end_date query |
string | YYYY-MM-DD — stories on or before this date |
| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Story ID |
Media Gallery
Every photo, video, audio file and document attached to Stories and to Contacts' bios in one organisation, in one list. Only files from Stories and Contacts the user is already allowed to view are returned, so two users can see different results for the same organisation.
kind, file_name, content_type, file_size, caption, source_type (story or contact), source_id, source_title (Story title or Contact name), project_id, project_name, uploaded_at and thumbnail_url (photos only).
kind_counts gives the number of files of each kind for the same filters, ignoring kind. Filters combine with AND.
Story and Contact filters combine as on a Progress Board: Story files must match the Story filters and, if any Contact filter is set, involve a matching Contact. Contact bio files must match the Contact filters; the Story filters' Projects apply through Project membership, and any other Story filter means the Contact must appear in a matching Story.
| Name | Type | Description | |
|---|---|---|---|
| charity_id query |
integer | required | Organisation ID |
| kind query |
string | photo, video, audio or document |
|
| search query |
string | Matches the start of words in the file name, Story title, Contact name and caption | |
| source[] query |
string | stories and/or contacts (Contact bios). Default both |
|
| sort query |
string | newest (default) or oldest, by upload date |
|
| story_filters[...] query |
object | Timeline (Story) Filters, e.g. story_filters[project_ids][], story_filters[story_category_ids][] (Surveys), story_filters[user_ids][] (Authors), story_filters[created_at_from] (YYYY/MM/DD - YYYY/MM/DD) |
|
| contact_filters[...] query |
object | Contact Filters, e.g. contact_filters[group_ids][], contact_filters[beneficiary_types][] (Contact types), contact_filters[project_ids][] |
|
| page query |
integer | Page number (default 1) | |
| per_page query |
integer | Records per page (default 10, max 200) | |
| last_synced_datetime query |
string | ISO 8601 — return only files indexed or changed after this |
kind_counts per File typecharity_id or unreadable last_synced_datetimefield_name (Profile picture, <field> (file field), Story attachment or Contact attachment), download_url and download_url_expires_in (seconds).
Permissions are checked again on every request.
download_url is a signed link that expires quickly, so request the file again for a fresh one rather than storing it.| Name | Type | Description | |
|---|---|---|---|
| id query |
integer | required | Media item ID, from the list above |
field_name and a short-lived download_urlStory Metrics
Sub-resources that record per-story metric progress. Filter by story_id on any of these endpoints to get all metric data for a specific Story.
| Name | Type | Description | |
|---|---|---|---|
| story_id query |
integer | Filter to a specific Story | |
| page query |
integer | Page number |
| Name | Type | Description | |
|---|---|---|---|
| page query |
integer | Page number |
| Name | Type | Description | |
|---|---|---|---|
| story_id query |
integer | Filter to a specific Story | |
| page query |
integer | Page number |
| Name | Type | Description | |
|---|---|---|---|
| story_id query |
integer | Filter to a specific Story | |
| page query |
integer | Page number |
| Name | Type | Description | |
|---|---|---|---|
| page query |
integer | Page number |
Versions
Versions are the audit trail behind the Manage Versions page: every time a Contact is created or edited, a Version records who did it, when, and a full snapshot of every field at that moment. Only Contacts are versioned so far.
Visible to Charity Editors (any Contact in their Organisation) and Project Editors (Contacts in at least one of their Projects). Anything else returns 404. user_name is System when no signed-in user made the change, e.g. a CSV import.
| Name | Type | Description | |
|---|---|---|---|
| record_type query |
string | required | Contact (the only type for now) |
| record_id query |
integer | required | Contact (Beneficiary) ID |
| page query |
integer | Page number | |
| per_page query |
integer | Records per page (default 10, max 200) | |
| last_sync_datetime query |
string | ISO 8601 — only Versions created after this |
| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Version ID |
Changes
Changes are custom KPIs (Activity and Participation trackers). They appear in Progress Panel columns 1 and 2. Activity Changes are numerical metrics; Participation Changes track attendance and can tag individual Contacts.
| Name | Type | Description | |
|---|---|---|---|
| page query |
integer | Page number | |
| per_page query |
integer | Records per page | |
| last_sync_datetime query |
string | ISO 8601 incremental sync |
Indicators
Indicators are linked to Outcomes and appear in Progress Panel columns 3–5. Three types: Scale (multiple-choice using a Ratio Set), Binary (tickbox), Value (numerical).
| Name | Type | Description | |
|---|---|---|---|
| page query |
integer | Page number | |
| per_page query |
integer | Records per page | |
| include_public_library query |
boolean | Also include Indicators from the public library shared by all organisations (default false) |
| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Indicator ID |
| include_public_library query |
boolean | Allow a public-library Indicator from another organisation to be returned (default false) |
| Name | Type | Description | |
|---|---|---|---|
| story_category_id query |
integer | Filter by Survey | |
| indicator_id query |
integer | Filter by Indicator |
| Name | Type | Description | |
|---|---|---|---|
| page query |
integer | Page number |
Outcomes
Outcomes are the top-level impact categories. Progress is tracked via Indicators, not Outcomes directly. Each Outcome has a stage (short/medium/long-term) that determines which Progress Panel column its Indicators appear in.
| Name | Type | Description | |
|---|---|---|---|
| page query |
integer | Page number | |
| per_page query |
integer | Records per page |
| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Outcome ID |
Framework Sets
A Framework Set groups Impact Frameworks (template in the API) into one thing an organisation reports its contribution towards. For example, the 17 SDG Impact Frameworks form the set "UN Sustainable Development Goals"; others are TOMs, a funder's outcomes framework or an organisation's own strategy. Each set names its two levels, e.g. Goal › Target: level 1 is an Impact Framework and level 2 an Outcome inside it.
availability decides who can use a set: platform (every organisation; created by System Access users), network (every organisation in a Network; created by that Network's admins) or charity (one organisation; created by its organisation admins).
POST /framework_links. A set whose value_source is set_values uses the Financial Value it defines for each Outcome (financial_values) instead of the organisation's own.
| Name | Type | Description | |
|---|---|---|---|
| charity_id query |
integer | required | The Organisation ID; the user must belong to it |
| page query |
integer | Page number | |
| per_page query |
integer | Records per page | |
| last_synced_datetime query |
string | ISO 8601 incremental sync |
| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Framework Set ID |
frameworks in order and financial_valuescharity_id, name, availability, network_id, level1_singular, level1_plural, level2_singular, level2_plural, value_source, version_label, supersedes_id, status, frameworks: [{template_id, short_code, colour, text_colour}] in order, and new_frameworks: [name] to create new Impact Frameworks.availabilityframeworks (when sent) replaces the ordered list; financial_values: [{outcome_id, financial_value_id}] replaces the Financial Value chosen for each Outcome.| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Framework Set ID |
| Name | Type | Description | |
|---|---|---|---|
| charity_id query |
integer | required | The Organisation ID; the user must belong to it |
| page query |
integer | Page number | |
| per_page query |
integer | Records per page | |
| last_synced_datetime query |
string | ISO 8601 incremental sync |
indicator_name, outcome_title, project_ids and all_projectscharity_id, indicator_id, outcome_id, project_ids (empty: every project). Linking again with more projects adds them to the existing link.| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Linked indicator ID |
| charity_id query |
integer | required | The Organisation ID |
Cohort Trackers
A Cohort Tracker is a metric that counts the Contacts in a Project or Album who meet a set of Contact Filter criteria, e.g. "Children attending 75%+". It is placed in an Impact Scorecard column like other metrics and targeted with a number of Contacts to reach. Every tracker counts only members of the Project or Album it is placed on: membership is ever_enrolled (anyone whose status History shows them Enrolled at any time) or currently_enrolled.
POST /cohort_trackers/preview, create the tracker, then place it on a Project with POST /cohort_trackers/{id}/projects/{project_id}. Albums pick it up from their Projects.
| Name | Type | Description | |
|---|---|---|---|
| charity_id query |
integer | required | The Organisation ID |
| page query |
integer | Page number | |
| per_page query |
integer | Records per page | |
| last_sync_datetime query |
string | ISO 8601 incremental sync |
| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Cohort Tracker ID |
usage and names_projects_or_albumscharity_id, cohort_tracker: {criteria, membership}. criteria takes any key the Contacts page's Filters sidebar sends. project_ids, bundle_ids, narrow_bundle_ids, projects_states_hash, project_beneficiary_states, project_story_category_ids, attendance_rate, distance_travelled, indicator_comparisons and indicator_sub_ratios_hash follow the Project or Album and the reporting period; the other sections (e.g. group_ids, age_from) apply to the Contacts' current details. Keys no filter reads are dropped.count of matching Contacts and the normalised criteriamembershipcohort_tracker: {charity_id, name, description, membership, criteria}.| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Cohort Tracker ID |
| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Cohort Tracker ID |
| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Cohort Tracker ID |
| project_id path |
integer | required | Project ID |
| column query |
string | required | activities, engagement, potential, behaviour or growth |
| target query |
integer | One-off target: a number of Contacts to reach |
{cohort_tracker_id, project_id, column, target}| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Cohort Tracker ID |
| project_id path |
integer | required | Project ID |
{cohort_tracker_id, project_id, column, target, deadlines: [{date, number}]}| Name | Type | Description | |
|---|---|---|---|
| target query |
integer | One-off target: a number of Contacts to reach, not a total that adds up across periods | |
| deadlines query |
array | [{date: "YYYY-MM-DD", number}], replacing this tracker's deadline targets; [] clears them |
| Name | Type | Description | |
|---|---|---|---|
| bundle_id path |
integer | required | Album ID |
{cohort_tracker_id, album_id, album_target_type, target, deadlines}| Name | Type | Description | |
|---|---|---|---|
| target query |
integer | One-off target for the Album; never the sum of its Projects' | |
| deadlines query |
array | [{date, number}], saved as the Album's manual targets |
| Name | Type | Description | |
|---|---|---|---|
| project_id path |
integer | required | Project ID |
| timeframe query |
string | period, year_to_date or all_time (default). Each is worked out afresh: Year to Date is not the sum of the periods |
|
| as_of query |
date | The deadline the window ends on (default: the next Target Deadline, or today) | |
| page query |
integer | Page of Contacts | |
| per_page query |
integer | Contacts per page (default 10, max 200) |
{count, eligible_count, target, starts_on, ends_on, page, page_size, page_count, total_count, data: [{id, name, qualifying_value}]}. A Contact you can't read is {restricted: true}| Name | Type | Description | |
|---|---|---|---|
| bundle_id path |
integer | required | Album ID |
| timeframe query |
string | period, year_to_date or all_time (default) |
|
| as_of query |
date | The deadline the window ends on | |
| page query |
integer | Page of Contacts | |
| per_page query |
integer | Contacts per page (default 10, max 200) |
Filtered Metrics
A filtered version counts a standard metric again for only some responses and Contacts, e.g. "Session attendances — Female, under 21". The metric is a Change (Activity or Engagement tracker) or an Indicator (Choice, Achievement or Numerical tracker) already on the Project. It counts attendances or answers, not Contacts: to count Contacts, use a Cohort Tracker. It has its own row, name, column and targets on the Results Canvas, and Albums show every filtered version on their Projects.
response_criteria filters the responses, as a Progress Board's "Filter responses/stories by" does: story_category_ids (Surveys), wave_ids (Intervals), date_range (Date Happened, "dd/mm/yyyy - dd/mm/yyyy"), label_ids and author_ids. contact_criteria filters the Contacts tagged in them, in the Contact Filters format. Age is worked out at the date of each response; other Bio fields use the Contact's current value; the other sections are judged at the end of each reporting period.
POST /projects/{project_id}/filtered_metrics/preview, then add the filtered version with POST /projects/{project_id}/filtered_metrics. Read its figure with GET .../filtered_metrics/{id}/results.
| Name | Type | Description | |
|---|---|---|---|
| project_id path |
integer | required | Project ID |
| page query |
integer | Page number | |
| per_page query |
integer | Records per page | |
| last_synced_datetime query |
string | ISO 8601 incremental sync |
filtered_metric: {parent_type, parent_id, response_criteria, contact_criteria}.| Name | Type | Description | |
|---|---|---|---|
| project_id path |
integer | required | Project ID |
{count, total}: how many of the metric's tagged responses pass the filters, and how many there arefiltered_metric: {parent_type: "Change"|"Indicator", parent_id, display_name, column, response_criteria, contact_criteria}. A Change's version goes after it in its column unless column is given; an Indicator's sits under its Outcome.| Name | Type | Description | |
|---|---|---|---|
| project_id path |
integer | required | Project ID |
| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Filtered version ID |
filtered_metric: {display_name, response_criteria, contact_criteria}. Criteria sent replace the stored ones.| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Filtered version ID |
| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Filtered version ID |
| Name | Type | Description | |
|---|---|---|---|
| timeframe query |
string | period, year_to_date or all_time (default) |
|
| as_of query |
string | YYYY-MM-DD the timeframe ends; defaults to the next Target Deadline, or today |
{filtered_metric_id, timeframe, start_date, end_date, number, unit}| Name | Type | Description | |
|---|---|---|---|
| bundle_id path |
integer | required | Album ID |
| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Filtered version ID |
| Name | Type | Description | |
|---|---|---|---|
| timeframe query |
string | period, year_to_date or all_time (default) |
|
| as_of query |
string | YYYY-MM-DD |
Event Formats
Event Formats (Event Categories in the API) are the templates an organisation's events are created from, such as Workshops, Classes or Meetings. Only an Organisation Admin of the organisation that owns an Event Format can delete it, and only once it has no events and is not added to any project. Default formats can be deleted under the same rules.
| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Event Format (Event Category) ID |
Ratio Sets & Sub Ratios
Ratio Sets are reusable dropdown/list field definitions. Sub Ratios are the individual answer choices within a Ratio Set. Sub Ratio IDs are required when submitting Scale Indicator responses in a Story.
| Name | Type | Description | |
|---|---|---|---|
| page query |
integer | Page number | |
| per_page query |
integer | Records per page |
| Name | Type | Description | |
|---|---|---|---|
| ratio_set_ids[] query |
integer | Filter by Ratio Set ID (repeat for multiple) | |
| page query |
integer | Page number |
| Name | Type | Description | |
|---|---|---|---|
| id path |
integer | required | Sub Ratio ID |
| Name | Type | Description | |
|---|---|---|---|
| beneficiary_category_ids[] query |
integer | Filter by Contact Bio Form ID |
Case Forms
Case Forms (Custom Field Categories in the API) define the structured fields available on a Case. Each form contains Custom Field Definitions — the reusable fields — and Custom Field Category Definitions — the record created when a field is added to a form.
| Name | Type | Description | |
|---|---|---|---|
| page query |
integer | Page number | |
| per_page query |
integer | Records per page |