---
title: Fulcrum API Integration on Truto
slug: fulcrum
category: Survey
canonical: "https://truto.one/integrations/detail/fulcrum/"
---

# Fulcrum API Integration on Truto



**Category:** Survey  
**Status:** Beta

## MCP-ready AI tools

Truto exposes 144 tools for Fulcrum that AI agents can call directly.

- **create_a_fulcrum_query** — Execute a read-only SQL query against your Fulcrum organization's data over HTTP POST. Returns the result set including fields (column metadata), rows, time, and date. Queries cannot exceed 10 seconds of processing time. Required: q.
- **list_all_fulcrum_queries** — Execute a read-only SQL query against Fulcrum forms, records, and related tables via HTTP GET. Returns: fields, rows, time, date. Queries cannot exceed 10 seconds of processing time. Required: q.
- **list_all_fulcrum_users** — List the users in your Fulcrum organization. Returns a paginated collection of user records including id, created_at, and updated_at; the API reference does not enumerate the remaining user fields. No required parameters.
- **list_all_fulcrum_authorizations** — List all authorizations in Fulcrum. Returns an empty success response with no body fields. Pagination is handled automatically.
- **create_a_fulcrum_authorization** — Create a new authorization in Fulcrum by posting an AuthorizationRequest JSON body. Returns an empty success response with no body fields. Requires a JSON AuthorizationRequest body. Required: authorization.
- **get_single_fulcrum_authorization_by_id** — Get a single Fulcrum authorization by id. Returns an empty success response with no body fields. Required: id.
- **fulcrum_authorizations_bulk_update** — Update an existing Fulcrum authorization identified by id by sending an AuthorizationRequest JSON body. Returns an empty success response with no body fields. Required: id, authorization.
- **fulcrum_authorizations_bulk_delete** — Delete a Fulcrum authorization by id. Returns an empty success response with no body fields. Required: id.
- **list_all_fulcrum_roles** — List Fulcrum roles. Returns the roles collection where each role includes id, name, and created_at/updated_at timestamps.
- **list_all_fulcrum_memberships** — List Fulcrum memberships, optionally filtered to a specific form, project, or layer using form_id, project_id, or layer_id. Returns an empty 200 response on success.
- **fulcrum_memberships_change_permissions** — Add or remove membership permissions on layers, forms, or projects for Fulcrum members. Returns an empty 200 response on success. Required: change.
- **create_a_fulcrum_membership** — Create a new member in Fulcrum. Returns an empty 200 response on success. Required: membership.
- **get_single_fulcrum_membership_by_id** — Get a single membership in Fulcrum by id. Returns the membership record including id, user_id, created_at, and updated_at. Required: id.
- **fulcrum_memberships_bulk_update** — Update a Fulcrum member's parameters by id. Returns an empty 200 response on success. Does not work when the member belongs to multiple organizations. Required: id.
- **fulcrum_memberships_bulk_delete** — Delete a Fulcrum membership (member) by id. Returns an empty 200 response on success. Required: id.
- **list_all_fulcrum_permissions** — List membership permissions in Fulcrum, filtered by permission type and object. Returns a group object with its name, description, and id. Required: type, object_id.
- **list_all_fulcrum_groups** — List Fulcrum groups. Returns each group's name, description, and id; set associations=true to also include the group's assigned member_ids, layer_ids, project_ids, and form_ids.
- **create_a_fulcrum_group** — Create a Fulcrum group. Returns the created group's id, name, and description. Requires name. Required: group.
- **get_single_fulcrum_group_by_id** — Get a single Fulcrum group by id. Returns: id, name, description, member_ids, layer_ids, project_ids, form_ids. Required: id.
- **fulcrum_groups_get_resource** — Get a Fulcrum group's assigned resources. Lists the members, projects, layers, or forms associated with the group, depending on the resource requested. The returned records are resource-specific — their fields depend on which resource is requested. Required: group_id.
- **fulcrum_groups_change_permissions** — Update a Fulcrum group's permissions by adding or removing its assigned members, projects, layers, or forms. Returns the updated group with its id, name, and description.type and change.group_id; supply change.add / change.remove id lists to grant or revoke access. Required: permission_change.
- **fulcrum_groups_bulk_update** — Update a Fulcrum group's name and/or description by id. Returns: group. Required: id, group.
- **fulcrum_groups_bulk_delete** — Delete a Fulcrum group by id. Returns an empty 204 response on success. Required: id.
- **list_all_fulcrum_forms** — List Fulcrum forms (app schemas) in your organization. Returns each form's id, name, description, elements, status_field, record_count, created_at, and updated_at. Filter by type and status; pass schema=false to return only form metadata.
- **create_a_fulcrum_form** — Create a Fulcrum form (app schema). Returns the created form object including id, name, description, elements, status_field, record_count, and created_at. Requires form.name and form.elements; invalid submissions return a 422 validation error. Required: form.
- **get_single_fulcrum_form_by_id** — Get a single Fulcrum form (app schema) by id. Returns: id, name, created_at, updated_at, form. Pass schema=false to return only the form metadata. Required: id.
- **fulcrum_forms_history** — Get the saved version history of a form in Fulcrum. Returns an empty response body on success. Required: form_id.
- **fulcrum_forms_bulk_update** — Update a Fulcrum form (app schema) by id. Returns the updated form object including id, name, elements, status_field, record_count, and updated_at. The entire form object must be sent — omitting existing elements results in data loss. Invalid submissions return a 422 validation error. Required: id, form.
- **fulcrum_forms_bulk_delete** — Delete a Fulcrum form by id. Returns an empty 204 response on success. Required: id.
- **list_all_fulcrum_records** — List Fulcrum records collected in your organization, filterable by form, project, changeset, bounding box, and client or server date ranges. Returns records with id, form_id, form_values, geometry, latitude/longitude, status, version, and created_at/updated_at timestamps. No required parameters; omitting form_id or project_id queries across all records.
- **create_a_fulcrum_record** — Create a Fulcrum record for a form. Returns the created record object including its id, form_id, form_values, status, latitude, longitude, geometry, and version. Requires form_id and form_values (nested under record); supply latitude/longitude or a GeoJSON geometry to set the location. The API does not validate custom form field values. Required: record.
- **get_single_fulcrum_record_by_id** — Get a single Fulcrum record by id. Returns the record object including its id, form_id, form_values, status, latitude, longitude, geometry, and version. Required: id.
- **fulcrum_records_history** — Get the complete version history of a record in Fulcrum. Returns a paginated history envelope including current_page, per_page, total_count, total_pages, and a records array of version snapshots with fields such as id, version, status, form_id, and form_values. Required: record_id.
- **fulcrum_records_partial_update** — Partially update a record in Fulcrum by id — only the fields included in the request body are modified, all other fields remain unchanged. Returns the updated record object (under record) including id, form_id, form_values, status, latitude, longitude, and version. Required: id, record.
- **fulcrum_records_bulk_update** — Update a Fulcrum record by id with a provided record object. The record object must be the complete representation of the record — any fields not included are assumed null. Returns an empty success response on success. Requires id, plus form_id, latitude, longitude, and form_values inside the record body. Required: id, record.
- **fulcrum_records_bulk_delete** — Delete a record from your Fulcrum organization by id. Returns the deleted record object including id, form_id, form_values, geometry, and updated_at. Required: id.
- **list_all_fulcrum_records_histories** — List the version history of a collection of Fulcrum records. Returns record objects including id, form_id, version, form_values, updated_at, and changeset_id. Useful for retrieving records from a specific changeset or from forms that have been deleted.
- **list_all_fulcrum_choice_lists** — List all choice lists in Fulcrum. The upstream API documents an empty success response body for this endpoint, so no response fields are specified. Returns an empty 204 response on success.
- **create_a_fulcrum_choice_list** — Create a new choice list in Fulcrum by submitting a ChoiceListRequest JSON body. Returns an empty 204 response on success. Required: choice_list.
- **get_single_fulcrum_choice_list_by_id** — Get a single choice list in Fulcrum by id. The upstream API documents an empty success response body for this endpoint, so no response fields are specified. Returns an empty 204 response on success. Required: id.
- **fulcrum_choice_lists_bulk_update** — Update an existing choice list in Fulcrum by id, replacing its definition with a ChoiceListRequest JSON body. Returns an empty 204 response on success. Required: id, choice_list.
- **fulcrum_choice_lists_bulk_delete** — Delete a choice list in Fulcrum by id. Returns an empty 204 response on success. Required: id.
- **list_all_fulcrum_classification_sets** — List classification sets in Fulcrum — the grouped classification options referenced by ClassificationField form elements. Returns an empty response body on success.
- **create_a_fulcrum_classification_set** — Create a classification set in Fulcrum by submitting a classification set payload following the ClassificationSetRequest schema defined in Fulcrum's API reference. Returns an empty response body on success. Required: classification_set.
- **get_single_fulcrum_classification_set_by_id** — Get a single classification set in Fulcrum by id. Returns an empty response body on success. Required: id.
- **fulcrum_classification_sets_bulk_update** — Update a classification set in Fulcrum by id, submitting the updated payload following the ClassificationSetRequest schema defined in Fulcrum's API reference. Returns an empty response body on success. Required: id, classification_set.
- **fulcrum_classification_sets_bulk_delete** — Delete a classification set in Fulcrum by id. Returns an empty 204 response on success. Required: id.
- **list_all_fulcrum_projects** — List Fulcrum projects for the account. Returns the matching project object including its id and project attributes. Requires the API to be enabled on your Fulcrum plan.
- **create_a_fulcrum_project** — Create a new Fulcrum project. Returns the created project object including its id and project attributes. Required: project.
- **get_single_fulcrum_project_by_id** — Get a single Fulcrum project by id. Returns the project object including its id and project attributes. Requires id. Required: id.
- **fulcrum_projects_bulk_update** — Update an existing Fulcrum project by id, sending the updated project attributes as a JSON request body. Returns an empty 204 response on success. Required: id, project.
- **fulcrum_projects_bulk_delete** — Delete a Fulcrum project by id. Returns an empty 204 response on success. Requires id and project_id. Required: id.
- **list_all_fulcrum_layers** — List all layers in Fulcrum. Returns layer objects with id, name, type, key, and created/updated timestamps.
- **create_a_fulcrum_layer** — Create a new layer in Fulcrum, e.g. an MBTiles layer uploaded via the file upload URL. Returns the created layer object including id, name, type, key, and created_at. Send a layer payload with name, type, and (for MBTiles) the file key. Required: layer.
- **get_single_fulcrum_layer_by_id** — Get a single layer from Fulcrum by id. Returns the layer object including id, name, type, key, and created/updated timestamps. Required: id.
- **fulcrum_layers_bulk_update** — Update an existing layer in Fulcrum by id. Returns the updated layer including id, name, type, key, and updated_at. Required: id, layer.
- **fulcrum_layers_bulk_delete** — Delete a layer from Fulcrum by id. Returns an empty 204 response on success. Required: id.
- **list_all_fulcrum_photos** — List photo metadata in Fulcrum. Returns photo metadata records including access_key, uploaded, stored, url, and created_at. Supports filtering and sorting via query parameters.
- **create_a_fulcrum_photo** — Upload a photo file to Fulcrum to make it available for association with records. Returns the created photo metadata object under the photo key.
- **fulcrum_photos_file** — Download the original photo file from Fulcrum by id. Returns the raw image binary (image/jpeg), not JSON metadata, so no field-level schema applies. Required: id.
- **get_single_fulcrum_photo_by_id** — Get a single photo's metadata from Fulcrum by id. Returns the photo metadata object under the photo key (the source docs do not enumerate individual photo fields). Required: id.
- **fulcrum_photo_thumbnails_json** — Retrieve metadata for a Fulcrum photo's thumbnail variant by photo id. Returns an empty JSON object on success; the upstream spec documents no enumerable response fields. Required: photo_id.
- **fulcrum_photo_thumbnails_file** — Download a Fulcrum photo's thumbnail image by photo id. Returns the raw binary JPEG image data of the thumbnail variant. Required: photo_id.
- **fulcrum_photo_larges_json** — Retrieve metadata for a photo's large variant in Fulcrum. Returns an empty success response with no documented body fields. Required: photo_id.
- **fulcrum_photo_larges_file** — Download a photo's large variant image file in Fulcrum. Returns the raw binary JPEG image data for the large variant. Required: photo_id.
- **list_all_fulcrum_sketches** — List sketch metadata from Fulcrum, filterable by form, record, and upload status. Returns each sketch's access_key, form_id, record_id, processed, stored, uploaded, created_at, and updated_at.
- **create_a_fulcrum_sketch** — Upload a sketch image file to Fulcrum to associate with a record. Returns the created sketch object including id, form_id, record_id, processed, stored, and uploaded.file.
- **fulcrum_sketches_file** — Download the original sketch image file from Fulcrum by sketch_id. Returns the raw JPEG binary file.
- **get_single_fulcrum_sketch_by_id** — Get the metadata for a single Fulcrum sketch by sketch_id. Returns the sketch object including access_key, form_id, record_id, processed, stored, uploaded, created_at, and updated_at.
- **fulcrum_sketche_thumbnails_json** — Get metadata for a sketch's thumbnail variant in Fulcrum. Returns an empty 204 response on success. Required: sketch_id.
- **fulcrum_sketche_thumbnails_file** — Download the thumbnail variant of a sketch in Fulcrum. Returns the raw binary JPEG image data (image/jpeg) rather than JSON fields. Required: sketch_id.
- **fulcrum_sketche_larges_json** — Retrieve metadata for a Fulcrum sketch's large variant. Returns an empty success response with no documented body fields. Required: sketch_id.
- **fulcrum_sketche_larges_file** — Download the large variant of a Fulcrum sketch as a JPEG image. Returns the raw image binary, not a JSON object. Required: sketch_id.
- **list_all_fulcrum_signatures** — List Fulcrum signature metadata for your organization, filterable by record, form, and upload state. Returns signature records including access_key, uploaded, stored, and processed, plus record_id, form_id, and created_at/updated_at timestamps. All filters are optional.
- **create_a_fulcrum_signature** — Upload a signature file to Fulcrum to associate with a record. Returns the created signature metadata including id, access_key, processed, stored, and uploaded, plus record/form ids and timestamps.
- **fulcrum_signatures_file** — Download the original signature file from Fulcrum as a PNG image. Returns the raw binary PNG file. Required: id.
- **get_single_fulcrum_signature_by_id** — Get metadata for a single Fulcrum signature by id. Returns the signature record including access_key, url, uploaded, stored, and processed, plus record_id, form_id, file_size, and thumbnail, large, and original image URLs. Required: id.
- **fulcrum_signature_thumbnails_json** — Get metadata for a Fulcrum signature's thumbnail variant. Returns the signature's metadata object; its fields are not enumerated in the upstream documentation. Required: signature_id.
- **fulcrum_signature_thumbnails_file** — Download the thumbnail variant of a Fulcrum signature as a PNG image. Returns the raw binary PNG file data. Required: signature_id.
- **list_all_fulcrum_videos** — List video metadata in Fulcrum. Returns: videos, current_page, total_pages, total_count, per_page.
- **fulcrum_videos_file** — Download a video's original MP4 file in Fulcrum by id. Returns the raw video/mp4 binary stream. Required: id.
- **get_single_fulcrum_video_by_id** — Get a single video's metadata in Fulcrum by id. Returns: video. Required: id.
- **fulcrum_video_tracks_geojson** — Get a Fulcrum video's GPS track in GeoJSON format. Returns the raw GeoJSON track document; the response body is format-specific file content rather than an enumerated record. Required: video_id.
- **fulcrum_video_tracks_kml** — Get a Fulcrum video's GPS track in KML format. Returns the raw KML track document; the response body is format-specific file content rather than an enumerated record. Required: video_id.
- **fulcrum_video_tracks_gpx** — Get a Fulcrum video's GPS track in GPX format. Returns the raw GPX track document; the response body is format-specific file content rather than an enumerated record. Required: video_id.
- **fulcrum_video_tracks_json** — Get a Fulcrum video's GPS track in JSON format. Returns the raw JSON track document; the response body is format-specific file content rather than an enumerated record. Required: video_id.
- **fulcrum_video_smalls_file** — Get the small MP4 variant of a video in Fulcrum. Returns the raw video/mp4 binary file data. Required: video_id.
- **fulcrum_video_mediums_file** — Download the medium MP4 variant of a Fulcrum video. Returns the raw binary video/mp4 file content. Required: video_id.
- **fulcrum_video_thumbnail_smalls_file** — Download the small thumbnail variant of a video in Fulcrum. Returns the thumbnail as binary JPEG image data. Required: video_id.
- **fulcrum_video_thumbnail_small_squares_file** — Download a small square thumbnail variant for a Fulcrum video. Returns the thumbnail image itself as binary JPEG data (content-type-specific, not a JSON object). Required: video_id.
- **fulcrum_video_thumbnail_mediums_file** — Download the medium thumbnail image for a Fulcrum video. Returns the thumbnail image itself as binary JPEG data, not a JSON object. Required: video_id.
- **fulcrum_video_thumbnail_medium_squares_file** — Get the medium square thumbnail image for a Fulcrum video. Returns the thumbnail as binary JPEG image data (image/jpeg), not a JSON object. Required: video_id.
- **fulcrum_video_thumbnail_larges_file** — Download a large video thumbnail from Fulcrum (thumbnail_large.jpg variant). Returns the raw binary JPEG image data of the thumbnail. Required: video_id.
- **fulcrum_video_thumbnail_large_squares_file** — Download the large square JPEG thumbnail image for a Fulcrum video. Returns the thumbnail image itself as binary JPEG data (not a JSON object). Required: video_id.
- **fulcrum_video_thumbnail_huges_file** — Download the huge thumbnail image of a Fulcrum video. Returns the raw JPEG image binary (image/jpeg), not a JSON object. Required: video_id.
- **fulcrum_video_thumbnail_huge_squares_file** — Download a huge square thumbnail variant for a Fulcrum video. Returns the thumbnail image as JPEG binary data. Required: video_id.
- **create_a_fulcrum_videos_upload** — Upload a video to Fulcrum to be associated with a record. Sends the video file, an optional GPS track file, and a client-generated access key. Returns the uploaded video metadata under video, including its id, access_key, created_at, and updated_at.
- **list_all_fulcrum_audios** — List metadata for Fulcrum audio files, with optional filtering by associated record or form and by processing state. Returns audio file records including id, record_id, form_id, processed, stored, uploaded, created_at, and updated_at.
- **fulcrum_audios_file** — Download a Fulcrum audio file's original media by id. Returns the raw binary audio stream (audio/mp4) rather than a JSON object. Required: id.
- **get_single_fulcrum_audio_by_id** — Get metadata for a single Fulcrum audio file by id. Returns: audio. Required: id.
- **fulcrum_audio_tracks_geojson** — Get GPS tracks for all audio files in Fulcrum in GeoJSON format. Returns the GeoJSON track document with content-type-specific fields.
- **fulcrum_audio_tracks_kml** — Get GPS tracks for all audio files in Fulcrum in KML format. Returns the KML track document with content-type-specific fields.
- **fulcrum_audio_tracks_gpx** — Get GPS tracks for all audio files in Fulcrum in GPX format. Returns the GPX track document with content-type-specific fields.
- **fulcrum_audio_tracks_json** — Get GPS tracks for all audio files in Fulcrum in JSON format. Returns the JSON track document with content-type-specific fields.
- **fulcrum_tracks_geojson** — Get the GPS track for a single audio file in Fulcrum as a GeoJSON document. Returns the track with format-specific GeoJSON content rather than a fixed record shape. Required: audio_id.
- **fulcrum_tracks_kml** — Get the GPS track for a single audio file in Fulcrum as a KML document. Returns the track with format-specific KML content rather than a fixed record shape. Required: audio_id.
- **fulcrum_tracks_gpx** — Get the GPS track for a single audio file in Fulcrum as a GPX document. Returns the track with format-specific GPX content rather than a fixed record shape. Required: audio_id.
- **fulcrum_tracks_json** — Get the GPS track for a single audio file in Fulcrum as a JSON document. Returns the track with format-specific JSON content rather than a fixed record shape. Required: audio_id.
- **create_a_fulcrum_audio_upload** — Upload an audio file to Fulcrum as a multipart form upload, optionally with a GPS track file. Returns: audio.
- **list_all_fulcrum_attachments** — List Fulcrum attachments. Returns the attachments collection with total and total_count; each attachment includes id, name, file_size, url, uploaded_at, and status. Pass record_id to list a record's attachments; form_id returns a form's reference files only, not its record attachments.
- **create_a_fulcrum_attachment** — Create a Fulcrum attachment and get a signed URL to upload (PUT) the file to. Returns: url, id, headers, name, in, schema. Optionally include name and file_size; without file_size the attachment may be rejected once it has been uploaded. Required: owners.
- **get_single_fulcrum_attachment_by_id** — Get a single Fulcrum attachment by id. Returns: id, owners, name, file_size, url, uploaded_at, complete, attached_to_id, attached_to_type, status. Required: id.
- **delete_a_fulcrum_attachment_by_id** — Delete a Fulcrum attachment by id. The delete endpoint only applies to Form attachments — for record attachments, remove the attachment's association from the record instead. Returns an empty 204 response on success. Required: id.
- **fulcrum_attachments_copy_all** — Copy all reference files from one Fulcrum form to another. Returns the upstream copy-all response payload; the Fulcrum reference does not enumerate its field names. Requires a JSON request body (AttachmentCopyAllRequest). Limits: 100 reference files per form, 1GB total per form. Required: source_parent_id, destination_parent_id, parent_type.
- **fulcrum_attachments_finalize** — Finalize a Fulcrum attachment after its file has been uploaded, confirming the attachment and its owners. Returns an empty success response on success. Required: id.
- **list_all_fulcrum_changesets** — List all changesets in Fulcrum. Returns an empty 200 response on success.
- **fulcrum_changesets_close** — Close a changeset in Fulcrum, finalizing the batch of record changes it tracks. Returns an empty 200 response on success. Required: changeset_id.
- **create_a_fulcrum_changeset** — Create a new changeset in Fulcrum. Returns an empty 200 response on success. Requires a changeset request body. Required: changeset.
- **get_single_fulcrum_changeset_by_id** — Get a single changeset by id in Fulcrum. Returns an empty 200 response on success. Required: id.
- **fulcrum_changesets_bulk_update** — Update a changeset in Fulcrum by id. Returns an empty 200 response on success. Required: id, changeset.
- **list_all_fulcrum_webhooks** — List all Fulcrum webhooks configured for your organization. Returns each webhook's id, name, url, active, run_for_bulk_actions, and created_at/updated_at timestamps.
- **create_a_fulcrum_webhook** — Create a Fulcrum webhook that receives record event requests at a URL you choose. Returns the created webhook including id, name, url, active, and run_for_bulk_actions. Required: webhook.
- **get_single_fulcrum_webhook_by_id** — Get a single Fulcrum webhook by id. Returns: id, name, url, active, run_for_bulk_actions, created_at, updated_at, current_page, per_page, total_count, total_pages, webhooks. Required: id.
- **fulcrum_webhooks_bulk_update** — Update a Fulcrum webhook by id, for example to rename it or change its callback URL. Returns the updated webhook including id, name, url, active, and run_for_bulk_actions. Required: id, webhook.
- **fulcrum_webhooks_bulk_delete** — Delete a Fulcrum webhook by id so it stops receiving event requests. Returns an empty 204 response on success. Required: id.
- **list_all_fulcrum_audit_logs** — List audit logs in Fulcrum, filtering by source, activity, ip, user, or date range. Returns: id, name, description, updated_at.
- **get_single_fulcrum_audit_log_by_id** — Get a single audit log entry in Fulcrum by id. Returns: id, name, description, updated_at. Required: id.
- **list_all_fulcrum_workflows** — List all workflows in Fulcrum. Returns an empty success response on success. No required parameters; pagination is handled automatically.
- **create_a_fulcrum_workflow** — Create a new workflow in Fulcrum. Returns an empty success response on success. Requires a JSON workflow request body. Required: workflow.
- **get_single_fulcrum_workflow_by_id** — Get a single workflow in Fulcrum by id. Returns an empty success response on success. Required: id.
- **fulcrum_workflows_bulk_update** — Update an existing workflow in Fulcrum by id. Returns an empty success response on success. Required: id, workflow.
- **fulcrum_workflows_bulk_delete** — Delete a workflow in Fulcrum by id. Returns an empty success response on success. Required: id.
- **list_all_fulcrum_batches** — List Fulcrum batches, sorted by creation date descending by default. Returns batch objects including their id, status, objects_total, objects_success, and created_at.
- **create_a_fulcrum_batch** — Create a Fulcrum batch to bulk update or delete up to 10,000 records from an app in a single request. Returns the batch object including its id, status, objects_total, and created_at.operations with action, resource, form_id, and a query or ids record selection. Set batch.start to false to create a pending batch; once started, a batch cannot be terminated. Required: batch.
- **get_single_fulcrum_batch_by_id** — Get a single Fulcrum batch by id to inspect or poll its progress. Returns the batch object including its id, status, objects_total, objects_success, and created_at. Required: id.
- **fulcrum_batches_start** — Start a pending Fulcrum batch by id. Returns the batch object including its id, status, objects_total, and objects_success. Once started, a batch cannot be terminated. Required: batch_id.
- **create_a_fulcrum_operation** — Add operations to a pending Fulcrum batch to bulk delete records in a form or update their project, assignee, or status. Returns an empty 200 response on success. Max 10,000 records per batch; once started a batch cannot be terminated and only its first operation runs. Required: batch_id, operations.
- **list_all_fulcrum_report_templates** — List report templates in Fulcrum. Returns report templates with id, name, and description.
- **create_a_fulcrum_report_template** — Create a report template in Fulcrum. Returns the created report template with id, name, and description. Required: report_template.
- **get_single_fulcrum_report_template_by_id** — Get a report template in Fulcrum by id. Returns the report template with id, name, and description. Required: id.
- **fulcrum_report_templates_bulk_update** — Update a report template in Fulcrum by id. Returns the updated report template with id, name, and description. Required: id, report_template.
- **fulcrum_report_templates_bulk_delete** — Delete a report template in Fulcrum by id. Returns the deleted report template with id, name, and description. Required: id.
- **list_all_fulcrum_reports** — Download the generated PDF report file for a Fulcrum report by id. Returns the report as binary PDF content (application/pdf). Required: id.
- **create_a_fulcrum_report** — Generate a new Fulcrum report for a specific record, optionally using a report template. Returns the created report object with id, state, record_id, template_id, and url.record_id. Required: report.

