Skip to content

Get schedule

GET
/v1/accounts/{accountId}/schedule
curl --request GET \
--url https://api-v1.tailwind.ai/v1/accounts/example/schedule \
--header 'Authorization: Bearer <token>'

The account’s schedule over a date window, as dated entries: which smart schedule slots are open, and what occupies the rest. The companion read to GET /v1/accounts/{accountId}/timeslots, which returns the recurring weekly rules and says nothing about occupancy.

Entries are ordered earliest first. open marks an unused smart schedule slot; scheduled, publishing and published each name the Pin holding that time. timeslotId is absent on a Pin that sits on no slot at all — scheduled at an arbitrary time, or left behind by a slot that has since moved.

This is a read, not a placement primitive: a slot that is open here can be taken before a subsequent write lands. To put a Pin on the schedule, use useNextOpenSlot on the create or schedule endpoints, which resolves and claims a slot under the account’s schedule lock — do not copy a time from this response into sendAt.

accountId
required
string

Numeric Tailwind account ID returned by GET /v1/accounts

from
string format: date-time

Start of the window (ISO 8601). Defaults to now.

to
string format: date-time

End of the window (ISO 8601). Defaults to 14 days after the start, and cannot be more than 60 days after it.

The account’s schedule over the requested window

Media typeapplication/json
object
data
object
schedule
Array<object>

One dated occurrence on the account’s schedule. Either an open smart schedule slot, or the Pin holding that time.

object
sendAt

When this entry falls (Unix timestamp, seconds)

integer
state

Open = an unused smart schedule slot; scheduled = a queued Pin; publishing = a Pin mid-publish; published = already on Pinterest

string
Allowed values: open scheduled publishing published
timeslotId

The smart schedule slot this entry sits on. Absent for a Pin scheduled off-slot.

string
post

The Pin holding this time. Absent when state is open.

object
postId
string
title
string
url
string
boardId
string
window

The window actually read, as Unix timestamps.

object
from
integer
to
integer
meta
object
requestId

Unique request ID for debugging

string
Example
{
"data": {
"schedule": [
{
"state": "open"
}
]
}
}

Invalid request

Media typeapplication/json
object
error
object
code

Error code

string
message

Error message

string
reason

Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.

string
resolve_url

Present on PAYMENT_REQUIRED errors: where the denial can be resolved. Reason-specific, because buying credits does not clear a trial, access or connection denial. Requests sent with X-Request-Source: mcp receive an informational plans page instead, so agent surfaces never present a purchase link.

string
meta
object
requestId

Unique request ID for debugging

string
Example
{
"error": {
"code": "BAD_REQUEST",
"message": "Invalid request body"
},
"meta": {
"requestId": "abc123"
}
}

Authentication required or invalid bearer credentials

Media typeapplication/json
object
error
object
code

Error code

string
message

Error message

string
reason

Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.

string
resolve_url

Present on PAYMENT_REQUIRED errors: where the denial can be resolved. Reason-specific, because buying credits does not clear a trial, access or connection denial. Requests sent with X-Request-Source: mcp receive an informational plans page instead, so agent surfaces never present a purchase link.

string
meta
object
requestId

Unique request ID for debugging

string
Example
{
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid API key"
},
"meta": {
"requestId": "abc123"
}
}

Resource not found

Media typeapplication/json
object
error
object
code

Error code

string
message

Error message

string
reason

Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.

string
resolve_url

Present on PAYMENT_REQUIRED errors: where the denial can be resolved. Reason-specific, because buying credits does not clear a trial, access or connection denial. Requests sent with X-Request-Source: mcp receive an informational plans page instead, so agent surfaces never present a purchase link.

string
meta
object
requestId

Unique request ID for debugging

string
Example
{
"error": {
"code": "NOT_FOUND",
"message": "Account not found"
},
"meta": {
"requestId": "abc123"
}
}

Rate limit exceeded

Media typeapplication/json
object
error
object
code

Error code

string
message

Error message

string
reason

Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.

string
resolve_url

Present on PAYMENT_REQUIRED errors: where the denial can be resolved. Reason-specific, because buying credits does not clear a trial, access or connection denial. Requests sent with X-Request-Source: mcp receive an informational plans page instead, so agent surfaces never present a purchase link.

string
meta
object
requestId

Unique request ID for debugging

string
Example
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Daily rate limit of 5000 requests exceeded. Resets at midnight UTC."
},
"meta": {
"requestId": "abc123"
}
}

Timed out building the schedule. Nothing is wrong with the request; retry, or ask for a shorter window.