Appearance
Reading Bulletins
Fetch bulletins that have already been submitted — either a single bulletin by ID, or a paginated list for a given path.
Fetch a single bulletin
GET /api/integrations/v1/bulletins/{id}
Authorization: Bearer <access token>Scope required: bulletins:read.
Response
json
{
"id": "6530bb9f...",
"pathId": "6530abc...",
"pathName": "Example Forest Service Road",
"comment": "Drove in to the trailhead...",
"bulletinDate": 1731369600000,
"lastModifiedDate": 1731456000000,
"createdDate": 1731369600000,
"ownerId": "6500123...",
"ownerName": "Alex Driver",
"type": "ROAD_REPORT",
"replyCount": 2,
"distanceMeters": 4200.5,
"conditionRatings": [
{ "point": [-127.67656, 50.30011], "condition": "NOMINAL" },
{ "point": [-127.67211, 50.30021], "condition": "SOMEWHAT_DEGRADED" }
],
"photos": [
{
"reference": "https://.../photo.jpg",
"thumbnailReference": "https://.../photo-thumb.jpg",
"caption": "Bridge approach",
"location": [-127.67400, 50.30015]
}
],
"vehicles": [
{ "category": "SUV", "name": "4Runner", "description": null }
]
}| Field | Type | Description |
|---|---|---|
id | string | Bulletin ID. |
pathId | string | ID of the road this bulletin belongs to. |
pathName | string | Road name at the time of posting. |
comment | string | The bulletin's description text. |
bulletinDate | long | The report date, as Unix epoch milliseconds. |
lastModifiedDate | long | Last update timestamp. |
createdDate | long | Creation timestamp. |
ownerId | string | ID of the user who posted the bulletin. |
ownerName | string | Display name of the user who posted it. |
type | string | Kind of bulletin (e.g. ROAD_REPORT). |
replyCount | long | Number of comments. |
distanceMeters | number | null | Driven distance in metres, if the report tracked it. |
conditionRatings | array | Condition ratings supplied with the bulletin — see below. Matches the shape of what was submitted. |
photos | array | Attached photos — see below. |
vehicles | array | Vehicles the user was driving. |
conditionRatings[] entries
| Field | Type | Description |
|---|---|---|
point | [longitude, latitude] | End of the segment this rating covers. |
condition | string | One of the condition enum values. See Submitting Bulletins for the list. |
The entries are returned in the same order they were submitted. See the road conditions concept for how a sequence of ratings is interpreted along a path.
photos[] entries
| Field | Type | Description |
|---|---|---|
reference | string | URL of the full-size photo. |
thumbnailReference | string | URL of a thumbnail suitable for list views. |
caption | string | Photo caption. |
location | [longitude, latitude] | null | GPS coordinates from EXIF, if present. |
vehicles[] entries
| Field | Type | Description |
|---|---|---|
category | string | One of the VehicleCategory values. See Submitting Bulletins for the list. |
name | string | null | Optional label. |
description | string | null | Optional build notes. |
Errors
| Status | type | When |
|---|---|---|
| 404 | #not-found | No bulletin with that ID exists. |
List bulletins for a path
GET /api/integrations/v1/bulletins?pathId={pathId}&page=0&pageSize=20
Authorization: Bearer <access token>Scope required: bulletins:read.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
pathId | string | ✓ | — | The road whose bulletins you want. |
page | integer | — | 0 | Zero-indexed page number. Negative values clamp to 0. |
pageSize | integer | — | 20 | Items per page. Clamped between 1 and 100. |
Results are sorted by bulletinDate descending (newest first).
Response
json
{
"items": [ /* BulletinResponse objects, as described above */ ],
"page": 0,
"pageSize": 20,
"totalItems": 143,
"totalPages": 8
}| Field | Type | Description |
|---|---|---|
items | array | The bulletins on this page. |
page | integer | The page returned. |
pageSize | integer | The page size used (after clamping). |
totalItems | long | Total number of bulletins matching the query. |
totalPages | integer | Total number of pages available. |