Docs
Connect Dayroom to the tools you use
Build integrations with the REST API, connect your AI apps, or send backend events into a room. Every connection follows your team’s permissions.
REST API
Your first request
Build with REST: HTTPS, JSON and scoped API tokens.
Create your API token3 steps
- Sign in to Dayroom and open API tokens.
- Name your integration, choose one workspace and select its access.
- Create the token and save it in your backend’s secret manager.
Set DAYROOM_API_TOKEN securely in your environment, then run:
export DAYROOM_API_URL='https://app.usedayroom.com/api/v1'
curl --fail-with-body "$DAYROOM_API_URL/workspace" \
--header "Authorization: Bearer $DAYROOM_API_TOKEN"Example response (IDs and names are illustrative):
{
"workspace": {"id": "workspace_123", "name": "Acme Studio"},
"you": {"id": "person_123", "name": "Amara", "owner": false},
"member_count": 8,
"can_send": false,
"app": "Release notifications"
}Use GET /conversations to find conversation IDs, and GET /people to find person IDs. A token already selects its workspace; you don’t pass a workspace ID in the URL.
Authentication and permissions
Every request uses Authorization: Bearer YOUR_API_TOKEN. Browser cookies, webhook credentials and MCP OAuth tokens cannot authenticate to this API. Keep tokens on your server; browser CORS access is not enabled.
| Access | Scope | Allows |
|---|---|---|
| Read only | dayroom:read | Workspace, people, conversations, messages, threads, search and to-dos. |
| Read and write | dayroom:read dayroom:write | Reading plus sending, thread replies, reactions, read receipts and to-do changes. |
Tokens expire after 7, 30 or 90 days. Up to 20 active tokens can belong to one person. Only a token hash is stored; the secret is shown once. To rotate, create a replacement, update your backend and revoke the old token.
A token acts as its creator in one workspace. It never grants extra access. Private rooms, DMs and to-dos keep their existing permissions; archived rooms stay read-only, deleted rooms disappear, and plan restrictions still apply. Private companion conversations and connected-provider data are excluded.
Revoke access from API tokens. Password changes, account recovery and workspace removal also revoke affected tokens. Rejoining a workspace does not restore them. Revocation prevents new authenticated requests; a request already executing may finish.
Working examples
Read messages with Python
Uses the Python standard library. The conversation ID comes from GET /conversations.
import json
import os
from urllib.parse import quote
from urllib.request import Request, urlopen
base = os.environ["DAYROOM_API_URL"].rstrip("/")
token = os.environ["DAYROOM_API_TOKEN"]
conversation = quote(os.environ["DAYROOM_CONVERSATION_ID"], safe="")
request = Request(
f"{base}/conversations/{conversation}/messages?limit=20",
headers={"Authorization": f"Bearer {token}"},
)
with urlopen(request, timeout=20) as response:
page = json.load(response)
for message in page["messages"]:
print(message["author"]["name"], message["text"])
print("Older messages cursor:", page["before_message_id"])Send a message with Node.js
Requires built-in fetch. Choose read and write when creating the token. Persist the same event key and JSON for retries.
const base = process.env.DAYROOM_API_URL.replace(/\/$/, '');
const conversation = encodeURIComponent(process.env.DAYROOM_CONVERSATION_ID);
const response = await fetch(`${base}/conversations/${conversation}/messages`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.DAYROOM_API_TOKEN}`,
'Content-Type': 'application/json',
'Idempotency-Key': 'release-2026-11-02-001'
},
body: JSON.stringify({text: 'The new release is ready for review.'}),
signal: AbortSignal.timeout(20000)
});
const result = await response.json();
if (!response.ok) {
throw new Error(`${response.status} ${result.error.code}: ${result.error.message}`);
}
console.log(result.message.id, result.duplicate);Successful sends return 200, including the first request:
{
"message": {
"id": 123,
"conversation_id": "room_123",
"author": {"id": "person_123", "name": "Amara"},
"text": "The new release is ready for review.",
"created": "2026-11-02T12:00:00Z",
"thread_root_id": null,
"thread_reply_count": 0,
"reply_to": null,
"files": [],
"reactions": [],
"sent_via": "Release notifications",
"agent": false,
"webhook": false
},
"duplicate": false
}Reply in a thread
curl --fail-with-body "$DAYROOM_API_URL/conversations/$DAYROOM_CONVERSATION_ID/messages" \
--header "Authorization: Bearer $DAYROOM_API_TOKEN" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: release-thread-reply-001' \
--data '{"text":"Deployment is complete.","thread_root_id":123}'Create a private to-do
curl --fail-with-body "$DAYROOM_API_URL/todos" \
--header "Authorization: Bearer $DAYROOM_API_TOKEN" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: release-followup-task-001' \
--data '{"title":"Review the release notes","due":"Friday","shared":false}'Returns {"todo":{...}}. Without assignee_id, the to-do belongs to you. Assigning someone else defaults to team visibility; send shared:false to keep it private between you and the assignee.
Endpoint reference
Base URL: https://app.usedayroom.com/api/v1. Responses are JSON objects, not JSON-RPC. All successful operations return 200. Timestamps are ISO 8601 UTC strings; nullable fields are returned as JSON null.
Download the OpenAPI 3.1 document for request and response schemas. Unknown fields and repeated query parameters are rejected. Omit optional request fields instead of sending null. Send {} for an operation with no body fields.
GET /workspace — Workspace and you
Who you are in this Dayroom workspace: its name, your name and role, how many people are in it, and whether this connection can send messages.
Required scope: dayroom:read.
| Field | Type | Requirement |
|---|---|---|
| No parameters. | ||
GET /people — List people
List the people in this workspace with their IDs, status (available, working, away, do not disturb, lunch, sick, out of office) and whether they are online. Use an ID to mention someone, send a direct message or assign a to-do.
Required scope: dayroom:read.
| Field | Type | Requirement |
|---|---|---|
| No parameters. | ||
GET /conversations — List conversations
List the rooms and direct messages you can see, with IDs, topics, unread counts and mentions. Use a conversation ID with GET or POST /conversations/{conversation_id}/messages.
Required scope: dayroom:read.
| Field | Type | Requirement |
|---|---|---|
kind | string · all, rooms, dms | Optional |
unread_only | boolean | Optional |
include_archived | boolean | Optional. Archived rooms are read-only. |
GET /conversations/{conversation_id}/messages — Read messages
Read a room or direct message, oldest first. Thread replies are not included; follow a message with replies using dayroom_read_thread. For older messages pass the returned before_message_id.
Required scope: dayroom:read.
| Field | Type | Requirement |
|---|---|---|
conversation_id | string | Path; max 100 characters |
limit | integer | Optional; max 50 |
before_message_id | integer | Optional; max 9223372036854775807. Return messages older than this one. |
around_message_id | integer | Optional; max 9223372036854775807. Return the messages around this one, e.g. a search result. |
POST /conversations/{conversation_id}/messages — Send a message
Post a message as you in a room or direct message, optionally as a thread reply. It appears with your name, labelled with this app. To mention someone, include @Their Name in the text and their person ID in mention_ids ("all" mentions everyone).
Required scope: dayroom:write. Send Content-Type: application/json. Required header: Idempotency-Key.
| Field | Type | Requirement |
|---|---|---|
conversation_id | string | Path; max 100 characters |
text | string | Required; max 8000 characters |
thread_root_id | integer | Optional; max 9223372036854775807. Reply inside the thread that starts with this message. |
reply_to_message_id | integer | Optional; max 9223372036854775807. Quote this message in the reply. |
mention_ids | array | Optional |
PUT /conversations/{conversation_id}/read — Mark as read
Mark a conversation as read for you, up to a message or to the latest one.
Required scope: dayroom:write. Send Content-Type: application/json.
| Field | Type | Requirement |
|---|---|---|
conversation_id | string | Path; max 100 characters |
up_to_message_id | integer | Optional; max 9223372036854775807 |
GET /messages/search — Search messages
Find messages containing some text across the rooms and direct messages you can see, newest first.
Required scope: dayroom:read.
| Field | Type | Requirement |
|---|---|---|
query | string | Required; max 200 characters |
limit | integer | Optional; max 50 |
before_message_id | integer | Optional; max 9223372036854775807. Continue a search from the returned cursor. |
GET /messages/{message_id} — Get a message
Get one message by ID, with its conversation.
Required scope: dayroom:read.
| Field | Type | Requirement |
|---|---|---|
message_id | integer | Path; max 9223372036854775807 |
GET /messages/{message_id}/thread — Read a thread
Read a message and its thread replies, oldest first. Pass any message in the thread.
Required scope: dayroom:read.
| Field | Type | Requirement |
|---|---|---|
message_id | integer | Path; max 9223372036854775807 |
before_message_id | integer | Optional; max 9223372036854775807. Return replies older than this one. |
PUT /messages/{message_id}/reactions — React to a message
Add or remove one of Dayroom’s emoji reactions on a message, as you.
Required scope: dayroom:write. Send Content-Type: application/json.
| Field | Type | Requirement |
|---|---|---|
message_id | integer | Path; max 9223372036854775807 |
emoji | string · 👍, 👎, ❤️, 😂, 🎉, 🙏, 👀, ✅, 🔥, 💯, 😊, 😮, 😢, 🙌, ☕, 🚀, 👋, 🤔, 💡, 🌿 | Required |
remove | boolean | Optional |
POST /direct-messages — Send a direct message
Send a direct message as you to one person, starting the conversation if needed. Get person IDs from dayroom_list_people.
Required scope: dayroom:write. Send Content-Type: application/json. Required header: Idempotency-Key.
| Field | Type | Requirement |
|---|---|---|
person_id | string | Required; max 100 characters |
text | string | Required; max 8000 characters |
GET /todos — List to-dos
List to-dos in this workspace: yours by default, or everyone’s you can see. Pending only unless include_done is true.
Required scope: dayroom:read.
| Field | Type | Requirement |
|---|---|---|
mine_only | boolean | Optional |
include_done | boolean | Optional |
POST /todos — Create a to-do
Create a to-do. Without assignee_id it is yours and private; a to-do for someone else defaults to team visibility. Set shared=false to keep an assignment private between you and its assignee.
Required scope: dayroom:write. Send Content-Type: application/json. Required header: Idempotency-Key.
| Field | Type | Requirement |
|---|---|---|
title | string | Required; max 240 characters |
assignee_id | string | Optional; max 100 characters |
due | string | Optional; max 120 characters. Free text, e.g. "Friday" or "2026-11-02". |
shared | boolean | Optional. Show it to the team. False shares only with you and the assignee. |
PATCH /todos/{todo_id} — Update a to-do
Mark a to-do done or pending, or change its title, due date or assignee. Only its creator changes the details; its assignee can also change the status.
Required scope: dayroom:write. Send Content-Type: application/json.
| Field | Type | Requirement |
|---|---|---|
todo_id | string | Path; max 100 characters |
status | string · pending, done | Optional |
title | string | Optional; max 240 characters |
due | string | Optional; max 120 characters |
assignee_id | string | Optional; max 100 characters |
Response collections
/people:people, each withid,name,you,owner,onlineandstatus./conversations:conversations, each withid,name,kind,topic,unread,mentions,muted,archivedandlast_message_id.- Message list:
conversation,messages,has_more,before_message_id. - Single message:
conversationandmessage. Thread:root,replies,has_more,before_message_id. - Search:
results,has_more,before_message_id. Each result includesconversation_name. - To-do list:
todos. Create/update:todo. Each hasid,title,status,assignee,due,shared,created,conversation_idandmessage_id. - Direct send:
conversation_id,message,duplicate. Reaction:message_id,reactions. Mark read:conversation_id,unread.
File metadata may appear in messages. File upload/download, message edits/deletion, room administration, Works project mutations, outbound event subscriptions and provider APIs are outside v1. A Works task returned in to-dos must be edited in Dayroom.
Pagination
Messages are returned oldest first within each page. Search results are newest first. Start with limit=20 (maximum 50). If has_more is true, pass the returned before_message_id on the next request:
GET /api/v1/conversations/room_123/messages?limit=20&before_message_id=123
GET /api/v1/messages/search?query=release&limit=20&before_message_id=123Treat the returned cursor as opaque: imported history can have a different chronology from numeric IDs. Don’t subtract from it. Threads also accept before_message_id; their page size is set by Dayroom. around_message_id locates a message’s surrounding context and uses a server-sized page; don’t combine it with before_message_id.
People, conversations and to-dos return their currently visible collection without cursors. Reading messages doesn’t mark them read; use PUT /conversations/{id}/read explicitly.
Errors, limits and safe retries
{
"error": {
"code": "invalid_token",
"message": "Use a valid, unexpired Dayroom API token.",
"request_id": "73a102ab92fe0123456789ab"
}
}Every API response includes X-Request-ID. Keep that ID when reporting a failed request; don’t log the bearer token.
| Status | What to do |
|---|---|
| 400 / 415 | Correct the fields or JSON content type. |
| 401 | Replace the expired or revoked token. Cookies cannot substitute. |
| 402 | The operation needs a different workspace plan. |
| 403 / 404 | Check the scope and current resource access. |
| 405 | Use the documented HTTP method. |
| 409 | Check archived/read-only state or conflicting idempotency key. |
| 410 | The resource was deleted; don’t replay its creation. |
| 413 | Keep the JSON body within 40 KiB. |
| 429 | Honor the Retry-After header (seconds). |
| 5xx | Retry with exponential backoff and jitter. |
Limits are 240 requests per minute per token and 600 per source IP, including invalid authentication attempts. Existing operation limits also apply, such as 100 message-send attempts per minute per person. Tokens are available on every plan; ordinary plan and visibility rules still apply.
Idempotency
Sending messages, sending DMs and creating to-dos require Idempotency-Key: 8–90 ASCII letters, digits, underscores or hyphens. Generate one per logical event. Retry with exactly the same key, endpoint and fields after a timeout, network error or 5xx response.
The key is bound to that token and request. Reusing it with changed fields returns 409. Message retries return the same ID and duplicate:true; to-do retries return the existing to-do. Keys remain bound for the token’s lifetime. Retrying after the created message or to-do was deleted returns 410. Permissions are checked again on retries, so a previously successful request can fail after access changes. Rotating a token starts a separate key namespace; don’t replay completed events with the replacement.
PUT/PATCH operations set the requested state and can be retried with the same body. They may produce a newer result if someone else changed the resource in between. Avoid automatic retries for other 4xx errors.
Versioning
The contract lives under /api/v1. Clients should ignore new response fields. Breaking request or response changes belong in a new API version. The OpenAPI document describes this deployed service; there is no separate sandbox host. Use a dedicated workspace for development.
AI apps
Your Dayroom address
Every AI app connects to the same address. You approve one workspace, and the app works as you, with your permissions. There’s nothing to install.
https://app.usedayroom.com/mcpYou’ll also find it in Dayroom under My account → Connected AI apps.
Connect Claude
In Claude on the web, desktop or phone.
Set it up
- Open Customize → Connectors (older versions: Settings → Connectors) and choose Add custom connector.
- Name it Dayroom and paste your Dayroom address. Leave the advanced settings empty.
- Choose Connect. Dayroom opens: sign in, choose a workspace and select Allow.
- In a chat, turn on Dayroom from the + menu under Connectors.
On Claude Team and Enterprise, an owner adds it in Organization settings → Connectors first.
Connect ChatGPT
Through ChatGPT’s developer mode, on plans that include it.
Set it up
- Open Settings → Apps & Connectors → Advanced settings and turn on Developer mode.
- Choose Create, name it Dayroom, paste your Dayroom address and choose OAuth.
- Dayroom opens: sign in, choose a workspace and select Allow.
Work accounts may need an admin to allow developer mode. Menus change often; search ChatGPT’s help for custom connectors.
Connect Claude Code
Add Dayroom from your terminal, then approve in your browser.
claude mcp add --transport http dayroom https://app.usedayroom.com/mcpThen
- Type
/mcpin Claude Code and choose Authenticate, or runclaude mcp login dayroom. - Approve in the Dayroom tab that opens in your browser.
Other AI apps
Any app that supports remote MCP servers with sign-in can connect. Add a remote or custom MCP server, paste your Dayroom address and sign in when it asks.
No client ID, secret or API key needed. Dayroom handles the sign-in.
When you approve, you stay in charge
One workspace
Pick the workspace it can use. Connect again for another one.
Reading, always
The rooms, DMs, threads, people and to-dos you can see.
Acting as you, if you tick it
Send messages and replies, react, mark read and manage to-dos.
Dayroom shows which app is asking and where it sends you back. For apps on your own computer (localhost), approve only a connection you just started.
What to ask, in your own words
You“What did I miss in Dayroom?”
Unread messages across rooms, DMs and threads, anything that needs you first. Nothing gets marked read.
You“When are we launching, and who owns what?”
Searches, then reads the conversation and the thread where your team decided.
You“Reply to Amara that I’ll send the pricing sheet by 2pm.”
Posts the reply as you, in the right conversation.
You“Add a to-do for me to send the pricing sheet today.”
Creates it in your Dayroom to-dos.
Anything an app sends appears under your name with a small via label, so your team knows how it was sent. Most AI apps ask before they send or change anything.
What it can see and what it can’t
It can see
- What you can see, in the workspace you chose
- Rooms, DMs and threads you’re in
- People, status and your to-dos
It never sees
- Private rooms you’re not in
- Your other workspaces
- Other people’s DMs
- Your private chat with the Dayroom companion
Connect only apps you trust: whatever an app reads in Dayroom goes to that AI service to answer you. The same history limits apply as in the app (Free shows the last 30 days), and archived rooms stay read-only.
Disconnect any time
In Dayroom, open My account → Connected AI apps and choose Disconnect. The app loses access straight away; messages it already sent stay.
Changing your password disconnects every AI app, and leaving a workspace ends its connections there.
Troubleshooting, quick fixes
The app says it needs to sign in again
Connect or authenticate again from the app. This happens after you disconnect it, change your password or leave the workspace.
“This connection is read-only”
Connect again and tick Also let it act as you.
It can’t find a room or message
It only sees what you can see in the workspace you chose. Connect again to choose a different workspace.
Older messages are missing
The Free plan shows the last 30 days of history.
“Too many requests”
Wait a minute and try again.
Claude or ChatGPT can’t reach Dayroom
They connect from their own servers, so use your Dayroom address, not a Dayroom server running on your computer.
Developers
The MCP server, for developers
Dayroom hosts a remote MCP server at the address below. Any MCP client can connect with OAuth sign-in; nothing needs registering first.
https://app.usedayroom.com/mcpTransport
- Streamable HTTP at
/mcp. Each POST gets one JSON response; no sessions or event streams. - MCP
2026-07-28, plus clients on2025-11-25,2025-06-18and2025-03-26.
Authorization
- OAuth 2.1 with PKCE (
S256only). Responses includeiss. - Discovery at
/.well-known/oauth-protected-resourceand/.well-known/oauth-authorization-server; a request without a token gets401pointing there. - Clients use a Client ID Metadata Document or Dynamic Client Registration at
/oauth/register. Redirect URIs: HTTPS, or HTTP onlocalhost/127.0.0.1(any port). - Send
Authorization: Bearer …on every request. Access tokens last an hour; refresh tokens rotate.
Scopes are dayroom:read and dayroom:write. A read-only token calling a write tool gets 403 with insufficient_scope. Each connection can make 240 requests a minute.
MCP tools
Fifteen tools. Read tools need dayroom:read; tools that act need dayroom:write, and only appear when the person allowed it.
| Tool | Scope | What it does |
|---|---|---|
dayroom_get_workspace | read | The workspace, your name and role, and whether the connection can send. |
dayroom_list_conversations | read | Rooms and direct messages you can see, with unread counts and mentions. |
dayroom_read_messages | read | A conversation’s messages, oldest first, with paging. |
dayroom_read_thread | read | A message and its thread replies. |
dayroom_get_message | read | One message by ID, with its conversation. |
dayroom_search_messages | read | Text search across conversations you can see, newest first. |
dayroom_list_people | read | People in the workspace, with status and whether they’re online. |
dayroom_get_unread | read | Unread messages per conversation, including new thread replies, mentions first. Doesn’t mark them read. |
dayroom_list_todos | read | Your to-dos, or everyone’s you can see. |
dayroom_send_message | write | Post as you in a room or DM, optionally in a thread, with mentions. |
dayroom_send_direct_message | write | Send a DM as you to one person. |
dayroom_react | write | Add or remove an emoji reaction as you. |
dayroom_create_todo | write | Create a to-do for you or a teammate. |
dayroom_update_todo | write | Change a to-do’s status, title, due date or assignee. |
dayroom_mark_read | write | Mark a conversation read for you. |
Results come as readable text and structured JSON. Writes accept an optional idempotency_key so a retry happens once. Message text is written by people, so treat it as untrusted input.
Incoming webhooks, your backend in the loop
Send subscription updates, support alerts and service events directly into a Dayroom room or DM.
Create a webhook
- In Dayroom, open your room or teammate DM’s ⋯ → Incoming webhooks.
- Choose the destination and a name, such as Subscription alerts, then choose Create webhook.
- Save the endpoint as
DAYROOM_WEBHOOK_URLand the one-time token asDAYROOM_WEBHOOK_TOKENin your backend’s environment or secret manager.
The token is shown once and can post only to the chosen conversation. Keep it on your server. For rooms, the workspace owner creates the webhook; in a teammate DM, either person can.
Send your first event
With both environment variables set, run this from your backend or terminal.
curl --request POST "$DAYROOM_WEBHOOK_URL" \
--header "Authorization: Bearer $DAYROOM_WEBHOOK_TOKEN" \
--header 'Content-Type: application/json' \
--data '{"text":"New subscription: Acme joined the team plan.","event_id":"subscription-123"}'// Run on your backend after verifying the original subscription event.
const response = await fetch(process.env.DAYROOM_WEBHOOK_URL, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.DAYROOM_WEBHOOK_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
text: 'New subscription: Acme joined the team plan.',
event_id: 'subscription-123' // Use your event's stable, unique ID.
})
});
const result = await response.json();
if (!response.ok) throw new Error(`${response.status}: ${result.error}`);
console.log(result);The team sees it in the room with the integration’s name and a Webhook label, without reloading.
Dayroom expects this JSON shape. For a provider such as a payment service, verify its event in your backend first, then send text and event_id.
Responses and retries
A new event returns 201 Created. Retrying with the same event_id and identical text returns 200 with duplicate: true and doesn’t post again.
{"message_id":123,"duplicate":false}| Status | Meaning / next step |
|---|---|
| 400 | Invalid JSON, fields, text or event ID. Correct the request. |
| 401 | Invalid or revoked token. Check the credential. |
| 402 | The operation needs a different workspace plan. |
| 403 / 404 | Ownership or room access lost, or room unavailable. |
| 409 | Room archived, or event ID reused with different text. |
| 410 | The resource was deleted; don’t replay its creation. |
| 413 | Body exceeds 40 KiB. |
| 429 | Rate limit or monthly allowance reached. Honor Retry-After. |
For network failures or 5xx, retry with backoff and the same event ID and text. For 429, honor Retry-After, or wait at least 60 seconds. Don’t blindly retry other 4xx.
Request reference
POST /api/channels/{room_id}/incoming-webhooks/{webhook_id}/messages
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/jsontext: required, nonblank, up to 8,000 characters. Line breaks and links are supported.event_id: optional, 1–128 ASCII letters, digits, dots, colons, underscores or hyphens. Unique per webhook; without it, each request creates a new message.- Other fields are rejected. Attachments, mentions, thread replies and sender overrides aren’t supported.
Use the exact endpoint from setup. No cookie or CSRF token is needed. The token can’t read messages, choose another room or run agents, and @all doesn’t notify anyone.
Limits and access
- Free: 1 active webhook per workspace and 100 new messages per calendar month (UTC), shared across rooms and DMs. Paid: 10 active webhooks per conversation, no monthly cap.
- 60 new messages a minute per webhook; 300 a minute per workspace.
- 300 requests a minute per source IP, including invalid credentials and retries.
- 40 KiB maximum JSON body.
Room webhooks need workspace ownership and room access; DM webhooks need you in that DM. Duplicate and failed requests don’t use the allowance, which resets on the first of each month.
Revoke and rotate
Open Incoming webhooks and choose Revoke beside the integration. The credential stops working at once; existing messages stay.
Rotate a token
- Create a new webhook for the same conversation.
- Update your backend with the new endpoint and token.
- Revoke the old webhook.
Archiving pauses deliveries. Deleting the room revokes its credentials, and restoring the room doesn’t bring them back.