Skip to main content
POST
Bulk upsert photos
Requires write:photos. Accepts up to 100 photos per request. Upload the files with POST /builders/{builderId}/attachments/bulk-upload, then pass each returned attachment reference as photos[].imageAttachment.
  • Photo reports: omit folderId and folderName. Use the returned att_ attachment IDs in the photo report.
  • Gallery folders: provide projectId and a folderName, or reuse an existing folderId.
Each photo returns a CREATED, EXISTING or FAILED result. Keep external source IDs stable when retrying to avoid duplicates. URL imports require an HTTPS host approved by BuildPass.

Authorizations

Authorization
string
header
required

The access token received from the authorization server in the OAuth 2.0 flow.

FlowClient Credentials
Token URL
https://api.buildpass.global/oauth/token
Scopes1
write:photos
Create, update, delete, and sync photos and photo folders

Path Parameters

builderId
string
required

Body

application/json

A batch of up to 100 photos from the same external source.

externalSourceId
string
required

Stable ID for this group of photos in your application. For photo reports, use the report’s sourceExternalId.

Example:

"example-integrator:photo-page:page_123"

photos
object[]
required
Required array length: 1 - 100 elements
folderId
string

Existing photo folder ID. Reuse it when adding photos to the same folder. Omit folderId and folderName for photo reports.

sourceApp
string
default:external
Required string length: 1 - 80
Example:

"example-integrator"

projectId
string | null

Project that owns the photos. Required when using folderId or folderName; optional for photo reports.

Minimum string length: 1
Pattern: ^proj_[a-z][a-z0-9]+$
folderName
string

Name of a new project gallery folder. Requires projectId. Omit for photo reports.

Example:

"Site walkthrough - 2026-06-11"

Response

200 - application/json

Photos synced

folderId
string | null
createdAttachmentIds
string[]
skippedExternalSourceIds
string[]
failedPhotos
object[]
photos
object[]
status
enum<string>
Available options:
synced,
partial