Create timeslot
const url = 'https://api-v1.tailwind.ai/v1/accounts/example/timeslots';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"dayPreference":1,"time":"example","timezone":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api-v1.tailwind.ai/v1/accounts/example/timeslots \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "dayPreference": 1, "time": "example", "timezone": "example" }'Add one recurring weekly slot to the account’s smart schedule: a day of week, a 24-hour HH:MM time, and optionally the IANA timezone the time is expressed in. Without timezone the account’s own timezone is used, and the request is rejected with a 400 if the account has none set. The slot is created with type manual, the same type the dashboard gives a user-placed slot. Free: managing the schedule costs no credits, in the dashboard or here.
There is no duplicate check, matching the dashboard: two identical calls create two slots at the same time, so read GET /v1/accounts/{accountId}/timeslots first when adding to an existing schedule. Evergreen (SmartLoop) slots cannot be created here.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Numeric Tailwind account ID returned by GET /v1/accounts
Request Bodyrequired
Section titled “Request Bodyrequired”object
Day of week (0 = Sunday through 6 = Saturday)
Time of day as 24-hour HH:MM (e.g. “09:30”), in timezone
IANA timezone the time is expressed in (e.g. America/New_York). Defaults to the account’s own timezone; required if the account has none set.
Examplegenerated
{ "dayPreference": 1, "time": "example", "timezone": "example"}Responses
Section titled “Responses”Timeslot created
object
object
A recurring weekly posting rule, not a dated occurrence. Carries no occupancy — see ScheduleEntry.
object
Timeslot ID
Account ID
Day of week (0-6, where 0 is Sunday)
Time of day as a zero-padded 24-hour HHMM string (e.g. “0930”), in timezone
Timezone (e.g., America/New_York)
How the slot was added: generated by a rebuild, picked from Tailwind’s suggestions, or placed by hand (including every slot created or edited through this API)
Schedule ID, when associated with a schedule
Pin UUID, when associated with a pin
Unix timestamp of one occurrence, predicted when the slot was written. Not maintained afterwards; use GET /v1/accounts/{accountId}/schedule for real upcoming times.
object
Unique request ID for debugging
Example
{ "data": { "timeslot": { "type": "auto-created" } }}Invalid request
object
object
Error code
Error message
Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.
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.
object
Unique request ID for debugging
Example
{ "error": { "code": "BAD_REQUEST", "message": "Invalid request body" }, "meta": { "requestId": "abc123" }}Authentication required or invalid bearer credentials
object
object
Error code
Error message
Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.
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.
object
Unique request ID for debugging
Example
{ "error": { "code": "UNAUTHORIZED", "message": "Invalid API key" }, "meta": { "requestId": "abc123" }}Resource not found
object
object
Error code
Error message
Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.
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.
object
Unique request ID for debugging
Example
{ "error": { "code": "NOT_FOUND", "message": "Account not found" }, "meta": { "requestId": "abc123" }}Another write to this account’s smart schedule holds the lock — in practice a rebuild, which replaces every slot and so cannot run alongside other changes. Nothing was written; retry in a moment.
object
object
Error code
Error message
Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.
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.
object
Unique request ID for debugging
Example
{ "error": { "code": "CONFLICT", "message": "This account's schedule is being updated elsewhere. Retry in a moment." }, "meta": { "requestId": "abc123" }}Rate limit exceeded
object
object
Error code
Error message
Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.
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.
object
Unique request ID for debugging
Example
{ "error": { "code": "RATE_LIMIT_EXCEEDED", "message": "Daily rate limit of 5000 requests exceeded. Resets at midnight UTC." }, "meta": { "requestId": "abc123" }}