## How it works

1. **Link your customer's Fulcrum account.** Use Truto's frontend SDK; we handle every OAuth and API key flow so you don't need to create the OAuth app.
2. **Authentication is automatic.** Truto refreshes tokens, stores credentials securely, and injects them into every API request.
3. **Call Truto's API to reach Fulcrum.** The Proxy API is a 1-to-1 mapping of the Fulcrum API.
4. **Get a unified response format.** Every response uses a single shape, with cursor-based pagination and data in the `result` field.

## Use cases

- **Sync field inspection data into FSM platforms** — Field service management SaaS can let their customers dispatch jobs and automatically ingest completed Fulcrum inspection records, signatures, and photos back into the work order lifecycle without manual data entry.
- **Generate compliance-ready audit PDFs** — Construction and EHS compliance platforms can trigger Fulcrum report generation on submitted audits and attach the resulting PDF plus audit log metadata to their customers' compliance ledgers for liability protection.
- **Overlay field GPS tracks on geospatial dashboards** — GIS and drone analytics platforms can pull technician walk paths extracted from Fulcrum video and audio captures as GeoJSON, layering ground-truth routes onto their proprietary mapping interfaces.
- **Keep Fulcrum dropdowns in sync with ERP data** — Operations and asset management SaaS can push live choice lists — active employees, inventory SKUs, job sites — into Fulcrum so field workers always select from current reference data pulled from the system of record.
- **Pipe structured field data into analytics warehouses** — BI and data platforms can run ad-hoc SQL queries against Fulcrum or stream record changes via webhooks, giving their customers aggregated field operations dashboards without building custom ETL.

