---
updatedAt: 2026-06-03T14:46:37.000Z
agentTools:
  projectIndex: https://developers.fieldwire.com/llms.txt
---

# Get all bubbles in project

# OpenAPI definition

```json
{
  "openapi": "3.0.3",
  "info": {
    "title": "Fieldwire Regional API",
    "version": "v3"
  },
  "servers": [
    {
      "url": "https://client-api.{region}.fieldwire.com",
      "variables": {
        "region": {
          "default": "us",
          "enum": [
            "ca",
            "eu",
            "us"
          ]
        }
      }
    }
  ],
  "components": {
    "headers": {
      "count": {
        "description": "Pagination header: number of entities in responses",
        "schema": {
          "type": "integer"
        }
      },
      "current_user_id": {
        "description": "Current user's id",
        "schema": {
          "type": "integer"
        }
      },
      "has_more": {
        "description": "True if there are more pages of results, false otherwise",
        "schema": {
          "type": "boolean"
        }
      },
      "last_synced_at": {
        "description": "To be used as input for `last_synced_at` query parameter to get the next page of results",
        "schema": {
          "type": "string",
          "format": "date-time"
        }
      },
      "ratelimit-limit-minute": {
        "description": "Maximum number of requests allowed per minute for this endpoint",
        "schema": {
          "type": "integer"
        }
      },
      "ratelimit-remaining-minute": {
        "description": "Number of requests remaining in the current minute window",
        "schema": {
          "type": "integer"
        }
      },
      "ratelimit-limit-hour": {
        "description": "Maximum number of requests allowed per hour for this endpoint",
        "schema": {
          "type": "integer"
        }
      },
      "ratelimit-remaining-hour": {
        "description": "Number of requests remaining in the current hour window",
        "schema": {
          "type": "integer"
        }
      },
      "ratelimit-reset": {
        "description": "Unix timestamp indicating when the rate limit window resets",
        "schema": {
          "type": "integer"
        }
      },
      "retry-after": {
        "description": "Number of seconds to wait before retrying the request",
        "schema": {
          "type": "integer"
        }
      }
    },
    "parameters": {
      "api_version": {
        "name": "Fieldwire-Version",
        "in": "header",
        "description": "Specifies the version of the API to talk to",
        "required": true,
        "schema": {
          "type": "string",
          "format": "date"
        }
      },
      "entities_filter": {
        "name": "Fieldwire-Filter",
        "in": "header",
        "description": "Specifies if request should include active, deleted or all (default) entities",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "active",
            "deleted"
          ]
        }
      },
      "entities_per_page": {
        "name": "Fieldwire-Per-Page",
        "in": "header",
        "description": "Specifies the number of entities to include in the request",
        "required": false,
        "schema": {
          "type": "integer",
          "maximum": 1000
        }
      },
      "project_id": {
        "name": "project_id",
        "in": "path",
        "description": "ID of the project this entity belongs to",
        "required": true,
        "schema": {
          "type": "string",
          "format": "uuid"
        }
      },
      "last_synced_at": {
        "name": "last_synced_at",
        "in": "query",
        "description": "Timestamp since when further updates should be included",
        "required": false,
        "schema": {
          "type": "string",
          "format": "date-time"
        }
      }
    },
    "schemas": {
      "bubble": {
        "type": "object",
        "description": "Entity that usually show up in a `Task` (Eg., messages, logs, photos, files etc.)",
        "required": [
          "id",
          "user_id",
          "project_id",
          "task_id",
          "kind",
          "created_at",
          "resolved_conflict",
          "device_created_at",
          "device_updated_at",
          "updated_at"
        ],
        "nullable": false,
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "nullable": false,
            "description": "ID of the entity"
          },
          "user_id": {
            "type": "integer",
            "format": "int32",
            "nullable": false,
            "description": "ID of the user who created this bubble"
          },
          "project_id": {
            "type": "string",
            "format": "uuid",
            "nullable": false,
            "description": "ID of the project this entity belongs to"
          },
          "file_name": {
            "type": "string",
            "nullable": true,
            "description": "Name of the file uploaded"
          },
          "task_id": {
            "type": "string",
            "format": "uuid",
            "nullable": false,
            "description": "ID of the task this bubble belongs to"
          },
          "file_url": {
            "type": "string",
            "nullable": true,
            "description": "URL of the potentially processed file"
          },
          "flattened_file_url": {
            "type": "string",
            "nullable": true,
            "description": "URL of the file that has the markups flattened too"
          },
          "original_url": {
            "type": "string",
            "nullable": true,
            "description": "URL of the file originally uploaded by the user"
          },
          "thumb_url": {
            "type": "string",
            "nullable": true,
            "description": "Thumb URL of the file if there is one"
          },
          "file_size": {
            "type": "integer",
            "format": "int32",
            "nullable": true,
            "description": "Size of file if there is one"
          },
          "kind": {
            "type": "integer",
            "enum": [
              1,
              2,
              10,
              11,
              12,
              13,
              20,
              21
            ],
            "format": "int32",
            "nullable": false,
            "description": "1=> TEXT, 2=> LOG, 10=> PHOTO, 11=> PHOTO WITH ANNOTATIONS, 12=> DRAWING WITH ANNOTATIONS, 13=> PHOTO SPHERE, 20=> ATTACHMENT, 21=> VIDEO"
          },
          "latitude": {
            "type": "number",
            "format": "double",
            "nullable": true,
            "description": "Latitude of where this photo bubble was created"
          },
          "longitude": {
            "type": "number",
            "format": "double",
            "nullable": true,
            "description": "Longitude of where this photo bubble was created"
          },
          "annotations": {
            "type": "string",
            "nullable": true,
            "deprecated": true,
            "description": "Annotations on the bubble"
          },
          "content": {
            "type": "string",
            "nullable": true,
            "description": "Bubble's message in case of a text bubble or the file's name"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "nullable": false,
            "description": "Time when the server created the entity"
          },
          "resolved_conflict": {
            "type": "boolean",
            "nullable": true,
            "description": "Specifies if PUT/PATCH request was rejected - do not store this field!"
          },
          "device_created_at": {
            "type": "string",
            "format": "date-time",
            "nullable": false,
            "description": "Time when the device created the entity"
          },
          "device_updated_at": {
            "type": "string",
            "format": "date-time",
            "nullable": false,
            "description": "Time when the device last updated the entity"
          },
          "original_created_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Time when the device created the originating linked entity"
          },
          "original_creator": {
            "type": "integer",
            "format": "int32",
            "nullable": true,
            "description": "User that created the originating linked entity"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "nullable": false,
            "description": "Time when the server last updated the entity"
          },
          "deleted_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Time the server deleted the entity"
          },
          "attachment_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "ID of the attachment entity"
          },
          "captured_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Time when the photo was captured by the device extracted from photo data"
          }
        },
        "additionalProperties": false
      },
      "sliding_window_rate_limit_error": {
        "description": "Rate limit exceeded error response from the sliding window rate limiter",
        "type": "object",
        "nullable": false,
        "required": [
          "errors"
        ],
        "properties": {
          "errors": {
            "type": "array",
            "nullable": false,
            "description": "List of rate limit errors",
            "items": {
              "type": "object",
              "required": [
                "type",
                "code",
                "message",
                "details"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "nullable": false,
                  "description": "Error type",
                  "example": "rate_limit_error"
                },
                "code": {
                  "type": "string",
                  "nullable": false,
                  "description": "Error code",
                  "example": "rate_limit_exceeded"
                },
                "message": {
                  "type": "string",
                  "nullable": false,
                  "description": "Human-readable message indicating when to retry",
                  "example": "Too many requests. Retry after 2026-04-16 10:00:00Z"
                },
                "details": {
                  "type": "object",
                  "nullable": false,
                  "required": [
                    "endpoint_hour_limit",
                    "endpoint_minute_limit",
                    "request_retry_after",
                    "throttled_by"
                  ],
                  "properties": {
                    "endpoint_hour_limit": {
                      "type": "integer",
                      "nullable": false,
                      "description": "Maximum number of requests allowed per hour for this endpoint"
                    },
                    "endpoint_minute_limit": {
                      "type": "integer",
                      "nullable": false,
                      "description": "Maximum number of requests allowed per minute for this endpoint"
                    },
                    "request_retry_after": {
                      "type": "string",
                      "nullable": false,
                      "description": "UTC timestamp after which the request can be retried",
                      "example": "2026-04-16 10:00:00Z"
                    },
                    "throttled_by": {
                      "type": "string",
                      "nullable": true,
                      "description": "Which limit window triggered the throttle (minute or hour)",
                      "example": "minute"
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            }
          }
        },
        "additionalProperties": false
      }
    },
    "securitySchemes": {
      "jwt": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "Access token (JWT) generated using the acquired refresh token (API token). Our [authentication](https://developers.fieldwire.com/docs/authentication) guide covers the steps to generate a valid token"
      }
    }
  },
  "paths": {
    "/api/v3/projects/{project_id}/bubbles": {
      "get": {
        "summary": "Get all bubbles in project",
        "operationId": "get_bubbles_in_project",
        "tags": [
          "bubbles"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/api_version"
          },
          {
            "$ref": "#/components/parameters/entities_filter"
          },
          {
            "$ref": "#/components/parameters/entities_per_page"
          },
          {
            "$ref": "#/components/parameters/last_synced_at"
          },
          {
            "$ref": "#/components/parameters/project_id"
          }
        ],
        "security": [
          {
            "jwt": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Current-User-Id": {
                "$ref": "#/components/headers/current_user_id"
              },
              "X-Count": {
                "$ref": "#/components/headers/count"
              },
              "X-Last-Synced-At": {
                "$ref": "#/components/headers/last_synced_at"
              },
              "X-Has-More": {
                "$ref": "#/components/headers/has_more"
              },
              "ratelimit-limit-minute": {
                "$ref": "#/components/headers/ratelimit-limit-minute"
              },
              "ratelimit-remaining-minute": {
                "$ref": "#/components/headers/ratelimit-remaining-minute"
              },
              "ratelimit-limit-hour": {
                "$ref": "#/components/headers/ratelimit-limit-hour"
              },
              "ratelimit-remaining-hour": {
                "$ref": "#/components/headers/ratelimit-remaining-hour"
              },
              "ratelimit-reset": {
                "$ref": "#/components/headers/ratelimit-reset"
              }
            },
            "content": {
              "application/json": {
                "example": [
                  {
                    "deleted_at": null,
                    "created_at": "2026-10-02T14:48:26.586Z",
                    "updated_at": "2026-10-02T14:48:26.620Z",
                    "resolved_conflict": false,
                    "device_created_at": "2026-10-02T14:48:26.586Z",
                    "device_updated_at": "2026-10-02T14:48:26.586Z",
                    "id": "7d84bb27-1277-455e-a6ce-00c2a84d2b66",
                    "content": "content",
                    "annotations": "annotations",
                    "kind": 1,
                    "task_id": "c409b449-6dea-40b4-b9b2-4cadf6b2700a",
                    "user_id": 561,
                    "project_id": "14b36281-d6c5-4554-a1c9-350600269509",
                    "attachment_id": null,
                    "file_name": null,
                    "latitude": null,
                    "longitude": null,
                    "captured_at": null,
                    "file_size": 100,
                    "original_created_at": null,
                    "original_creator": null,
                    "file_url": "http://example.com/331d8b98-7719-42bb-9419-f2a3dd9b8518.jpeg",
                    "thumb_url": "http://example.com/3ba4a4cb-987b-4bf5-9b8f-f2088c8e3303.jpeg",
                    "original_url": null,
                    "flattened_file_url": "http://example.com/1d789951-4f5e-4c72-bd8b-2e88c3d6e6bf.jpeg"
                  },
                  {
                    "deleted_at": null,
                    "created_at": "2026-10-01T00:00:00.000Z",
                    "updated_at": "2026-10-02T14:48:26.657Z",
                    "resolved_conflict": false,
                    "device_created_at": "2026-10-01T00:00:00.000Z",
                    "device_updated_at": "2026-10-01T00:00:00.000Z",
                    "id": "64f12031-5b38-4c1d-a282-cc3043f364e9",
                    "content": "content",
                    "annotations": "annotations",
                    "kind": 1,
                    "task_id": "282ff796-5223-402b-9a14-06fd51871ab3",
                    "user_id": 562,
                    "project_id": "14b36281-d6c5-4554-a1c9-350600269509",
                    "attachment_id": null,
                    "file_name": null,
                    "latitude": null,
                    "longitude": null,
                    "captured_at": null,
                    "file_size": 100,
                    "original_created_at": null,
                    "original_creator": null,
                    "file_url": "http://example.com/ef7c0f8c-4459-410d-8b37-0e40804a29e3.jpeg",
                    "thumb_url": "http://example.com/4b28c65b-6b0e-4c53-961b-12c22ab07fdf.jpeg",
                    "original_url": null,
                    "flattened_file_url": "http://example.com/74fed0eb-c83e-4e36-8596-c6229838b2ea.jpeg"
                  }
                ],
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/bubble"
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "headers": {
              "retry-after": {
                "$ref": "#/components/headers/retry-after"
              }
            },
            "content": {
              "application/json": {
                "example": {
                  "errors": [
                    {
                      "type": "rate_limit_error",
                      "code": "rate_limit_exceeded",
                      "message": "Too many requests. Retry after 2026-10-02T14:49:27.419Z",
                      "details": {
                        "endpoint_hour_limit": 80000,
                        "endpoint_minute_limit": 1300,
                        "request_retry_after": "2026-10-02T14:49:27.419Z",
                        "throttled_by": "hour"
                      }
                    }
                  ]
                },
                "schema": {
                  "$ref": "#/components/schemas/sliding_window_rate_limit_error"
                }
              }
            }
          }
        }
      }
    }
  }
}
```