{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_jdxv24rkr4kk","handle":"turbo-notify-whatsapp-for-ai-agents","url":"https://wellknown.network/agents/turbo-notify-whatsapp-for-ai-agents","links":{"self":"https://wellknown.network/agents/turbo-notify-whatsapp-for-ai-agents/record.json","html":"https://wellknown.network/agents/turbo-notify-whatsapp-for-ai-agents","markdown":"https://wellknown.network/agents/turbo-notify-whatsapp-for-ai-agents/record.md","api":"https://wellknown.network/api/v1/agents/turbo-notify-whatsapp-for-ai-agents","status":"https://wellknown.network/api/v1/agents/turbo-notify-whatsapp-for-ai-agents/status","claim":"https://wellknown.network/agents/turbo-notify-whatsapp-for-ai-agents/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/turbo-notify-whatsapp-for-ai-agents/claim.json","badge":"https://wellknown.network/agents/turbo-notify-whatsapp-for-ai-agents/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/turbo-notify-whatsapp-for-ai-agents/history","tools":"https://wellknown.network/api/v1/agents/turbo-notify-whatsapp-for-ai-agents/tools"},"ard":{"identifier":"urn:air:mcp.turbonotify.com:server:turbo-notify-whatsapp-for-ai-agents","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Turbo Notify: WhatsApp for AI agents","summary":"Send and receive WhatsApp messages from your AI agent, on your own number, with Turbo Notify.","description":"Send and receive WhatsApp messages from your AI agent, on your own number, with Turbo Notify.","publisher":{"name":"com.turbonotify","url":null},"homepage":"https://docs.turbonotify.com/en/general/mcp-server/","repository":null,"version":"0.1.1","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://mcp.turbonotify.com","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-28T15:26:47.272042Z","publishedAt":"2026-10-28T15:26:47.272042Z","registryName":"com.turbonotify/whatsapp"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"communication.sms-voice","name":"SMS & Voice","confidence":1,"provenance":"derived"},{"slug":"security.secrets","name":"Secrets Management","confidence":0.569,"provenance":"derived"},{"slug":"documents.invoice-processing","name":"Invoice Processing","confidence":0.525,"provenance":"derived"},{"slug":"productivity.calendar","name":"Calendar & Scheduling","confidence":0.525,"provenance":"derived"},{"slug":"finance.markets","name":"Markets & Trading","confidence":0.525,"provenance":"derived"},{"slug":"content.writing","name":"Writing & Editing","confidence":0.51,"provenance":"derived"},{"slug":"communication.notifications","name":"Notifications","confidence":0.51,"provenance":"derived"}],"categories":["communication","content","documents","finance","productivity","security"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 2h ago.","lastOkAt":"2026-11-02T19:25:00.700Z","lastProbedAt":"2026-11-02T19:25:00.700Z","statusComputedAt":"2026-11-02T19:29:27.553Z","reliability30d":{"probes":16,"successRate":1,"p50Ms":213,"basis":"mixed","measures":{"availability":"availability (some checks stopped at authentication)","latency":"response time (mixed)","tools":"partially observed","summary":"Some successful checks reached the service and some stopped at an authentication response; figures combine both."},"checks":{"total":16,"ok":16,"authBoundaryOk":15,"serviceOk":1,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-11-02T19:25:00.700Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":202,"error":null,"detail":{"tools":[{"name":"send_text","description":"Send a WhatsApp text message.\n\nSet exactly one recipient: `number`, `group_id`, or `contact_id`.\n\nWriting `@<number>` in the text mentions that person, for exam"},{"name":"send_media","description":"Send media by URL: an image, video, audio clip, document or sticker.\n\nSet exactly one recipient: `number`, `group_id`, or `contact_id`.\n\n`url` must still be rea"},{"name":"send_location","description":"Send a location pin.\n\nSet exactly one recipient: `number`, `group_id`, or `contact_id`.\n\n`latitude` is between -90 and 90, `longitude` between -180 and 180.\n`na"},{"name":"send_contact_card","description":"Send a contact card the recipient can save to their phone.\n\nSet exactly one recipient: `number`, `group_id`, or `contact_id`.\n\n`phones` takes plain E.164 number"},{"name":"send_calendar_event","description":"Send a calendar event invitation.\n\nSet exactly one recipient: `number`, `group_id`, or `contact_id`.\n\n`start_at` and `end_at` are ISO 8601 **with an offset**, f"},{"name":"send_cta_button","description":"Send an interactive message carrying one link button.\n\nSet exactly one recipient: `number`, `group_id`, or `contact_id`.\n\nA link button is the only interactive "},{"name":"reply_to_message","description":"Reply to an EARLIER message, quoting it, without naming a recipient.\n\nUse it to bring context into the conversation: when the conversation has\nmoved on and your"},{"name":"edit_text_message","description":"Replace the text of a text message this number already sent.\n\nThe recipient sees the new text marked as edited. The message keeps its\nid and its place in the co"},{"name":"edit_media_caption","description":"Replace the caption of an image, video or document this number already sent.\n\nThe recipient sees the new caption marked as edited. The file itself\nstays exactly"},{"name":"edit_calendar_event","description":"Correct a calendar event this number already sent.\n\n`name` and `start_at` are always required, plus whatever else the event\nhas: `description`, `end_at`, `join_"},{"name":"cancel_calendar_event","description":"Cancel a calendar event this number already sent.\n\nThe event stays in the chat marked as canceled, and WhatsApp tells the\nguests. Send the same `name` and `star"},{"name":"delete_message","description":"Revoke a message for everyone in the conversation.\n\nThis is WhatsApp's \"delete for everyone\". It is not reversible, and\nrecipients see a tombstone where the mes"},{"name":"react_to_message","description":"Attach an emoji reaction to a message, or remove one.\n\nPass a single emoji character, e.g. `👍`. Passing an empty string\nremoves the reaction this number previo"},{"name":"send_typing_indicator","description":"Show \"typing…\" to a recipient while you prepare an answer.\n\nSet exactly one recipient: `number`, `group_id`, or `contact_id`.\n\nUseful before a reply that takes "},{"name":"mark_as_read","description":"Mark a conversation's unread messages as read, without sending anything.\n\nSet exactly one recipient: `number`, `group_id`, or `contact_id`.\n\nThis is independent"},{"name":"list_messages","description":"List messages for one number, newest first, received and sent.\n\nEach item says who it is from and to, which number it belongs to, its\n`direction`, `content_type"},{"name":"get_message","description":"Fetch one message with its full content, parties and mentions.\n\nThe answer includes the number's stable `number_id` (`num_…`) next to\n`number_alias`.\n\n`at` is w"},{"name":"get_message_status","description":"Check where a message got to: queued, sent, delivered, read, failed.\n\nStatus only moves forward. A failed status always carries an error\ncode, and for a few med"},{"name":"get_message_receipts","description":"See who received and who read a message.\n\nMost useful for group messages, where the single status on the message\ncannot express that some members read it and ot"},{"name":"get_message_reactions","description":"List the emoji reactions on a message, and who left each one.\n\nEach entry names the reactor and the emoji. Reactions are replaced\nrather than accumulated per pe"},{"name":"get_message_responses","description":"See how the guests answered a calendar event: going, not going or maybe.\n\nOnly works on a calendar event; any other message answers\n`invalid_request: message_no"},{"name":"get_message_quota","description":"Check how much of this number's message allowance is left.\n\nThe quota is **per number**, not per organization: an organization with\nthree numbers has three sepa"},{"name":"list_contacts","description":"List the people this number has exchanged messages with.\n\nFilter by `phone` or by `name`. They are separate filters, not one\nsearch box: `name` matches the cont"},{"name":"get_contact","description":"Fetch one contact: name, phone number and activity timestamps.\n\n`first_messaged_at` is when a message from this number first reached\nthem on WhatsApp, and `last"},{"name":"get_contact_profile_picture","description":"Get a contact's profile picture, or the reason there is none.\n\nThe answer carries `kind`: `available` with a temporary URL, or\n`unavailable` with a reason. `no_"},{"name":"refresh_contact","description":"Ask WhatsApp for this contact's current name.\n\nOnly the name is refreshed. The profile picture updates on its own the\nnext time this number exchanges a message "},{"name":"get_contact_quota","description":"Check how much of this number's contact allowance is left.\n\nA contact counts once per billing cycle when this number messages them\nthrough Turbo Notify, new **o"},{"name":"list_groups","description":"List the WhatsApp groups this number is a member of.\n\nThe list is built when the number connects: every group it belongs to\nis picked up then, whether or not an"},{"name":"get_group","description":"Fetch a group: its name, description, picture and settings.\n\nReturns how many participants it has, not who they are. Membership is\ndeliberately not readable: it"},{"name":"get_group_picture","description":"Get a group's picture, or the reason there is none.\n\nSame shape as a contact's picture. The answer carries `kind`:\n`available` with a temporary URL, or `unavail"},{"name":"list_numbers","description":"List every WhatsApp number this organization has, with its status.\n\nStart here when you do not know which aliases exist. The main number is\nalways `main`; extra"},{"name":"get_number","description":"Check one number: its phone number, status, and when that status began.\n\n`id` (`num_…`) is the number's permanent identifier. The alias can be\nrenamed, the `id`"},{"name":"connect_number","description":"Reconnect a number that is currently offline.\n\nUses the credentials already stored for the number, so no QR code and no\nhuman are involved. Use it when `get_num"},{"name":"disconnect_number","description":"Take a number offline deliberately, keeping its link to the phone.\n\nThe stored credentials survive, so `connect_number` brings it straight\nback with no pairing."},{"name":"get_usage","description":"Get message and contact usage for the whole organization.\n\nThe top-level totals are the **sum across every live number**: an\norganization with two numbers on a "},{"name":"list_events","description":"Poll everything that happened: messages, contacts, groups, numbers, quotas.\n\nThis is how an agent learns about inbound messages without hosting a\nwebhook endpoi"}],"toolCount":36,"toolsHash":"bf26a53e17c5114807b48b915dd7e802fa2afb135b709cad2e9de266ebbf2a03","serverName":"turbo-notify","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-11-02T11:25:45.750Z","kind":"mcp_initialize","ok":true,"httpStatus":401,"latencyMs":208,"error":null,"detail":{"authRequired":true,"wwwAuthenticate":"Bearer resource_metadata=\"https://mcp.turbonotify.com/.well-known/oauth-protected-resource\", scope=\"messages:send messages:read numbers:write numbers:read events:read contacts:read contacts:write grou"}},{"at":"2026-11-02T03:28:06.417Z","kind":"mcp_initialize","ok":true,"httpStatus":401,"latencyMs":216,"error":null,"detail":{"authRequired":true,"wwwAuthenticate":"Bearer resource_metadata=\"https://mcp.turbonotify.com/.well-known/oauth-protected-resource\", scope=\"messages:send messages:read numbers:write numbers:read events:read contacts:read contacts:write grou"}},{"at":"2026-11-01T19:23:44.260Z","kind":"mcp_initialize","ok":true,"httpStatus":401,"latencyMs":209,"error":null,"detail":{"authRequired":true,"wwwAuthenticate":"Bearer resource_metadata=\"https://mcp.turbonotify.com/.well-known/oauth-protected-resource\", scope=\"messages:send messages:read numbers:write numbers:read events:read contacts:read contacts:write grou"}},{"at":"2026-11-01T11:27:27.036Z","kind":"mcp_initialize","ok":true,"httpStatus":401,"latencyMs":214,"error":null,"detail":{"authRequired":true,"wwwAuthenticate":"Bearer resource_metadata=\"https://mcp.turbonotify.com/.well-known/oauth-protected-resource\", scope=\"messages:send messages:read numbers:write numbers:read events:read contacts:read contacts:write grou"}},{"at":"2026-11-01T03:27:11.230Z","kind":"mcp_initialize","ok":true,"httpStatus":401,"latencyMs":214,"error":null,"detail":{"authRequired":true,"wwwAuthenticate":"Bearer resource_metadata=\"https://mcp.turbonotify.com/.well-known/oauth-protected-resource\", scope=\"messages:send messages:read numbers:write numbers:read events:read contacts:read contacts:write grou"}},{"at":"2026-10-31T19:27:03.472Z","kind":"mcp_initialize","ok":true,"httpStatus":401,"latencyMs":214,"error":null,"detail":{"authRequired":true,"wwwAuthenticate":"Bearer resource_metadata=\"https://mcp.turbonotify.com/.well-known/oauth-protected-resource\", scope=\"messages:send messages:read numbers:write numbers:read events:read contacts:read contacts:write grou"}},{"at":"2026-10-31T12:25:53.292Z","kind":"mcp_initialize","ok":true,"httpStatus":401,"latencyMs":214,"error":null,"detail":{"authRequired":true,"wwwAuthenticate":"Bearer resource_metadata=\"https://mcp.turbonotify.com/.well-known/oauth-protected-resource\", scope=\"messages:send messages:read numbers:write numbers:read events:read contacts:read contacts:write grou"}},{"at":"2026-10-31T04:26:58.348Z","kind":"mcp_initialize","ok":true,"httpStatus":401,"latencyMs":214,"error":null,"detail":{"authRequired":true,"wwwAuthenticate":"Bearer resource_metadata=\"https://mcp.turbonotify.com/.well-known/oauth-protected-resource\", scope=\"messages:send messages:read numbers:write numbers:read events:read contacts:read contacts:write grou"}},{"at":"2026-10-30T21:25:02.712Z","kind":"mcp_initialize","ok":true,"httpStatus":401,"latencyMs":208,"error":null,"detail":{"authRequired":true,"wwwAuthenticate":"Bearer resource_metadata=\"https://mcp.turbonotify.com/.well-known/oauth-protected-resource\", scope=\"messages:send messages:read numbers:write numbers:read events:read contacts:read contacts:write grou"}}],"tools":[{"name":"send_text","description":"Send a WhatsApp text message.\n\nSet exactly one recipient: `number`, `group_id`, or `contact_id`.\n\nWriting `@<number>` in the text mentions that person, for exam"},{"name":"send_media","description":"Send media by URL: an image, video, audio clip, document or sticker.\n\nSet exactly one recipient: `number`, `group_id`, or `contact_id`.\n\n`url` must still be rea"},{"name":"send_location","description":"Send a location pin.\n\nSet exactly one recipient: `number`, `group_id`, or `contact_id`.\n\n`latitude` is between -90 and 90, `longitude` between -180 and 180.\n`na"},{"name":"send_contact_card","description":"Send a contact card the recipient can save to their phone.\n\nSet exactly one recipient: `number`, `group_id`, or `contact_id`.\n\n`phones` takes plain E.164 number"},{"name":"send_calendar_event","description":"Send a calendar event invitation.\n\nSet exactly one recipient: `number`, `group_id`, or `contact_id`.\n\n`start_at` and `end_at` are ISO 8601 **with an offset**, f"},{"name":"send_cta_button","description":"Send an interactive message carrying one link button.\n\nSet exactly one recipient: `number`, `group_id`, or `contact_id`.\n\nA link button is the only interactive "},{"name":"reply_to_message","description":"Reply to an EARLIER message, quoting it, without naming a recipient.\n\nUse it to bring context into the conversation: when the conversation has\nmoved on and your"},{"name":"edit_text_message","description":"Replace the text of a text message this number already sent.\n\nThe recipient sees the new text marked as edited. The message keeps its\nid and its place in the co"},{"name":"edit_media_caption","description":"Replace the caption of an image, video or document this number already sent.\n\nThe recipient sees the new caption marked as edited. The file itself\nstays exactly"},{"name":"edit_calendar_event","description":"Correct a calendar event this number already sent.\n\n`name` and `start_at` are always required, plus whatever else the event\nhas: `description`, `end_at`, `join_"},{"name":"cancel_calendar_event","description":"Cancel a calendar event this number already sent.\n\nThe event stays in the chat marked as canceled, and WhatsApp tells the\nguests. Send the same `name` and `star"},{"name":"delete_message","description":"Revoke a message for everyone in the conversation.\n\nThis is WhatsApp's \"delete for everyone\". It is not reversible, and\nrecipients see a tombstone where the mes"},{"name":"react_to_message","description":"Attach an emoji reaction to a message, or remove one.\n\nPass a single emoji character, e.g. `👍`. Passing an empty string\nremoves the reaction this number previo"},{"name":"send_typing_indicator","description":"Show \"typing…\" to a recipient while you prepare an answer.\n\nSet exactly one recipient: `number`, `group_id`, or `contact_id`.\n\nUseful before a reply that takes "},{"name":"mark_as_read","description":"Mark a conversation's unread messages as read, without sending anything.\n\nSet exactly one recipient: `number`, `group_id`, or `contact_id`.\n\nThis is independent"},{"name":"list_messages","description":"List messages for one number, newest first, received and sent.\n\nEach item says who it is from and to, which number it belongs to, its\n`direction`, `content_type"},{"name":"get_message","description":"Fetch one message with its full content, parties and mentions.\n\nThe answer includes the number's stable `number_id` (`num_…`) next to\n`number_alias`.\n\n`at` is w"},{"name":"get_message_status","description":"Check where a message got to: queued, sent, delivered, read, failed.\n\nStatus only moves forward. A failed status always carries an error\ncode, and for a few med"},{"name":"get_message_receipts","description":"See who received and who read a message.\n\nMost useful for group messages, where the single status on the message\ncannot express that some members read it and ot"},{"name":"get_message_reactions","description":"List the emoji reactions on a message, and who left each one.\n\nEach entry names the reactor and the emoji. Reactions are replaced\nrather than accumulated per pe"},{"name":"get_message_responses","description":"See how the guests answered a calendar event: going, not going or maybe.\n\nOnly works on a calendar event; any other message answers\n`invalid_request: message_no"},{"name":"get_message_quota","description":"Check how much of this number's message allowance is left.\n\nThe quota is **per number**, not per organization: an organization with\nthree numbers has three sepa"},{"name":"list_contacts","description":"List the people this number has exchanged messages with.\n\nFilter by `phone` or by `name`. They are separate filters, not one\nsearch box: `name` matches the cont"},{"name":"get_contact","description":"Fetch one contact: name, phone number and activity timestamps.\n\n`first_messaged_at` is when a message from this number first reached\nthem on WhatsApp, and `last"},{"name":"get_contact_profile_picture","description":"Get a contact's profile picture, or the reason there is none.\n\nThe answer carries `kind`: `available` with a temporary URL, or\n`unavailable` with a reason. `no_"},{"name":"refresh_contact","description":"Ask WhatsApp for this contact's current name.\n\nOnly the name is refreshed. The profile picture updates on its own the\nnext time this number exchanges a message "},{"name":"get_contact_quota","description":"Check how much of this number's contact allowance is left.\n\nA contact counts once per billing cycle when this number messages them\nthrough Turbo Notify, new **o"},{"name":"list_groups","description":"List the WhatsApp groups this number is a member of.\n\nThe list is built when the number connects: every group it belongs to\nis picked up then, whether or not an"},{"name":"get_group","description":"Fetch a group: its name, description, picture and settings.\n\nReturns how many participants it has, not who they are. Membership is\ndeliberately not readable: it"},{"name":"get_group_picture","description":"Get a group's picture, or the reason there is none.\n\nSame shape as a contact's picture. The answer carries `kind`:\n`available` with a temporary URL, or `unavail"},{"name":"list_numbers","description":"List every WhatsApp number this organization has, with its status.\n\nStart here when you do not know which aliases exist. The main number is\nalways `main`; extra"},{"name":"get_number","description":"Check one number: its phone number, status, and when that status began.\n\n`id` (`num_…`) is the number's permanent identifier. The alias can be\nrenamed, the `id`"},{"name":"connect_number","description":"Reconnect a number that is currently offline.\n\nUses the credentials already stored for the number, so no QR code and no\nhuman are involved. Use it when `get_num"},{"name":"disconnect_number","description":"Take a number offline deliberately, keeping its link to the phone.\n\nThe stored credentials survive, so `connect_number` brings it straight\nback with no pairing."},{"name":"get_usage","description":"Get message and contact usage for the whole organization.\n\nThe top-level totals are the **sum across every live number**: an\norganization with two numbers on a "},{"name":"list_events","description":"Poll everything that happened: messages, contacts, groups, numbers, quotas.\n\nThis is how an agent learns about inbound messages without hosting a\nwebhook endpoi"}],"package":null,"toolSurface":{"id":"ts_n8vpejm9bspk","endpointId":"ep_vu54njcs4m3q","hash":"bf26a53e17c5114807b48b915dd7e802fa2afb135b709cad2e9de266ebbf2a03","toolCount":36,"serverName":"turbo-notify","serverVersion":"0.1.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-11-02T19:25:00.715Z","lastSeenAt":"2026-11-02T19:25:00.715Z","observations":1,"toolNames":["send_text","send_media","send_location","send_contact_card","send_calendar_event","send_cta_button","reply_to_message","edit_text_message","edit_media_caption","edit_calendar_event","cancel_calendar_event","delete_message","react_to_message","send_typing_indicator","mark_as_read","list_messages","get_message","get_message_status","get_message_receipts","get_message_reactions","get_message_responses","get_message_quota","list_contacts","get_contact","get_contact_profile_picture","refresh_contact","get_contact_quota","list_groups","get_group","get_group_picture","list_numbers","get_number","connect_number","disconnect_number","get_usage","list_events"],"distinctSurfaces":1},"endpointFacts":[{"id":"ep_vu54njcs4m3q","url":"https://mcp.turbonotify.com","type":"mcp_streamable_http","factsCheckedAt":"2026-10-30T13:28:11.327Z","auth":{"observedAt":"2026-10-30T13:28:12.174Z","authRequired":true,"scheme":"Bearer","resourceMetadata":{"url":"https://mcp.turbonotify.com/.well-known/oauth-protected-resource","resource":"https://mcp.turbonotify.com","authorizationServers":["https://auth.turbonotify.com"],"scopesSupported":["messages:send","messages:read","numbers:write","numbers:read","events:read","contacts:read","contacts:write","groups:read"]},"authorizationServer":{"url":"https://auth.turbonotify.com/.well-known/oauth-authorization-server","issuer":"https://auth.turbonotify.com","grantTypesSupported":["authorization_code","refresh_token"],"codeChallengeMethodsSupported":["S256"],"tokenEndpointAuthMethodsSupported":["none"],"dynamicClientRegistration":true,"dpopSigningAlgValuesSupported":[],"clientIdMetadataDocumentSupported":true},"conformance":{"dpop":false,"rfc8414":true,"rfc9728":true,"pkceS256":true,"clientIdMetadataDocument":true,"dynamicClientRegistration":true}},"tls":{"observedAt":"2026-10-30T13:28:12.609Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"mcp.turbonotify.com","issuer":{"commonName":"YR1","organization":"Let's Encrypt"},"validFrom":"2026-10-27T21:20:47.000Z","validTo":"2027-01-25T21:20:46.000Z","daysToExpiry":83,"sanCount":1,"fingerprint256":"48:8C:D3:D7:F6:8B:6E:5C:9A:7E:B3:94:78:2C:ED:C2:85:BE:56:E0:B5:04:1A:A8:A4:D1:5D:F0:D1:7B:29:C7"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"com.turbonotify/whatsapp","url":"https://registry.modelcontextprotocol.io/v0/servers/com.turbonotify%2Fwhatsapp","firstSeenAt":"2026-10-28T22:20:02.635Z","fetchedAt":"2026-11-01T12:22:07.382Z","normalizedAt":"2026-11-01T12:22:07.382Z"}]},"firstSeenAt":"2026-10-28T22:20:02.635Z","updatedAt":"2026-11-02T19:30:55.752Z"}