## What you can build

- **Real-time record webhook listener** — Register Fulcrum webhooks programmatically to receive record create, update, and delete events and process submissions the moment a technician syncs from the field.
- **Form schema reader with dynamic field mapping** — Fetch Fulcrum form definitions to render your customers' custom fields inside your UI and map them to your internal data model without redeploying.
- **Media and attachment pipeline** — Download original and resized photo, signature, sketch, video, and audio binaries tied to each record for archival, display, or further processing.
- **PDF report generation on demand** — Trigger Fulcrum report templates against individual records and download finalized PDFs for inclusion in compliance workflows or customer-facing document trails.
- **Live choice list synchronization** — Bulk update Fulcrum choice lists and classification sets from your customers' authoritative data sources so field dropdowns always reflect current operational state.
- **Bulk record ingestion via changesets** — Group thousands of record edits into changesets and batches for enterprise-grade bidirectional sync without hitting single-record limits.

## FAQs

### How does end-user authentication to Fulcrum work?

Truto manages Fulcrum authorization creation and token storage for each of your end users. Your users connect their Fulcrum account once and Truto handles credential refresh and secure retrieval for every subsequent API call.

### Can we read custom form fields and their definitions?

Yes. Fulcrum forms are fully dynamic, and you can list form schemas to discover the custom field structure, then read each record's form_values payload to extract the actual submitted data per field.

### How do we get record updates in real time?

Use the Fulcrum webhook endpoints to programmatically register listeners for record events on behalf of your customers. Truto normalizes webhook delivery so you receive events through a single pipeline regardless of how many end users you have connected.

### Can we download photos, signatures, and videos attached to records?

Yes. You can fetch original binaries as well as thumbnail, small, medium, large, and huge-square variants for photos, sketches, signatures, and videos, plus pull extracted GeoJSON, KML, or GPX tracks from video and audio files.

### Does the integration support bulk operations?

Yes. Fulcrum exposes bulk update and bulk delete across records, forms, choice lists, classification sets, projects, memberships, and more, and you can group large edit sets using changesets and batches for atomic enterprise syncs.

### Can we run ad-hoc queries instead of paginating all records?

Yes. Fulcrum provides a read-only SQL query endpoint that lets you request specific slices of data on demand, which is ideal when your product only needs filtered subsets rather than full record exports.
