[{"data":1,"prerenderedAt":1935},["ShallowReactive",2],{"docs-nav-docs_en":3,"docs-search-docs_en":213,"doc-docs_en-\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales":1765,"surround-docs_en-\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales":1931},[4],{"title":5,"path":6,"stem":7,"children":8,"page":58},"Docs","\u002Fdocs","docs",[9,13,17,21,59,92,105,134,155,159,184,188,192],{"title":10,"path":11,"stem":12},"Introduction","\u002Fdocs\u002Fintroduction","docs\u002F01.introduction",{"title":14,"path":15,"stem":16},"Getting started","\u002Fdocs\u002Fgetting-started","docs\u002F02.getting-started",{"title":18,"path":19,"stem":20},"How it works","\u002Fdocs\u002Fhow-it-works","docs\u002F03.how-it-works",{"title":22,"path":23,"stem":24,"children":25,"page":58},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F04.concepts",[26,30,34,38,42,46,50,54],{"title":27,"path":28,"stem":29},"Workspaces and resources","\u002Fdocs\u002Fconcepts\u002Fworkspaces-and-resources","docs\u002F04.concepts\u002F1.workspaces-and-resources",{"title":31,"path":32,"stem":33},"Services and availability","\u002Fdocs\u002Fconcepts\u002Fservices-and-availability","docs\u002F04.concepts\u002F2.services-and-availability",{"title":35,"path":36,"stem":37},"Bookings and holds","\u002Fdocs\u002Fconcepts\u002Fbookings-and-holds","docs\u002F04.concepts\u002F3.bookings-and-holds",{"title":39,"path":40,"stem":41},"Automations","\u002Fdocs\u002Fconcepts\u002Fautomations","docs\u002F04.concepts\u002F4.automations",{"title":43,"path":44,"stem":45},"Global search","\u002Fdocs\u002Fconcepts\u002Fglobal-search","docs\u002F04.concepts\u002F5.global-search",{"title":47,"path":48,"stem":49},"Results and sales","\u002Fdocs\u002Fconcepts\u002Fsales-results","docs\u002F04.concepts\u002F6.sales-results",{"title":51,"path":52,"stem":53},"What you call things","\u002Fdocs\u002Fconcepts\u002Fvocabulary","docs\u002F04.concepts\u002F7.vocabulary",{"title":55,"path":56,"stem":57},"Themes and palettes","\u002Fdocs\u002Fconcepts\u002Fthemes","docs\u002F04.concepts\u002F8.themes",false,{"title":60,"path":61,"stem":62,"children":63,"page":58},"Channels","\u002Fdocs\u002Fchannels","docs\u002F05.channels",[64,68,72,76,80,84,88],{"title":65,"path":66,"stem":67},"WhatsApp","\u002Fdocs\u002Fchannels\u002Fwhatsapp","docs\u002F05.channels\u002F01.whatsapp",{"title":69,"path":70,"stem":71},"Web chat","\u002Fdocs\u002Fchannels\u002Fwebchat","docs\u002F05.channels\u002F02.webchat",{"title":73,"path":74,"stem":75},"Telegram","\u002Fdocs\u002Fchannels\u002Ftelegram","docs\u002F05.channels\u002F03.telegram",{"title":77,"path":78,"stem":79},"Pauses and Status","\u002Fdocs\u002Fchannels\u002Fpauses-and-status","docs\u002F05.channels\u002F04.pauses-and-status",{"title":81,"path":82,"stem":83},"Inbox","\u002Fdocs\u002Fchannels\u002Finbox","docs\u002F05.channels\u002F05.inbox",{"title":85,"path":86,"stem":87},"Form","\u002Fdocs\u002Fchannels\u002Fform","docs\u002F05.channels\u002F06.form",{"title":89,"path":90,"stem":91},"Instagram","\u002Fdocs\u002Fchannels\u002Finstagram","docs\u002F05.channels\u002F07.instagram",{"title":93,"path":94,"stem":95,"children":96,"page":58},"Bot and knowledge","\u002Fdocs\u002Fbot","docs\u002F06.bot",[97,101],{"title":98,"path":99,"stem":100},"The bot and the AI","\u002Fdocs\u002Fbot\u002Foverview","docs\u002F06.bot\u002F01.overview",{"title":102,"path":103,"stem":104},"Bot knowledge","\u002Fdocs\u002Fbot\u002Fknowledge","docs\u002F06.bot\u002F02.knowledge",{"title":106,"path":107,"stem":108,"children":109,"page":58},"Work, map and flows","\u002Fdocs\u002Fwork","docs\u002F07.work",[110,114,118,122,126,130],{"title":111,"path":112,"stem":113},"Work and actions","\u002Fdocs\u002Fwork\u002Ftasks-and-actions","docs\u002F07.work\u002F01.tasks-and-actions",{"title":115,"path":116,"stem":117},"Map and addresses","\u002Fdocs\u002Fwork\u002Fmap-and-addresses","docs\u002F07.work\u002F02.map-and-addresses",{"title":119,"path":120,"stem":121},"Flows","\u002Fdocs\u002Fwork\u002Fflows","docs\u002F07.work\u002F03.flows",{"title":123,"path":124,"stem":125},"Flow conditions","\u002Fdocs\u002Fwork\u002Fconditions","docs\u002F07.work\u002F04.conditions",{"title":127,"path":128,"stem":129},"Zones","\u002Fdocs\u002Fwork\u002Fzones","docs\u002F07.work\u002F05.zones",{"title":131,"path":132,"stem":133},"Customer tracking portal","\u002Fdocs\u002Fwork\u002Ftracking-portal","docs\u002F07.work\u002F06.tracking-portal",{"title":135,"path":136,"stem":137,"children":138,"page":58},"Team","\u002Fdocs\u002Fteam","docs\u002F08.team",[139,143,147,151],{"title":140,"path":141,"stem":142},"Team Telegram","\u002Fdocs\u002Fteam\u002Ftelegram-team","docs\u002F08.team\u002F01.telegram-team",{"title":144,"path":145,"stem":146},"Roles and permissions","\u002Fdocs\u002Fteam\u002Froles","docs\u002F08.team\u002F02.roles",{"title":148,"path":149,"stem":150},"Notifications","\u002Fdocs\u002Fteam\u002Fnotifications","docs\u002F08.team\u002F03.notifications",{"title":152,"path":153,"stem":154},"Team commissions","\u002Fdocs\u002Fteam\u002Fcommissions","docs\u002F08.team\u002F04.commissions",{"title":156,"path":157,"stem":158},"Quickstart","\u002Fdocs\u002Fquickstart","docs\u002F09.quickstart",{"title":160,"path":161,"stem":162,"children":163,"page":58},"API","\u002Fdocs\u002Fapi","docs\u002F10.api",[164,168,172,176,180],{"title":165,"path":166,"stem":167},"Authentication","\u002Fdocs\u002Fapi\u002Fauthentication","docs\u002F10.api\u002F1.authentication",{"title":169,"path":170,"stem":171},"Conventions","\u002Fdocs\u002Fapi\u002Fconventions","docs\u002F10.api\u002F2.conventions",{"title":173,"path":174,"stem":175},"Endpoints","\u002Fdocs\u002Fapi\u002Fendpoints","docs\u002F10.api\u002F3.endpoints",{"title":177,"path":178,"stem":179},"Webhooks","\u002Fdocs\u002Fapi\u002Fwebhooks","docs\u002F10.api\u002F4.webhooks",{"title":181,"path":182,"stem":183},"TypeScript and Python SDKs","\u002Fdocs\u002Fapi\u002Fsdks","docs\u002F10.api\u002F5.sdks",{"title":185,"path":186,"stem":187},"MCP and AI agents","\u002Fdocs\u002Fmcp","docs\u002F11.mcp",{"title":189,"path":190,"stem":191},"Recipes","\u002Fdocs\u002Frecipes","docs\u002F12.recipes",{"title":193,"path":194,"stem":195,"children":196,"page":58},"What happens if…?","\u002Fdocs\u002Fque-pasa-si","docs\u002F13.que-pasa-si",[197,201,205,209],{"title":198,"path":199,"stem":200},"What happens if…? Bookings and deposits","\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas","docs\u002F13.que-pasa-si\u002F01.senas-y-reservas",{"title":202,"path":203,"stem":204},"What happens if…? Notices and channels","\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales","docs\u002F13.que-pasa-si\u002F02.avisos-y-canales",{"title":206,"path":207,"stem":208},"What happens if…? The bot","\u002Fdocs\u002Fque-pasa-si\u002Fbot","docs\u002F13.que-pasa-si\u002F03.bot",{"title":210,"path":211,"stem":212},"What happens if…? Services and tasks","\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas","docs\u002F13.que-pasa-si\u002F04.servicios-y-tareas",[214,218,224,229,233,238,241,246,251,256,261,266,271,276,281,284,289,294,299,304,308,313,317,320,325,330,335,340,343,348,353,358,363,369,374,379,384,389,394,397,402,407,412,417,422,425,430,435,440,445,450,455,460,465,470,473,478,483,488,491,496,501,506,509,514,519,522,527,532,535,540,545,550,555,560,565,570,573,578,583,588,593,598,602,606,609,614,619,624,628,633,637,640,645,650,655,660,665,670,673,678,683,688,693,698,703,706,711,716,721,724,729,733,738,742,745,750,755,760,765,770,775,780,784,789,792,797,802,807,812,817,822,825,830,835,840,845,850,855,860,865,870,875,880,885,890,895,898,903,908,913,918,923,928,933,936,941,946,951,956,961,964,969,974,979,984,989,992,997,1002,1007,1012,1015,1020,1025,1030,1033,1038,1043,1048,1053,1058,1063,1068,1071,1076,1081,1086,1091,1096,1101,1106,1109,1114,1119,1124,1129,1134,1137,1142,1146,1151,1156,1160,1163,1168,1173,1178,1183,1188,1193,1198,1203,1206,1211,1216,1221,1226,1229,1234,1239,1244,1249,1254,1257,1262,1267,1272,1277,1282,1286,1291,1296,1301,1306,1311,1316,1319,1324,1329,1334,1339,1344,1347,1352,1357,1362,1366,1371,1376,1380,1384,1388,1393,1396,1401,1406,1411,1416,1421,1426,1431,1436,1441,1445,1448,1453,1458,1463,1468,1473,1478,1483,1488,1493,1498,1503,1508,1511,1516,1521,1526,1531,1536,1541,1546,1551,1556,1561,1566,1571,1576,1581,1586,1589,1594,1599,1604,1609,1614,1619,1624,1629,1634,1639,1644,1647,1652,1657,1662,1667,1672,1677,1682,1687,1690,1695,1700,1705,1710,1715,1720,1725,1730,1735,1740,1745,1750,1755,1760],{"id":11,"title":10,"titles":215,"content":216,"level":217},[],"What Fiuit is, who it is for, and the building blocks you will use to take bookings, serve customers and run work with your team. Fiuit is a multichannel automation layer: it connects WhatsApp, Telegram and your website chat to scheduling and your team’s work. It understands requests, proposes the next step and turns confirmations into bookings and tasks. You set the rules. WhatsApp, Telegram and web chat talk with your customers. Forms also reach the Inbox, for human attention. Your team and the API operate on the same tasks. This documentation describes what is already available. Anything that does not exist yet is marked Coming soon.",1,{"id":219,"title":220,"titles":221,"content":222,"level":223},"\u002Fdocs\u002Fintroduction#who-it-is-for","Who it is for",[10],"Any business that sells someone's or something's time. Fiuit uses generic vocabulary (task, resource, service) and adapts to your trade with a starting template: BusinessWhat is booked or doneBarbershopOne barber for 30 to 45 minutesAestheticsA professional and a machine and a booth, at the same timeClinicA doctor and a consulting roomRestaurantSeats in the dining room according to party sizeDeliveriesTasks that a courier picks from a queue, with a destination on the map",2,{"id":225,"title":226,"titles":227,"content":228,"level":223},"\u002Fdocs\u002Fintroduction#what-you-will-use","What you will use",[10],"Today: what needs doing now, your own work or the whole team's depending on your role.Inbox: every conversation from every channel in one place; take over whenever needed.Work: all tasks as a list, calendar or map, with actions per stage (take, release, complete, no-show).Customers, Services, Team and resources: your catalog and your people.Bot: personality, knowledge and simulator. Automation: rules and flows.Wagy: the dashboard assistant that helps you set everything up by chatting.What's new: the latest shipped in Fiuit and what's coming, with a dot when there is something you haven't seen yet.Settings: Business, Status, Team, Channels, Developers, Webhooks and AI usage.",{"id":230,"title":60,"titles":231,"content":232,"level":223},"\u002Fdocs\u002Fintroduction#channels",[10],"All channels use the same engine: a time booked on WhatsApp disappears instantly from the dashboard, the web chat and the API. WhatsApp with an AI assistant (text and audio).Web chat to paste into your site.Telegram with your business's own bot.Team Telegram: alerts and the \"My day\" Mini App.",{"id":234,"title":235,"titles":236,"content":237,"level":223},"\u002Fdocs\u002Fintroduction#where-to-go-next","Where to go next",[10],"Getting started: from a business template to your first task, with Wagy.How it works: the life of a message and the engine's guarantees.Work and actions and Flows.A specific question? See What happens if…?: short answers about bookings, notices, the bot and tasks.If you build: API quickstart, SDKs and MCP. The customer bot books services with scheduled times; the team creates queue tasks through the dashboard or API. Creating queued deliveries through chat: coming soon.",{"id":15,"title":14,"titles":239,"content":240,"level":217},[],"Step-by-step guide to set up your business in Fiuit with Wagy's help, connect a channel, test the bot and complete your first task. This guide takes you from zero to a business that serves customers. It takes about 20 minutes and you can ask Wagy for help at every step. Forgot your password? On the login screen, Forgot your password? emails you a link. The message never reveals whether the email exists in Fiuit; the link works only once and asks for a new password of 12 to 128 characters.",{"id":242,"title":243,"titles":244,"content":245,"level":223},"\u002Fdocs\u002Fgetting-started#_1-create-the-business-from-a-template","1. Create the business from a template",[14],"Each business (or location) is a project. When you create it you pick the business type and Fiuit loads a template with the services, resources, schedules and stages typical for that trade: barbershop, aesthetics, clinic, restaurant or deliveries. Open the dashboard and the project selector.Tap Create project, enter the name, choose the business type, the time zone and the language.Enter the new project. Your plan sets how many projects you can have; if you reached the limit, the selector tells you. Everything in the template can be changed later. Names adapt to the trade (for example \"Accept delivery\" for deliveries), but underneath it is the same engine.",{"id":247,"title":248,"titles":249,"content":250,"level":223},"\u002Fdocs\u002Fgetting-started#_2-set-up-with-wagy","2. Set up with Wagy",[14],"Wagy is the dashboard's setup assistant: a friendly bot you tell what you do, and it builds your business with you. Open it with the Talk to Wagy button. Only the owner and managers use it. Tell it about your business (\"I have a barbershop with three barbers\").Wagy proposes a change plan: a card with what it will create or modify (services, schedules, resources, bot rules, automations).Review the plan and tap Confirm, Adjust (you keep chatting and it builds another) or Discard. Nothing is applied without your confirmation.If you do not like the result, tap Undo: you can undo the last applied plan for 24 hours. Wagy also shows a First steps checklist that ticks itself from your real data: business profile, opening hours, services, team, connected channel, bot tested, first booking and first completed task. It also sends discreet nudges (at most two a day) that you can dismiss or mute. Wagy never asks for passwords or tokens: to connect a channel it takes you to the right screen. The first messages with Wagy are paid by the platform; after that they use your plan's AI quota.",{"id":252,"title":253,"titles":254,"content":255,"level":223},"\u002Fdocs\u002Fgetting-started#_3-review-the-basics-by-hand","3. Review the basics by hand",[14],"If you prefer the dashboard, these are the screens: Settings → Business: name, time zone, currency, language, address and cancellation policy.Services: duration, price, deposit and which resources each service needs.Team and resources: people, rooms or machines with their schedules. Invite your team from Settings → Team (see roles and permissions).",{"id":257,"title":258,"titles":259,"content":260,"level":223},"\u002Fdocs\u002Fgetting-started#_4-connect-a-channel","4. Connect a channel",[14],"Go to Settings → Channels: WhatsApp: scan a QR code. See WhatsApp.Web chat: paste one line of code into your site. See Web chat.Telegram: paste your bot's token. See Telegram. All conversations land in the same place, the Inbox.",{"id":262,"title":263,"titles":264,"content":265,"level":223},"\u002Fdocs\u002Fgetting-started#_5-test-the-bot","5. Test the bot",[14],"Before opening it to real customers, use the Simulator under Automation → Bot. You chat with the bot as if you were a customer, without sending real messages; the bookings it makes are test ones. Try phrases like \"I want to book\", \"how much is it?\" or \"what time do you close?\". Adjust the personality and load knowledge (see Bot and knowledge).",{"id":267,"title":268,"titles":269,"content":270,"level":223},"\u002Fdocs\u002Fgetting-started#_6-your-first-task","6. Your first task",[14],"Tap New task (in the top bar, on any screen). Wait for the catalog to load; fields remain inactive and you can close the dialog while it loads.Pick the service, search for or create the customer and choose the time.Save. The task shows up in Today and in Work.",{"id":272,"title":273,"titles":274,"content":275,"level":223},"\u002Fdocs\u002Fgetting-started#_7-see-your-day-in-today","7. See your day in Today",[14],"Today shows what needs doing now. Owners and managers see everything; team members see their own. From each task you move to the next stage with the available actions. Continue with Work and actions.",{"id":277,"title":278,"titles":279,"content":280,"level":223},"\u002Fdocs\u002Fgetting-started#next-steps","Next steps",[14],"Flows and conditions: automatic reminders and alerts.Team Telegram: alerts and \"My day\" on your phone.Pauses and Status: what to do if something goes wrong.",{"id":19,"title":18,"titles":282,"content":283,"level":217},[],"Architecture, principles and the life of a message, from arriving on a channel to becoming a task, an action or an alert.",{"id":285,"title":286,"titles":287,"content":288,"level":223},"\u002Fdocs\u002Fhow-it-works#principles","Principles",[18],"Deterministic core, AI as interpreter. The AI understands the customer and calls tools. The engine computes availability, holds and confirms. The AI never invents a time or a price.The database guarantees the rules. Double booking is impossible because PostgreSQL rejects overlapping allocations, not because the app \"checks first\".One operational truth, many views. A task is a single object; you see it in Today, as a list, in the calendar or on the map.API first. The dashboard, the bot, MCP and Wagy use the same services. If something cannot be done through the API, the API is missing it.The credential defines the business. A key or session always belongs to one project.",{"id":290,"title":291,"titles":292,"content":293,"level":223},"\u002Fdocs\u002Fhow-it-works#from-input-to-action","From input to action",[18],"Inputs → engine → interpretation → actions. This is the path of a conversation, not a mandatory sequence: the dashboard and API call the engine directly; forms go to a person. AI returns to the engine to validate each proposal before acting. Inputs → Fiuit engine → AI interprets → Actions and outputs AI does not execute on its own: it requests tools and the engine validates permissions, availability and confirmations. Bookings and tasks share one operational truth. Alerts depend on your rules and the channel; web chat replies during the conversation, without proactive reminders. The customer bot books services with scheduled times; the team creates queue tasks through the dashboard or API. Creating queued deliveries through chat: coming soon. WhatsApp → booking “Any time tomorrow for a haircut with John?” Fiuit checks real availability, offers options and holds the chosen slot for 10 minutes. It asks for missing details and confirmation; only then does the engine confirm the booking. John sees it on his schedule. Telegram → scheduled booking “Do you have a table for four tomorrow at 20:00?” Fiuit checks the service’s available times, holds the chosen slot for 10 minutes and asks for details and confirmation. When the customer confirms, the engine records the booking and the team sees it on their schedule. The team creates the delivery in the dashboard with a queue-based service, the customer and address, without choosing a time. They can then assign, claim and complete the task in Work. Alerts depend on enabled flows. Automatically creating queued deliveries through chat: coming soon.",{"id":295,"title":296,"titles":297,"content":298,"level":223},"\u002Fdocs\u002Fhow-it-works#the-life-of-a-message","The life of a message",[18],"Receive and organize. The channel verifies the source and discards repeated messages. The engine keeps context in the Inbox and respects pauses. Forms arrive for human attention, without automatic bot replies.Respect context. The customer and conversation are identified. If a person takes over, the bot stays quiet. Team and API actions have their own permissions and do not need to pass through AI.AI interprets. On conversational channels, the model understands intent, looks up business data through tools and asks for missing details. Audio is transcribed only where the channel supports it.Propose and confirm. The engine checks rules, permissions and availability. A chosen slot is held for 10 minutes; the customer confirms before it becomes a booking. If something changed, alternatives are offered.The engine executes. Idempotent operations prevent a retry from repeating an action. The database prevents overlapping bookings. Dates, prices and confirmations use real system data in message templates.Work, alerts and dialogue. A booking created through chat or a queued delivery recorded by the team in the dashboard appears as a task for the team. Active flows generate alerts and permitted actions. Fiuit also answers questions and hands off to a person; not every message needs to create a task.",{"id":300,"title":301,"titles":302,"content":303,"level":223},"\u002Fdocs\u002Fhow-it-works#tasks-stages-and-actions","Tasks, stages and actions",[18],"Each business defines the stages its work goes through and the actions that move a task from one to another (take, release, complete, \"no-show\"). An action can have effects: assign it to whoever runs it, release it, close it with an outcome. See Work and actions.",{"id":305,"title":119,"titles":306,"content":307,"level":223},"\u002Fdocs\u002Fhow-it-works#flows",[18],"A flow says \"when this happens, if this condition holds, do that\": send a message, notify the team, wait, run an action. Conditions are simple expressions about the task, the customer or the time.",{"id":309,"title":310,"titles":311,"content":312,"level":223},"\u002Fdocs\u002Fhow-it-works#security","Security",[18],"Each business is isolated in the database itself, secrets are encrypted and every change is recorded in an audit log. You are responsible for your customers' data; Fiuit processes it on your behalf.",{"id":314,"title":235,"titles":315,"content":316,"level":223},"\u002Fdocs\u002Fhow-it-works#where-to-go-next",[18],"Bookings and holds: the schedule's guarantees.Bot and AI: what the assistant can and cannot do.",{"id":28,"title":27,"titles":318,"content":319,"level":217},[],"Organizations, workspaces, roles, resources, capacity modes and resource groups.",{"id":321,"title":322,"titles":323,"content":324,"level":223},"\u002Fdocs\u002Fconcepts\u002Fworkspaces-and-resources#organization-and-workspaces","Organization and workspaces",[27],"In the dashboard, a workspace is called a project: you can have several and switch between them with the project selector. An organization is the account that pays. It contains one or more workspaces. A workspace is a business or a location with its own: time zone, language and currency,WhatsApp number(s),bot, services, resources and team. A chain of three barbershops is one organization with three workspaces.",{"id":326,"title":327,"titles":328,"content":329,"level":223},"\u002Fdocs\u002Fconcepts\u002Fworkspaces-and-resources#roles","Roles",[27],"Full detail of each role and its permissions in Roles and permissions. RoleCanownerEverything, across all workspaces of the organizationmanagerEverything inside one workspacestaffSee and manage only their own resources (for example, a barber sees only their agenda)viewerRead-only Staff can also act from WhatsApp after linking their number with a one-time code. Admin actions from WhatsApp always ask for a YES\u002FNO confirmation.",{"id":331,"title":332,"titles":333,"content":334,"level":223},"\u002Fdocs\u002Fconcepts\u002Fworkspaces-and-resources#resources","Resources",[27],"A resource is anything that gets consumed by a booking. kindExamplesstaffBarber, doctor, beautician, instructorspaceRoom, office, booth, dining roomequipmentLaser machine, chair, courttableRestaurant table (table mode)vehicleVan, delivery crewzoneDelivery area by postal code Each resource has a capacity mode: exclusive — serves one booking at a time (a barber, a room, a machine).pooled — has a capacity in units (40 covers per slot, 12 seats in a class, 10 deliveries per window).",{"id":336,"title":337,"titles":338,"content":339,"level":223},"\u002Fdocs\u002Fconcepts\u002Fworkspaces-and-resources#resource-groups","Resource groups",[27],"A resource group is an interchangeable pool (\"any barber\", \"laser machines\"). Services require groups, not individual resources, so the engine can pick one. The assignment strategy decides which: assignmentBehaviorcustomer_choiceThe customer picks (for example \"with Juan\"); falls back to another strategy if they don't careround_robinRotates between membersleast_busyPicks the member with the fewest bookings that dayfixedAlways the same member (single machine, single room) {\n  \"name\": \"Barbers\",\n  \"assignment\": \"customer_choice\",\n  \"member_ids\": [\"res_juan\", \"res_pedro\", \"res_leo\"]\n} html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"id":32,"title":31,"titles":341,"content":342,"level":217},[],"Services, multi-resource requirements, schedules and how slots are computed.",{"id":344,"title":345,"titles":346,"content":347,"level":223},"\u002Fdocs\u002Fconcepts\u002Fservices-and-availability#services","Services",[31],"A service is what the customer books. FieldMeaningduration_minLength of the servicestep_minGrid for start times (every 15, 30 minutes…)buffer_before_min \u002F buffer_after_minCleanup or preparation time blocked around the bookingprice_cents, currencyPrice shown by the bot (always from the database)deposit_centsDeposit required to confirm (online charging: coming soon)lead_time_minMinimum notice (for example 60 minutes)max_advance_daysHow far ahead customers can bookwindow_modeThe slot is a fixed window (deliveries: 14:00–16:00)fulfillment_modescheduled (default, with a time slot) or queue (dispatch by queue, no fixed time)location_modeWhere the service happens: at your business, at the customer's address or their choicecolorColor that identifies the service across all viewsintake_formJSON Schema of extra data to collect (insurance, address…)requirementsWhich resources the service needs at the same time",{"id":349,"title":350,"titles":351,"content":352,"level":223},"\u002Fdocs\u002Fconcepts\u002Fservices-and-availability#window-or-dispatch-two-fulfillment-modes","Window or dispatch: two fulfillment modes",[31],"Every service defines how the booking is fulfilled (fulfillment_mode): scheduled (the default): the booking occupies a known time range — a fixed slot or, with window_mode, a window (deliveries from 14:00 to 16:00, with capacity per zone).queue (dispatch, for water, gas or on-demand delivery): the booking has no fixed time — it joins a courier's backlog queue. The engine assigns it to the courier with the fewest active tasks, and each courier has a cap on active tasks at a time, enforced in the database. The queue uses the same states as a booking: pending → accepted → started → completed (or failed). So the same delivery business can offer scheduled windows, immediate dispatch, or both.",{"id":354,"title":355,"titles":356,"content":357,"level":223},"\u002Fdocs\u002Fconcepts\u002Fservices-and-availability#requirements","Requirements",[31],"A requirement says: from this group, I need this many units. A service can have several; a slot exists only if all of them are free. {\n  \"name\": \"Laser hair removal\",\n  \"duration_min\": 45,\n  \"buffer_after_min\": 10,\n  \"requirements\": [\n    { \"resource_group_id\": \"grp_professionals\", \"units\": 1 },\n    { \"resource_group_id\": \"grp_lasers\", \"units\": 1 },\n    { \"resource_group_id\": \"grp_rooms\", \"units\": 1 }\n  ]\n} With two professionals but only one laser, Fiuit will never offer two overlapping laser sessions. Advanced options: units: \"party_size\" — consume as many units as people (restaurants, classes).offset_min \u002F duration_min on a requirement — use a resource for part of the service only (for example the wash basin during the last 15 minutes of a hair color).",{"id":359,"title":360,"titles":361,"content":362,"level":223},"\u002Fdocs\u002Fconcepts\u002Fservices-and-availability#schedules","Schedules",[31],"Each resource has a schedule: weekly rules in the resource's time zone plus overrides for specific dates (closed, or special hours). {\n  \"tz\": \"America\u002FSao_Paulo\",\n  \"weekly\": { \"tue\": [[\"09:00\", \"19:00\"]], \"sat\": [[\"08:00\", \"12:00\"], [\"13:00\", \"16:00\"]] },\n  \"overrides\": [{ \"date\": \"2026-12-24\", \"ranges\": [[\"09:00\", \"13:00\"]] }, { \"date\": \"2026-12-25\", \"closed\": true }]\n}",{"id":364,"title":365,"titles":366,"content":367,"level":368},"\u002Fdocs\u002Fconcepts\u002Fservices-and-availability#the-services-own-days-and-hours","The service's own days and hours",[31,360],"A service can also have its own window: the days and ranges when it is offered, using the same weekly editor as resources. Availability is always the intersection: the service window narrows the team's availability, it never widens it. If the service sets no window, any time its resources have is offered. The editor previews the real intersection before saving, and the bot explains the window when there are no slots.",3,{"id":370,"title":371,"titles":372,"content":373,"level":223},"\u002Fdocs\u002Fconcepts\u002Fservices-and-availability#color","Color",[31],"Each service picks a color from the theme palette. You see it in the calendar, Today, Work, the map and the statistics, next to the name: the color identifies, but it never replaces the text. If you do not pick one, Fiuit assigns a stable color automatically.",{"id":375,"title":376,"titles":377,"content":378,"level":223},"\u002Fdocs\u002Fconcepts\u002Fservices-and-availability#where-it-happens","Where it happens",[31],"Each service defines its destination: At your business: the task happens at the business address.At the customer's address: deliveries, visits, in-home service.The customer's choice: the customer decides when booking. When the destination is the customer's address, creating the task suggests the address already on file (with autocomplete or manual entry, see Map and addresses). Each task keeps its own destination: changing it on one task does not touch the others or the profile. Saving the new address to the customer profile is optional and separate: it only happens if you tick the consent checkbox. The bot confirms the address, the consent and the booking as separate steps.",{"id":380,"title":381,"titles":382,"content":383,"level":223},"\u002Fdocs\u002Fconcepts\u002Fservices-and-availability#forms-with-quantities-and-calculations","Forms with quantities and calculations",[31],"Besides text fields, a service's form supports: Quantities: how many units of something (bottles, meters, people, devices).Calculated fields: a simple expression that combines quantities and prices to show a total (for example water * 1500 + gas * 3000). The calculation is validated on the server and cannot touch other modules' or other businesses' data. The dashboard has an editor and a preview: test the result before saving. When creating the task, the form asks for the quantities, applies the calculation and shows the total; the customer sees a clear summary of what they ordered. The quote stays frozen with the task: if the catalog price changes before confirming, the already-built task keeps its total; editing the quantities by hand recalculates with the current catalog.",{"id":385,"title":386,"titles":387,"content":388,"level":223},"\u002Fdocs\u002Fconcepts\u002Fservices-and-availability#how-slots-are-computed","How slots are computed",[31],"Expand the schedules for the requested range, in each resource's time zone.Remove active bookings and holds (plus buffers) and manual blocks.Cut into candidate slots using the service duration and step.Apply lead time, max advance, cutoff rules and party size.Cross all requirements, trying group members according to the assignment strategy.Return a short, ordered list. When nothing is available, the response includes unavailable_reason (closed, no_staff, no_equipment, no_space, lead_time, max_advance, cutoff, full) so the bot can explain why. Each service's past results —completed, canceled, estimated revenue, peak time and CSV export— live in Results and sales.",{"id":390,"title":391,"titles":392,"content":393,"level":223},"\u002Fdocs\u002Fconcepts\u002Fservices-and-availability#pause-and-duplicate","Pause and duplicate",[31],"Pausing stops offering the service for new requests through the bot, public booking, Wagy and MCP. Already scheduled tasks can be rescheduled, reassigned, completed and canceled with the usual permissions and validation. Pausing preserves schedule and capacity checks. Reactivating offers it again. Pause and deactivate are the same action. Duplicate creates a paused « (copia)» with price, rules, requirements, form, products, independent hours and stages. It does not copy tasks, results or reviews. Catalog permission is required; without stage editing permission it uses the project base stages and warns you. Review the copy and reactivate when ready. In the detail open ⋯ → Duplicate or Pause. Desktop also has a list menu. Wagy proposes both actions and waits for plan confirmation. MCP allows pausing with update_service(active=false, confirm=true); duplication does not yet have an MCP tool. html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"id":36,"title":35,"titles":395,"content":396,"level":217},[],"Booking states, the 10-minute hold, deposits and the no-double-booking guarantee.",{"id":398,"title":399,"titles":400,"content":401,"level":223},"\u002Fdocs\u002Fconcepts\u002Fbookings-and-holds#why-a-hold","Why a hold",[35],"A WhatsApp conversation can take minutes: the customer picks a time, then you ask their name, then maybe a deposit. Meanwhile other customers and the API are competing for the same slot. A hold reserves the slot for 10 minutes (15 when a deposit is required) and expires on its own.",{"id":403,"title":404,"titles":405,"content":406,"level":223},"\u002Fdocs\u002Fconcepts\u002Fbookings-and-holds#states","States",[35],"StatusMeaningOccupies the slotheldTemporary reservationYespending_paymentWaiting for the depositYesconfirmedBookedYeschecked_inThe customer arrivedYescompletedService doneNocancelledCancelled (or replaced by a reschedule)Nono_showMarked absent by a personNoexpiredHold not confirmed in timeNo held ──confirm──► confirmed ──check-in──► checked_in ──► completed\n │  └─(deposit)─► pending_payment ──paid──► confirmed\n └─expire──► expired          confirmed ──cancel──► cancelled",{"id":408,"title":409,"titles":410,"content":411,"level":223},"\u002Fdocs\u002Fconcepts\u002Fbookings-and-holds#guarantees","Guarantees",[35],"Every resource a booking occupies is stored as an allocation with a time range.For exclusive resources, PostgreSQL rejects overlapping allocations with an exclusion constraint.For pooled resources, capacity counters can never exceed the limit (checked atomically).A multi-resource booking is written in a single transaction: if any resource clashes, nothing is booked.POST \u002Fholds and POST \u002Fholds\u002F{id}\u002Fconfirm require an Idempotency-Key: retrying a request never creates a second booking. If a slot was taken while the customer was deciding, you get 409 with code: \"slot_taken\" and a list of alternatives.",{"id":413,"title":414,"titles":415,"content":416,"level":223},"\u002Fdocs\u002Fconcepts\u002Fbookings-and-holds#reschedule-and-cancel","Reschedule and cancel",[35],"Reschedule creates a new booking and cancels the old one (linked by rescheduled_to). Reminders move automatically.Cancel frees the slot and cancels pending reminders.No-show is never automatic: the system suggests it, a person confirms it.",{"id":418,"title":419,"titles":420,"content":421,"level":223},"\u002Fdocs\u002Fconcepts\u002Fbookings-and-holds#deposits","Deposits",[35],"If the service has deposit_cents, confirming a hold leaves the booking in pending_payment and the slot stays blocked. When the provider confirms the deposit charge, the core records payment, confirms the booking and emits payment.paid. Availability of a real provider depends on the business configuration.",{"id":40,"title":39,"titles":423,"content":424,"level":217},[],"Simple reminder and confirmation rules, quiet hours and execution guarantees. For waits and conditions, see flows. There are two automation tools: Rules: \"when this happens, send that message\". They are the simplest way to send reminders and confirmations. They are managed in Automation → Rules.Flows: they wait, decide with conditions and act on tasks. See Flows and Conditions.",{"id":426,"title":427,"titles":428,"content":429,"level":223},"\u002Fdocs\u002Fconcepts\u002Fautomations#rules","Rules",[39],"A rule has a trigger, the message it sends (a template with preview) and, if you want, a filter by stage or action. Each business creates, activates and adjusts its own: no rule ever messages a customer while it is off.",{"id":431,"title":432,"titles":433,"content":434,"level":368},"\u002Fdocs\u002Fconcepts\u002Fautomations#triggers","Triggers",[39,427],"TriggerExampleSome time before the start24 h before: send a reminderSome time after the endFollow-up messageCancellation or rescheduleNotify the customerA task tool is usedWhen someone reschedules or takes the taskFixed time of dayTeam alerts, such as the day's agenda Rules aimed at customers go out through WhatsApp. Team alerts go out through Telegram, WhatsApp or email, depending on how each person receives alerts: see Team Telegram. In each rule you see the latest sends with their status and the reason if one failed.",{"id":436,"title":437,"titles":438,"content":439,"level":223},"\u002Fdocs\u002Fconcepts\u002Fautomations#notices-when-a-task-enters-a-stage-and-the-confirmation","Notices when a task enters a stage (and the confirmation)",[39],"The customer notice when a task enters a stage —for example \"Out for delivery\"— and the confirmation notice are no longer rules: they belong to the service stage, in its \"On arrival\" block. There is a single place for them and the customer never gets the same notice twice. Each notice has its own switch. The ones that come with your business type arrive turned off, including \"Out for delivery\".The confirmation goes out only once, whether it comes from the bot, the deposit payment, the panel or a stage button. Tasks without a time do not get it.On arrival can also notify the team: every person assigned to the task, by email and Telegram. If one channel fails, it is retried without repeating the one that already arrived.The same guarantees below apply (quiet hours, test customers, paused channel), as well as the project's notice switches.To wait some time, add conditions or call your own webhook when a task enters a stage, use a flow. For now these notices are configured through the API or MCP (service stages); the visual stage editor is coming soon. The stage and confirmation rules you had were moved to their stages automatically, keeping their state (on or off).",{"id":441,"title":442,"titles":443,"content":444,"level":223},"\u002Fdocs\u002Fconcepts\u002Fautomations#recommended-for-your-business","Recommended for your business",[39],"Fiuit ships a small set of rules recommended for your business type (24 h reminder, review request after completion, team alerts…). They are installed turned off: nobody messages your customers until you decide. Go to Automation → Rules.Under Recommended for your business, check each rule's message preview.Turn on the ones you want with the toggle. The section hides once nothing is left to activate.",{"id":446,"title":447,"titles":448,"content":449,"level":368},"\u002Fdocs\u002Fconcepts\u002Fautomations#win-back-customers-who-stop-coming","Win back customers who stop coming",[39,442],"One of the recommended rules is \"Win back customers who stop coming\": it messages customers on WhatsApp who have had no activity for N days (no completed tasks and no inbound messages; whatever the business sends does not count). The number of days is editable on the rule (1 to 365; each template ships a sensible value for its trade). The sweep runs hourly, only during daytime (10:00 to 18:00, business time) and with a cap on new customers per run, so it writes gradually. Each customer gets one message per inactivity period: if they come back and lapse again, they may receive another one later. If the customer opted out of messages, or the channel or the AI is paused, they are skipped.",{"id":451,"title":452,"titles":453,"content":454,"level":223},"\u002Fdocs\u002Fconcepts\u002Fautomations#automated-messages-done-responsibly","Automated messages, done responsibly",[39],"There is a cap of 30 automated sends per hour to customers, per project: sends are staggered automatically to protect the WhatsApp line.On the customer profile (owner and manager), the \"Do not send promotional automated messages\" toggle marks those who asked not to receive them. Booking reminders keep going out as usual: the toggle only stops promotional messages, such as the win-back one.",{"id":456,"title":457,"titles":458,"content":459,"level":223},"\u002Fdocs\u002Fconcepts\u002Fautomations#execution-guarantees","Execution guarantees",[39],"Each send is scheduled together with the event that causes it, so it is not lost.Before going out, the system checks the task again. If it was rescheduled or cancelled, the old send is discarded.Each send goes out once and, if it fails, retries with growing waits; after 5 failures it shows in the panel.Quiet hours: nothing is sent to customers between 21:00 and 08:00 in the business's time zone. The send is deferred, not lost.YES\u002FNO replies (\"yes\", \"ok\", \"👍\", \"não\"...) are interpreted without AI: instant and free.",{"id":461,"title":462,"titles":463,"content":464,"level":223},"\u002Fdocs\u002Fconcepts\u002Fautomations#coming-soon","Coming soon",[39],"Triggers for expired holds and for payments do not exist yet (they arrive with deposit collection).",{"id":466,"title":467,"titles":468,"content":469,"level":223},"\u002Fdocs\u002Fconcepts\u002Fautomations#service-notices-and-delivery-log","Service notices and delivery log",[39],"In Settings → Customer notices, the owner or manager configures service notices: creation without a time, assigned or changed person, modified data, in transit, arrival and completion. They start disabled. For modified data, select relevant field keys; consecutive edits are grouped until 60 seconds after the last edit. For progress, select a current service stage. If the stage already has a notice, its existing configuration is preserved. Texts are saved per language and support service and business placeholders. The delivery log appears in these settings, task Activity and the customer page. It shows up to 50 attempts from the last 90 days: sent, skipped, deferred or failed, with channel, template and reason. “Sent” means accepted by the adapter; it does not prove delivery or reading. It stores neither message text nor contacts. It starts with this version without reconstructing earlier sends. Missing channels or expired reply windows cause an omission; there is no automatic fallback to email or another channel. Promotion opt-out affects reactivation, not operational notices.",{"id":44,"title":43,"titles":471,"content":472,"level":217},[],"Find customers, conversations, tasks, resources and services from any dashboard screen with Ctrl\u002FCmd+K or the mobile magnifier. Global search takes you straight to what you are looking for, from any dashboard screen, without opening each section.",{"id":474,"title":475,"titles":476,"content":477,"level":223},"\u002Fdocs\u002Fconcepts\u002Fglobal-search#how-to-use-it","How to use it",[43],"On a computer, press Ctrl+K (on Mac, Cmd+K). On your phone, tap the magnifier in the top bar.Type what you are looking for: a name, a phone number, an email or a task code.Move through the results with the arrow keys, press Enter to open a result and Escape to close. Results are grouped by type —Customers, Conversations, Tasks, Resources and Services— and empty groups are hidden. Each result opens its screen: a task opens its dialog directly.",{"id":479,"title":480,"titles":481,"content":482,"level":223},"\u002Fdocs\u002Fconcepts\u002Fglobal-search#what-it-searches","What it searches",[43],"Customers: name, phone or email.Conversations: by customer or by the latest message.Tasks: by customer, service or code (the short prefix you see on the task).Resources and services: by name.",{"id":484,"title":485,"titles":486,"content":487,"level":223},"\u002Fdocs\u002Fconcepts\u002Fglobal-search#who-sees-what","Who sees what",[43],"Results respect your role: staff and read-only roles do not see customers, resources or services, and staff only see the conversations and tasks they can already see on their screens, with sensitive data masked. Search never shows money and does not log what you typed. If one group is too slow, it is skipped and the rest of the results still appear.",{"id":48,"title":47,"titles":489,"content":490,"level":217},[],"How to see each service's and the business's results, with periods, trends, top customers and CSV export, and who can see them. In Services you see much more than the catalog: each service shows its past results and the business has a monthly summary with the total.",{"id":492,"title":493,"titles":494,"content":495,"level":223},"\u002Fdocs\u002Fconcepts\u002Fsales-results#in-a-services-detail","In a service's detail",[47],"Open Services and tap the service.Pick the period: Today, week, month, last month, quarter (with weekly bars) or year (with monthly bars).Review the indicators and tap Export CSV to download the table. What it shows: Completed tasks, with the canceled and no-show rates.Estimated revenue and average ticket: calculated with the catalog's current price of completed tasks, plus retained deposits. It is an estimate, not the actual money collected.Retained deposits and top customers (without data your role cannot see).The service's peak day and time.Weight on capacity: how much of the shared resources the service occupies. Queue-based services do not use a schedule, so they have no such data. If the service has a form with quantities or calculations (see Services and availability), results are aggregated per field: you see how much of each item was used or sold, with its trend, and it is also included in the CSV.",{"id":497,"title":498,"titles":499,"content":500,"level":223},"\u002Fdocs\u002Fconcepts\u002Fsales-results#business-summary","Business summary",[47],"The Services list shows a card with the month's summary for the whole business; tapping it breaks the detail down by service.",{"id":502,"title":503,"titles":504,"content":505,"level":223},"\u002Fdocs\u002Fconcepts\u002Fsales-results#who-sees-it","Who sees it",[47],"Only the owner and manager (or an API key with booking-read permission) see results and amounts. Staff and read-only roles get no money and no customer names.",{"id":52,"title":51,"titles":507,"content":508,"level":217},[],"Rename Service, Task, Resource and Customer with your business's own words and use them across the dashboard, the bot, notifications and operational emails. Fiuit talks about the service, the task, the resource and the customer. If your business calls those things something else —product and order, professional and patient— you can use your own words. The dashboard, the bot's messages, notifications and operational emails use them, with correct agreement.",{"id":510,"title":511,"titles":512,"content":513,"level":223},"\u002Fdocs\u002Fconcepts\u002Fvocabulary#changing-the-names-step-by-step","Changing the names, step by step",[51],"Go to Settings → What you call things (owner or project admins only).Pick a starting point or type each name by hand. For each concept, set the singular, the plural and the gender, in lowercase.You edit per language: the names you write in English are used in English messages, and likewise for Spanish and Portuguese.Save. Settings applies everything together in one batch: Save confirms the names along with the rest of the page's changes and Discard restores the previous values. Changes show up right away in the menu, buttons, screens, bot messages and notifications, for the whole team.",{"id":515,"title":516,"titles":517,"content":518,"level":223},"\u002Fdocs\u002Fconcepts\u002Fvocabulary#what-does-not-change","What does not change",[51],"Only the name changes. Your data, bookings, permissions and statistics stay the same: a task is still a task even if the screen says \"order\".Texts written by people (notes, replies, comments) are untouched.To go back, restore the default names in the same section and save. Real names —of customers, services or resources— and numbers are never translated: the vocabulary changes how Fiuit calls the concepts, not your data.",{"id":56,"title":55,"titles":520,"content":521,"level":217},[],"The project palette is chosen in Settings and applies to the whole team; each person picks a light, dark or automatic theme in their own account. Fiuit keeps two separate color decisions: the project palette (which colors the dashboard uses) and the theme (which background they are drawn on).",{"id":523,"title":524,"titles":525,"content":526,"level":223},"\u002Fdocs\u002Fconcepts\u002Fthemes#the-project-palette","The project palette",[55],"The palette defines the dashboard colors for the whole team: buttons, badges, primary actions and surfaces. Go to Settings → Appearance (owner or project admins).Pick a palette from the available ones: two-color combinations, monochrome options and Black and white for an interface with no brand colors. The selector shows a preview with real text and buttons.Save. Settings changes are applied all together with a single Save and show up right away for the whole team. If you do not pick one, the project uses the platform palette. With the Black and white palette, success, error and other notices stay in color: nothing important slips by.",{"id":528,"title":529,"titles":530,"content":531,"level":223},"\u002Fdocs\u002Fconcepts\u002Fthemes#each-persons-theme","Each person's theme",[55],"Each person chooses how their own dashboard looks, without touching the project palette: In My account you pick light, dark or automatic (follows the device theme).The map has its own selector (automatic, light or dark), remembered per browser. So the business keeps its identity and everyone works with the light they prefer.",{"id":66,"title":65,"titles":533,"content":534,"level":217},[],"Connect your business number by QR, what the assistant does with customers and with your team, and how to hand a conversation to a person.",{"id":536,"title":537,"titles":538,"content":539,"level":223},"\u002Fdocs\u002Fchannels\u002Fwhatsapp#connect-a-number","Connect a number",[65],"In the dashboard, go to Settings → Channels.Tap Link WhatsApp. A QR code appears.On the business phone open WhatsApp, tap Settings (or the three dots), Linked devices and Link a device, and point the camera at the code.When the status turns Connected you can receive messages. If the code expires, tap Reconnect to generate a new one. Only the owner and managers can link. The screen shows the status (connected, waiting for scan, disconnected) and how many connections your plan includes. Disconnect stops the bot on that number but keeps conversations and history. Use a number dedicated to the business. Today the QR connection (like WhatsApp Web) is the way to connect WhatsApp. Do not share the code: it gives access to your WhatsApp. There is a Test channel: it is the bot simulator and does not count toward your plan.",{"id":541,"title":542,"titles":543,"content":544,"level":223},"\u002Fdocs\u002Fchannels\u002Fwhatsapp#customers-and-team","Customers and team",[65],"The role is decided in code, never by what someone says in the chat: A number linked to a team member (verified with a one-time code) gets team tools.Everyone else gets customer tools. Customer toolsTeam tools (extra)See services, find slots, hold and confirm, see and cancel or reschedule their own bookings, query the business's information and knowledge, save a shared location, hand off to a personSee the day, block time, mark a no-show, update the catalog and advance a task's stage, always with a YES\u002FNO confirmation Your team can also receive alerts on Telegram.",{"id":546,"title":547,"titles":548,"content":549,"level":223},"\u002Fdocs\u002Fchannels\u002Fwhatsapp#what-the-ai-can-and-cannot-do","What the AI can and cannot do",[65],"CanCannotUnderstand text, audio, typos and changes of mindInvent times, prices or addressesFind slots and offer 2 or 3 optionsConfirm a booking without the engineHold a slot and ask for missing detailsUse admin tools with a customerAnswer from the business's knowledgeFollow instructions hidden in messages or filesHand the conversation to a personSee another business's data More in Bot and AI.",{"id":551,"title":552,"titles":553,"content":554,"level":223},"\u002Fdocs\u002Fchannels\u002Fwhatsapp#shared-location","Shared location",[65],"If a customer shares their location on WhatsApp, it is saved in the conversation and the Inbox shows it on a map. The bot can use it as a delivery destination or as the customer's address, always asking for a YES or NO confirmation. See Map and addresses.",{"id":556,"title":557,"titles":558,"content":559,"level":223},"\u002Fdocs\u002Fchannels\u002Fwhatsapp#handing-off-to-a-person","Handing off to a person",[65],"The team sees every conversation live in the Inbox. Take over pauses the bot in that conversation; it comes back by itself after 15 minutes without operator activity, or when you tap Hand back to bot. The assistant also hands off when the customer asks (\"I want to talk to a person\").",{"id":561,"title":562,"titles":563,"content":564,"level":223},"\u002Fdocs\u002Fchannels\u002Fwhatsapp#audio-and-languages","Audio and languages",[65],"Audio is transcribed before the AI reads it, and the transcript shows in the Inbox. The assistant answers in the customer's language (Portuguese, Spanish or English).",{"id":566,"title":567,"titles":568,"content":569,"level":223},"\u002Fdocs\u002Fchannels\u002Fwhatsapp#pausing-the-channel","Pausing the channel",[65],"If there is spam or noise, you can pause the bot or the whole channel without disconnecting. See Pauses and Status.",{"id":70,"title":69,"titles":571,"content":572,"level":217},[],"Put the Fiuit assistant on your site with one line of code, with required contact details and per-channel rules. The web chat is a widget your business pastes into its own site. It talks to the same bot as WhatsApp (same schedules, prices and bookings), with no phone number or third-party approvals. Conversations land in the same Inbox. If you self-host Fiuit, the web chat ships turned off: enable it with PUBLIC_WEBCHAT_ENABLED=true on the API.",{"id":574,"title":575,"titles":576,"content":577,"level":223},"\u002Fdocs\u002Fchannels\u002Fwebchat#install-step-by-step","Install step by step",[69],"As the owner, go to Settings → Channels → Web chat.Under Allowed sites add each site where you will use it, one per line, with https:\u002F\u002F and no wildcards or paths (for example https:\u002F\u002Fwww.mystore.com). To test on your computer, http:\u002F\u002Flocalhost is accepted.Choose the main color, button position, default language, an optional title (up to 40 characters) and the assistant avatar: your logo (with its URL), the animated Wagy mascot tinted with your color, or generic initials.Tap Turn on web chat. You get a publishable key wg_web_… and the code to paste.Paste the snippet before \u003C\u002Fbody> on every page where you want the chat: \u003Cscript src=\"https:\u002F\u002Ffiuit.com\u002Fwidget.js\" data-key=\"wg_web_…\" defer>\u003C\u002Fscript> Optional attributes: data-locale (pt, es or en; defaults to the browser language), data-offset-bottom (pixels, to raise the button if your site has a fixed bottom bar), data-api (API origin, for test environments only) and data-avatar (logo, wagy or generic; overrides the configured avatar). If you tap Turn off, the chat stops working and open conversations are closed; when you turn it on again you get a new key and must update the code. There is a demo page at \u002Fdemo\u002Fwebchat where you paste the key and see the widget working.",{"id":579,"title":580,"titles":581,"content":582,"level":223},"\u002Fdocs\u002Fchannels\u002Fwebchat#what-the-visitor-sees","What the visitor sees",[69],"A floating button that opens the chat (full screen on phones, respecting safe areas), in Portuguese, Spanish or English.If you pick Wagy as the assistant's avatar, the mascot blinks and \"talks\" while the bot prepares its reply (with the device's reduced-motion preference it stays still), and the floating button can show a mini Wagy.A chat that is short on purpose: brief answers that suggest booking or continuing on WhatsApp. On the web the visitor is anonymous and every answer costs money.If the bot asks for their location (for example for a delivery), it offers Use my location, with explicit consent.The conversation carries across pages and reloads: when the visitor comes back, the chat shows what was said and any replies that arrived meanwhile (with a new-messages badge if it was closed). A New conversation button, in the chat's ⋯ menu, clears it and starts fresh.",{"id":584,"title":585,"titles":586,"content":587,"level":223},"\u002Fdocs\u002Fchannels\u002Fwebchat#continuity-across-pages-and-reloads","Continuity across pages and reloads",[69],"When a conversation opens, the server issues an opaque session code. The widget keeps it in the browser storage (localStorage, or sessionStorage if unavailable) of the site where you installed the chat, with one key per publishable key. It uses no cookies or third-party services, and nothing personal is stored there: no name, phone, email or messages. Declared contact details live only on the server, so the chat does not ask for them again within the same conversation. On another page or after a reload, the widget validates the code, loads the history and reconnects to receive new replies.Expiry: the conversation expires after inactivity and at a maximum lifetime. If the code expired, was closed or was purged, the widget discards it and starts a new conversation, with no visible error.New conversation: the visitor picks it from the ⋯ menu. The code is invalidated on the server, the browser copy is deleted and the chat starts empty. Your team keeps the previous history in the Inbox until it is purged.Private mode or blocked storage: the chat still works, but the conversation does not survive a reload.Paused channel: if you paused the channel, the chat is not shown even when the visitor has a saved code; when you resume, the conversation continues. The code is not a strong secret: it is a key to a single conversation, never to others or to the panel. It only works from the origins you authorized in the widget, is subject to the same usage limits, and is invalidated on expiry, on New conversation and when the conversation is purged.",{"id":589,"title":590,"titles":591,"content":592,"level":223},"\u002Fdocs\u002Fchannels\u002Fwebchat#required-contact-details","Required contact details",[69],"By default the bot does not chat until it has a phone and an email: for any message it replies with a fixed text (no AI) and the chat shows a small form (phone with country selector, in international format, and email). As soon as it is filled in, the visitor's first message is processed on its own, without repeating it. The details are declared, not verified: they do not identify the visitor and are never merged with existing customers. They are stored encrypted and deleted along with the expired conversation.",{"id":594,"title":595,"titles":596,"content":597,"level":223},"\u002Fdocs\u002Fchannels\u002Fwebchat#bot-rules-per-channel","Bot rules per channel",[69],"Under Channels → Bot rules per channel (owner and manager) you pick the channel (Web chat or WhatsApp) and set: RuleWhat it doesWeb chat (default)WhatsApp (default)Required detailsName, phone and\u002For email before chattingphone and emailnone (the phone already comes from the channel)When it asksFrom the first message, after a few replies, or neverfrom the first messageneverText used to askA customizable fixed textthe defaultnot applicableReply limitCap on bot replies per conversation6no capWhat it offers at the limitContinue on WhatsApp and\u002For get the information by emailbothnoneBot style in the channelA tone preference (up to 500 characters)short answersnone These are project rules: the server applies them before invoking the AI, even if someone uses the public API without the widget. At the limit the bot stops replying and stops spending AI, sends a fixed message with the options and the conversation stays in the Inbox as \"needs follow-up\", with the details the visitor left. If no WhatsApp is connected, that option is not offered.",{"id":599,"title":310,"titles":600,"content":601,"level":223},"\u002Fdocs\u002Fchannels\u002Fwebchat#security",[69],"The publishable key only opens anonymous conversations: it gives no access to the dashboard, the private API or customer data. You can revoke it at any time.The business always comes from the key; the widget never sends a business identifier.Only allowed sites can use the chat. No cookies.The origin check is not authentication: it only protects against other sites in a browser. Real protection comes from usage limits.There are caps on messages per conversation, per hour and per day. When reached, the chat asks the visitor to wait and the AI is not invoked.Visitor text is treated as untrusted data, and the widget always renders it as plain text.The chat only replies: it sends no proactive messages.You can pause the bot or the whole channel if needed; with the channel paused the widget hides.",{"id":603,"title":160,"titles":604,"content":605,"level":223},"\u002Fdocs\u002Fchannels\u002Fwebchat#api",[69],"Management (owner): GET|PUT|DELETE \u002Fv1\u002Fwebchat-site. Per-channel rules (owner and manager): GET \u002Fv1\u002Fbot\u002Fchannel-policies and PUT \u002Fv1\u002Fbot\u002Fchannel-policies\u002F{channel}. The widget's public endpoints are in the OpenAPI contract under \u002Fv1\u002Fpublic\u002Fwebchat. html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"id":74,"title":73,"titles":607,"content":608,"level":217},[],"Connect your business's Telegram bot so customers can book and ask questions as on WhatsApp, with the same Inbox and the same bot. With Telegram, your customers message a bot that belongs to your business and get served by the same assistant as on WhatsApp: same services, same schedules, same Inbox. It is separate from Team Telegram, which is a single Fiuit bot for internal alerts and the \"My day\" Mini App.",{"id":610,"title":611,"titles":612,"content":613,"level":223},"\u002Fdocs\u002Fchannels\u002Ftelegram#connect-your-bot","Connect your bot",[73],"In Telegram open @BotFather and send \u002Fnewbot. Choose a name and a username ending in bot.BotFather gives you a token (something like 123456:ABC…). It is a secret: do not share it.In the dashboard, go to Settings → Channels → Telegram for your customers.Paste the token into Bot token and tap Connect bot. Only the owner can do this.When the status reads Receiving messages, it works. Try it by messaging the bot from your own Telegram. The token is stored encrypted and never shown again. If you revoke it in BotFather, paste the new one with Update token. One bot cannot be connected to two businesses. Disconnect deletes the stored token and keeps the history.",{"id":615,"title":616,"titles":617,"content":618,"level":223},"\u002Fdocs\u002Fchannels\u002Ftelegram#what-it-does","What it does",[73],"Serves with the same bot: finds slots, holds, confirms, answers from your knowledge and hands off to a person.Options and confirmations appear as buttons inside the chat.Accepts text and location (including a location shared as a place). Today it does not process voice, photos or group and channel messages.There is no reply window like WhatsApp: you can answer whenever you want.",{"id":620,"title":621,"titles":622,"content":623,"level":223},"\u002Fdocs\u002Fchannels\u002Ftelegram#multichannel-identity","Multichannel identity",[73],"Each person who writes on Telegram becomes an identity of the customer, verified by Telegram and without a phone number. One customer can have several identities (WhatsApp phone, Telegram) and see them all on their profile. Outgoing messages go through the channel of the matching identity.",{"id":625,"title":552,"titles":626,"content":627,"level":223},"\u002Fdocs\u002Fchannels\u002Ftelegram#shared-location",[73],"If the customer shares their location, it stays in the conversation and the Inbox shows a map. The bot can save it as the task destination or as the customer's address, with a YES\u002FNO confirmation. See Map and addresses.",{"id":629,"title":630,"titles":631,"content":632,"level":223},"\u002Fdocs\u002Fchannels\u002Ftelegram#status-and-pauses","Status and pauses",[73],"In Settings → Status you see whether the bot is receiving messages, whether there were delivery errors and whether any customer blocked the bot. You can pause the bot or the channel.",{"id":634,"title":462,"titles":635,"content":636,"level":223},"\u002Fdocs\u002Fchannels\u002Ftelegram#coming-soon",[73],"Instagram: see Instagram (enabled once Meta approves the app). The customer bot books services with scheduled times; the team creates queue tasks through the dashboard or API. Creating queued deliveries through chat: coming soon.",{"id":78,"title":77,"titles":638,"content":639,"level":217},[],"Pause a channel or your project's AI in an emergency, and check Status and AI usage to see whether your business is serving customers. There are three tools for when something goes wrong (spam, unexpected costs, Inbox noise) and two screens to see how your service is doing.",{"id":641,"title":642,"titles":643,"content":644,"level":223},"\u002Fdocs\u002Fchannels\u002Fpauses-and-status#pause-a-channel","Pause a channel",[77],"Every connected channel (WhatsApp, Telegram and web chat) can be paused without disconnecting it, in Settings → Channels. Owner and manager only. There are two levels: LevelWhat happensWhen to use itPause botMessages are still stored and reach the Inbox, but the bot does not reply or spend AI. The conversation switches to human mode, flagged for attention. Optionally the customer gets one fixed message (you choose the text; by default \"A person will reply shortly.\").You want to handle things by hand for a while.Pause channelEverything arriving on the channel is discarded: no customers, conversations or messages are created, and there is no AI. Only a count of discarded messages is kept. The team cannot send on that channel either. The web chat stops showing.There is spam or abuse. Steps: Go to Settings → Channels and find the channel.Tap Pause bot or Pause channel.Write a reason (optional), decide whether to send the fixed message and confirm.To go back, tap Resume. While something is paused, the dashboard shows a notice with who paused it and since when. Everything is recorded in the audit log.",{"id":646,"title":647,"titles":648,"content":649,"level":223},"\u002Fdocs\u002Fchannels\u002Fpauses-and-status#pause-the-projects-ai","Pause the project's AI",[77],"It is an emergency switch in Settings → AI usage: it cuts all of the project's AI consumption (bot, Wagy, knowledge and audio transcription) before another cent is spent. The bot replies with a fixed message and moves the conversation to the Inbox with attention flagged.Knowledge imports wait, without error, and resume when you turn AI back on.Everything else keeps working: calendar, tasks, customers and manual actions. Tap Pause AI and confirm; to go back, Resume AI. Owner and manager only.",{"id":651,"title":652,"titles":653,"content":654,"level":223},"\u002Fdocs\u002Fchannels\u002Fpauses-and-status#automatic-pause-for-spam-or-abuse","Automatic pause for spam or abuse",[77],"On by default, in Settings → AI usage. Two protections, neither of which ever pauses the whole channel (so no legitimate customer is lost): Silence per contact. If one contact sends more than 15 messages in 5 minutes (or 60 in an hour), the bot stops answering them in that conversation for 30 minutes. Messages are still saved and reach the Inbox; only the AI and automatic replies are cut. The conversation is flagged for attention with the reason \"possible spam\", you get a spam notification and, from the conversation, Reactivate bot brings it back early. When the cooldown ends the bot comes back by itself.AI spend brake. If the project goes over 300 AI calls in 10 minutes, the project's AI pauses itself (reason: automatic) and we notify you. This pause does not lift by itself: a burst like that can be a loop or an attack, and resuming on its own would spend again. You see it in Status and AI usage, and you resume it with Resume AI once you have checked what happened. Your team's messages and the simulator's do not count. Owner and manager can turn it off or change the thresholds and the cooldown.",{"id":656,"title":657,"titles":658,"content":659,"level":223},"\u002Fdocs\u002Fchannels\u002Fpauses-and-status#my-service-status","My service status",[77],"Settings → Status (owner and manager) answers in plain language whether your business is serving customers. It shows an overall traffic light and one card per part: WhatsApp: whether it is connected and receiving messages.Automatic assistant: whether the bot is on.Smart replies: whether AI quota is available this month.Web chat and Telegram: allowed sites and active sessions, last message, usage caps reached, Telegram webhook, delivery errors and customers who blocked the bot.The available channels you have not connected yet, with a link to Channels. Each card with a problem has a link to fix it. If something is paused, that is shown too.",{"id":661,"title":662,"titles":663,"content":664,"level":223},"\u002Fdocs\u002Fchannels\u002Fpauses-and-status#ai-usage","AI usage",[77],"Settings → AI usage shows how much AI your business used this month and your plan's limit, with warnings at 80 % and at the limit. At the limit, AI features pause and AI automations wait in the inbox; everything else keeps working.If usage cannot be confirmed, \"Uncertain usage\" appears and AI may be limited.The amount is the known subtotal, not an invoice.With Request more (owner) you notify the Fiuit team to raise the limit.",{"id":666,"title":667,"titles":668,"content":669,"level":223},"\u002Fdocs\u002Fchannels\u002Fpauses-and-status#who-can-do-what","Who can do what",[77],"ActionOwnerManagerTeam and read-onlyPause or resume channels and AIYesYesNoSee Status and AI usageYesYesNoRequest more AIYesNoNoConnect Telegram or publish the web chatYesNoNo More about permissions in Roles and permissions.",{"id":82,"title":81,"titles":671,"content":672,"level":217},[],"Every conversation from every channel in one place: statuses, resolve, archive, delete, customer context and AI summary. The Inbox brings together conversations from WhatsApp, Telegram and the web chat into a single mailbox. The bot answers on its own; the Inbox is where you step in when a conversation needs a person.",{"id":674,"title":675,"titles":676,"content":677,"level":223},"\u002Fdocs\u002Fchannels\u002Finbox#conversation-statuses","Conversation statuses",[81],"Every conversation has a status that reflects who is being waited on: Pending: nobody has taken it yet.Waiting on customer: you replied and it is waiting for the customer to write back.Waiting on team: the customer wrote and someone needs to reply.Resolved: done. In the list you can filter by status, with a count for each; filters at zero are hidden.",{"id":679,"title":680,"titles":681,"content":682,"level":223},"\u002Fdocs\u002Fchannels\u002Finbox#resolve-archive-and-delete","Resolve, archive and delete",[81],"Mark as resolved (and Reopen a resolved one) is available in the detail view and in each row's menu. If the customer writes again, the conversation reopens by itself. You can also do it with several conversations at once: enter selection mode, pick the rows and apply the action.Archive removes the conversation from the main list. The Archived filter only appears if there is at least one, and from there you unarchive it.Delete (owner and manager only) permanently removes the conversation with all its messages and attachments. The customer and their tasks remain; if the customer writes again, a new conversation starts. The dashboard asks for confirmation and warns about pending deliveries. Every deletion is recorded in the audit log.",{"id":684,"title":685,"titles":686,"content":687,"level":223},"\u002Fdocs\u002Fchannels\u002Finbox#customer-context","Customer context",[81],"Opening a conversation shows a side panel (a sheet on mobile) with the customer context: their details, a summary of their visits, tags and notes, and their upcoming and recent tasks, which open the task dialog. Whatever is empty stays hidden. From there you can also create a task with the customer preloaded (and the service from their last task, if it is still active). If they already have a similar upcoming task, the dashboard offers to open it before creating another one. Staff only see the channel, the status and the tasks they can already see: they never see money. The owner and manager read the full profile.",{"id":689,"title":690,"titles":691,"content":692,"level":223},"\u002Fdocs\u002Fchannels\u002Finbox#summarize-with-ai","Summarize with AI",[81],"The Summarize button (in the conversation's context) uses AI to write a short summary: what the customer asks, what they were answered and what is pending, in three to five bullets. Phone numbers and emails are masked, and the text is for reading: confirm it in the conversation before acting on it. It is generated only when there are new messages; if nothing changed, the saved summary shows without spending AI again.Next to the summary's date, Update appears when new messages arrived.It consumes your plan's AI quota and respects the emergency pause: with AI paused or out of quota there is no button, just the notice.",{"id":694,"title":695,"titles":696,"content":697,"level":223},"\u002Fdocs\u002Fchannels\u002Finbox#permissions","Permissions",[81],"ActionOwner and managerStaffRead-onlyView and replyYesOnly their ownYes (read)Change status and archiveYesYesNoDeleteYesNoNoSummarize with AIYesYes (only what they see)No When a conversation is handled by a person, the bot pauses on it: see The bot and AI.",{"id":699,"title":700,"titles":701,"content":702,"level":223},"\u002Fdocs\u002Fchannels\u002Finbox#first-contact-from-the-customer-profile","First contact from the customer profile",[81],"The profile's message button is named after the channel (“WhatsApp”, “Telegram”); with several channels, desktop shows one button per channel (up to two) and on a phone “Message” opens a sheet to pick one. It opens an empty conversation when a connected channel has a routable recipient. Opening sends nothing. Telegram needs a user who has already messaged the bot; a phone number is not a bot recipient. WhatsApp Cloud (official): free text requires a 24-hour window opened by an incoming customer message. Opening a conversation does not open that window. Outside it, an approved template is required; this button does not send templates.WAHooks (unofficial): allows first-contact text without the official window. The panel warns before opening: the number may be blocked; avoid unsolicited messages. New cold openings have a limit per project and UTC day (20 by default). Reopening the same conversation does not use quota; when the limit is reached, wait until the next day. This limit does not eliminate the risk of blocking.Instagram: can't be started from the card: the customer opens the 24-hour window by writing. Web chat: only replies to the visitor.",{"id":86,"title":85,"titles":704,"content":705,"level":217},[],"A form on your website (or Typeform, Tally…) that lands in the Inbox as a channel, with a token-protected URL, antispam and replies by email or WhatsApp. The Form channel takes submissions from a form on your own website (or a tool like Typeform or Tally) and turns them into Inbox conversations: they arrive with name, email, phone and message, and you reply from there, like any conversation.",{"id":707,"title":708,"titles":709,"content":710,"level":223},"\u002Fdocs\u002Fchannels\u002Fform#turning-it-on-step-by-step","Turning it on, step by step",[85],"Sign in as the owner, go to Channels → Form and tap Activate channel.You get a public URL with a secret token: that is where your form posts. The panel also gives you a simple HTML snippet, with no dependencies, ready to paste into your site.Optional — Allowed sites: restrict where submissions may come from, one domain per line (with https:\u002F\u002F, no paths or wildcards, up to 10). Empty: submissions are accepted from any site.Optional — Antispam verification: if the platform has the Cloudflare Turnstile keys, turn on the verification to block bots server-side.Optional — Field mapping: if your form uses different field names, map each one to its data point (name, email, phone, subject, message). Any other fields are stored as extra data of the submission.",{"id":712,"title":713,"titles":714,"content":715,"level":223},"\u002Fdocs\u002Fchannels\u002Fform#how-you-reply","How you reply",[85],"Each submission appears in the Inbox as a new conversation, in the project's language. You reply by email or WhatsApp, depending on which channels you have connected and the details the sender left: With an email or phone at hand, you reply straight from the Inbox.If there is no way to reply, the submission still shows in the Inbox, marked as no reply available. Before publishing the form, you can send a test submission from the channel itself and see it in the Inbox with a test badge.",{"id":717,"title":718,"titles":719,"content":720,"level":223},"\u002Fdocs\u002Fchannels\u002Fform#the-token","The token",[85],"The URL carries a token that authenticates submissions. If it leaks or you want to change it, tap Rotate token: the current URL stops working immediately and you need to update the published forms. Turning the channel off stops new submissions; what was received is kept. The fiuit.com contact page is an example of this channel: what you write there lands straight in the Fiuit team's Inbox. The Products field supports configuring up to 72 lines. Names, units and other fields share 512 nodes and 16 KiB, so actual data may allow fewer lines. Configurations with minimums that do not fit are rejected. Existing orders and amounts are preserved.",{"id":90,"title":89,"titles":722,"content":723,"level":217},[],"Connect your business's professional Instagram account to handle direct messages with the same bot and the same Inbox. With Instagram, customers send a direct message (DM) to your business's professional account and get the same assistant as on WhatsApp: same services, same hours, same Inbox. It is a customers-only channel: the team gets no notices through Instagram. Instagram is enabled once Meta approves the Fiuit app. If you don't see the Instagram card in Channels (or it shows \"Coming soon\"), it isn't available for your project yet.",{"id":725,"title":726,"titles":727,"content":728,"level":223},"\u002Fdocs\u002Fchannels\u002Finstagram#connect-your-account","Connect your account",[89],"Your Instagram account must be professional (Business or Creator). No Facebook Page is needed.In the panel, go to Channels → Instagram and tap Connect Instagram. Only the owner can do this.Log in to Instagram with the business account and accept the permissions (basic profile and messages).You come back to the panel with the account connected (@your_account). Try it by sending a DM from another account. Fiuit stores the access encrypted and renews it before it expires. If Instagram revokes it (for example, you changed the password or removed the permission), the card turns Disconnected and you need to connect again. The same account cannot be connected to two projects. Disconnect deletes the stored access and keeps the history.",{"id":730,"title":616,"titles":731,"content":732,"level":223},"\u002Fdocs\u002Fchannels\u002Finstagram#what-it-does",[89],"Answers with the same bot: finds slots, places holds, confirms, answers from your knowledge and hands off to a person.Accepts text. If the customer sends a photo, audio or another attachment, the bot asks them to type it. Comments, story mentions and Messenger are not included.Options show as a numbered list (no buttons).",{"id":734,"title":735,"titles":736,"content":737,"level":223},"\u002Fdocs\u002Fchannels\u002Finstagram#the-24-hour-rule","The 24-hour rule",[89],"Meta only allows replies within 24 hours of the customer's last message. So: Bot and team replies go out while the window is open. If it has expired, the message is not sent and the conversation goes to a person.Automatic notices (reminders, confirmations, «on the way», assigned time) don't go out through Instagram outside the window. If the customer also wrote to you on WhatsApp or Telegram, the notice goes there, always within that channel's own rules (for example, the 24-hour window of official WhatsApp). If they have no usable channel, the notice is not retried: the task gets the no-se-pudo-avisar tag and shows up in Today's Needs your attention («Could not notify»). Let them know yourself and remove the tag.You can't start a new Instagram conversation from the customer card: the customer opens it by writing to you.",{"id":739,"title":630,"titles":740,"content":741,"level":223},"\u002Fdocs\u002Fchannels\u002Finstagram#status-and-pauses",[89],"In Channels → Instagram you see the connected account, the access status and when it expires. You can pause the bot or the channel like any other channel. Complete authorization in the same browser and project where you started. Do not share the connection link. Disconnecting releases the account so it can connect to another project. Revocation is detected when sending, checking status or refreshing; deauthorization and data deletion callbacks are still pending. Disconnecting preserves history and does not delete the data. If the window expires during sending, another usable channel for the same customer is tried. The no-se-pudo-avisar mark has a reserved slot in addition to twenty business tags, preserving them all. Reconfirmations and review requests remain in their original conversation and do not switch channels.",{"id":99,"title":98,"titles":743,"content":744,"level":217},[],"What your business's bot does, what it cannot do, how to configure it, test it in the simulator and when a conversation passes to a person. The bot is the assistant that serves your customers on WhatsApp, Telegram and your website chat. It understands what they write, offers real time slots and leaves the booking ready. Everything that matters is calculated by the system: the bot does not invent times, prices or addresses, and it never confirms anything on its own.",{"id":746,"title":747,"titles":748,"content":749,"level":223},"\u002Fdocs\u002Fbot\u002Foverview#what-it-can-and-cannot-do","What it can and cannot do",[98],"It canIt cannotUnderstand text, voice notes, typos and changes of mindInvent times, prices or addressesLook up slots and offer 2 or 3 optionsConfirm a booking without the scheduling engineHold a slot and ask for missing detailsUse admin tools with a customerAnswer questions from the knowledge baseFollow instructions hidden in a message or a fileSave a shared location (with your YES\u002FNO confirmation)See another business's dataHand the conversation to a personAnswer topics unrelated to your business (homework, code, politics, small talk) Dates, times, services and prices in every message come from templates filled with system data. Voice notes are transcribed before the AI reads them, and the transcript shows in the Inbox.",{"id":751,"title":752,"titles":753,"content":754,"level":223},"\u002Fdocs\u002Fbot\u002Foverview#configure-the-bot","Configure the bot",[98],"Go to Automation → Bot. It has four tabs: Personality: the bot's name, tone (friendly, professional or casual), the first message (you can use {name} and {business}), behavior instructions and default language.Knowledge Base: what the bot knows about your business. See Bot knowledge.Simulator: test the bot without sending real messages.Sources: web pages, site sections and listings that the bot reads and keeps up to date. Instructions are a style preference (\"keep it short\", \"be informal\"). They do not change the rules: the bot can never bypass the scheduling engine.",{"id":756,"title":757,"titles":758,"content":759,"level":223},"\u002Fdocs\u002Fbot\u002Foverview#test-it-in-the-simulator","Test it in the simulator",[98],"In the Simulator tab you write as if you were a customer. You see the bot's replies, its configuration, the active knowledge items and the test bookings it creates (tagged Test: they do not count in the statistics). Restart Conversation starts over. When you create the test session you pick the persona: a new contact or an existing one. They are fictional contacts, never a real customer.",{"id":761,"title":762,"titles":763,"content":764,"level":368},"\u002Fdocs\u002Fbot\u002Foverview#the-inspector","The Inspector",[98,757],"The Inspector shows, turn by turn, how the bot reasoned: The tools it called, with their arguments and a summarized result.The knowledge it used, with its score.The rules that decided.The model, tokens and cost of each call.The reason when it hands the conversation to a person. This lets you tune the configuration seeing exactly what happened, without guessing.",{"id":766,"title":767,"titles":768,"content":769,"level":223},"\u002Fdocs\u002Fbot\u002Foverview#when-a-person-steps-in","When a person steps in",[98],"Every conversation shows in the Inbox, with the state \"AI replying\", \"Wants a person\" or \"Person handling\". Take over: if you write a reply, the bot pauses in that conversation.Hand back to bot: do it manually when you are done.If you are inactive for 15 minutes, the bot resumes on its own.The bot also moves the conversation to the Inbox when the customer asks to talk to a person or when something fails. Customers can type “human”, «humano» or «atendente», or ask in their own words, at any time: also in the middle of an order or booking.If asked for something unrelated to the business, the bot politely says which topics it covers and how to reach a person, without handing the conversation over. WhatsApp has not allowed general-purpose assistants on its API since January 2026.",{"id":771,"title":772,"titles":773,"content":774,"level":223},"\u002Fdocs\u002Fbot\u002Foverview#limits-per-channel","Limits per channel",[98],"Each channel can have its own rules. On the web chat, for example, the bot asks for phone and email before chatting and stops replying after a set number of messages. See WebChat.",{"id":776,"title":777,"titles":778,"content":779,"level":223},"\u002Fdocs\u002Fbot\u002Foverview#how-much-ai-your-business-uses","How much AI your business uses",[98],"In Settings → AI usage you see how much your business used this month and your plan's limit. At 80 % a warning appears; if the limit is reached, AI features pause, and the bot replies with a fixed message and moves the conversation to the Inbox. You can also cut consumption manually with the emergency pause: see Pauses and Status.",{"id":781,"title":278,"titles":782,"content":783,"level":223},"\u002Fdocs\u002Fbot\u002Foverview#next-steps",[98],"Bot knowledge: teach it to answer with your business information.WhatsApp and Telegram: connect your channels. The customer bot books services with scheduled times; the team creates queue tasks through the dashboard or API. Creating queued deliveries through chat: coming soon.",{"id":785,"title":786,"titles":787,"content":788,"level":223},"\u002Fdocs\u002Fbot\u002Foverview#the-bot-groups-consecutive-messages","The bot groups consecutive messages",[98],"The bot can group consecutive messages before replying. Normal mode waits for 3 seconds of silence, or 5 while collecting required details; short mode waits for 3, and Off keeps one turn per message. The maximum wait is 12 seconds. Messages received after a turn starts remain for the next response. Choose the global mode in Bot and an override in WhatsApp or WebChat. Telegram and Instagram inherit the global mode. The panel shows the effective wait; it does not depend on a channel typing signal. Confirmation remains explicit: details sent together with YES produce a new summary and require another YES afterwards. Cancelling or asking for a person interrupts the proposal. Admitted audio is prepared after contact rules are satisfied; oversized audio is not truncated.",{"id":103,"title":102,"titles":790,"content":791,"level":217},[],"Teach the bot with texts, files, web pages, a section of your site or listings (spreadsheets, CSV, JSON and RSS) that stay up to date. The knowledge base is what the bot consults to answer questions: opening hours, policies, products, prices, news. It has two origins: what you enter by hand and what you import from sources that refresh themselves. Everything is in Automation → Bot, in the Knowledge Base and Sources tabs. Do not put customers' personal data in any source. What is in a source can show up in the bot's replies. The bot quotes that data as information; it never treats it as orders.",{"id":793,"title":794,"titles":795,"content":796,"level":223},"\u002Fdocs\u002Fbot\u002Fknowledge#add-knowledge-by-hand","Add knowledge by hand",[102],"In Knowledge Base, tap New Item and choose the type: FAQ: a question and its answer.Text: a title and free content (for example, the cancellation policy).Product\u002FService: name, description and an optional price.File: drag a file (5 MB maximum). It is processed and can be turned on or off. Each item has an Active switch: the bot only uses active ones. You can search and filter by type.",{"id":798,"title":799,"titles":800,"content":801,"level":223},"\u002Fdocs\u002Fbot\u002Fknowledge#sources-what-updates-itself","Sources: what updates itself",[102],"In Sources, tap Add source and choose the type. The system imports it within minutes and refreshes it on its own; you can change the frequency (every hour, 6 hours, day or week), Refresh now, Pause and Resume. Each card shows the status: Queued, Up to date, Error or Paused. A source that fails several times in a row pauses itself. If you delete it, its imported items go too (items written by hand are untouched). Common rules: public http(s) addresses only, up to 2 MiB per source and 10 sources per project. Pages that require login are not read, and the site's robots.txt is respected.",{"id":803,"title":804,"titles":805,"content":806,"level":368},"\u002Fdocs\u002Fbot\u002Fknowledge#a-web-page","A web page",[102,799],"Add source → Web page, scope Page.Enter the public URL (for example, your pricing page).The page text is read, without running JavaScript.",{"id":808,"title":809,"titles":810,"content":811,"level":368},"\u002Fdocs\u002Fbot\u002Fknowledge#a-section-of-your-site","A section of your site",[102,799],"For the bot to learn several pages of the same site without adding them one by one: Add source → Web page, scope Site section.Enter the prefix, for example https:\u002F\u002Fyoursite.com\u002Fhelp.Choose the maximum pages (50 by default, up to 200). The system reads the domain's sitemap.xml and takes only pages on the same site that start with that prefix. On every refresh it adds new pages, updates changed ones and archives those that disappeared. The card shows \"N pages imported\" and Show pages lists each one with its status (Imported or Archived). There is no crawler: if the site does not publish a sitemap.xml, the source shows the matching notice and you need to import pages one by one.",{"id":813,"title":814,"titles":815,"content":816,"level":368},"\u002Fdocs\u002Fbot\u002Fknowledge#a-listing-spreadsheet-csv-json-or-rss","A listing: spreadsheet, CSV, JSON or RSS",[102,799],"Useful for products, prices or news you already keep in a spreadsheet, a store or a feed. Add source and choose Spreadsheet, CSV, JSON API or RSS.Paste the link. For a Google Sheet: File → Share → Publish to web, or make it viewable by anyone with the link; the first row must contain headers.In Field mapping, write which column feeds each field: Name (required), Description, Price, Category, Link and Stable key. For JSON you write the path, for example products[].name. RSS needs no mapping.Tap Show preview: it shows the first valid rows and how many were skipped.If it looks right, Save source. Up to 1000 rows per source. If you use a Stable key (a code that does not change, like a SKU), renaming a product updates it; without a key, renaming creates a new item and deactivates the old one. For an API that needs a credential you can enter an Authorization header or a URL parameter: it is stored encrypted and never shown again.",{"id":818,"title":819,"titles":820,"content":821,"level":223},"\u002Fdocs\u002Fbot\u002Fknowledge#if-something-goes-wrong","If something goes wrong",[102],"The source card explains the cause: MessageWhat to doWe could not find that page (404)Check the addressThe page asks for loginOnly public pages are readThe site did not respondIt retries on its own laterThe site does not publish sitemap.xmlImport pages one by oneThe sitemap has no pages under that addressCheck the prefixThe sitemap is not validReview the site's sitemapThe site does not allow reading (robots.txt)It is the site's decisionA mapping column does not existCheck the column namesNo text found to importThe page or listing is empty; what was already imported is not deactivated After adding knowledge, try it in the Simulator: ask what a customer would ask. To integrate sources through the API, see the \u002Fknowledge endpoints in Endpoints.",{"id":112,"title":111,"titles":823,"content":824,"level":217},[],"How the day to day is organized in Fiuit, with Today, Inbox and Work, and how task stages and actions work, such as take, release and close. In Fiuit, everything that needs doing is a task: an appointment, a table, a visit, a delivery. A conversation can create one; you also create them by hand with the New task button or through the API. The panel gives you three main destinations: Today, Inbox and Work. The rest lives under More.",{"id":826,"title":827,"titles":828,"content":829,"level":223},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#today-inbox-and-work","Today, Inbox and Work",[111],"Today is your day's board. It shows what needs your attention, what is next, what is in progress, what is later today and, collapsed, what is completed. Team members see only their own (Mine); owner and manager switch between Mine and All.Inbox gathers the conversations that need a person. See The bot and the AI.Work is where you see all tasks. You look at it along two axes that combine.",{"id":831,"title":832,"titles":833,"content":834,"level":368},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#work-set-form","Work: set × form",[111,827],"First you choose which work to see (the set): SetWhat it showsUnassignedWhat needs attention: no owner, no time or waiting for confirmationTodayToday's work for the whole businessUpcomingWhat is coming, grouped by dayAllAll work, with the order and grouping you pickMineWhat is assigned to you Then you choose how to see it (the form): FormWhen it appearsListAlwaysCalendarIf there are resources with a schedule (by day, by professional or by week)MapIf there are tasks with a location. See Map and addresses \"If it has nothing, it does not show\": a form only appears when your business needs it. All of them open the same task detail. Filters (search, priority, tag, dates), order and grouping apply to every form.",{"id":836,"title":837,"titles":838,"content":839,"level":368},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#attention-on-demand","Attention on demand",[111,827],"Today shows one priority alert: unanswered conversations, unassigned tasks, no zone, address review, then unscheduled, within your permissions. «Reply» opens Inbox in Attention. «+N more» expands the other reasons with filtered links. Zeros stay hidden; one task can count under multiple reasons. Unassigned covers the project and does not imply a nearby start time.",{"id":841,"title":842,"titles":843,"content":844,"level":223},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#the-task-and-its-stages","The task and its stages",[111],"Each task is in a stage. Stages are your business's vocabulary: a barbershop uses Confirmed → In progress → Completed; a delivery uses Unassigned → Accepted → On the way → Delivered. Behind them are fixed states (hold, confirmed, in progress, completed, cancelled, absent, failed), so numbers and statistics mean the same in every industry. The task detail shows the customer, the date and resource, notes, form data, the origin (for example the WhatsApp conversation it came from) and the comments and activity.",{"id":846,"title":847,"titles":848,"content":849,"level":368},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#forms-per-service","Forms per service",[111,842],"A service can ask for its own data when the task is created: the delivery address, the reason for the visit, the equipment model. That data is filled in on the task and stays with it. It is defined on the service (Services).",{"id":851,"title":852,"titles":853,"content":854,"level":223},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#next-step","Next step",[111],"Every task shows its next step: depending on the stage, your role and the service, the panel offers one primary exit as a large button (for example Start or Complete), the rest under More actions and the stage tools as secondary buttons. Below the primary button you see what is still missing to move on (for example Payment or a service field). Everything comes from the server: you only see what your role can do in that stage. Choosing an exit opens a single sheet with the requirements of the destination stage: Required items, visible: the fields the stage asks for, the service evidence (signature or photo), the assigned person, the location and the payment when there is a balance.Optional items, folded under Add more details (a note, a tip).Payment: Collected (full balance), Partial (the rest stays owed) or Leave as owed. The balance is calculated by the server. If the deposit already covers the total, nothing is asked. Everything is sent together, in one step: if something fails, nothing is left half done, and retrying does not duplicate the payment or the stage. If something is missing, the sheet marks it.",{"id":856,"title":857,"titles":858,"content":859,"level":368},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#payment-rules","Payment rules",[111,852],"Completing requires the required items, including payment when the task has a value and the service asks for it.A team member can leave debt only if the customer has a credit limit and the balance fits within it; otherwise they must collect. Owners and managers can always leave it (it is audited).No-show \u002F Not home does not create debt: what is owed stays at what was already collected (the deposit is neither refunded nor turned into credit).",{"id":861,"title":862,"titles":863,"content":864,"level":368},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#stage-tools","Stage tools",[111,852],"ToolWhat it doesTakeThe task is assigned to whoever takes it. If someone else got there first, it says so and never assigns it twiceAssign \u002F ReassignThe owner or manager chooses who gets itReleaseThe task goes back to Unassigned so someone else can take it (asks for confirmation)Come back laterFor tasks without a schedule, moves the due time to the date and time you chooseShare trackingA link so the customer sees the status of their order. Whoever is assigned to the task shares it Tools never grant extra permissions: they only appear if your role can use them. Rescheduling a task with a time slot stays under More actions.",{"id":866,"title":867,"titles":868,"content":869,"level":368},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#unassigned-tasks-and-queues","Unassigned tasks and queues",[111,852],"Some work has no schedule, like deliveries. It arrives as Unassigned, whoever can do it takes it and then follows the sequence. A team member sees the tasks assigned to them and the ones their group can take, without the customer's phone or email until they take it. A courier first sees only the approximate area. Example from the deliveries industry: An order arrives: it is Unassigned.A courier taps Take: the task is theirs. (Or the manager taps Assign.)If they can't, they tap Release and it goes back to the queue.They tap On the way and, if they want, Share tracking with the customer.They close with Complete (with the payment), or with Not home or Refused (plus the reason).",{"id":871,"title":872,"titles":873,"content":874,"level":368},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#each-service-with-its-stages","Each service with its stages",[111,852],"Stages come from your industry template and each service has its own: which exits each stage offers, what it requires to enter and which tools it has. Today they are adjusted through the API or the MCP server: see API and MCP.",{"id":876,"title":877,"titles":878,"content":879,"level":223},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#message-the-customer-from-the-task","Message the customer from the task",[111],"Every task card and detail has a Message button to write to the customer without leaving what you are doing. Tap Message on the card or in the task detail.Type your text or start from a quick reply and edit it before sending.Send. Fiuit picks the channel for you: the conversation you already have with that customer, or WhatsApp or email if there is none yet. Everything stays in the Inbox, like any conversation, with Call and Open conversation at hand.",{"id":881,"title":882,"titles":883,"content":884,"level":223},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#work-evidence","Work evidence",[111],"An action can ask for the location at that moment (for example when marking \"Arrived\") and a task accepts attachments (photo, document, audio, note). They are private: only people with access to that task see them, download links expire after 60 seconds and files are deleted after a retention period (30 days by default). The owner or manager can delete a location.",{"id":886,"title":887,"titles":888,"content":889,"level":223},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#what-each-role-sees","What each role sees",[111],"RoleTodayWorkCustomersOwner and managerThe whole businessEverythingYesStaffTheir own and what they can takeTheir own and what they can takeNoViewerView onlyView onlyNo More in Roles and permissions.",{"id":891,"title":892,"titles":893,"content":894,"level":223},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#automate-the-work","Automate the work",[111],"When a task enters a stage, it can notify the customer and the team (by email and Telegram) as the stage defines: see Automations. For waits or conditions, see Flows. The customer bot books services with scheduled times; the team creates queue tasks through the dashboard or API. Creating queued deliveries through chat: coming soon.",{"id":116,"title":115,"titles":896,"content":897,"level":217},[],"The Work map view, customer addresses (with labels and a default), address autocomplete, the location a customer shares and how privacy is protected. If your business serves customers at their address (deliveries, visits, field service), Fiuit stores where each task is and shows it on a map.",{"id":899,"title":900,"titles":901,"content":902,"level":223},"\u002Fdocs\u002Fwork\u002Fmap-and-addresses#the-map-view","The Map view",[115],"In Work, the Map form appears when there is at least one task with a location. If you do not need it, you do not see it. Each task is a marker, with color, symbol and name according to its status: pending, confirmed, in progress, completed or with a problem. Color is not the only thing that tells them apart.Tap a marker to open the task.The side list shows the same tasks (useful with a keyboard or screen reader). Tasks without a location are listed separately.The map fits itself to the results and shows up to 500 tasks; if there are more, narrow the filters. Filters and the set (Unassigned, Today, Upcoming...) work as in the list.The legend counts tasks by status. The map uses Google Maps. If Google is unavailable, a fallback map is used and the view keeps working.",{"id":904,"title":905,"titles":906,"content":907,"level":368},"\u002Fdocs\u002Fwork\u002Fmap-and-addresses#light-and-dark-mode","Light and dark mode",[115,900],"A floating selector has three options: Automatic, Light and Dark. Automatic follows your panel's theme. It is remembered per browser.",{"id":909,"title":910,"titles":911,"content":912,"level":223},"\u002Fdocs\u002Fwork\u002Fmap-and-addresses#address-autocomplete","Address autocomplete",[115],"When you enter a customer's address, or a task's destination (New task or the edit form), a search box appears: Start typing street and number (from 3 characters).Pick a suggestion: the full address (street, number, neighborhood, city, postal code, country) and the point on the map are saved.A small map with a pin appears: drag it or tap the map to adjust the exact spot. If you prefer, enter the address manually and tap Place on the map: the system looks it up and leaves the pin for you to move. If autocomplete is unavailable, it tells you and what you typed moves to manual entry: you lose nothing. A service \"has a destination\" when its form asks for the delivery address. For that service, the destination is entered with this same search box.",{"id":914,"title":915,"titles":916,"content":917,"level":223},"\u002Fdocs\u002Fwork\u002Fmap-and-addresses#customer-addresses","Customer addresses",[115],"A customer can keep several addresses, each with a label (home, office, warehouse…) and a default one. They are managed from the “Details” section of the customer's profile. When you create or edit a task destined for the customer's address, the picker offers the saved addresses plus an Other option to enter a new one. Saving it to the profile is a separate decision: you can use it just for that task.Each task keeps its destination. If the customer's address or your business address changes later, existing tasks still point where they were: the address stays recorded with the task.When the service happens at your business, the task stores a copy of the business address as it was then: the task detail, the Mini App and reminders show that address, with a map link, even if you change it afterwards.The bot offers only authorized addresses and confirms which one to use before booking.",{"id":919,"title":920,"titles":921,"content":922,"level":223},"\u002Fdocs\u002Fwork\u002Fmap-and-addresses#location-shared-by-the-customer","Location shared by the customer",[115],"A customer can send their location on WhatsApp or Telegram (or from the web chat, with explicit consent). In the Inbox the message shows with a small map, the name or address if the channel provided them, and an Open in map link.If the service asks for a destination, the bot can save that location as the task's destination or as the customer's address. It asks first with YES\u002FNO in the conversation.On the web chat, the widget offers \"Use my location\" only when the bot asked for it, and the visitor must explicitly accept.",{"id":924,"title":925,"titles":926,"content":927,"level":223},"\u002Fdocs\u002Fwork\u002Fmap-and-addresses#privacy","Privacy",[115],"Address and location are personal data: they do not go to logs or to the panel URL.A courier sees only the approximate area of a task that has not been taken. The exact address appears when they take it. See Work and actions.Google receives what its map needs to draw. In the Map view it does not receive addresses or coordinates of your tasks. Autocomplete and \"Place on the map\" do send it the address text you search. If your customers have special requirements, mention it in your privacy notice.",{"id":929,"title":930,"titles":931,"content":932,"level":223},"\u002Fdocs\u002Fwork\u002Fmap-and-addresses#for-whoever-manages-the-account","For whoever manages the account",[115],"The Google map needs a browser key and three Google Maps Platform APIs enabled (Maps JavaScript, Places and Geocoding). It is a platform setting, not a business one: if the map or autocomplete do not appear, contact support.",{"id":120,"title":119,"titles":934,"content":935,"level":217},[],"What to do automatically when something happens in your business: waits, conditions and alerts. Load examples, activate, pause and review history. A flow is what the system does by itself when something happens: when an event occurs, wait a while, check a condition and do something (alert the team, send a message, run an action). It is the next step after the simple rules for reminders. Flows are in Automation → Flows.",{"id":937,"title":938,"titles":939,"content":940,"level":223},"\u002Fdocs\u002Fwork\u002Fflows#the-pieces","The pieces",[119],"Trigger: when it starts. Some of the available events: a task is created, assigned, modified, completed or cancelled; its status changes; a task becomes overdue;an action is executed (for example, someone marks \"Not home\");a conversation starts, is resolved or receives a message;a customer is created or becomes inactive;an attachment is added or a location is recorded. Steps: what it does. StepWhat it doesWaitA duration (for example 2 hours), until a date, until a time of day, some time before or after the task's start or end, or until an event happens with a maximum wait. Up to 90 daysCondition\"If this condition is met\": continues on the If met or If not met branch. See ConditionsAlert the teamAn internal alert about a task, by Telegram, WhatsApp or email depending on how each person receives alertsSend a message to the customerA message in their conversationRun an actionUses a task action (for example Release delivery), with the same rules as the panelLeave a commentA note on the taskCreate, update or assign a taskOperations on tasksCalculate dataPrepares values for later steps A flow has up to 32 steps, with no loops. Flows bypass no rule: every step is validated again by the system, with the role of the owner or manager who created the flow. A wait cancels itself if the task is cancelled.",{"id":942,"title":943,"titles":944,"content":945,"level":223},"\u002Fdocs\u002Fwork\u002Fflows#start-with-examples","Start with examples",[119],"Your industry template comes with example flows. In Flows, tap Load examples (owner only). They stay inactive until you activate them, and loading again does not duplicate them. IndustryExampleDeliveriesDelivery not taken for 2 h: when a delivery is created, wait 2 hours and, if it is still unassigned, alert the teamDeliveriesAccepted delivery that does not leave in 30 min: if someone accepts and does not leave, the delivery goes back to UnassignedBarbershopCustomer's third no-show: when a no-show is marked, if it is the third, alert to ask for a deposit next time",{"id":947,"title":948,"titles":949,"content":950,"level":223},"\u002Fdocs\u002Fwork\u002Fflows#view-activate-and-pause","View, activate and pause",[119],"Each flow shows its state (Active, Paused or Draft) and its last run. When you open it you see What it does in plain language: the trigger and the steps, with the branches. Tap Activate and confirm. From then on it acts on its own every time the trigger happens.Pause stops starting new runs; those already in progress finish their path.In Run history you see each run with its status (Done, Running, Waiting, Failed, Cancelled...), how long it waits and which branch it took. A Draft flow lets you edit the condition: Edit condition, Test this condition and Save as new version. To change an active or more complex flow, ask Wagy, the assistant (Getting started), or use the API. Before activating a flow with a condition, test it with Test this condition on a real task. Nothing is changed: it only tells you whether it comes out true or false.",{"id":952,"title":953,"titles":954,"content":955,"level":223},"\u002Fdocs\u002Fwork\u002Fflows#flows-and-rules","Flows and rules",[119],"Rules (the tab next to Flows) remain the simplest way to send a reminder or a confirmation. A flow that comes from a classic rule is managed in Rules. Flows are for what needs to wait, decide or act on tasks.",{"id":957,"title":958,"titles":959,"content":960,"level":223},"\u002Fdocs\u002Fwork\u002Fflows#for-developers","For developers",[119],"Flows are managed through the API (\u002Fv1\u002Fautomation-flows, owner or manager with a panel session only). See Endpoints. The events that trigger them are the same ones your webhooks receive.",{"id":124,"title":123,"titles":962,"content":963,"level":217},[],"How to write a condition in a flow, which data it can look at, ready-made examples by industry and how to test it before activating. A condition decides which branch a flow follows. It is written as a short sentence that gives true or false, for example \"the service costs more than 100 and the customer is VIP\". A condition only looks at data: it changes nothing.",{"id":965,"title":966,"titles":967,"content":968,"level":223},"\u002Fdocs\u002Fwork\u002Fconditions#how-it-is-written","How it is written",[123],"WhatExampleCompare== (equal), !=, \u003C, \u003C=, >, >=Combine&& (and), || (or), ! (not)Text\"delivery\" in quotesIs in a list\"vip\" in customer.tagsContainsservice.name.contains(\"Haircut\")If \u002F thenworkItem.priority == \"urgent\" ? now.hour \u003C 22 : now.hour \u003C 18A fieldcustomer.no_show_count, with a dot That is the whole language: no loops or custom functions. Conditions are validated when you save the flow and again when you activate it.",{"id":970,"title":971,"titles":972,"content":973,"level":223},"\u002Fdocs\u002Fwork\u002Fconditions#which-data-it-can-look-at","Which data it can look at",[123],"ObjectWhat it hastriggerThe event that started the flow. With an executed action: action_key (the action), from_stage, to_stageworkItemThe task: status, stage, priority, tags, party_size, start_at, due_at, age_minutes (minutes since it was created), assigned (whether it has an owner)customername, locale (language), tags, no_show_count (real no-shows)servicename, price_cents (the price in cents: 100.00 is 10000), deposit_cents, duration_minresourcename, kindnowYour business's time: hour, minute, weekday (0 = Monday ... 6 = Sunday)variablesValues calculated by an earlier step For privacy, a condition cannot see phones, emails, documents, addresses or customer notes. If the event does not carry a task, workItem, customer and service arrive empty and the condition fails with a clear message instead of silently answering \"false\".",{"id":975,"title":976,"titles":977,"content":978,"level":223},"\u002Fdocs\u002Fwork\u002Fconditions#examples","Examples",[123],"VIP with an expensive service: alert the manager service.price_cents > 10000 && \"vip\" in customer.tags \"Not home\" before 6 pm (trigger: an action is executed) trigger.action_key == \"nao_estava\" && now.hour \u003C 18 Third no-show: ask for a deposit next time trigger.action_key == \"ausencia\" && customer.no_show_count >= 3 Task unassigned for more than 2 hours (after a 2 h Wait step) !workItem.assigned && workItem.age_minutes > 120 Outside business hours (Saturday, Sunday or outside 9 to 18) now.weekday >= 5 || now.hour \u003C 9 || now.hour >= 18 Urgent task workItem.priority == \"urgent\" || \"urgente\" in workItem.tags Customer who speaks Portuguese customer.locale == \"pt\" Deposit pending for over an hour workItem.stage == \"aguardando_sinal\" && workItem.age_minutes >= 60 Long haircut service service.name.contains(\"Corte\") && service.duration_min >= 45 Action and stage keys (ausencia, nao_estava, aguardando_sinal) are the ones from your industry template. If you renamed them, use yours. Text values such as \"Corte\" must match the name your service has.",{"id":980,"title":981,"titles":982,"content":983,"level":223},"\u002Fdocs\u002Fwork\u002Fconditions#test-a-condition","Test a condition",[123],"In a flow's detail, tap Test this condition (or Test a condition): Write the condition.Pick a real task from your project with the search box.If it looks at trigger.action_key, write the action key in Simulate the action.Tap Test. It shows True or False and, below, What the condition saw: exactly the data it decided with. Nothing is executed.",{"id":985,"title":986,"titles":987,"content":988,"level":223},"\u002Fdocs\u002Fwork\u002Fconditions#common-errors","Common errors",[123],"When saving, the message says which step failed and why: ProblemWhat it meansThe field does not existYou used data that is not available (for example customer.email)Types that do not matchYou compared text with a number (customer.name > 5)Not true or falseThe condition must be a yes or no questionFunction not allowedOnly contains existsUnknown objectOnly the objects in the table above can be usedToo long or costlySplit it into two conditions with another step in between A condition accepts up to 1024 characters and is evaluated in a fraction of a second.",{"id":128,"title":127,"titles":990,"content":991,"level":217},[],"Group your team by zone, with its area, service days and hours and a per-slot limit, and let each task find its own zone. A zone is a group of people with an area and service days and hours. It works for deliveries, technical visits, routes or any job done at the customer's address: for example, the North Zone serves Tuesdays and Thursdays and the South Zone, Wednesdays and Fridays.",{"id":993,"title":994,"titles":995,"content":996,"level":223},"\u002Fdocs\u002Fwork\u002Fzones#create-a-zone","Create a zone",[127],"In Team and resources, open the Zones tab and tap New zone. Each zone has: Name.Area: neighborhoods, cities or postal codes, as tags. A postal code matches by prefix: 20 covers every code that starts with 20.People: the ones who serve the zone. A person can belong to several zones.Days and hours: for example Tuesday and Thursday from 9 to 6. If you leave it empty, the zone does not restrict days.Per-slot limit (optional): the maximum number of tasks that fit in each time slot of the zone. You can also ask Wagy: \"North Zone, Tuesday and Thursday, Camila and Diego\". Wagy builds the plan, you review the change and confirm it.",{"id":998,"title":999,"titles":1000,"content":1001,"level":223},"\u002Fdocs\u002Fwork\u002Fzones#how-the-zone-is-assigned","How the zone is assigned",[127],"Each task with an address finds its zone by itself, comparing postal code, neighborhood and city while ignoring accents and capital letters. When several match, the postal code wins, then the neighborhood, then the city. If none match, the task is left without a zone and shows up in Today → Needs your attention; fixing the address assigns it automatically. In Work you can filter by zone or see only what has no zone, and on the map each task shows its zone.",{"id":1003,"title":1004,"titles":1005,"content":1006,"level":223},"\u002Fdocs\u002Fwork\u002Fzones#times-and-the-bot","Times and the bot",[127],"When a delivery or visit has a time, only the zone's days and hours are offered, crossed with the availability of its people and the per-slot limit. The bot asks the customer for their neighborhood, city or postal code and says, for example: \"For your zone (North Zone) we serve Tuesday or Thursday\".",{"id":1008,"title":1009,"titles":1010,"content":1011,"level":223},"\u002Fdocs\u002Fwork\u002Fzones#unclaimed-tasks","Unclaimed tasks",[127],"An unclaimed task in a zone is announced, and offered for Take, only to the people in that zone. Owners and managers see them all and can assign them to anyone. The \"zone\" used to be a resource with capacity. Those resources keep working; the migration command converts them into zones without losing any task.",{"id":132,"title":131,"titles":1013,"content":1014,"level":217},[],"How to share a private link where each customer sees their open orders with your business brand, what they see and how to revoke it. The tracking portal is a public, account-free, read-only page with your business logo, name and colors. Your customer sees their open orders and how they are going. You share it (owner or manager) with the Share button.",{"id":1016,"title":1017,"titles":1018,"content":1019,"level":223},"\u002Fdocs\u002Fwork\u002Ftracking-portal#share-the-link","Share the link",[131],"Open a task and tap Share, or on the customer page open More › Share tracking.If the customer has no link, Create link. There is one link per customer: it works for all their orders, including the ones created later.Copy link or Share… (the phone's share sheet) and send it through the customer's chat.Options: Show balance (starts off) and Validity (7, 30, 90 or 180 days). Changing them does not change the link.Generate new link invalidates the old one right away; Revoke link cuts it without creating another. Both ask for confirmation and are written to the audit log. Only owner and manager share and revoke; staff and viewer do not see the button.",{"id":1021,"title":1022,"titles":1023,"content":1024,"level":223},"\u002Fdocs\u002Fwork\u002Ftracking-portal#what-the-customer-sees","What the customer sees",[131],"WhatDetailBrandYour logo (or the initial), business name and palette, in light or dark.OrdersService, plain-language status (Received, Scheduled, In progress) and the time or \"Time not set yet\".HistoryOrders completed or cancelled in the last 30 days.BalanceOnly if you turned on Show balance: what is left to pay in total and per order, calculated by the server from your payments. It never shows phone, email, address, notes, team comments or activity, driver, costs or other customers' data.",{"id":1026,"title":1027,"titles":1028,"content":1029,"level":223},"\u002Fdocs\u002Fwork\u002Ftracking-portal#security-and-privacy","Security and privacy",[131],"The link is a long random token: it cannot be guessed. A missing, expired or revoked link shows the same message.The page is not indexed, uses no cookies or third-party scripts, and writes nothing.Anyone with the link sees what the customer sees: send it only through their chat and revoke it if it is forwarded.If you publish the balance, mention it in your privacy notice.",{"id":141,"title":140,"titles":1031,"content":1032,"level":217},[],"Get work alerts on Telegram, take tasks with one tap and open your day in the \"My day\" Mini App. Team Telegram is the fastest way for everyone in the business to know what is theirs: an assigned task, an unclaimed job, a reminder or the daily summary. It works from your phone, with nothing to install except Telegram. There is one single Fiuit bot for all teams. It is not your business's bot: that one talks to your customers (customer Telegram). The two are independent and never mixed.",{"id":1034,"title":1035,"titles":1036,"content":1037,"level":223},"\u002Fdocs\u002Fteam\u002Ftelegram-team#link-your-telegram","Link your Telegram",[140],"The link is per person, not per business: you do it once and it applies to every business you have access to. In the dashboard, open My account (your name, at the bottom of the menu) and tap Link Telegram.Tap Open Telegram and, in the bot, Start. The bot confirms the link.To unlink, send \u002Fleave to the bot or unlink from My account. The link is single-use and expires after 15 minutes. If it expired, generate another. If you do not see Link Telegram, the team bot is not enabled in your environment yet: let us know.",{"id":1039,"title":1040,"titles":1041,"content":1042,"level":223},"\u002Fdocs\u002Fteam\u002Ftelegram-team#which-alerts-you-get","Which alerts you get",[140],"AlertWhen it arrivesAssigned taskSomeone assigned a task to youUnclaimed jobThere is a queue task your group can takeReminderAn appointment is coming up (team advance notice)Daily reportA summary of your dayChangesOne of your tasks was cancelled or changed Alerts come with buttons so you can act without opening the dashboard: Open opens the Mini App straight on that task.Take and Complete run the action with your permissions, just like the dashboard. If someone else took the job first, the bot tells you it is already taken.Alerts never include data from another business. Reminders, the daily report and the team notice come from your flows and rules. If you turn one on, the team receives it on this channel.",{"id":1044,"title":1045,"titles":1046,"content":1047,"level":223},"\u002Fdocs\u002Fteam\u002Ftelegram-team#choose-how-to-receive-them","Choose how to receive them",[140],"In My account → Alert preferences you set: Preferred channel: automatic, Telegram, WhatsApp or email. On automatic, Telegram if you have it linked; if not, WhatsApp (with your verified link) and, if not that either, email.What to mute: assigned, unclaimed, reminders, daily report or changes. If Telegram cannot deliver an alert (for example, you blocked the bot), the alert falls back to the next channel.",{"id":1049,"title":1050,"titles":1051,"content":1052,"level":223},"\u002Fdocs\u002Fteam\u002Ftelegram-team#commands","Commands",[140],"CommandWhat it does\u002FstartLinks your account (with the link from My account)\u002FtodayShows your day, per business\u002FleaveUnlinks your Telegram",{"id":1054,"title":1055,"titles":1056,"content":1057,"level":223},"\u002Fdocs\u002Fteam\u002Ftelegram-team#my-day-mini-app","\"My day\" Mini App",[140],"The bot's menu button (to the left of the text field) opens My day: the dashboard in a compact format inside Telegram, without asking for a password. It shows the same as you would see in the dashboard for your role: Today and Work (with \"Mine\" by default for staff) and a business selector if you have several. The session lasts 60 minutes and only reaches Today, Work and tasks. It gives no access to API keys, team, channels or webhooks.It ends on its own if you unlink Telegram or are removed from the business.",{"id":1059,"title":1060,"titles":1061,"content":1062,"level":223},"\u002Fdocs\u002Fteam\u002Ftelegram-team#team-group","Team group",[140],"Besides personal notices, the business can have one Telegram team group where unassigned tasks are posted with a Take button. The first tap wins: if two people tap at the same time, only one gets assigned and the other sees it was already taken. An owner or manager with their Telegram already linked adds the team bot to the group.In the group they type \u002Flink and tap Confirm (if they manage several businesses, they pick one). Only whoever asked can confirm.Optional, in a group with topics: inside a topic, type \u002Ftopic and pick the zone or resource group whose tasks go there. The rest go to the general topic. Group commandWhat it does\u002FlinkLinks the group to the business (with confirmation)\u002FtopicChooses which zone or group posts in this topic\u002FunlinkStops posting tasks in the group Only people from the business with their Telegram linked and permission to take tasks (and, for staff, within their group and zone) can Take. The bot does not answer anyone else.A post shows only the service, the time and the zone: never the customer, the address or the phone. When someone takes it, the message says who and loses the button.There is one group per business and one business per group. View and unlink it in Team → Access; it is also cut if you remove the bot from the group.The bot posts at most 20 messages a minute in the group; the rest waits in the queue.When the group is replaced or migrated to a supergroup, unassigned tasks are posted again in the linked group. Buttons on older messages reply “This group is no longer linked” and do not assign the task.",{"id":1064,"title":1065,"titles":1066,"content":1067,"level":223},"\u002Fdocs\u002Fteam\u002Ftelegram-team#limits-and-security","Limits and security",[140],"In private chats the bot only talks to one person; in the team group it only reads its own commands and buttons.Telegram allows 1 message per second per chat; if many alerts arrive together, the next ones wait in a queue and still arrive.The link and the Mini App are always validated on the server. A used, expired or other-account link gets the same neutral message. To see what each person can view and do, read Roles and permissions. For developers: the endpoints GET\u002FDELETE \u002Fme\u002Ftelegram, POST \u002Fme\u002Ftelegram\u002Flink and GET\u002FPUT \u002Fme\u002Fnotification-preferences belong to the user's account (dashboard session) and are not used with API keys.",{"id":145,"title":144,"titles":1069,"content":1070,"level":217},[],"What each role (owner, manager, staff and read-only) can see and do, how to invite the team and how to work with several projects. Each person joins a business (a project) with a role. The role decides which screens they see and what they can change. The server enforces it: hiding a button in the dashboard is not the only barrier.",{"id":1072,"title":1073,"titles":1074,"content":1075,"level":223},"\u002Fdocs\u002Fteam\u002Froles#the-four-roles","The four roles",[144],"RoleFor whomWhat they doOwner (owner)Whoever administers the accountEverything, including API keys, the team and channelsManager (manager)SupervisorsRuns the business: catalog, team, customers, bot, flows, channels and webhooks. Does not administer API keysStaff (staff)Whoever serves or deliversSees and works on their own: their tasks and what their group can takeRead-only (viewer)Partners, accountantsViews Today, Work and conversations; changes nothing",{"id":1077,"title":1078,"titles":1079,"content":1080,"level":223},"\u002Fdocs\u002Fteam\u002Froles#what-each-one-sees-in-the-dashboard","What each one sees in the dashboard",[144],"SectionOwnerManagerStaffRead-onlyToday and WorkYesYesTheir ownYes (read)ConversationsYesYesOnly theirsYes (read)Catalog, Team, CustomersYesYesNoNoBot and FlowsYesYesNoNoSettings, Channels, AI and usageYesYesNoNoWebhooksYesYesNoNoAPI keys (Developers)YesNoNoNo Staff look up customers with a minimal view: name, partially hidden phone, tags and no-shows, with a minimum number of characters and a result cap. A courier sees a delivery's exact destination only after taking it; before that they see an approximate area.",{"id":1082,"title":1083,"titles":1084,"content":1085,"level":223},"\u002Fdocs\u002Fteam\u002Froles#invite-the-team","Invite the team",[144],"In Team you can invite in two ways: By message (WhatsApp): only for operational staff, without a password. Enter a name and number (with country code) and the invitation arrives in the chat; once accepted, that number is linked. Until then it shows as Invitation pending (expires in 48 hours) and only the end of the number is shown.By email: for owner, manager, staff or read-only. The person accepts the invitation and creates a password. You associate a staff person with one or more resources (their agenda, their vehicle): that defines which tasks they see and which they can take. You can change a role or remove someone at any time; their sessions and their Telegram stop working immediately.",{"id":1087,"title":1088,"titles":1089,"content":1090,"level":368},"\u002Fdocs\u002Fteam\u002Froles#agenda-links-for-staff","Agenda links for staff",[144,1083],"Every staff member with resources has an agenda link to open “My day” without signing in. In Team → Access you see whether one is active, until when it is valid and when it was last used. From there you can: Resend today's link: the current link arrives in their chat (any previous one stops working). Their contact must be linked and the channel connected; if they just received one, wait a minute.Revoke and end sessions: the link and any sessions opened with it stop working immediately. The link is single-use and valid for the agenda's day; if it was already opened on another device, expired or was revoked, the person sees a clear notice and asks for a new one by writing “my agenda” in the business chat. Wagy can propose the invitation by message (name and WhatsApp) with the same confirmation flow.",{"id":1092,"title":1093,"titles":1094,"content":1095,"level":223},"\u002Fdocs\u002Fteam\u002Froles#several-projects","Several projects",[144],"An account can have several projects (businesses or branches), each with its own team, agenda, channels and data, fully isolated. The number of projects depends on the plan. With more than one project, the dashboard's project selector lets you switch between them.Only the account owner can create a new project, from a template by industry (barbershop, aesthetics, clinic, restaurant or deliveries).Your role can be different in each project.",{"id":1097,"title":1098,"titles":1099,"content":1100,"level":223},"\u002Fdocs\u002Fteam\u002Froles#platform-support","Platform support",[144],"When you need help, the Fiuit team can enter your project temporarily: Always with a written reason and for at most 60 minutes.In read mode (sees what a manager would see, changes nothing) or assist mode (can adjust catalog, schedules and business settings).Never able to see or change API keys, passwords, channel secrets, billing or the team, nor send messages to your customers.Every entry and exit is logged and the owner sees them in the business activity, with who, in which mode and why.",{"id":1102,"title":1103,"titles":1104,"content":1105,"level":223},"\u002Fdocs\u002Fteam\u002Froles#api-keys-and-permissions","API keys and permissions",[144],"API keys have no role: they have scopes (narrow permissions, such as slots:read or bookings:write) and only the owner creates them. See Authentication.",{"id":149,"title":148,"titles":1107,"content":1108,"level":217},[],"The panel bell (including Fiuit updates), push on your phone, which notices you get and where, quiet hours and the project rules. Notifications tell you what needs attention without you having to watch the panel all the time. They match what you see under Needs attention in the Inbox and in Today.",{"id":1110,"title":1111,"titles":1112,"content":1113,"level":223},"\u002Fdocs\u002Fteam\u002Fnotifications#the-bell","The bell",[148],"In the panel, the bell brings your notifications and Fiuit updates (what is shipping, in your language) together in one place, with a combined pending count that updates by itself, with no reload. If nothing is pending you see just the bell, with no number. Tap the bell to see the list: each notification takes you to what needs attention (the conversation, the task, the channel or the AI) and each update entry opens its details.On mobile, the bell opens as a clear sheet that closes with Escape or by swiping; Wagy suggestions stay aside, without covering your cards.Mark all as read clears the count. Read notifications are deleted after 14 days and all of them after 60. The full updates history lives at fiuit.com\u002Fupdates.",{"id":1115,"title":1116,"titles":1117,"content":1118,"level":223},"\u002Fdocs\u002Fteam\u002Fnotifications#which-notices-there-are","Which notices there are",[148],"NoticeWhen it arrivesA conversation needs attentionThe bot handed off or failed and nobody has replied yetTask assigned to meSomeone assigned a task to youUnassigned taskThere is a task your group or zone can takeChannel down or in errorA messaging channel disconnectedAI paused or quota used upThe project's AI was paused or the monthly quota ran outPossible spamA paused channel discarded many messages in one dayWagy suggestionWagy has something to propose",{"id":1120,"title":1121,"titles":1122,"content":1123,"level":223},"\u002Fdocs\u002Fteam\u002Fnotifications#choose-what-you-get-and-where","Choose what you get and where",[148],"In My account → Notifications you choose, for each notice, whether you want it in the panel, as push, by Telegram or by email. There you also set: Quiet hours: inside the range nothing goes out of the panel (no push, Telegram or email). Notifications stay in the bell.Daily email summary: one email a day with what is still unread. It is off by default. If your environment does not have email sending set up yet, the summary does not go out until it does.",{"id":1125,"title":1126,"titles":1127,"content":1128,"level":223},"\u002Fdocs\u002Fteam\u002Fnotifications#push-on-your-phone-and-browser","Push on your phone and browser",[148],"In My account → Notifications → Push on this device tap Turn on push and accept the browser permission. Each device is turned on separately. If your project does not have push available yet, the screen says so. On iPhone and iPad push only works if you add the panel to your home screen: open it in Safari, tap Share → Add to Home Screen, open Fiuit from the new icon and turn push on from there.",{"id":1130,"title":1131,"titles":1132,"content":1133,"level":223},"\u002Fdocs\u002Fteam\u002Fnotifications#project-rules-owner","Project rules (owner)",[148],"In Settings → Notifications the owner decides who receives channel-down and spam alerts (owner only, owner and managers, or the whole team) and which notices are active for the whole project. Personal choices, such as channels and quiet hours, are made by each person in My account.",{"id":153,"title":152,"titles":1135,"content":1136,"level":217},[],"Commission rules per person and per service or product, tips and a period report in CSV, calculated on the fly. In Finance > Commissions you see what each team member earns. Fiuit calculates it automatically from the real payments you record (cash, transfer, Pix, card, payment link): never from what was sold and never from numbers typed into the browser.",{"id":1138,"title":1139,"titles":1140,"content":1141,"level":223},"\u002Fdocs\u002Fteam\u002Fcommissions#how-it-is-calculated","How it is calculated",[152],"On what was collected. If a task is worth 100 and the customer pays 60, the commission is on 60. When the rest arrives, the commission on the rest is added. A task with debt earns no commission until it is paid.Deposits and discounts. A deposit counts on the day it is collected (if the task was rescheduled, it counts for whoever does the current task). A discount lowers what is collected and therefore the commission.Voids and refunds subtract on the day they happen (the day of the payment does not change) and are valued with the rule of the original payment: ending or changing a rule later leaves no commission from a voided payment.Whose commission it is: everything collected for a task belongs to whoever did the work, that is, whoever had the task assigned (active and holding the resource) when it was completed, even if someone else recorded the payment. While the task is open, it belongs to whoever has it assigned today. If that person later leaves the team or the resource moves to someone else, the task stays theirs; later voids and refunds also subtract from them.Retained deposit without completed work: if the task ends as a no-show, cancellation or failure (no_show, cancelled, failed), its payments earn no commission and do not appear as unassigned: they remain business income in Finance and Cash. A later departure or reassignment does not change this rule.Partial electronic refunds: for now the commission stays on the full amount until the refund is total.Several team members on one task: what was collected is split equally.Tips: are separate, by payment method, and earn no commission.Tasks with nobody assigned: what was collected is shown separately (owner and manager only) and earns no commission.",{"id":1143,"title":427,"titles":1144,"content":1145,"level":223},"\u002Fdocs\u002Fteam\u002Fcommissions#rules",[152],"A rule is a percentage of what was collected or a fixed amount (per task, or per unit for a product). It can apply to the whole team or to one person, to everything collected or to one service or product, and it can deduct the payment method fee or not (for example, the Mercado Pago fee). Each rule is valid from a date. The most specific rule wins: person + service or product, then service or product, then person, then the general rule. Rules are not edited: to change a rate, end the rule and create another. Owners and managers set up rules; each team member sees the ones that apply to them.",{"id":1147,"title":1148,"titles":1149,"content":1150,"level":223},"\u002Fdocs\u002Fteam\u002Fcommissions#each-persons-day","Each person's day",[152],"For each person you see what was collected by payment method, tips, commission, adjustments and, if they collected cash, the day's cash box difference. Owners and managers can adjust a day's commission, signed and with a reason (recorded in the audit log). There is no daily close: the numbers are calculated on the fly from payments. Because each completed task stays with whoever had it when it was completed, deactivating someone or changing their resources does not change the past.",{"id":1152,"title":1153,"titles":1154,"content":1155,"level":223},"\u002Fdocs\u002Fteam\u002Fcommissions#period-report","Period report",[152],"In Period you pick the dates and see the total per person, calculated on the fly (each task counts once). Export CSV downloads one row per person and day, with amounts in the currency's minor unit: a basis for paying out the team.",{"id":1157,"title":485,"titles":1158,"content":1159,"level":223},"\u002Fdocs\u002Fteam\u002Fcommissions#who-sees-what",[152],"RoleSeesCanOwner and managerThe whole teamRules, adjustments, tips, CSVStaffOnly their ownRecord their tips (if the business lets them collect) and download their CSVViewerNo money— Wagy can read you the commissions for a day or a period; rules, adjustments and tips are handled in the panel. The API and MCP offer the same reads (scope commissions:read).",{"id":157,"title":156,"titles":1161,"content":1162,"level":217},[],"Create your first booking through the API in five minutes using a key for a test business. This guide creates a real booking, so use a production key (wg_live_...) from a business you set up for testing. wg_test_ keys are read-only: they can list and read, not create or change anything. A sandbox for writes is Coming soon. To try the bot without WhatsApp, use the simulator in the dashboard. Base URL: https:\u002F\u002Fapi.fiuit.com\u002Fv1. Every request needs Authorization: Bearer \u003Ckey>.",{"id":1164,"title":1165,"titles":1166,"content":1167,"level":223},"\u002Fdocs\u002Fquickstart#_1-get-a-key","1. Get a key",[156],"In the dashboard, go to Settings → Developers, create a Production key, and select the scopes slots:read, bookings:write and config:read. The key is shown only once. export WAGEND_KEY=\"wg_live_xxxxxxxx_xxxxxxxxxxxxxxxxxxxx\"",{"id":1169,"title":1170,"titles":1171,"content":1172,"level":223},"\u002Fdocs\u002Fquickstart#_2-check-who-you-are","2. Check who you are",[156],"curl https:\u002F\u002Fapi.fiuit.com\u002Fv1\u002Fme -H \"Authorization: Bearer $WAGEND_KEY\" {\n  \"workspace\": { \"id\": \"ws_9f2c\", \"name\": \"Downtown Barbershop\", \"timezone\": \"America\u002FSao_Paulo\", \"locale\": \"pt\", \"currency\": \"BRL\" },\n  \"scopes\": [\"slots:read\", \"bookings:write\", \"config:read\"],\n  \"mode\": \"live\"\n} The workspace always comes from the key. You never send a workspace id.",{"id":1174,"title":1175,"titles":1176,"content":1177,"level":223},"\u002Fdocs\u002Fquickstart#_3-list-services","3. List services",[156],"curl https:\u002F\u002Fapi.fiuit.com\u002Fv1\u002Fservices -H \"Authorization: Bearer $WAGEND_KEY\" {\n  \"data\": [\n    { \"id\": \"svc_corte\", \"name\": \"Haircut\", \"duration_min\": 30, \"price_cents\": 5000, \"currency\": \"BRL\",\n      \"requirements\": [{ \"resource_group_id\": \"grp_barbers\", \"units\": 1 }] }\n  ]\n}",{"id":1179,"title":1180,"titles":1181,"content":1182,"level":223},"\u002Fdocs\u002Fquickstart#_4-find-available-slots","4. Find available slots",[156],"curl \"https:\u002F\u002Fapi.fiuit.com\u002Fv1\u002Fslots?service_id=svc_corte&from=2026-10-15T08:00:00-03:00&to=2026-10-15T13:00:00-03:00\" \\\n  -H \"Authorization: Bearer $WAGEND_KEY\" {\n  \"data\": [\n    { \"start\": \"2026-10-15T09:00:00-03:00\", \"end\": \"2026-10-15T09:30:00-03:00\", \"resource_ids\": [\"res_juan\"] },\n    { \"start\": \"2026-10-15T09:45:00-03:00\", \"end\": \"2026-10-15T10:15:00-03:00\", \"resource_ids\": [\"res_juan\"] }\n  ],\n  \"unavailable_reason\": null\n}",{"id":1184,"title":1185,"titles":1186,"content":1187,"level":223},"\u002Fdocs\u002Fquickstart#_5-hold-the-slot","5. Hold the slot",[156],"A hold reserves the slot for 10 minutes while you collect the customer's details. Always send an Idempotency-Key so retries are safe. curl -X POST https:\u002F\u002Fapi.fiuit.com\u002Fv1\u002Fholds \\\n  -H \"Authorization: Bearer $WAGEND_KEY\" \\\n  -H \"Idempotency-Key: $(uuidgen)\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"service_id\": \"svc_corte\", \"start\": \"2026-10-15T09:45:00-03:00\", \"resource_ids\": [\"res_juan\"] }' { \"id\": \"bkg_7Qx1\", \"status\": \"held\", \"expires_at\": \"2026-10-14T15:30:00-03:00\", \"start\": \"2026-10-15T09:45:00-03:00\" }",{"id":1189,"title":1190,"titles":1191,"content":1192,"level":223},"\u002Fdocs\u002Fquickstart#_6-confirm","6. Confirm",[156],"curl -X POST https:\u002F\u002Fapi.fiuit.com\u002Fv1\u002Fholds\u002Fbkg_7Qx1\u002Fconfirm \\\n  -H \"Authorization: Bearer $WAGEND_KEY\" \\\n  -H \"Idempotency-Key: $(uuidgen)\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"customer\": { \"name\": \"Carlos\", \"phone\": \"+5521999990000\", \"locale\": \"pt\" } }' { \"id\": \"bkg_7Qx1\", \"status\": \"confirmed\", \"start\": \"2026-10-15T09:45:00-03:00\", \"source\": \"api\" } If the service requires a deposit, the status is pending_payment. Charging the deposit online is coming soon.",{"id":1194,"title":1195,"titles":1196,"content":1197,"level":223},"\u002Fdocs\u002Fquickstart#same-flow-in-javascript","Same flow in JavaScript",[156],"const api = (path: string, init: RequestInit = {}) =>\n  fetch(`https:\u002F\u002Fapi.fiuit.com\u002Fv1${path}`, {\n    ...init,\n    headers: { Authorization: `Bearer ${process.env.WAGEND_KEY}`, 'Content-Type': 'application\u002Fjson', ...init.headers },\n  }).then((r) => r.json())\n\nconst { data: slots } = await api(`\u002Fslots?service_id=svc_corte&from=${from}&to=${to}`)\nconst hold = await api('\u002Fholds', {\n  method: 'POST',\n  headers: { 'Idempotency-Key': crypto.randomUUID() },\n  body: JSON.stringify({ service_id: 'svc_corte', start: slots[0].start }),\n})\nconst booking = await api(`\u002Fholds\u002F${hold.id}\u002Fconfirm`, {\n  method: 'POST',\n  headers: { 'Idempotency-Key': crypto.randomUUID() },\n  body: JSON.stringify({ customer: { name: 'Carlos', phone: '+5521999990000' } }),\n})",{"id":1199,"title":1200,"titles":1201,"content":1202,"level":223},"\u002Fdocs\u002Fquickstart#next","Next",[156],"Would rather not build the client by hand? Use the TypeScript and Python SDKs.React to bookings with webhooks.See every endpoint in the reference and more examples in the recipes.Connect an AI agent with the MCP server. html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"id":166,"title":165,"titles":1204,"content":1205,"level":217},[],"API keys, scopes, and which routes you can use with a key and which are dashboard-only.",{"id":1207,"title":1208,"titles":1209,"content":1210,"level":223},"\u002Fdocs\u002Fapi\u002Fauthentication#api-keys","API keys",[165],"Keys are created by the owner in Settings → Developers. They are shown once. Send your key as a bearer token: GET \u002Fv1\u002Fme HTTP\u002F1.1\nHost: api.fiuit.com\nAuthorization: Bearer wg_live_xxxxxxxx_xxxxxxxxxxxxxxxxxxxx PrefixModewg_live_Production data and real messageswg_test_Read-only: it can list and read, not create or change anything. A sandbox for writes is Coming soon Keys belong to one project (workspace). The project always comes from the key: there is no workspace id in paths or bodies. Keys are stored hashed.",{"id":1212,"title":1213,"titles":1214,"content":1215,"level":223},"\u002Fdocs\u002Fapi\u002Fauthentication#scopes","Scopes",[165],"ScopeAllowsslots:readGET \u002Fslotsbookings:readRead bookings and tasks (\u002Fbookings, \u002Fwork-items), stage history, attachments, team statisticsbookings:writeHolds, confirm, cancel, reschedule, check-in, no-show, complete, run actions and edit a task's priority, tags and due datecustomers:readRead and search customers, their history, summary and commentscustomers:writeCreate and edit customersmessages:readRead conversations and messagesmessages:writeSend messages, switch the mode (bot or person), resolve, mark as readconfig:read \u002F config:writeServices, resources, groups, schedules, rule-based automations, knowledge and botsettings:writeReplace and revert stages, actions and forms (\u002Fservices\u002F{id}\u002Fstages)webhooks:manageOutgoing webhook endpoints A request without the needed scope returns 403 with code: \"insufficient_scope\".",{"id":1217,"title":1218,"titles":1219,"content":1220,"level":223},"\u002Fdocs\u002Fapi\u002Fauthentication#what-is-dashboard-only","What is dashboard-only",[165],"These areas do not accept API keys: they use the session of a team member (with their role) and are protected with CSRF. If you call them with a key, the API answers that they are not available for that type of credential. Channels, channel and AI pauses, service status.Automation flows (\u002Fautomation-flows), the Wagy assistant and its plan.Knowledge sources (\u002Fknowledge\u002Fsources) and the per-channel bot policy.Team, invitations, API keys, projects and platform support.Team Telegram and alert preferences. The endpoint list marks which is which.",{"id":1222,"title":1223,"titles":1224,"content":1225,"level":223},"\u002Fdocs\u002Fapi\u002Fauthentication#rotation","Rotation",[165],"Create a new key, deploy it, then revoke the old one in Settings → Developers. Revoked keys return 401 immediately. html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"id":170,"title":169,"titles":1227,"content":1228,"level":217},[],"Formats, idempotency, pagination, errors and rate limits of the v1 API.",{"id":1230,"title":1231,"titles":1232,"content":1233,"level":223},"\u002Fdocs\u002Fapi\u002Fconventions#the-basics","The basics",[169],"Base URL https:\u002F\u002Fapi.fiuit.com\u002Fv1. Breaking changes ship as a new version; additive changes (new fields) can arrive at any time, so ignore fields you do not know.JSON in and out (Content-Type: application\u002Fjson).Dates in ISO 8601 with offset (2026-10-15T09:45:00-03:00). They are stored in UTC.Amounts in integer cents plus currency (BRL, ARS, PYG, USD).IDs are opaque strings. Fields without a value arrive as explicit null.The machine-readable contract is packages\u002Fopenapi\u002Fopenapi.yaml (OpenAPI 3.1) and the recent changes summarize what is new.",{"id":1235,"title":1236,"titles":1237,"content":1238,"level":223},"\u002Fdocs\u002Fapi\u002Fconventions#idempotency","Idempotency",[169],"POST \u002Fholds, POST \u002Fholds\u002F{id}\u002Fconfirm, POST \u002Fbookings, POST \u002Fbookings\u002F{id}\u002Freschedule and POST \u002Fbookings\u002F{id}\u002Factions\u002F{key} carry the Idempotency-Key header (for example a UUID). Repeating a request with the same key within 24 hours returns the original response. Reusing the key with a different body returns 422 with code: \"idempotency_conflict\". POST \u002Fcustomers accepts Idempotency-Key optionally. POST \u002Fwebhook-endpoints does not accept it, because its response contains the secret.",{"id":1240,"title":1241,"titles":1242,"content":1243,"level":223},"\u002Fdocs\u002Fapi\u002Fconventions#pagination","Pagination",[169],"List endpoints use cursors: curl \"https:\u002F\u002Fapi.fiuit.com\u002Fv1\u002Fbookings?limit=50\" -H \"Authorization: Bearer $WAGEND_KEY\"\n# → { \"data\": [...], \"next_cursor\": \"eyJpZCI6...\" }\ncurl \"https:\u002F\u002Fapi.fiuit.com\u002Fv1\u002Fbookings?limit=50&cursor=eyJpZCI6...\" -H \"Authorization: Bearer $WAGEND_KEY\" When next_cursor is null, there are no more pages.",{"id":1245,"title":1246,"titles":1247,"content":1248,"level":223},"\u002Fdocs\u002Fapi\u002Fconventions#errors","Errors",[169],"Errors follow RFC 9457 (application\u002Fproblem+json): {\n  \"type\": \"https:\u002F\u002Ffiuit.com\u002Fdocs\u002Fapi\u002Fconventions#errors\",\n  \"title\": \"Slot no longer available\",\n  \"status\": 409,\n  \"code\": \"slot_taken\",\n  \"alternatives\": [{ \"start\": \"2026-10-15T10:15:00-03:00\", \"end\": \"2026-10-15T10:45:00-03:00\" }]\n} codeStatusWhenvalidation_error422Body or parameter validation failedinvalid_api_key401Key missing, invalid or revokedidempotency_key_required400The Idempotency-Key header is missing on an operation that needs itinsufficient_scope403The key lacks the scopenot_found404Unknown id (or from another project)slot_taken409Someone else took the timealready_claimed409Another team member took the queue task firstcustomer_exists409A customer with that phone already existsinvalid_transition409For example confirming a cancelled bookingversion_conflict409Someone edited the same resource first (stale version)hold_expired410The hold expired before confirmingidempotency_conflict422Same key, different bodyrate_limited429Too many requests Every error response carries code: use it to decide what to do, not the text of title.",{"id":1250,"title":1251,"titles":1252,"content":1253,"level":223},"\u002Fdocs\u002Fapi\u002Fconventions#rate-limits","Rate limits",[169],"Limits apply per key and per project (a bucket with a burst of 120 requests and a refill of 2 per second). Every response carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset. On a 429, wait Retry-After seconds. html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"id":174,"title":173,"titles":1255,"content":1256,"level":217},[],"The v1 API endpoints grouped by topic, with the scope each one needs, and which areas are dashboard-only. The machine-readable contract lives in the repository, in packages\u002Fopenapi\u002Fopenapi.yaml (OpenAPI 3.1). This page summarizes what you can use with an API key. Areas marked \"dashboard-only\" use the session of a team member (see Authentication).",{"id":1258,"title":1259,"titles":1260,"content":1261,"level":223},"\u002Fdocs\u002Fapi\u002Fendpoints#schedule-times-and-bookings","Schedule: times and bookings",[173],"MethodPathScopeDescriptionGET\u002Fslotsslots:readAvailable times for a servicePOST\u002Fholdsbookings:writeCreate a 10-minute holdPOST\u002Fholds\u002F{id}\u002Fconfirmbookings:writeConfirm (or pending_payment if a deposit is required)DELETE\u002Fholds\u002F{id}bookings:writeRelease a holdPOST\u002Fbookingsbookings:writeHold and confirmation in one callGET\u002Fbookingsbookings:readList (from, to, status, resource_id, customer_id)GET \u002F PATCH\u002Fbookings\u002F{id}bookings:read \u002F writeRead, update notes or intake dataPOST\u002Fbookings\u002F{id}\u002Fcancel, \u002Freschedule, \u002Fcheck-in, \u002Fno-show, \u002Fcomplete, \u002Ffailbookings:writeChange the state",{"id":1263,"title":1264,"titles":1265,"content":1266,"level":223},"\u002Fdocs\u002Fapi\u002Fendpoints#work-tasks-and-actions","Work: tasks and actions",[173],"A booking is a task with stages. Tasks without a time (for example deliveries) sit in a group's queue until someone takes them. See Work and actions. MethodPathScopeDescriptionGET\u002Fwork-itemsbookings:readUnified query: filters by view (inbox, today, upcoming), status, stage, unassigned, priority, tag, origin, q, date range and geographic boxPATCH\u002Fwork-items\u002F{id}bookings:writeChange priority, tags or due date (with optional expected_version)POST\u002Fbookings\u002F{id}\u002Factions\u002F{key}bookings:writeRun a stage action (take, release, complete, \"not home\"…) with Idempotency-KeyGET\u002Fbookings\u002F{id}\u002Fstage-historybookings:readStage historyGET\u002Fbookings\u002F{id}\u002Fcomments, \u002Ftimelinebookings:readComments and timelineGET\u002Fbookings\u002F{id}\u002Fattachments, \u002Flocation-eventsbookings:readWork evidenceGET\u002Fconversations\u002F{id}\u002Fwork-itemsbookings:readTasks created from a conversationGET\u002Fteam\u002Foverview, \u002Fresources\u002F{id}\u002Fstatsbookings:readTeam occupancy and statistics",{"id":1268,"title":1269,"titles":1270,"content":1271,"level":223},"\u002Fdocs\u002Fapi\u002Fendpoints#catalog-and-stages","Catalog and stages",[173],"MethodPathScopeGET \u002F POST\u002Fservices, \u002Fresources, \u002Fresource-groups, \u002Fschedulesconfig:read \u002F config:writeGET \u002F PATCH \u002F DELETE\u002Fservices\u002F{id}, \u002Fresources\u002F{id}, \u002Fresource-groups\u002F{id}, \u002Fschedules\u002F{id}config:read \u002F config:writePOST \u002F DELETE\u002Fschedules\u002F{id}\u002Foverrides, \u002Fschedules\u002F{id}\u002Foverrides\u002F{date}config:writeGET\u002Fschedule-overridesconfig:readGET\u002Fservices\u002F{id}\u002Fstages, \u002Fservices\u002F{id}\u002Fstages\u002Fversions, \u002Fservices\u002F{id}\u002Fstages\u002Fversions\u002F{version}config:readPUT\u002Fservices\u002F{id}\u002Fstagessettings:writePOST\u002Fservices\u002F{id}\u002Fstages\u002Fvalidatesettings:writeGET\u002Fstage-templates, \u002Fbase-statesconfig:readPOST\u002Fservices\u002F{id}\u002Fstages\u002Fversions\u002F{version}\u002Frevertsettings:write",{"id":1273,"title":1274,"titles":1275,"content":1276,"level":223},"\u002Fdocs\u002Fapi\u002Fendpoints#customers","Customers",[173],"MethodPathScopeDescriptionGET\u002Fcustomerscustomers:readList and search (q: name, email, company, tag or phone; phone, tag)POST\u002Fcustomerscustomers:writeManual creation. The phone is unique: if it exists, 409 customer_existsGET \u002F PATCH\u002Fcustomers\u002F{id}customers:read \u002F writeRead or edit (includes address with formatted, lat and lng)GET\u002Fcustomers\u002F{id}\u002Fbookings, \u002Fsummary, \u002Ftimeline, \u002Fcommentscustomers:readHistory, live summary, timeline and comments A customer can have several identities (WhatsApp, Telegram, WebChat) in identities[].",{"id":1278,"title":1279,"titles":1280,"content":1281,"level":223},"\u002Fdocs\u002Fapi\u002Fendpoints#conversations","Conversations",[173],"MethodPathScopeGET\u002Fconversations, \u002Fconversations\u002F{id}, \u002Fconversations\u002F{id}\u002Fmessagesmessages:readPOST\u002Fconversations\u002F{id}\u002Fmessagesmessages:write (answers 409 channel_paused if the channel is paused)POST\u002Fconversations\u002F{id}\u002Fmode, \u002Fread, \u002Fresolvemessages:write",{"id":1283,"title":93,"titles":1284,"content":1285,"level":223},"\u002Fdocs\u002Fapi\u002Fendpoints#bot-and-knowledge",[173],"MethodPathScopeGET \u002F PUT\u002Fbotconfig:read \u002F config:writeGET \u002F POST\u002Fknowledge, \u002Fknowledge\u002Ffilesconfig:read \u002F config:writePOST\u002Fknowledge\u002Fsearchconfig:readPATCH \u002F DELETE\u002Fknowledge\u002F{id}config:writeGET \u002F POST \u002F PATCH\u002Fautomations, \u002Fautomations\u002F{id}config:read \u002F config:write",{"id":1287,"title":1288,"titles":1289,"content":1290,"level":223},"\u002Fdocs\u002Fapi\u002Fendpoints#outgoing-webhooks","Outgoing webhooks",[173],"MethodPathScopeGET \u002F POST\u002Fwebhook-endpointswebhooks:manageGET \u002F PATCH \u002F DELETE\u002Fwebhook-endpoints\u002F{id}webhooks:managePOST\u002Fwebhook-endpoints\u002F{id}\u002Frotate-secret, \u002Fping, \u002Fdeliveries\u002F{delivery_id}\u002Fresendwebhooks:manageGET\u002Fwebhook-endpoints\u002F{id}\u002Fdeliverieswebhooks:manage Details in Webhooks.",{"id":1292,"title":1293,"titles":1294,"content":1295,"level":223},"\u002Fdocs\u002Fapi\u002Fendpoints#platform","Platform",[173],"MethodPathScopeGET\u002Fmeany",{"id":1297,"title":1298,"titles":1299,"content":1300,"level":223},"\u002Fdocs\u002Fapi\u002Fendpoints#dashboard-only-they-do-not-accept-api-keys","Dashboard-only (they do not accept API keys)",[173],"AreaRoutesChannels and pauses\u002Fchannels, \u002Fchannels\u002Fwhatsapp, \u002Fchannels\u002Ftelegram, \u002Fchannels\u002Fservice-status, \u002Fchannels\u002Fpauses, \u002Fchannels\u002F{channel}\u002Fpause and \u002Fresume; see Pauses and StatusPer-channel bot policy\u002Fbot\u002Fchannel-policies (see WebChat)Knowledge sources\u002Fknowledge\u002Fsources (see Knowledge)Flows\u002Fautomation-flows (see Flows)Project AI\u002Fai\u002Fusage, \u002Fai\u002Fpause, \u002Fai\u002Fresume, \u002Fai\u002Fspam-guard, \u002Fai\u002FnoticesWagy\u002Fassistant\u002F*, the dashboard's setup assistantTeam and account\u002Fteam\u002F*, \u002Fapi-keys, \u002Fworkspaces, \u002Fme\u002Ftelegram, \u002Fme\u002Fnotification-preferencesWebChat\u002Fwebchat-site (management) and \u002Fpublic\u002Fwebchat\u002F* (public, with the widget's publishable key)",{"id":1302,"title":1303,"titles":1304,"content":1305,"level":223},"\u002Fdocs\u002Fapi\u002Fendpoints#example-slots","Example: slots",[173],"GET \u002Fv1\u002Fslots?service_id=svc_laser&from=2026-10-20T09:00:00-03:00&to=2026-10-20T20:00:00-03:00&around=2026-10-20T18:00:00-03:00 {\n  \"data\": [\n    { \"start\": \"2026-10-20T17:45:00-03:00\", \"end\": \"2026-10-20T18:30:00-03:00\", \"resource_ids\": [\"res_ana\", \"res_laser1\", \"res_room2\"] },\n    { \"start\": \"2026-10-20T18:45:00-03:00\", \"end\": \"2026-10-20T19:30:00-03:00\", \"resource_ids\": [\"res_carla\", \"res_laser1\", \"res_room1\"] }\n  ],\n  \"unavailable_reason\": null\n}",{"id":1307,"title":1308,"titles":1309,"content":1310,"level":223},"\u002Fdocs\u002Fapi\u002Fendpoints#example-booking-object","Example: booking object",[173],"{\n  \"id\": \"bkg_7Qx1\",\n  \"status\": \"confirmed\",\n  \"stage\": \"confirmed\",\n  \"service_id\": \"svc_laser\",\n  \"start\": \"2026-10-20T17:45:00-03:00\",\n  \"end\": \"2026-10-20T18:30:00-03:00\",\n  \"party_size\": 1,\n  \"customer\": { \"id\": \"cus_31\", \"name\": \"Marina\", \"phone\": \"+5521988887777\", \"locale\": \"pt\" },\n  \"allocations\": [\n    { \"resource_id\": \"res_ana\", \"start\": \"2026-10-20T17:45:00-03:00\", \"end\": \"2026-10-20T18:40:00-03:00\" },\n    { \"resource_id\": \"res_laser1\", \"start\": \"2026-10-20T17:45:00-03:00\", \"end\": \"2026-10-20T18:40:00-03:00\" },\n    { \"resource_id\": \"res_room2\", \"start\": \"2026-10-20T17:45:00-03:00\", \"end\": \"2026-10-20T18:40:00-03:00\" }\n  ],\n  \"priority\": \"normal\",\n  \"tags\": [],\n  \"source\": \"whatsapp\",\n  \"created_at\": \"2026-10-19T11:02:13-03:00\"\n} Allocations include the buffer (here, 10 minutes after the service). On queue tasks, start and end are null until someone takes them.",{"id":1312,"title":1313,"titles":1314,"content":1315,"level":223},"\u002Fdocs\u002Fapi\u002Fendpoints#recent-changes","Recent changes",[173],"These are the API's new features, all additive. The full history lives in the repository (docs\u002Fapi\u002FCHANGELOG.md). Customers: manual creation, extended data, address with formatted, lat and lng, and multichannel identities[].Tasks and actions: unified GET \u002Fwork-items query, action executor with effects (take, release, outcomes) and 409 already_claimed.Messages with location: WhatsApp, Telegram and WebChat store the shared location in the conversation.Pauses: when a channel is paused, sending a message answers 409 channel_paused.Knowledge: site-type sources with max_pages and errors by cause. Confirmations retain their title and body in all three languages. The API accepts up to 42 stages to preserve existing identities and system canonical stages. Isolated canonical stages add no actions or permissions; configured exits retain graph validation. Validation, saving and restoring accept these migrated configurations. html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"id":178,"title":177,"titles":1317,"content":1318,"level":217},[],"Signed notifications for what happens to your bookings, with automatic retries, a delivery log and examples to verify the signature.",{"id":1320,"title":1321,"titles":1322,"content":1323,"level":223},"\u002Fdocs\u002Fapi\u002Fwebhooks#events","Events",[177],"These events can be subscribed to: EventWhenbooking.createdA hold or booking was createdbooking.confirmedA booking was confirmedbooking.cancelledBooking cancelled or hold releasedbooking.rescheduledMoved to a new time (payload has the old and new ids)booking.no_showMarked as absentbooking.completedAppointment completedbooking.scheduledTime set on the same taskbooking.unscheduledTime removed from the taskbooking.reassignedThe co-responsible set changed; data.booking.resource_ids contains all resulting resources and previous_resource_ids the previous ones.action.executedTask action applied by the serverpayment.paidProvider changed the charge to paidpayment.recordedManual payment recordedpayment.voidedManual payment voidedmessage.receivedInbound message persisted (IDs and type, without text)conversation.handoffConversation moved to human mode booking.reassigned: Emitted only when at least one resource was previously assigned and the set changes. Includes releasing assignments (empty new set); excludes initial assignment and assigning the same resource again. Deduplication uses the booking and persisted sequence of actual resource changes, independently of the version: A→B→A→B emits three events. Replaying the same PATCH or repeating the current set adds no events and does not increment the sequence. Unknown types return 422 (invalid_webhook) with unsupported_events and the supported_events list. webhook.ping is only a test, not a subscription type. booking.cancelled does not include automatic hold expiration (booking.expired, an internal event). Create endpoints in Settings → Webhooks in the dashboard or with POST \u002Fv1\u002Fwebhook-endpoints (url and events). The signing secret (whsec_…) is shown once. curl -X POST https:\u002F\u002Fapi.fiuit.com\u002Fv1\u002Fwebhook-endpoints \\\n  -H \"Authorization: Bearer $WAGEND_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"url\": \"https:\u002F\u002Fexample.com\u002Fwagend\", \"events\": [\"booking.confirmed\", \"booking.cancelled\"] }'",{"id":1325,"title":1326,"titles":1327,"content":1328,"level":223},"\u002Fdocs\u002Fapi\u002Fwebhooks#payload","Payload",[177],"The envelope keeps data.booking for bookings; charges use data.payment (charge ID), messages data.message (message ID), handoffs data.conversation (conversation ID) and actions data.action (with workitem_id, action_key and effects). Message text is not included. {\n  \"id\": \"evt_3f6c1d9e0b7a4c2f8e5d1a9b7c3e6f20\",\n  \"type\": \"booking.confirmed\",\n  \"created_at\": \"2026-10-14T15:21:07-03:00\",\n  \"workspace_id\": \"b3a6c8e2-5f1d-4c7a-9e0b-2d8f4a1c6e53\",\n  \"data\": { \"booking\": { \"id\": \"6d1f0c4a-7b2e-4a58-9c3d-0e5f8a2b1c47\", \"status\": \"confirmed\", \"start_at\": \"2026-10-15T12:45:00+00:00\" } }\n} Delivery is at least once: use id to ignore duplicates.",{"id":1330,"title":1331,"titles":1332,"content":1333,"level":223},"\u002Fdocs\u002Fapi\u002Fwebhooks#verifying-the-signature","Verifying the signature",[177],"Every request has a header: Wagend-Signature: t=1791040867,v1=5c2b9f...e81 v1 is HMAC-SHA256(secret, t + \".\" + raw_body) in hex. Reject requests older than 5 minutes and compute the signature over the raw body, without re-serializing the JSON. import crypto from 'node:crypto'\n\nexport function verifyWagend(rawBody: string, header: string, secret: string) {\n  const parts = Object.fromEntries(header.split(',').map((p) => p.split('=') as [string, string]))\n  const age = Math.abs(Date.now() \u002F 1000 - Number(parts.t))\n  if (!parts.t || !parts.v1 || age > 300) return false\n  const expected = crypto.createHmac('sha256', secret).update(`${parts.t}.${rawBody}`).digest('hex')\n  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1))\n} import hashlib, hmac, time\n\ndef verify_wagend(raw_body: bytes, header: str, secret: str) -> bool:\n    parts = dict(p.split(\"=\", 1) for p in header.split(\",\"))\n    if abs(time.time() - int(parts.get(\"t\", \"0\"))) > 300:\n        return False\n    signed = f\"{parts['t']}.\".encode() + raw_body\n    expected = hmac.new(secret.encode(), signed, hashlib.sha256).hexdigest()\n    return hmac.compare_digest(expected, parts.get(\"v1\", \"\"))",{"id":1335,"title":1336,"titles":1337,"content":1338,"level":223},"\u002Fdocs\u002Fapi\u002Fwebhooks#retries","Retries",[177],"Respond with any 2xx within 10 seconds. Otherwise we retry after 1 min, 5 min, 30 min, 2 h and 12 h. Every attempt is visible in the delivery log, where you can also resend manually.",{"id":1340,"title":1341,"titles":1342,"content":1343,"level":223},"\u002Fdocs\u002Fapi\u002Fwebhooks#security-and-limits","Security and limits",[177],"The URL must be https and resolve to a public address: we reject localhost, private networks, link-local and cloud metadata addresses (when you register it and on every delivery). Redirects are not followed (a 3xx counts as a failure).Extra headers: Wagend-Event (type) and Wagend-Delivery (delivery id). Every attempt is signed with a fresh timestamp.Up to 10 endpoints per workspace. After 10 consecutive failures the endpoint is disabled (re-enable it with PATCH \u002Fv1\u002Fwebhook-endpoints\u002F{id} and {\"active\": true}).POST \u002Fv1\u002Fwebhook-endpoints\u002F{id}\u002Fping sends a webhook.ping test event; POST \u002Fv1\u002Fwebhook-endpoints\u002F{id}\u002Frotate-secret issues a new secret (shown once; the old one stops working immediately).With an API key use the webhooks:manage scope. The log is at GET \u002Fv1\u002Fwebhook-endpoints\u002F{id}\u002Fdeliveries and resending at POST …\u002Fdeliveries\u002F{delivery_id}\u002Fresend. html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"id":182,"title":181,"titles":1345,"content":1346,"level":217},[],"Typed clients generated from the OpenAPI contract: how to use them today from the repository, with booking, error, pagination and idempotency examples. Fiuit has two SDKs that are generated from the contract packages\u002Fopenapi\u002Fopenapi.yaml, so their types always follow the API. The SDKs are not published yet on npm or PyPI (Coming soon). Today you use them from the repository, as explained below. If you would rather not depend on them, the REST API works with any HTTP client.",{"id":1348,"title":1349,"titles":1350,"content":1351,"level":223},"\u002Fdocs\u002Fapi\u002Fsdks#typescript","TypeScript",[181],"The client (packages\u002Fsdk-ts) is a light wrapper over fetch with types for every route.",{"id":1353,"title":1354,"titles":1355,"content":1356,"level":368},"\u002Fdocs\u002Fapi\u002Fsdks#install-from-the-repository","Install from the repository",[181,1349],"cd packages\u002Fsdk-ts\nnpm ci\nnpm run build          # genera dist\u002F In your project, install it from that folder: npm install \u002Fpath\u002Fto\u002Fwagendapp\u002Fpackages\u002Fsdk-ts",{"id":1358,"title":1359,"titles":1360,"content":1361,"level":368},"\u002Fdocs\u002Fapi\u002Fsdks#book-a-slot","Book a slot",[181,1349],"import { createWagendClient, WagendError } from \"@wagend\u002Fsdk\";\n\nconst api = createWagendClient({\n  baseUrl: \"https:\u002F\u002Fapi.fiuit.com\u002Fv1\",\n  apiKey: process.env.WAGEND_API_KEY!, \u002F\u002F wg_live_xxx\n});\n\ntry {\n  const { data: services } = await api.GET(\"\u002Fservices\");\n  const serviceId = services!.data![0].id!;\n\n  const { data: slots } = await api.GET(\"\u002Fslots\", {\n    params: { query: { service_id: serviceId, from: \"2026-10-15T08:00:00-03:00\", to: \"2026-10-15T13:00:00-03:00\" } },\n  });\n  const slot = slots!.data[0];\n\n  \u002F\u002F 10-minute hold\n  const { data: hold } = await api.POST(\"\u002Fholds\", {\n    params: { header: { \"Idempotency-Key\": crypto.randomUUID() } },\n    body: { service_id: serviceId, start: slot.start, party_size: 1, resource_ids: slot.resource_ids },\n  });\n\n  \u002F\u002F Confirmation with the customer data\n  const { data: booking } = await api.POST(\"\u002Fholds\u002F{id}\u002Fconfirm\", {\n    params: { path: { id: hold!.id! }, header: { \"Idempotency-Key\": crypto.randomUUID() } },\n    body: { customer: { name: \"Carlos\", phone: \"+5491155550000\", locale: \"es\" } },\n  });\n  console.log(booking!.status); \u002F\u002F \"confirmed\"\n} catch (err) {\n  if (err instanceof WagendError) {\n    console.error(err.status, err.code, err.retryAfter);\n  } else {\n    throw err;\n  }\n} Authentication: the client adds Authorization: Bearer for you.Idempotency: on every write it adds an Idempotency-Key if you do not pass one. To retry an operation, pass the same key yourself in both attempts (valid for 24 hours). The TypeScript type declares it in params.header for the routes that require it.Errors: any non-2xx response throws WagendError with .status, .code, .problem (RFC 9457) and .retryAfter (seconds, on 429).",{"id":1363,"title":1241,"titles":1364,"content":1365,"level":368},"\u002Fdocs\u002Fapi\u002Fsdks#pagination",[181,1349],"let cursor: string | undefined;\ndo {\n  const { data: page } = await api.GET(\"\u002Fbookings\", { params: { query: { limit: 50, cursor } } });\n  for (const booking of page?.data ?? []) console.log(booking.id);\n  cursor = page?.next_cursor ?? undefined;\n} while (cursor);",{"id":1367,"title":1368,"titles":1369,"content":1370,"level":368},"\u002Fdocs\u002Fapi\u002Fsdks#customers-and-actions","Customers and actions",[181,1349],"\u002F\u002F Search and create customers (scopes customers:read and customers:write)\nconst { data: found } = await api.GET(\"\u002Fcustomers\", { params: { query: { q: \"carlos\" } } });\nawait api.POST(\"\u002Fcustomers\", { body: { name: \"Ana\", phone: \"+5491155551111\", tags: [\"vip\"] } });\n\n\u002F\u002F Run a stage action, for example assigning a delivery to a courier (scope bookings:write).\n\u002F\u002F \"atribuir\" is the key of that action in the deliveries template.\nawait api.POST(\"\u002Fbookings\u002F{id}\u002Factions\u002F{key}\", {\n  params: { path: { id: taskId, key: \"atribuir\" }, header: { \"Idempotency-Key\": crypto.randomUUID() } },\n  body: { data: {}, resource_id: courierResourceId },\n}); Action keys (key) are defined by your business's stage configuration: look them up with available_actions.",{"id":1372,"title":1373,"titles":1374,"content":1375,"level":223},"\u002Fdocs\u002Fapi\u002Fsdks#python","Python",[181],"The client (packages\u002Fsdk-py) uses httpx and generated Pydantic v2 models.",{"id":1377,"title":1354,"titles":1378,"content":1379,"level":368},"\u002Fdocs\u002Fapi\u002Fsdks#install-from-the-repository-1",[181,1373],"pip install \u002Fpath\u002Fto\u002Fwagendapp\u002Fpackages\u002Fsdk-py\n# or, with uv:\nuv pip install \u002Fpath\u002Fto\u002Fwagendapp\u002Fpackages\u002Fsdk-py",{"id":1381,"title":1359,"titles":1382,"content":1383,"level":368},"\u002Fdocs\u002Fapi\u002Fsdks#book-a-slot-1",[181,1373],"from datetime import UTC, datetime\nfrom wagend import Fiuit, WagendError\n\nwith Fiuit(\"https:\u002F\u002Fapi.fiuit.com\u002Fv1\", \"wg_live_xxx\") as api:\n    try:\n        service = api.list_services()[0]\n        slots = api.list_slots(\n            str(service.id), datetime(2026, 10, 15, 8, tzinfo=UTC), datetime(2026, 10, 15, 13, tzinfo=UTC)\n        )\n\n        hold = api.request(\n            \"POST\", \"\u002Fholds\",\n            json={\"service_id\": str(service.id), \"start\": slots[0].start.isoformat(), \"party_size\": 1},\n            idempotency_key=\"booking-carlos-2026-10-15\",\n        )\n        booking = api.request(\n            \"POST\", f\"\u002Fholds\u002F{hold['id']}\u002Fconfirm\",\n            json={\"customer\": {\"name\": \"Carlos\", \"phone\": \"+5491155550000\"}},\n        )\n        print(booking[\"status\"])\n    except WagendError as err:\n        print(err.status, err.code, err.retry_after) list_services() and list_slots() return typed models. For the other routes use api.request(method, path, params=…, json=…); you can validate the response with wagend.models.Idempotency: writes carry an Idempotency-Key (one is generated if you do not pass idempotency_key). Retry with the same key.Errors: WagendError with .status, .code, .problem and .retry_after (on 429).Pagination: api.paginate(\"\u002Fbookings\", params={\"limit\": 50}) walks every page. for booking in api.paginate(\"\u002Fbookings\", params={\"limit\": 50}):\n    print(booking[\"id\"])",{"id":1385,"title":1251,"titles":1386,"content":1387,"level":223},"\u002Fdocs\u002Fapi\u002Fsdks#rate-limits",[181],"The limit is per key and per project. On a 429, wait retry_after \u002F retryAfter seconds before retrying. See Conventions.",{"id":1389,"title":1390,"titles":1391,"content":1392,"level":223},"\u002Fdocs\u002Fapi\u002Fsdks#regenerating-the-sdks","Regenerating the SDKs",[181],"If the contract changes, make sdk regenerates both from openapi.yaml and make sdk-check fails if they are out of date. html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"id":186,"title":185,"titles":1394,"content":1395,"level":217},[],"Connect Claude, ChatGPT or your own agent to the Fiuit MCP server to look up times, book and run the business with your API key. Fiuit includes an MCP server (Model Context Protocol) so AI agents use the same engine as the WhatsApp bot: same holds, same validation and same audit trail. The server is a thin client of the API: every tool calls the API with your own key, so MCP never grants more permissions than the key. The server lives in the repository (packages\u002Fmcp) and today you run it yourself. The hosted server at mcp.fiuit.com is not deployed yet: it is Coming soon. So is OAuth authentication.",{"id":1397,"title":1398,"titles":1399,"content":1400,"level":223},"\u002Fdocs\u002Fmcp#run-the-server","Run the server",[185],"You need Python 3.12+ and uv. cd packages\u002Fmcp\nuv sync\nWAGEND_API_URL=https:\u002F\u002Fapi.fiuit.com MCP_PORT=8700 uv run python -m wagend_mcp\n# escucha en http:\u002F\u002F127.0.0.1:8700\u002F (Streamable HTTP) Variables: VariablePurposeWAGEND_API_URLAPI URL (default https:\u002F\u002Fapi.fiuit.com)MCP_TOOLSETSToolsets to expose: booking, admin, tasks, payments, customers, inbox, finance (default all seven)MCP_HOST, MCP_PORTWhere it listens (default 127.0.0.1:8700)MCP_ALLOWED_HOSTSAllowed hosts (DNS rebinding protection)",{"id":1402,"title":1403,"titles":1404,"content":1405,"level":223},"\u002Fdocs\u002Fmcp#connect-a-client","Connect a client",[185],"Authentication is an API key in the Authorization header. Without a key in a valid format, the server answers 401 before entering the protocol. With Claude Code: claude mcp add --transport http wagend http:\u002F\u002F127.0.0.1:8700\u002F \\\n  --header \"Authorization: Bearer wg_live_xxx\" Or with the JSON configuration of any client that supports HTTP: {\n  \"mcpServers\": {\n    \"wagend\": {\n      \"type\": \"http\",\n      \"url\": \"http:\u002F\u002F127.0.0.1:8700\u002F\",\n      \"headers\": { \"Authorization\": \"Bearer wg_live_xxx\" }\n    }\n  }\n} To try it without an agent: npx @modelcontextprotocol\u002Finspector (Streamable HTTP transport, the same URL and header).",{"id":1407,"title":1408,"titles":1409,"content":1410,"level":223},"\u002Fdocs\u002Fmcp#tools","Tools",[185],"The tasks and payments tools only appear in the list if the key has the scope they need (a key without payment permissions neither sees nor can use them). For the rest, each one only works if the key has the scope; otherwise it returns the API's 403 error. Writes are audited with actor mcp. Bookings (booking): for assistants that book on behalf of a customer. ToolScopeDoeslist_servicesconfig:readServices with duration and pricefind_slotsslots:readAvailable times for a service between two dateshold_slotbookings:write10-minute holdconfirm_bookingbookings:writeConfirms a hold with the customer's datacancel_booking, reschedule_bookingbookings:writeManages an existing bookingget_bookingbookings:readBooking detail Administration (admin): so the owner can run the business from their AI assistant. ToolScopeDoeslist_resourcesconfig:readTeam, rooms, machines and groupslist_todaybookings:readToday's bookingsblock_timeconfig:write and bookings:readCloses whole days of a resource (max. 31). It does not cancel existing bookings: it returns them for a person to decidecreate_service, update_serviceconfig:writeCreates or changes a service, with its booking formupdate_scheduleconfig:writeChanges the weekly schedule or the time zoneget_statsbookings:readBookings, occupancy and no-shows per resourceget_service_stages, list_service_stage_versions, get_service_stage_versionconfig:readPer-service stages, exits and requirements; version historyvalidate_service_stagessettings:writeValidates without writingupdate_service_stagessettings:writeCreates a version after preview and confirmationrevert_service_stagesconfig:read + settings:writeCreates another version from the selected one; retains historyget_stage_templates, get_base_statesconfig:readCopyable templates and fixed engine states Tasks (tasks): tasks with and without a time, the \"to schedule\" ones and the queue. ToolScopeDoeslist_tasksbookings:read (and payments:read_balance if you ask for the balance)Lists tasks by status, to schedule (scheduling_state=pending), unassigned (unassigned=true), queue, origin (origin=conversation is the chat order) and, optionally, with their balance and a payment-status filter on the pagecreate_taskbookings:writeCreates a task with a time, a queue task, or a to-schedule task with no time (schedule_later=true)schedule_taskbookings:writeGives a time to a task without one, or changes the one it has; the API checks availabilityassign_taskbookings:writeAssigns people or resources to a task Payments (payments): manual payments and balances. Balances are always computed by the API; the MCP never adds or subtracts. ToolScopeDoesrecord_paymentpayments:recordRecords a manual payment (cash, transfer or other), optionally split across tasksvoid_paymentpayments:voidVoids a payment, with a mandatory reasonapply_refund_due_to_accountpayments:adjust“Use for another debt”: a late payment kept apart as “to refund” (refund_due) moves to the customer's balance and covers their oldest debts. Requires confirm=true; the API refuses it while a Mercado Pago claim is openget_task_balancepayments:read_balanceA task's balance and, if you want, its payment historyget_customer_accountcustomer_balance:read (and customer_account:read for the detail)The customer's account: balance, on-account payments and debts; with include_movements=true, a per-task breakdown and paymentsget_commissionscommissions:readTeam commissions calculated by the API on what was collected: with day, the day per team member (collected by method, tips, commission, adjustments and cash box); without day, the report between start and end. Read only | list_prepaid_plans | prepaid:read | Packages (N sessions with an expiry) and memberships (N per month) in the catalog, with price, per-unit value and per-day\u002Ftime-band quota |\n| get_customer_plans | prepaid:read | A customer's packages and memberships: units left, reserved, expiry and fee due |\n| sell_prepaid_plan | prepaid:sell and payments:record | Sells a plan paid in person (cash, transfer or other). Requires confirm=true |\n| renew_prepaid_plan | prepaid:sell and payments:record | Records the monthly payment of a membership paid in person. Requires confirm=true |\n| cancel_prepaid_plan | prepaid:sell (refund: also payments:void and payments:record) | Cancels and frees the sessions of future tasks; with refund=true returns what was not used in the current period of a plan paid in person (expired sessions are lost). Requires confirm=true |\n| extend_prepaid_plan | prepaid:sell | Manually extends the expiry of a package or membership (or reopens an expired package). Unused sessions are lost at expiry. Requires confirm=true |\n| remove_task_plan | prepaid:sell | Removes the plan from a task: frees the session and the task goes back to its normal price. Needed before changing its customer or service. Requires confirm=true | record_payment and void_payment move money: they require confirm=true and, without it, do not execute the monetary operation (the protocol may query GET \u002Fme). Always pass idempotency_key to retry without charging twice; amount limits and duplicate detection are the API's. received_by is the membership of whoever received the money: it is required with an API key. Preparation without confirm returns idempotency_key; confirmation requires that key or an agent-supplied key (1-128 characters). Reuse the same key, destination and payload for every retry, including lost responses. A new operation requires a new key, even for an identical payment. By default, list_tasks omits contacts, exact addresses, coordinates, notes and forms. include_sensitive=true requests full details and also requires customers:read. Movements in get_customer_account and charge history in get_task_balance omit receiver names, notes and reasons; the same opt-in also requires payments:read. Keys with mode=test only see read tools. Writes to configuration, tasks and payments require confirm=true. Without it, the tool does not execute the write (it may read data for the preview): it returns confirmation_required with what it would send, so the agent can show it to a person and repeat with the confirmation.",{"id":1412,"title":1413,"titles":1414,"content":1415,"level":223},"\u002Fdocs\u002Fmcp#example-requests","Example requests",[185],"\"Book a haircut with Juan tomorrow morning, under the name Carlos.\"\"Block the laser machine next Monday for maintenance and tell me which bookings are affected.\"\"How many no-shows did we have this month?\"\"Show me the unassigned tasks and schedule them tomorrow at 10.\"\"Record a cash payment of 50,000 from Ana for her last task and tell me the balance.\"",{"id":1417,"title":1418,"titles":1419,"content":1420,"level":223},"\u002Fdocs\u002Fmcp#docs-for-llms","Docs for LLMs",[185],"\u002Fllms.txt lists every documentation page.\u002Fllms-full.txt contains the full documentation in Markdown. Service stages: these service tools require service_id. update_service_stages validates before previewing; confirm=true creates a version. revert_service_stages creates another version (read config:read and write settings:write). validate_service_stages, get_stage_templates and get_base_states cover configuration. MCP adds get_work_item_next_steps, move_work_item_stage and use_work_item_tool. Writes require confirm=true and Idempotency-Key. complete_task is removed. Electronic charge remains pending F4-29. get_work_item_stage_history (scope bookings:read) reads the immutable stage history (up to 100). Scopes: reading bookings:read; moving and using tools bookings:write (plus payments:record when charging); editing service stages settings:write. A 403 (permission or scope), 409 (stage_conflict, already_claimed) or 422 (stage_requirements_missing) reaches the agent unchanged; retrying with the same idempotency_key and body returns the same result without duplicating. Wagy explains the current capability and the panel includes Next step and the stage editor. Enabled effects are queued through the outbox; this does not prove delivery to a customer. Confirmations retain their title and body in all three languages. The API accepts up to 42 stages to preserve existing identities and system canonical stages. Isolated canonical stages add no actions or permissions; configured exits retain graph validation. Validation, saving and restoring accept these migrated configurations. update_service accepts payment_requirement: required|optional|off: it previews the change and uses the same catalog PATCH with confirm=true (config:write). Changing the rule creates an audited version and updates payment in every completed stage, preserving other requirements. Explicit payments_enabled=false does not require collection resolution or erase balances (changed from F3-177).",{"id":1422,"title":1423,"titles":1424,"content":1425,"level":223},"\u002Fdocs\u002Fmcp#mercado-pago","Mercado Pago",[185],"Brazil and Argentina connect only with OAuth. Chile, Uruguay, Colombia, Mexico and Peru connect only with a token in Payments, with no Fiuit platform fee. Paraguay does not offer Mercado Pago. Existing accounts are preserved. With a production account and a service requiring a deposit, BRL\u002FARS use a payment link expiring before the temporary booking. In Brazil, Pix is paid inside Mercado Pago. The portal shows the link and chat sends it through the available conversation. The booking awaits its deposit until verified payment. Applied prepayment covers or reduces the deposit. Late payments require team review: they never automatically reconfirm or refund. A rejected or cancelled payment attempt allows another checkout attempt. If a late payment leaves unapplied money under review, the pending booking expires and releases the slot; the receipt and alert remain. Reconciliation detects additional payments even when they arrive together in Mercado Pago search. A late, refunded or charged-back payment without applied coverage retains its receipt and review when the slot is released. A locally cancelled snapshot does not prove absence of money: a final query is required. The 24-hour credential-loss grace only releases bookings without applied coverage or unverified replaced links. MP availability includes country (collection country based on the business currency) even without an account; Pix only for BR. No new tools, scopes or refund actions. Before expiring a booking, the worker reconciles every electronic link awaiting verification, including links replaced and cancelled after a price change, even when their retry is deferred. Failed queries or lost access to a replaced link retain the slot. Already verified receipts retain their financial state. A timely payment through the old link is applied even when partial: it reduces the outstanding deposit and creates a link for the difference. The booking remains pending and retains its slot; the difference link keeps its original deadline and never extends past two hours before the appointment. Once the deadline is exhausted, the booking stays under review without further links or customer notices; owner\u002Fmanager receives one notice when the partial payment is first retained. Confirmation requires full coverage. Later credential loss does not remove applied coverage. The team must finish collecting or resolve the booking; there is no automatic refund. Checkout Pro receives only known contact and description data. The card statement descriptor uses ASCII letters and digits, without accents or symbols, up to 13 characters. Returns open the customer’s private portal through the existing link; without an active link or after revocation, returns go to \u002Fpayment-return, a neutral page with no customer data. Returns never create or revoke portals. Its token stays in the fragment and never confirms payment. The receiver requires public HTTPS and rejects .test, .example, .invalid and .localhost. Tests explicitly enable reserved test domains; production does not. An ambiguous creation POST releases the slot after seven days of successful empty searches, with a business notice and audit. An error, observed payment or lost credentials resets the window. Owner\u002Fmanager can confirm “Release the slot” next to the review: audited cancellation preserves recorded money and does not refund it. Requires tasks:work and payments:accounts_configure in the panel; no tool or API key uses this reserved reason.",{"id":1427,"title":1428,"titles":1429,"content":1430,"level":223},"\u002Fdocs\u002Fmcp#feedback-after-the-service","Feedback after the service",[185],"get_feedback(kind, identifier) (bookings:read): booking, service, customer, resource; 0–100. get_feedback_settings (config:read). Owners can enable feedback after completing a task: configurable form, single-use link, business branding and satisfaction indicators with a minimum sample. Comments follow privacy permissions. Low scores enter attention and create email and Telegram notices, subject to preferences and availability. Off by default; delivery depends on the channel and its reply window. A worker crash can cause the same link to be sent again; the response remains single-use. F3-143 adds admission state to API conversation reads. The Inbox remains excluded from MCP: blocking\u002Freleasing contacts requires an owner\u002Fmanager panel session (contacts:moderate). This initial delivery has no external moderation tool or anti-bot challenge. Telegram policy is configured in the panel or through confirmed Wagy proposals. WebChat may require Turnstile when opening a session. These are public\u002Fpanel surfaces without API key scopes: MCP does not open WebChat sessions or moderate contacts. Review with an already applied electronic deposit does not trigger repeated final searches. Remaining charges use bounded retries; verified webhooks continue to be processed. Ambiguous creation uses exponential backoff capped at one day between searches during the seven-day successful empty-search window; release occurs on the next search, at most one day after completing the window. Errors, observed payments or lost credentials reset the empty-search evidence. Guided turns, undo and restart of the setup interview require an owner panel session and CSRF; they are not MCP tools. The public setup API is pending (F3-220). confirm_booking uses the current core guards: a pending hold whose service was deactivated returns 409 service_inactive. A committed confirmation keeps its replay. Interview turns, undo and restart require an owner session and CSRF and remain outside MCP. Service stages: these service tools require service_id. update_service_stages validates before previewing; confirm=true creates a version. revert_service_stages creates another version (read config:read and write settings:write). validate_service_stages, get_stage_templates and get_base_states cover configuration. The new executor and its operational tools are still pending. Confirmations retain their title and body in all three languages. The API accepts up to 42 stages to preserve existing identities and system canonical stages. Isolated canonical stages add no actions or permissions; configured exits retain graph validation. Validation, saving and restoring accept these migrated configurations. Forms and effects that converge on a stage are preserved in full during migration: up to 1024 scalar fields and 512 effects per stage, with a total configuration limit of 256 KiB. Validation, saving without changes and reverting accept these unions. Release from a confirmed stage counts as a path to pending and expiry when validating the graph, without adding exits or permissions. The new executor and uniform effect execution remain pending. Customer identity review and merging (F3-154) requires an owner\u002Fmanager panel session with CSRF. MCP cannot merge by declared contacts; matches do not verify identity. Codes and merging financial history are still pending. Reconfirmation and unanswered-request alert rules (F3-75) are configured through the automations API and remain excluded from MCP. They only alert after a sent request remains unanswered. There is no MCP tool for reconfirmation replies or releasing times because of silence. Product CSV (F3-153): export_products_csv(template=false), preview_products_csv(csv) and confirm_products_import(import_id, confirm=false) in the admin toolset; products:write scope, including export. Preview does not change products. Confirmation requires confirm=true, is atomic and idempotent by ID (result retained 7 days); previews expire in 30 minutes and catalog\u002Fcurrency changes require a new preview. Maximum 1 MiB \u002F 2000 rows; UTF-8, shared amount rule (PYG\u002FCLP integers; BRL «1,500» ambiguous). Wagy directs uploads to the panel; it cannot confirm CSV in chat.",{"id":1432,"title":1433,"titles":1434,"content":1435,"level":223},"\u002Fdocs\u002Fmcp#business-operations-f4-45","Business operations (F4-45)",[185],"The repository server adds 76 tools: customers\u002Faddresses (customers), Inbox (inbox), read-only\nfinance (finance), task transitions (tasks) and catalog, schedules, automations and JSON knowledge\n(admin). All seven toolsets are enabled by default. tools\u002Flist publishes each scope and the schemas for path (IDs), query (filters) and body (JSON\ncommand). Do not send a URL or project. New writes return a preview and a key; repeat with\nconfirm=true and a stable idempotency_key. The API validates permissions, requirements and\navailability on confirmation; a preview does not guarantee success. Area \u002F examplesBase scopelist_customers, get_customer, addresses, summary and historycustomers:readcreate_customer, update_customer, save\u002Fdelete addresscustomers:writelist_conversations, list_conversation_messages, countsmessages:readsend_conversation_message, mode, resolve, read, intent and open conversationmessages:writemove_work_item_stage, use_work_item_tool, unschedule, metadata and itemsbookings:writeTask history, comments, attachments and locationsbookings:readProduct detail \u002F categories and suggestionsproducts:read \u002F products:writeSchedules, zones, resources, automations and knowledgeconfig:read \u002F config:writeFinancial summary, reports, debt, accounts, customers and forecastfinance:analyzeFinance availability\u002Fmovements; cash; cash settingspayments:read; cash:read; cash:configure Customers omit names, contacts, documents and exact addresses by default; other sensitive views omit\nfree text and contacts. include_sensitive=true requires the advertised read scope in addition to the\nbase scope; it enables message\u002Fcomment content. Finance preserves API amounts, warnings and estimates.\nAn action that collects money also needs the core financial permission: bookings:write is insufficient. Exclusions drop from 134 to 58. Full panel equivalence remains pending: 26 routes do not accept\nAPI keys (comment writes, conversation summaries and others; tracked in F4-47). Personal session\u002Fbell,\nSSE, simulator, secrets\u002Fwebhooks, binary\u002Fbulk CSV transfers and new money writes remain excluded.\nCheck the catalog with your key. A pending message does not prove delivery to the customer.",{"id":1437,"title":1438,"titles":1439,"content":1440,"level":368},"\u002Fdocs\u002Fmcp#customer-notices-and-delivery-log","Customer notices and delivery log",[185,1433],"Configure notices by service for requests without a time, assignments, edits and progress. They start disabled. Review sent, skipped, deferred and failed attempts in Settings, Activity and the customer profile. The log retains 90 days without copying messages or contacts; sent does not confirm delivery. Wagy and MCP read the same results. list_customer_notice_deliveries, get_customer_notice_policies: config:read. update_customer_notice_policy: config:write, confirm=true. PUT and revert preserve the current catalog payment rule in every completed stage. Saving payment_requirement again repairs divergent versions; restoring historical stages does not change payment policy. Reviews of overdue bookings with replaced links share the booking’s increasing retry delay, capped at one day. Each final search checks all unresolved preferences; errors prevent release and reset the empty-search evidence. Verified webhooks remain active. The link expires 15 minutes before the booking; for shorter periods, the margin is half the available time, with a minimum of 5 minutes. The page and chat show the link deadline. The booking keeps its own deadline to verify delayed approvals. A local expired state cannot block a verified payment approved on time: it covers the deposit while the booking remains pending; a closed booking or late payment keeps the money under review without automatic reopening or refund. If the link would live less than 5 minutes (with the minimum margin, under 10 minutes to the booking deadline), it is not created: manual collection remains. A late payment after the place was released is kept apart as “to refund” (refund_due) on the task, the customer account and Finance, with one team alert per payment: it is not deducted from the customer's other debts until Mercado Pago's refund arrives or the team (owner\u002Fmanager) moves it to the balance with “Use for another debt” (audited). With an open claim in Mercado Pago (in_mediation) it is not marked “to refund”: do not refund until it is resolved. Nothing is automatic. Reserved sessions are also lost at expiry: the task returns to its normal price and the team receives a notice. Consumption failure returns prepaid_consumption_failed and leaves the task incomplete. Remove the plan before adjusting the amount or collection; internal notes remain editable. If the window expires during sending, another usable channel for the same customer is tried. The no-se-pudo-avisar mark has a reserved slot in addition to twenty business tags, preserving them all. Reconfirmations and review requests remain in their original conversation and do not switch channels.",{"id":1442,"title":391,"titles":1443,"content":1444,"level":223},"\u002Fdocs\u002Fmcp#pause-and-duplicate",[185],"Pausing stops offering the service for new requests through the bot, public booking, Wagy and MCP. Already scheduled tasks continue normally. Reactivating offers it again. Pause and deactivate are the same action. In the detail open ⋯ → Duplicate or Pause. Desktop also has a list menu. Wagy proposes both actions and waits for plan confirmation. MCP allows pausing with update_service(active=false, confirm=true); duplication does not yet have an MCP tool. API: POST \u002Fv1\u002Fservices\u002F{id}\u002Fduplicate, Idempotency-Key, config:write; settings:write to copy stages. html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"id":190,"title":189,"titles":1446,"content":1447,"level":217},[],"API recipes (customers, tasks, actions, webhooks) and how to model a barbershop, aesthetics, clinic, restaurant and deliveries.",{"id":1449,"title":1450,"titles":1451,"content":1452,"level":223},"\u002Fdocs\u002Frecipes#api-recipes","API recipes",[189],"All of them use $WAGEND_KEY as in the quickstart.",{"id":1454,"title":1455,"titles":1456,"content":1457,"level":368},"\u002Fdocs\u002Frecipes#create-a-customer-and-book-for-them-in-one-go","Create a customer and book for them in one go",[189,1450],"Needs customers:write and bookings:write. The phone number is the customer's unique identifier: if it already exists, the API answers 409 customer_exists. curl -X POST https:\u002F\u002Fapi.fiuit.com\u002Fv1\u002Fcustomers \\\n  -H \"Authorization: Bearer $WAGEND_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"name\": \"Marina\", \"phone\": \"+5521988887777\", \"locale\": \"pt\", \"tags\": [\"vip\"],\n        \"address\": { \"street\": \"Rua das Flores\", \"number\": \"120\", \"city\": \"Rio de Janeiro\", \"formatted\": \"Rua das Flores 120, Rio de Janeiro\" } }'\n\ncurl -X POST https:\u002F\u002Fapi.fiuit.com\u002Fv1\u002Fbookings \\\n  -H \"Authorization: Bearer $WAGEND_KEY\" \\\n  -H \"Idempotency-Key: $(uuidgen)\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"service_id\": \"svc_corte\", \"start\": \"2026-10-15T09:45:00-03:00\",\n        \"customer\": { \"name\": \"Marina\", \"phone\": \"+5521988887777\" } }' POST \u002Fbookings does the hold and the confirmation in a single call.",{"id":1459,"title":1460,"titles":1461,"content":1462,"level":368},"\u002Fdocs\u002Frecipes#read-what-is-due-today","Read what is due today",[189,1450],"Needs bookings:read. GET \u002Fwork-items is the same query the Today screen uses. curl \"https:\u002F\u002Fapi.fiuit.com\u002Fv1\u002Fwork-items?view=today&limit=50\" \\\n  -H \"Authorization: Bearer $WAGEND_KEY\"\n\n# Only what nobody has taken yet\ncurl \"https:\u002F\u002Fapi.fiuit.com\u002Fv1\u002Fwork-items?unassigned=true&limit=50\" \\\n  -H \"Authorization: Bearer $WAGEND_KEY\" Each task carries its stage and its available_actions.",{"id":1464,"title":1465,"titles":1466,"content":1467,"level":368},"\u002Fdocs\u002Frecipes#assign-and-close-a-delivery-with-actions","Assign and close a delivery with actions",[189,1450],"Needs bookings:write. Actions are named by the business's stage configuration (with the deliveries template: atribuir, soltar, iniciar, concluir, nao_estava). Look them up in available_actions on the task. # Assign the delivery to a courier (resource_id is the courier's resource)\ncurl -X POST https:\u002F\u002Fapi.fiuit.com\u002Fv1\u002Fbookings\u002F$TASK_ID\u002Factions\u002Fatribuir \\\n  -H \"Authorization: Bearer $WAGEND_KEY\" \\\n  -H \"Idempotency-Key: $(uuidgen)\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"data\": {}, \"resource_id\": \"'$COURIER_ID'\" }'\n\n# Close it as completed\ncurl -X POST https:\u002F\u002Fapi.fiuit.com\u002Fv1\u002Fbookings\u002F$TASK_ID\u002Factions\u002Fconcluir \\\n  -H \"Authorization: Bearer $WAGEND_KEY\" \\\n  -H \"Idempotency-Key: $(uuidgen)\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"data\": {} }' If two people take the same task at once, one wins and the other gets 409 already_claimed. The \"Accept delivery\" action (aceitar) is for staff from the dashboard or Telegram: it takes the task with the resource of whoever runs it.",{"id":1469,"title":1470,"titles":1471,"content":1472,"level":368},"\u002Fdocs\u002Frecipes#receive-webhook-notifications","Receive webhook notifications",[189,1450],"Register an endpoint (see Webhooks) and verify the signature before processing. Minimal Express example: import express from 'express'\nimport { verifyWagend } from '.\u002Fverify' \u002F\u002F the function from the Webhooks page\n\nconst app = express()\napp.post('\u002Fwagend', express.raw({ type: 'application\u002Fjson' }), (req, res) => {\n  const raw = req.body.toString('utf8')\n  if (!verifyWagend(raw, req.header('Wagend-Signature') ?? '', process.env.WAGEND_WEBHOOK_SECRET!)) {\n    return res.sendStatus(400)\n  }\n  const event = JSON.parse(raw)\n  if (event.type === 'booking.confirmed') console.log('New booking', event.data.booking.id)\n  res.sendStatus(200) \u002F\u002F answer 2xx quickly; duplicates are dropped by event.id\n})\napp.listen(3000)",{"id":1474,"title":1475,"titles":1476,"content":1477,"level":223},"\u002Fdocs\u002Frecipes#templates-by-business","Templates by business",[189],"Each recipe matches a ready-made template you can pick during onboarding.",{"id":1479,"title":1480,"titles":1481,"content":1482,"level":223},"\u002Fdocs\u002Frecipes#barbershop","Barbershop",[189],"Each barber is an exclusive staff resource with their own schedule. One group, customer_choice with a round_robin fallback. {\n  \"name\": \"Haircut\",\n  \"duration_min\": 30,\n  \"step_min\": 15,\n  \"buffer_after_min\": 5,\n  \"price_cents\": 5000,\n  \"requirements\": [{ \"resource_group_id\": \"grp_barbers\", \"units\": 1 }]\n}",{"id":1484,"title":1485,"titles":1486,"content":1487,"level":223},"\u002Fdocs\u002Frecipes#aesthetics","Aesthetics",[189],"Professionals, machines and rooms are separate resources. A service requires all three at the same time, so the scarcest one (usually the machine) limits the agenda. {\n  \"name\": \"Laser hair removal\",\n  \"duration_min\": 45,\n  \"buffer_after_min\": 10,\n  \"price_cents\": 18000,\n  \"deposit_cents\": 5000,\n  \"requirements\": [\n    { \"resource_group_id\": \"grp_professionals\", \"units\": 1 },\n    { \"resource_group_id\": \"grp_lasers\", \"units\": 1 },\n    { \"resource_group_id\": \"grp_rooms\", \"units\": 1 }\n  ]\n}",{"id":1489,"title":1490,"titles":1491,"content":1492,"level":223},"\u002Fdocs\u002Frecipes#clinic","Clinic",[189],"Doctor plus office, per location (one workspace per location). Health data is sensitive: the assistant never asks about symptoms, and the intake form collects only what scheduling needs. {\n  \"name\": \"Appointment\",\n  \"duration_min\": 30,\n  \"buffer_after_min\": 10,\n  \"intake_form\": { \"type\": \"object\", \"properties\": { \"insurance\": { \"type\": \"string\" } } },\n  \"requirements\": [\n    { \"resource_group_id\": \"grp_doctors\", \"units\": 1 },\n    { \"resource_group_id\": \"grp_offices\", \"units\": 1 }\n  ]\n}",{"id":1494,"title":1495,"titles":1496,"content":1497,"level":223},"\u002Fdocs\u002Frecipes#restaurant","Restaurant",[189],"The dining room is one pooled resource with 40 units (covers) per slot. Duration grows with the party size, and large parties require a deposit. {\n  \"name\": \"Table\",\n  \"step_min\": 30,\n  \"duration_by_units\": [\n    { \"max_units\": 2, \"duration_min\": 90 },\n    { \"max_units\": 4, \"duration_min\": 120 },\n    { \"max_units\": 20, \"duration_min\": 150 }\n  ],\n  \"requirements\": [{ \"resource_group_id\": \"grp_dining_room\", \"units\": \"party_size\" }]\n} Table mode (specific tables with minimum and maximum size, and combinations) is on the roadmap.",{"id":1499,"title":1500,"titles":1501,"content":1502,"level":223},"\u002Fdocs\u002Frecipes#deliveries","Deliveries",[189],"Each zone is a pooled resource with a capacity per 2-hour window. The zone is selected by postal code, and a cutoff rule closes same-day windows at noon. {\n  \"name\": \"Delivery\",\n  \"window_mode\": true,\n  \"duration_min\": 120,\n  \"cutoff_rule\": { \"same_day_until\": \"12:00\" },\n  \"intake_form\": { \"type\": \"object\", \"required\": [\"address\", \"postal_code\"] },\n  \"requirements\": [{ \"resource_group_id\": \"grp_zones\", \"units\": 1, \"select_by\": \"postal_code\" }]\n}",{"id":1504,"title":1505,"titles":1506,"content":1507,"level":223},"\u002Fdocs\u002Frecipes#wagy-set-up-your-business-with-wagy","Wagy · Set up your business with Wagy",[189],"You can skip the interview and resume from the checklist. Review the team and opening hours in a proposal before confirming. Suggested services and products remain private drafts until you complete their details and confirm them. If Wagy cannot suggest, enter them manually. The interview shares its slots with the form: «Set up my business» combines business type, team, hours and reviewed catalog in one confirmation. The business type installs vocabulary, stages and inactive examples, without template people, hours or prices. Your plan shows the resource limit before proposing. Above 25 changes, confirm Base and then Catalog; undo them in reverse order within 24 hours if nobody changed their objects. Incomplete drafts remain private. No access invitations are sent. Edit an existing person by identity in Team. After confirming the base, entered names are proposed in order for untouched anonymous resources from that template. Extra names create the missing resources; fewer names leave the remaining anonymous resources in place. Edited resources, resources linked to users, and resources with assignments are preserved, and confirmation checks this again. The resume button appears only while that phase is pending. Renaming or reordering a service or product preserves the origin and state of its suggested price. Only editing the amount field confirms it. Resuming setup reuses unchanged personal schedules; editing general hours preserves each person’s exceptions. html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"id":199,"title":198,"titles":1509,"content":1510,"level":217},[],"Quick answers about holds, deposits, taken slots, cancellations and no-shows. This page gathers the most common questions about how a booking behaves. Each answer says what happens, why and where you see it.",{"id":1512,"title":1513,"titles":1514,"content":1515,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-if-the-customer-takes-a-while-to-confirm","What happens if the customer takes a while to confirm?",[198],"The slot is held for 10 minutes (15 if the service asks for a deposit) and then released on its own. This lets another customer take it, so abandoned conversations never block a slot. You see it in Work, where an expired hold stops occupying the calendar.",{"id":1517,"title":1518,"titles":1519,"content":1520,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-if-the-slot-was-taken-while-they-were-deciding","What happens if the slot was taken while they were deciding?",[198],"The system does not confirm the booking and suggests alternative times. This is the zero double-booking guarantee: nobody can end up with a slot that already has an owner. The bot and the web chat offer the customer the other options.",{"id":1522,"title":1523,"titles":1524,"content":1525,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-if-two-customers-book-at-the-same-time","What happens if two customers book at the same time?",[198],"The first one wins and the second receives alternatives. If a booking uses several resources and one is busy, none is booked: the booking is written whole or not at all.",{"id":1527,"title":1528,"titles":1529,"content":1530,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-if-the-service-asks-for-a-deposit","What happens if the service asks for a deposit?",[198],"On confirmation the booking is left waiting for the deposit and the slot stays blocked. When the payment provider confirms the charge, the booking becomes confirmed. Meanwhile you see it in the calendar with the waiting status. See Bookings and holds.",{"id":1532,"title":1533,"titles":1534,"content":1535,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-if-i-reschedule-a-booking","What happens if I reschedule a booking?",[198],"A new booking is created and the previous one is cancelled, linked together. Pending reminders move to the new time on their own, so the customer gets no notices about the old time.",{"id":1537,"title":1538,"titles":1539,"content":1540,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-if-i-cancel-a-booking","What happens if I cancel a booking?",[198],"The slot is released immediately and pending reminders are cancelled. The customer can receive a cancellation notice if you have it on in Settings → Customer notices.",{"id":1542,"title":1543,"titles":1544,"content":1545,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-if-a-customer-doesnt-show-up","What happens if a customer doesn't show up?",[198],"Nothing automatic. The system may suggest the no-show, but a team member marks it, so a no-show is never recorded by mistake.",{"id":1547,"title":1548,"titles":1549,"content":1550,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-if-they-pay-late-after-the-slot-was-released","What if they pay late after the slot was released?",[198],"The money stays separate as to refund on the task, customer account and Finance; it does not offset other debts. The team gets one notice per payment. The owner or manager can refund through Mercado Pago or confirm Use for another debt. There is no automatic reopening or refund.",{"id":1552,"title":1553,"titles":1554,"content":1555,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-if-there-is-an-open-mercado-pago-claim","What if there is an open Mercado Pago claim?",[198],"It stays marked Open claim: wait for the outcome before refunding and it cannot be used for another debt. If the business wins it returns to to-refund status; if the customer is refunded there is no outstanding amount.",{"id":1557,"title":1558,"titles":1559,"content":1560,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#when-does-the-link-expire-and-what-if-the-notice-arrives-later","When does the link expire, and what if the notice arrives later?",[198],"It expires 15 minutes before the booking; for short periods the margin is half the available time and at least five minutes. A link with less than five useful minutes is not created; collection stays manual. Verified timely approval can still cover a pending booking after link expiry; a closed booking stays under review. The receipt retains both deadlines.",{"id":1562,"title":1563,"titles":1564,"content":1565,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#where-do-customers-pay-and-does-returning-from-mercado-pago-confirm","Where do customers pay, and does returning from Mercado Pago confirm?",[198],"Electronic deposits support Brazilian reais and Argentine pesos through hosted Checkout Pro; Pix is paid inside Mercado Pago without requesting CPF or card details in Fiuit. Brazil and Argentina connect by authorization; other supported countries use a token and Paraguay has no Mercado Pago. Returning opens the existing private portal or a neutral page; it never confirms payment. Fiuit does not set a separate Pix expiry inside that checkout.",{"id":1567,"title":1568,"titles":1569,"content":1570,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-about-a-partial-payment-or-uncertain-link","What about a partial payment or uncertain link?",[198],"Timely partial payment reduces the deposit and may create a difference link without extending the original deadline or going beyond two hours before the appointment. Applied coverage retains the slot under review. Uncertain link creation requires seven days of successful empty searches before release at the next check, up to a day later. Errors or lost access reset that evidence. The owner or manager can confirm Release the slot on the task: money is preserved and not refunded.",{"id":1572,"title":1573,"titles":1574,"content":1575,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#do-retained-deposits-earn-commission-and-who-gets-credit-for-the-work","Do retained deposits earn commission, and who gets credit for the work?",[198],"Deposits retained after a no-show, cancellation or failure are business income without commission or unattributed receipts. Other commissions use collected money and belong to whoever had the task assigned at completion; while open, whoever has it today. Multiple workers share equally. Tips are separate. In Finance → Commissions, reports are calculated on demand without a daily close; each task counts once and staff see only their own. A deposit never applied to its task does not cover that task’s balance or generate commission, including after a refund or transfer to free credit. Expired tasks also earn no commission.",{"id":1577,"title":1578,"titles":1579,"content":1580,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-to-commission-when-a-payment-is-refunded","What happens to commission when a payment is refunded?",[198],"The reversal subtracts from the same person using the original payment rule, even if it ended or changed. A partial electronic refund without refund details is not yet deducted until the full refund; that case remains pending. See Finance → Commissions.",{"id":1582,"title":1583,"titles":1584,"content":1585,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#how-are-amounts-displayed","How are amounts displayed?",[198],"Each project uses its currency’s local symbol in every language with its usual decimals: reais use R$, guaraníes use ₲ and dollars use US$. Currency codes remain where currencies are compared. Only presentation changes, not amounts.",{"id":203,"title":202,"titles":1587,"content":1588,"level":217},[],"Quick answers about customer notices, quiet hours, sending limits, spam and channel pauses. What happens with the messages that go out and come in through your channels, and where you see it.",{"id":1590,"title":1591,"titles":1592,"content":1593,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#what-happens-if-i-turn-on-a-recommended-rule","What happens if I turn on a recommended rule?",[202],"Recommended rules are installed off. No rule writes to a customer until you turn it on with its switch in Automation → Rules. Each rule shows its latest sends with the status and the reason if one failed.",{"id":1595,"title":1596,"titles":1597,"content":1598,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#what-happens-if-a-notice-would-go-out-at-night","What happens if a notice would go out at night?",[202],"Between 21:00 and 08:00 (business time) nothing goes out to customers: the send is deferred to the morning, not lost. Before sending, the system checks the task again: if it was cancelled or rescheduled, the old notice is discarded.",{"id":1600,"title":1601,"titles":1602,"content":1603,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#what-happens-if-i-send-many-notices-at-once","What happens if I send many notices at once?",[202],"There is a limit of 30 automatic sends per hour per project. The extra ones are spread out on their own to protect the WhatsApp line.",{"id":1605,"title":1606,"titles":1607,"content":1608,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#what-happens-if-a-customer-asked-not-to-receive-promotions","What happens if a customer asked not to receive promotions?",[202],"Turn on Do not send automatic promotional messages on their profile. That stops promotions such as reactivation, but appointment reminders still go out, because they are operational.",{"id":1610,"title":1611,"titles":1612,"content":1613,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#what-happens-if-i-edit-a-task-several-times-in-a-row","What happens if I edit a task several times in a row?",[202],"If the changed-data notice is on, consecutive edits are grouped and the customer gets a single notice 60 seconds after the last one. Per-service notices start off and you set them in Settings → Customer notices, where you also see the log of what was sent and what was skipped.",{"id":1615,"title":1616,"titles":1617,"content":1618,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#what-happens-if-a-contact-sends-too-many-messages","What happens if a contact sends too many messages?",[202],"If one contact sends more than 15 messages in 5 minutes (or 60 in an hour), the bot stops answering them for 30 minutes. Messages still reach the Inbox, flagged as possible spam, and you can tap Reactivate bot early.",{"id":1620,"title":1621,"titles":1622,"content":1623,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#what-happens-if-the-ai-spends-too-much-at-once","What happens if the AI spends too much at once?",[202],"If the project exceeds 300 AI calls in 10 minutes, the AI pauses on its own and we notify you. It does not resume on its own, because it could be a loop or an attack: you resume it in Settings → AI usage once you checked what happened.",{"id":1625,"title":1626,"titles":1627,"content":1628,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#what-is-the-difference-between-pausing-the-bot-and-pausing-the-channel","What is the difference between pausing the bot and pausing the channel?",[202],"Pause bot keeps the messages and leaves them in the Inbox to handle by hand, with no AI spend. Pause channel discards everything that arrives, meant for spam or abuse. See Pauses and Status.",{"id":1630,"title":1631,"titles":1632,"content":1633,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#what-if-instagrams-window-expires-or-the-task-already-has-twenty-tags","What if Instagram’s window expires or the task already has twenty tags?",[202],"After 24 hours from the customer’s last message, including expiry during sending, the notice tries another usable channel for that customer. Without an alternative, Could not notify appears in Today’s attention and the notice log; its extra marker preserves the twenty business tags. The team removes it after contacting the customer themselves. YES\u002FNO reconfirmations keep their channel; review requests are cancelled without marking the task. The business cannot start a cold Instagram conversation.",{"id":1635,"title":1636,"titles":1637,"content":1638,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#does-disconnecting-instagram-delete-customer-data","Does disconnecting Instagram delete customer data?",[202],"Only the owner connects or disconnects, authorizing in the same browser and project. Disconnecting releases the account and preserves history; it does not delete data. Revocation is detected when sending, checking or renewing. Deletion by callback remains pending; follow the privacy instructions.",{"id":1640,"title":1641,"titles":1642,"content":1643,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#what-if-i-change-the-team-group-or-it-becomes-a-supergroup","What if I change the team group or it becomes a supergroup?",[202],"Unassigned tasks are reposted in the new group and old buttons say this group is no longer linked, without assigning. Available tasks from before the first link are also offered. Assigned, closed, test or unauthorized tasks are excluded. Manage it in Team → Access. Telegram cannot guarantee avoiding a duplicate post if the connection drops immediately after sending.",{"id":207,"title":206,"titles":1645,"content":1646,"level":217},[],"Quick answers about what the bot does and doesn't do, when a conversation goes to a person and what happens with the AI.",{"id":1648,"title":1649,"titles":1650,"content":1651,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-the-customer-asks-for-a-person","What happens if the customer asks for a person?",[206],"The conversation goes to the Inbox with the status \"Asks for a person\" and the bot stops answering. The same happens if something fails. You see it in Needs attention and as a notification.",{"id":1653,"title":1654,"titles":1655,"content":1656,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-i-write-in-a-conversation","What happens if I write in a conversation?",[206],"When you reply, the bot pauses in that conversation. You can hand it back by hand; after 15 minutes without activity from you, the bot resumes on its own.",{"id":1658,"title":1659,"titles":1660,"content":1661,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-the-customer-asks-for-a-price-or-time-the-bot-doesnt-know","What happens if the customer asks for a price or time the bot doesn't know?",[206],"The bot doesn't make things up: times, prices and addresses always come from the system. If information is missing, add it to the knowledge base or the conversation goes to a person.",{"id":1663,"title":1664,"titles":1665,"content":1666,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-the-customer-confirms-with-new-details","What happens if the customer confirms with new details?",[206],"A \"yes\" sent together with new details does not confirm: the bot builds an updated summary and waits for another \"yes\" afterwards. Confirmation is always explicit, and cancelling or asking for a person interrupts the proposal.",{"id":1668,"title":1669,"titles":1670,"content":1671,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-the-customer-sends-several-messages-in-a-row","What happens if the customer sends several messages in a row?",[206],"The bot waits a few seconds of silence (3, or 5 while collecting data, up to 12) and answers them together. You pick the mode in Automation → Bot.",{"id":1673,"title":1674,"titles":1675,"content":1676,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-the-monthly-ai-quota-runs-out","What happens if the monthly AI quota runs out?",[206],"AI features pause, the bot answers a fixed message and passes the conversation to the Inbox. Calendar, tasks and customers keep working. You see usage in Settings → AI usage, with a warning at 80 %.",{"id":1678,"title":1679,"titles":1680,"content":1681,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-a-customer-tries-to-give-the-bot-instructions","What happens if a customer tries to give the bot instructions?",[206],"It ignores them. The bot does not follow instructions hidden in a message or file, does not use admin tools with a customer and cannot see another business's data. See The bot and AI.",{"id":1683,"title":1684,"titles":1685,"content":1686,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-if-a-customer-mixes-a-request-with-an-unrelated-topic","What if a customer mixes a request with an unrelated topic?",[206],"The bot handles the business part and ignores the rest. If everything is unrelated it gives a fixed reply explaining supported topics and how to ask for a person; declining alone does not notify the team. Asking for a person interrupts any cart or summary and moves to the Inbox.",{"id":211,"title":210,"titles":1688,"content":1689,"level":217},[],"Quick answers about taking and releasing tasks, outcomes, team permissions and work evidence.",{"id":1691,"title":1692,"titles":1693,"content":1694,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#how-many-products-can-an-order-have","How many products can an order have?",[210],"Up to 72 products (lines) per order. It is a limit of the booking engine so every order is stored and charged with the exact amount. You set it on the service, in the form's product limits.",{"id":1696,"title":1697,"titles":1698,"content":1699,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-two-people-tap-take-at-the-same-time","What happens if two people tap \"Take\" at the same time?",[210],"The first one gets it and the second receives a notice. A task is never assigned twice. You see it assigned in Work and in Today for whoever took it.",{"id":1701,"title":1702,"titles":1703,"content":1704,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-whoever-took-the-task-cant-do-it","What happens if whoever took the task can't do it?",[210],"They can release it as long as it hasn't started: it goes back to Unassigned so someone else can take it.",{"id":1706,"title":1707,"titles":1708,"content":1709,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-the-customer-wasnt-there-or-doesnt-want-the-order","What happens if the customer wasn't there or doesn't want the order?",[210],"The task is closed with the outcome absent (\"wasn't there\") or rejected (\"doesn't want it\"), with an optional reason. It stays recorded on the task.",{"id":1711,"title":1712,"titles":1713,"content":1714,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-an-action-fails-halfway","What happens if an action fails halfway?",[210],"Nothing is left half done: everything an action does happens together or not at all.",{"id":1716,"title":1717,"titles":1718,"content":1719,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-a-team-member-tries-to-assign-tasks","What happens if a team member tries to assign tasks?",[210],"They can't, even if the button existed: an action never grants extra permissions. Only the owner and the manager assign. See Roles and permissions.",{"id":1721,"title":1722,"titles":1723,"content":1724,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-customer-data-does-the-team-see","What customer data does the team see?",[210],"A team member sees the tasks assigned to them and those their group can take, but without the customer's phone or email until they take it. For deliveries, before taking it only the approximate zone is visible.",{"id":1726,"title":1727,"titles":1728,"content":1729,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-with-the-photos-and-locations-the-team-uploads","What happens with the photos and locations the team uploads?",[210],"They are private: only people with access to that task see them, download links expire after 60 seconds and files are deleted after 30 days by default. The owner or manager can delete a location.",{"id":1731,"title":1732,"titles":1733,"content":1734,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#why-dont-i-see-a-tab-or-a-filter","Why don't I see a tab or a filter?",[210],"Because \"if there is nothing, it isn't shown\": the calendar only appears if there are resources with a schedule, the map if there are tasks with a location, and Mine if you have your own schedule. See Tasks and actions.",{"id":1736,"title":1737,"titles":1738,"content":1739,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-if-i-pause-or-duplicate-a-service","What if I pause or duplicate a service?",[210],"Pausing is always allowed: it stops new offers while existing tasks keep their scheduling windows, rescheduling, assignment, completion and cancellation controls. Pause and deactivate are the same action. Duplicate creates a paused copy with independent hours, without tasks or history; groups and products stay in the catalog. Current stages start at version one; without stage editing permission it uses base stages and explains this. The copy drops the managed business-template link. Review and reactivate it in Services.",{"id":1741,"title":1742,"titles":1743,"content":1744,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-if-package-units-expire-or-consumption-fails","What if package units expire or consumption fails?",[210],"Expired units are lost, including reserved units: the task returns to its previous amount and the team is notified. Expiry is checked before completion even if the background process is delayed. Failed consumption prevents completion and collection; status and reservation remain for retry. The owner or manager can Extend expiry manually with a reason on the customer page.",{"id":1746,"title":1747,"titles":1748,"content":1749,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#can-i-edit-or-reopen-a-task-covered-by-a-plan","Can I edit or reopen a task covered by a plan?",[210],"Customer, service and amount cannot change and payment adjustments are blocked; internal notes remain editable. First Remove plan on the customer page. Reopening a cancelled task retains normal pricing. Reopening a completed task returns the unit and its payment allocation; if still valid it stays reserved and completing again uses exactly one unit.",{"id":1751,"title":1752,"titles":1753,"content":1754,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#how-are-packages-or-memberships-billed-and-cancelled","How are packages or memberships billed and cancelled?",[210],"Billing is manual, without recurring card or Pix Automático for now. Record sales, renewal or cancellation on the customer page. Cancellation releases reservations and stops renewals; refund is optional and returns only unused units in a current manually paid period. Expired units are not refunded. A refund is blocked if the cash collection’s day is already closed.",{"id":1756,"title":1757,"titles":1758,"content":1759,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-if-the-panel-styles-fail-to-download","What if the panel styles fail to download?",[210],"The loading screen remains in your theme colors; the panel does not appear without styles. After eight seconds it offers Reload. If downloading finishes later, it continues; reduced motion keeps the same protection.",{"id":1761,"title":1762,"titles":1763,"content":1764,"level":223},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#why-do-updates-differ-between-the-panel-and-website","Why do updates differ between the panel and website?",[210],"The panel groups changes by release and explains where they are, how to use them and who has permission. The website explains the business benefit. Both come from the same update.",{"id":1766,"title":202,"badge":1767,"body":1768,"description":1923,"extension":1924,"meta":1925,"navigation":1926,"path":203,"rawbody":1927,"seo":1928,"stem":204,"updated":1929,"__hash__":1930},"docs_en\u002Fdocs\u002F13.que-pasa-si\u002F02.avisos-y-canales.md",null,{"type":1769,"value":1770,"toc":1909},"minimark",[1771,1775,1779,1791,1794,1801,1804,1811,1814,1825,1828,1839,1842,1849,1852,1863,1866,1880,1883,1890,1893,1895,1898],[1772,1773,1774],"p",{},"What happens with the messages that go out and come in through your channels, and where you see it.",[1776,1777,1591],"h2",{"id":1778},"what-happens-if-i-turn-on-a-recommended-rule",[1772,1780,1781,1782,1786,1787,1790],{},"Recommended rules are installed ",[1783,1784,1785],"strong",{},"off",". No rule writes to a customer until you turn it on with its switch in ",[1783,1788,1789],{},"Automation → Rules",". Each rule shows its latest sends with the status and the reason if one failed.",[1776,1792,1596],{"id":1793},"what-happens-if-a-notice-would-go-out-at-night",[1772,1795,1796,1797,1800],{},"Between 21:00 and 08:00 (business time) nothing goes out to customers: the send is ",[1783,1798,1799],{},"deferred"," to the morning, not lost. Before sending, the system checks the task again: if it was cancelled or rescheduled, the old notice is discarded.",[1776,1802,1601],{"id":1803},"what-happens-if-i-send-many-notices-at-once",[1772,1805,1806,1807,1810],{},"There is a limit of ",[1783,1808,1809],{},"30 automatic sends per hour"," per project. The extra ones are spread out on their own to protect the WhatsApp line.",[1776,1812,1606],{"id":1813},"what-happens-if-a-customer-asked-not-to-receive-promotions",[1772,1815,1816,1817,1820,1821,1824],{},"Turn on ",[1783,1818,1819],{},"Do not send automatic promotional messages"," on their profile. That stops promotions such as reactivation, but ",[1783,1822,1823],{},"appointment reminders still go out",", because they are operational.",[1776,1826,1611],{"id":1827},"what-happens-if-i-edit-a-task-several-times-in-a-row",[1772,1829,1830,1831,1834,1835,1838],{},"If the changed-data notice is on, consecutive edits are grouped and the customer gets ",[1783,1832,1833],{},"a single notice"," 60 seconds after the last one. Per-service notices start off and you set them in ",[1783,1836,1837],{},"Settings → Customer notices",", where you also see the log of what was sent and what was skipped.",[1776,1840,1616],{"id":1841},"what-happens-if-a-contact-sends-too-many-messages",[1772,1843,1844,1845,1848],{},"If one contact sends more than 15 messages in 5 minutes (or 60 in an hour), the bot stops answering them for 30 minutes. Messages still reach the Inbox, flagged as possible spam, and you can tap ",[1783,1846,1847],{},"Reactivate bot"," early.",[1776,1850,1621],{"id":1851},"what-happens-if-the-ai-spends-too-much-at-once",[1772,1853,1854,1855,1858,1859,1862],{},"If the project exceeds 300 AI calls in 10 minutes, the AI pauses on its own and we notify you. It ",[1783,1856,1857],{},"does not resume on its own",", because it could be a loop or an attack: you resume it in ",[1783,1860,1861],{},"Settings → AI usage"," once you checked what happened.",[1776,1864,1626],{"id":1865},"what-is-the-difference-between-pausing-the-bot-and-pausing-the-channel",[1772,1867,1868,1871,1872,1875,1876,1879],{},[1783,1869,1870],{},"Pause bot"," keeps the messages and leaves them in the Inbox to handle by hand, with no AI spend. ",[1783,1873,1874],{},"Pause channel"," discards everything that arrives, meant for spam or abuse. See ",[1877,1878,77],"a",{"href":78},".",[1776,1881,1631],{"id":1882},"what-if-instagrams-window-expires-or-the-task-already-has-twenty-tags",[1772,1884,1885,1886,1889],{},"After 24 hours from the customer’s last message, including expiry during sending, the notice tries another usable channel for that customer. Without an alternative, ",[1783,1887,1888],{},"Could not notify"," appears in Today’s attention and the notice log; its extra marker preserves the twenty business tags. The team removes it after contacting the customer themselves. YES\u002FNO reconfirmations keep their channel; review requests are cancelled without marking the task. The business cannot start a cold Instagram conversation.",[1776,1891,1636],{"id":1892},"does-disconnecting-instagram-delete-customer-data",[1772,1894,1638],{},[1776,1896,1641],{"id":1897},"what-if-i-change-the-team-group-or-it-becomes-a-supergroup",[1772,1899,1900,1901,1904,1905,1908],{},"Unassigned tasks are reposted in the new group and old buttons say ",[1783,1902,1903],{},"this group is no longer linked",", without assigning. Available tasks from before the first link are also offered. Assigned, closed, test or unauthorized tasks are excluded. Manage it in ",[1783,1906,1907],{},"Team → Access",". Telegram cannot guarantee avoiding a duplicate post if the connection drops immediately after sending.",{"title":1910,"searchDepth":223,"depth":368,"links":1911},"",[1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922],{"id":1778,"depth":223,"text":1591},{"id":1793,"depth":223,"text":1596},{"id":1803,"depth":223,"text":1601},{"id":1813,"depth":223,"text":1606},{"id":1827,"depth":223,"text":1611},{"id":1841,"depth":223,"text":1616},{"id":1851,"depth":223,"text":1621},{"id":1865,"depth":223,"text":1626},{"id":1882,"depth":223,"text":1631},{"id":1892,"depth":223,"text":1636},{"id":1897,"depth":223,"text":1641},"Quick answers about customer notices, quiet hours, sending limits, spam and channel pauses.","md",{},true,"---\ntitle: What happens if…? Notices and channels\ndescription: Quick answers about customer notices, quiet hours, sending limits, spam and channel pauses.\nupdated: \"2026-10-08\"\n---\n\n\nWhat happens with the messages that go out and come in through your channels, and where you see it.\n\n## What happens if I turn on a recommended rule?\n\nRecommended rules are installed **off**. No rule writes to a customer until you turn it on with its switch in **Automation → Rules**. Each rule shows its latest sends with the status and the reason if one failed.\n\n## What happens if a notice would go out at night?\n\nBetween 21:00 and 08:00 (business time) nothing goes out to customers: the send is **deferred** to the morning, not lost. Before sending, the system checks the task again: if it was cancelled or rescheduled, the old notice is discarded.\n\n## What happens if I send many notices at once?\n\nThere is a limit of **30 automatic sends per hour** per project. The extra ones are spread out on their own to protect the WhatsApp line.\n\n## What happens if a customer asked not to receive promotions?\n\nTurn on **Do not send automatic promotional messages** on their profile. That stops promotions such as reactivation, but **appointment reminders still go out**, because they are operational.\n\n## What happens if I edit a task several times in a row?\n\nIf the changed-data notice is on, consecutive edits are grouped and the customer gets **a single notice** 60 seconds after the last one. Per-service notices start off and you set them in **Settings → Customer notices**, where you also see the log of what was sent and what was skipped.\n\n## What happens if a contact sends too many messages?\n\nIf one contact sends more than 15 messages in 5 minutes (or 60 in an hour), the bot stops answering them for 30 minutes. Messages still reach the Inbox, flagged as possible spam, and you can tap **Reactivate bot** early.\n\n## What happens if the AI spends too much at once?\n\nIf the project exceeds 300 AI calls in 10 minutes, the AI pauses on its own and we notify you. It **does not resume on its own**, because it could be a loop or an attack: you resume it in **Settings → AI usage** once you checked what happened.\n\n## What is the difference between pausing the bot and pausing the channel?\n\n**Pause bot** keeps the messages and leaves them in the Inbox to handle by hand, with no AI spend. **Pause channel** discards everything that arrives, meant for spam or abuse. See [Pauses and Status](\u002Fdocs\u002Fchannels\u002Fpauses-and-status).\n\n## What if Instagram’s window expires or the task already has twenty tags?\n\nAfter 24 hours from the customer’s last message, including expiry during sending, the notice tries another usable channel for that customer. Without an alternative, **Could not notify** appears in Today’s attention and the notice log; its extra marker preserves the twenty business tags. The team removes it after contacting the customer themselves. YES\u002FNO reconfirmations keep their channel; review requests are cancelled without marking the task. The business cannot start a cold Instagram conversation.\n\n## Does disconnecting Instagram delete customer data?\n\nOnly the owner connects or disconnects, authorizing in the same browser and project. Disconnecting releases the account and preserves history; it does not delete data. Revocation is detected when sending, checking or renewing. Deletion by callback remains pending; follow the privacy instructions.\n\n## What if I change the team group or it becomes a supergroup?\n\nUnassigned tasks are reposted in the new group and old buttons say **this group is no longer linked**, without assigning. Available tasks from before the first link are also offered. Assigned, closed, test or unauthorized tasks are excluded. Manage it in **Team → Access**. Telegram cannot guarantee avoiding a duplicate post if the connection drops immediately after sending.\n",{"title":202,"description":1923},"2026-10-08","XSmwkc-i7HiLmssnIOK9_0Om57ph9CL0L7BGKX0-olQ",[1932,1934],{"title":198,"path":199,"stem":200,"description":1933,"children":-1},"Quick answers about holds, deposits, taken slots, cancellations and no-shows.",{"title":206,"path":207,"stem":208,"description":1646,"children":-1},1791496702553]