Schedules API
GET /v1/schedules
List Schedules
List schedules for the workspace, latest run_at first by default, with optional filters.
The X-Total-Count response header carries the number of schedules matching
the filters and search, so clients can page with limit and offset.
Auth: ApiKeyAuth, BearerAuth
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
limit |
query | no | integer | |
offset |
query | no | integer | |
q |
query | no | string? | Case-insensitive search across the pin title, description and link URL |
sort |
query | no | enum(run_at_desc, run_at_asc, created_at_desc, created_at_asc, title_asc, title_desc, status_asc, status_desc) | Sort order; run_at_asc lists the next run first |
account_id |
query | no | string? | Only schedules for this Pinterest account |
board_id |
query | no | string? | Only schedules targeting this board |
status |
query | no | ScheduleStatus? | Only schedules in this status |
since |
query | no | string? | Only schedules running at or after this ISO 8601 timestamp |
until |
query | no | string? | Only schedules running before this ISO 8601 timestamp |
Response 200
curl -X GET "https://api.pinbridge.io/v1/schedules" \
-H "X-API-Key: $PINBRIDGE_API_KEY"
POST /v1/schedules
Create Schedule
Schedule a pin for future publishing.
The pin will be published at the specified run_at time. The target board is
preflighted at scheduling time so a board the account cannot publish to is
rejected now rather than when the schedule fires.
Auth: ApiKeyAuth, BearerAuth
Request body (ScheduleCreate)
| Field | Type | Required | Description |
|---|---|---|---|
account_id |
string | yes | Pinterest account ID to publish with |
run_at |
string | yes | When to publish this pin (ISO 8601 timestamp) |
board_id |
string | yes | Pinterest board ID |
title |
string | yes | Pin title (max 100) |
description |
string? | no | Pin description |
alt_text |
string? | no | Alternative text used for accessibility |
cover_image_url |
string? | no | Optional public cover image URL for scheduled video pins |
cover_image_asset_id |
string? | no | Optional uploaded image asset ID used as a video cover image |
link_url |
string? | no | Destination URL for the pin |
image_url |
string? | no | Public URL of the image to pin |
asset_id |
string? | no | Uploaded PinBridge asset ID to use for the scheduled image or video |
Response 201 (ScheduleResponse)
curl -X POST "https://api.pinbridge.io/v1/schedules" \
-H "X-API-Key: $PINBRIDGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"account_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "run_at": "2026-12-01T09:00:00Z", "board_id": "987654321098765432", "title": "Autumn table setting", "image_url": "https://example.com/image.jpg"}'
POST /v1/schedules/bulk-cancel
Bulk Cancel Schedules
Cancel multiple schedules in one call.
Per-item outcomes:
* succeeded — schedule was canceled.
* skipped (error_code=ineligible_status) — schedule status is not
SCHEDULED/QUEUED/DEFERRED.
* failed (error_code=not_found) — schedule not found in workspace.
Auth: ApiKeyAuth, BearerAuth
Request body (BulkIdsRequest)
| Field | Type | Required | Description |
|---|---|---|---|
ids |
array |
yes | List of resource IDs to act on (up to 500 per request). |
Response 200 (BulkOperationResponse)
curl -X POST "https://api.pinbridge.io/v1/schedules/bulk-cancel" \
-H "X-API-Key: $PINBRIDGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ids": ["3fa85f64-5717-4562-b3fc-2c963f66afa6"]}'
POST /v1/schedules/bulk-delete
Bulk Delete Schedules
Delete multiple terminal-state schedules in one call.
Per-item outcomes:
* succeeded — schedule was deleted.
* skipped (error_code=ineligible_status) — schedule status is not done,
failed, or canceled.
* failed (error_code=not_found) — schedule not found in workspace.
Auth: ApiKeyAuth, BearerAuth
Request body (BulkIdsRequest)
| Field | Type | Required | Description |
|---|---|---|---|
ids |
array |
yes | List of resource IDs to act on (up to 500 per request). |
Response 200 (BulkOperationResponse)
curl -X POST "https://api.pinbridge.io/v1/schedules/bulk-delete" \
-H "X-API-Key: $PINBRIDGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ids": ["3fa85f64-5717-4562-b3fc-2c963f66afa6"]}'
POST /v1/schedules/bulk-retry
Bulk Retry Schedules
Retry multiple failed schedules in one call.
Per-item outcomes:
* succeeded — schedule was reset to a runnable state.
* skipped (error_code=ineligible_status) — schedule status is not FAILED.
* failed (error_code=not_found) — schedule not found in workspace.
Auth: ApiKeyAuth, BearerAuth
Request body (BulkIdsRequest)
| Field | Type | Required | Description |
|---|---|---|---|
ids |
array |
yes | List of resource IDs to act on (up to 500 per request). |
Response 200 (BulkOperationResponse)
curl -X POST "https://api.pinbridge.io/v1/schedules/bulk-retry" \
-H "X-API-Key: $PINBRIDGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ids": ["3fa85f64-5717-4562-b3fc-2c963f66afa6"]}'
POST /v1/schedules/validate
Validate Schedule
Dry-run a schedule request.
Same checks as POST /v1/pins/validate plus run_at. Nothing is stored.
Auth: ApiKeyAuth, BearerAuth
Request body (ScheduleCreate)
| Field | Type | Required | Description |
|---|---|---|---|
account_id |
string | yes | Pinterest account ID to publish with |
run_at |
string | yes | When to publish this pin (ISO 8601 timestamp) |
board_id |
string | yes | Pinterest board ID |
title |
string | yes | Pin title (max 100) |
description |
string? | no | Pin description |
alt_text |
string? | no | Alternative text used for accessibility |
cover_image_url |
string? | no | Optional public cover image URL for scheduled video pins |
cover_image_asset_id |
string? | no | Optional uploaded image asset ID used as a video cover image |
link_url |
string? | no | Destination URL for the pin |
image_url |
string? | no | Public URL of the image to pin |
asset_id |
string? | no | Uploaded PinBridge asset ID to use for the scheduled image or video |
Response 200 (PinValidationResponse)
curl -X POST "https://api.pinbridge.io/v1/schedules/validate" \
-H "X-API-Key: $PINBRIDGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"account_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "run_at": "2026-12-01T09:00:00Z", "board_id": "987654321098765432", "title": "Autumn table setting", "image_url": "https://example.com/image.jpg"}'
DELETE /v1/schedules/{schedule_id}
Delete Schedule
Delete a schedule once it is in a terminal state (done, failed, or canceled).
Auth: ApiKeyAuth, BearerAuth
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
schedule_id |
path | yes | string |
Response 204
curl -X DELETE "https://api.pinbridge.io/v1/schedules/$SCHEDULE_ID" \
-H "X-API-Key: $PINBRIDGE_API_KEY"
GET /v1/schedules/{schedule_id}
Get Schedule
Get schedule details.
Auth: ApiKeyAuth, BearerAuth
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
schedule_id |
path | yes | string |
Response 200 (ScheduleResponse)
curl -X GET "https://api.pinbridge.io/v1/schedules/$SCHEDULE_ID" \
-H "X-API-Key: $PINBRIDGE_API_KEY"
PATCH /v1/schedules/{schedule_id}
Update Schedule
Edit a pending schedule in place.
Change the publish time, board, title, description, alt text, link or media
of a schedule that has not started publishing, keeping its id and history. The
same checks as creating a schedule apply to the changed fields: run_at
must be in the future, a new board is preflighted, and new media is
resolved. Schedules that already started return 409; cancel and recreate,
or edit the resulting pin instead.
Auth: ApiKeyAuth, BearerAuth
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
schedule_id |
path | yes | string |
Request body (ScheduleUpdate)
| Field | Type | Required | Description |
|---|---|---|---|
run_at |
string? | no | New publish time (ISO 8601, with tz) |
board_id |
string? | no | Move the schedule to another board |
title |
string? | no | Pin title |
description |
string? | no | Pin description |
alt_text |
string? | no | Alternative text used for accessibility |
link_url |
string? | no | Destination URL for the pin |
image_url |
string? | no | Replace the media with a public URL |
asset_id |
string? | no | Replace the media with an uploaded asset |
cover_image_url |
string? | no | Video cover image URL |
cover_image_asset_id |
string? | no | Video cover image asset ID |
Response 200 (ScheduleResponse)
curl -X PATCH "https://api.pinbridge.io/v1/schedules/$SCHEDULE_ID" \
-H "X-API-Key: $PINBRIDGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"run_at": "2026-12-01T09:00:00Z", "alt_text": "A dinner table set with candles and autumn leaves"}'
POST /v1/schedules/{schedule_id}/cancel
Cancel Schedule
Cancel a scheduled pin.
Auth: ApiKeyAuth, BearerAuth
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
schedule_id |
path | yes | string |
Response 200 (ScheduleResponse)
curl -X POST "https://api.pinbridge.io/v1/schedules/$SCHEDULE_ID/cancel" \
-H "X-API-Key: $PINBRIDGE_API_KEY"
POST /v1/schedules/{schedule_id}/retry
Retry Schedule
Retry a previously failed schedule.
Resets the schedule (and any linked, non-deleted pin) to a runnable state.
Auth: ApiKeyAuth, BearerAuth
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
schedule_id |
path | yes | string |
Response 200 (ScheduleResponse)
curl -X POST "https://api.pinbridge.io/v1/schedules/$SCHEDULE_ID/retry" \
-H "X-API-Key: $PINBRIDGE_API_KEY"
